summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOndrej Zajicek <santiago@crfreenet.org>2011-09-24 11:06:42 +0200
committerOndrej Zajicek <santiago@crfreenet.org>2011-09-24 11:06:42 +0200
commitbf6d91dc4edf3d08f0de41f71503159b1713fc9a (patch)
treeaaf769128412c4ad1c56f0f373b88f10e37a8ddf
parent4116db182d8d80d26902a8b33f82664bb5770066 (diff)
downloadbird-bf6d91dc4edf3d08f0de41f71503159b1713fc9a.tar
bird-bf6d91dc4edf3d08f0de41f71503159b1713fc9a.zip
Use undefined scope for undefined IPv6 addresses.
-rw-r--r--lib/ip.c4
-rw-r--r--lib/ip.h1
-rw-r--r--lib/ipv6.c3
-rw-r--r--nest/config.Y2
4 files changed, 6 insertions, 4 deletions
diff --git a/lib/ip.c b/lib/ip.c
index 791a601..aa61553 100644
--- a/lib/ip.c
+++ b/lib/ip.c
@@ -27,9 +27,9 @@
char *
ip_scope_text(unsigned scope)
{
- static char *scope_table[] = { "host", "link", "site", "org", "univ" };
+ static char *scope_table[] = { "host", "link", "site", "org", "univ", "undef" };
- if (scope > SCOPE_UNIVERSE)
+ if (scope > SCOPE_UNDEFINED)
return "?";
else
return scope_table[scope];
diff --git a/lib/ip.h b/lib/ip.h
index e9923e2..5d74d21 100644
--- a/lib/ip.h
+++ b/lib/ip.h
@@ -37,6 +37,7 @@
#define SCOPE_SITE 2
#define SCOPE_ORGANIZATION 3
#define SCOPE_UNIVERSE 4
+#define SCOPE_UNDEFINED 5
char *ip_scope_text(unsigned);
diff --git a/lib/ipv6.c b/lib/ipv6.c
index 7c28c48..623f632 100644
--- a/lib/ipv6.c
+++ b/lib/ipv6.c
@@ -85,6 +85,7 @@ ipv6_classify(ip_addr *a)
case 5: return IADDR_MULTICAST | SCOPE_SITE;
case 8: return IADDR_MULTICAST | SCOPE_ORGANIZATION;
case 14: return IADDR_MULTICAST | SCOPE_UNIVERSE;
+ default: return IADDR_MULTICAST | SCOPE_UNDEFINED;
}
}
if (!x && !a->addr[1] && !a->addr[2])
@@ -102,7 +103,7 @@ ipv6_classify(ip_addr *a)
if (y >= 0x01000000 && y < 0xe0000000)
return IADDR_HOST | SCOPE_UNIVERSE;
}
- return IADDR_INVALID;
+ return IADDR_HOST | SCOPE_UNDEFINED;
}
void
diff --git a/nest/config.Y b/nest/config.Y
index fa726ef..dd4a9e0 100644
--- a/nest/config.Y
+++ b/nest/config.Y
@@ -49,7 +49,7 @@ CF_KEYWORDS(RELOAD, IN, OUT, MRTDUMP, MESSAGES, RESTRICT, MEMORY, IGP_METRIC)
CF_ENUM(T_ENUM_RTS, RTS_, DUMMY, STATIC, INHERIT, DEVICE, STATIC_DEVICE, REDIRECT,
RIP, OSPF, OSPF_IA, OSPF_EXT1, OSPF_EXT2, BGP, PIPE)
-CF_ENUM(T_ENUM_SCOPE, SCOPE_, HOST, LINK, SITE, ORGANIZATION, UNIVERSE)
+CF_ENUM(T_ENUM_SCOPE, SCOPE_, HOST, LINK, SITE, ORGANIZATION, UNIVERSE, UNDEFINED)
CF_ENUM(T_ENUM_RTC, RTC_, UNICAST, BROADCAST, MULTICAST, ANYCAST)
CF_ENUM(T_ENUM_RTD, RTD_, ROUTER, DEVICE, BLACKHOLE, UNREACHABLE, PROHIBIT, MULTIPATH)