summaryrefslogtreecommitdiffstats
path: root/zebra/connected.c
diff options
context:
space:
mode:
authorDavid Lamparter <equinox@diac24.net>2010-02-02 01:36:36 +0100
committerDavid Lamparter <equinox@diac24.net>2010-02-03 05:26:36 +0100
commita3e5daee7205e8bffb44d914a74d38fe8ad0c986 (patch)
treec581dcec56ab5bcb077ab8841e659b29bbdac99e /zebra/connected.c
parentfd7307bd4efb5739a949256d6836dc6535c877c9 (diff)
downloadquagga-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.c47
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