nlmon: Also print ifinfomsg flags.
authorBen Pfaff <blp@nicira.com>
Tue, 14 Feb 2012 21:12:11 +0000 (13:12 -0800)
committerBen Pfaff <blp@nicira.com>
Mon, 27 Feb 2012 17:33:51 +0000 (09:33 -0800)
This was useful for observing IFF_RUNNING change as I removed and inserted
cables.

(nlmon is a test utility that doesn't get installed.)

Signed-off-by: Ben Pfaff <blp@nicira.com>
utilities/nlmon.c

index b6396d50b9da8c89bfa864ac031db7864e59904d..1b2f1e2115f3a9dc4873299f2ff9642279d59db6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2010, 2011 Nicira Networks.
+ * Copyright (c) 2009, 2010, 2011, 2012 Nicira Networks.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -66,9 +66,34 @@ main(int argc OVS_UNUSED, char *argv[])
         } else if (error) {
             ovs_fatal(error, "error on network monitor socket");
         } else {
+            struct iff_flag {
+                unsigned int flag;
+                const char *name;
+            };
+
+            static const struct iff_flag flags[] = {
+                { IFF_UP, "UP", },
+                { IFF_BROADCAST, "BROADCAST", },
+                { IFF_DEBUG, "DEBUG", },
+                { IFF_LOOPBACK, "LOOPBACK", },
+                { IFF_POINTOPOINT, "POINTOPOINT", },
+                { IFF_NOTRAILERS, "NOTRAILERS", },
+                { IFF_RUNNING, "RUNNING", },
+                { IFF_NOARP, "NOARP", },
+                { IFF_PROMISC, "PROMISC", },
+                { IFF_ALLMULTI, "ALLMULTI", },
+                { IFF_MASTER, "MASTER", },
+                { IFF_SLAVE, "SLAVE", },
+                { IFF_MULTICAST, "MULTICAST", },
+                { IFF_PORTSEL, "PORTSEL", },
+                { IFF_AUTOMEDIA, "AUTOMEDIA", },
+                { IFF_DYNAMIC, "DYNAMIC", },
+            };
+
             struct nlattr *attrs[ARRAY_SIZE(rtnlgrp_link_policy)];
             struct nlmsghdr *nlh;
             struct ifinfomsg *iim;
+            int i;
 
             nlh = ofpbuf_at(buf, 0, NLMSG_HDRLEN);
             iim = ofpbuf_at(buf, NLMSG_HDRLEN, sizeof *iim);
@@ -92,6 +117,13 @@ main(int argc OVS_UNUSED, char *argv[])
                     : nlh->nlmsg_type == RTM_GETLINK ? "RTM_GETLINK"
                     : nlh->nlmsg_type == RTM_SETLINK ? "RTM_SETLINK"
                     : "other"));
+            printf("\tflags:");
+            for (i = 0; i < ARRAY_SIZE(flags); i++) {
+                if (iim->ifi_flags & flags[i].flag) {
+                    printf(" %s", flags[i].name);
+                }
+            }
+            printf("\n");
             if (attrs[IFLA_MASTER]) {
                 uint32_t idx = nl_attr_get_u32(attrs[IFLA_MASTER]);
                 char ifname[IFNAMSIZ];