Looks good to me. I wonder if it makes sense or is possible to generalize this and use it to print vlog debug messages in rtnetlink-link. We don't have a precedent for logging in that file so maybe it isn't worth it. Not sure how useful it would be.
Ethan On Tue, Feb 14, 2012 at 13:12, Ben Pfaff <b...@nicira.com> wrote: > 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 <b...@nicira.com> > --- > utilities/nlmon.c | 34 +++++++++++++++++++++++++++++++++- > 1 files changed, 33 insertions(+), 1 deletions(-) > > diff --git a/utilities/nlmon.c b/utilities/nlmon.c > index b6396d5..1b2f1e2 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]; > -- > 1.7.2.5 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev