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

Reply via email to