From d8256121c4ca1b7d0deb756f69acb9585e0dc005 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Tue, 14 Feb 2012 13:12:11 -0800 Subject: [PATCH] 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 --- utilities/nlmon.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) 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]; -- 2.30.2