diff options
author | David Lamparter <equinox@diac24.net> | 2010-02-02 01:36:36 +0100 |
---|---|---|
committer | David Lamparter <equinox@diac24.net> | 2010-02-03 05:26:36 +0100 |
commit | a3e5daee7205e8bffb44d914a74d38fe8ad0c986 (patch) | |
tree | c581dcec56ab5bcb077ab8841e659b29bbdac99e /zebra/connected.c | |
parent | fd7307bd4efb5739a949256d6836dc6535c877c9 (diff) | |
download | quagga-a3e5daee7205e8bffb44d914a74d38fe8ad0c986.tar.bz2 quagga-a3e5daee7205e8bffb44d914a74d38fe8ad0c986.tar.xz |
netlink: display scope value in debug
add functions to convert scope value from int to string and back. put
them to use to display address scope in debug output.
Diffstat (limited to 'zebra/connected.c')
-rw-r--r-- | zebra/connected.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/zebra/connected.c b/zebra/connected.c index bf5715e4..25186a80 100644 --- a/zebra/connected.c +++ b/zebra/connected.c @@ -36,6 +36,53 @@ #include "zebra/interface.h" #include "zebra/connected.h" extern struct zebra_t zebrad; + +#ifdef HAVE_NETLINK +static const struct message rtscope_str[] = { + {RT_SCOPE_UNIVERSE, "global"}, + {RT_SCOPE_SITE, "site"}, + {RT_SCOPE_LINK, "link"}, + {RT_SCOPE_HOST, "host"}, + {RT_SCOPE_NOWHERE, "nowhere"}, + {0, NULL} +}; + +/* for use in show interface */ +const char * +connected_scope_name(unsigned value) +{ + const char *str; + static char buf[16]; + + str = lookup (rtscope_str, value); + if (!str || !*str) { + snprintf (buf, sizeof(buf), "%d", value); + str = buf; + } + return str; +} + +int +connected_scope_number(const char *name) +{ + const struct message *m; + char *errptr; + unsigned value; + + if (!name || !*name) + return -1; + + for (m = rtscope_str; m->str; m++) + if (!strcmp (m->str, name)) + return m->key; + + value = strtoul (name, &errptr, 0); + if (*errptr || value > 255) + return -1; + + return value; +} +#endif /* HAVE_NETLINK */ /* withdraw a connected address */ static void |