From: Ben Pfaff Date: Tue, 14 Feb 2012 21:12:11 +0000 (-0800) Subject: nlmon: Also print ifinfomsg flags. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d8256121c4ca1b7d0deb756f69acb9585e0dc005;p=openvswitch nlmon: Also print ifinfomsg flags. 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 --- diff --git a/utilities/nlmon.c b/utilities/nlmon.c index b6396d50..1b2f1e21 100644 --- a/utilities/nlmon.c +++ b/utilities/nlmon.c @@ -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];