Without this change, prefixes in class e announced via BGP are unconditionally ignored, e.g:
After this change, if configuration flag --enable-class-e is provided, class E / bogons can still be ignored/filtered via routing policy but aren't otherwise explicitly marked as invalid.
diff --git a/
configure.ac b/
configure.ac index 40f021a..3f22fa5 100644
--- a/
configure.ac +++ b/
configure.ac @@ -48,6 +48,12 @@ AC_ARG_ENABLE([mpls-kernel],
[enable_mpls_kernel=try]
)
+AC_ARG_ENABLE([class-e],
+ [AS_HELP_STRING([--enable-class-e], [allow class E addresses to be used])],
+ [enable_class_e=yes],
+ [enable_class_e=no]
+)
+
AC_ARG_WITH([protocols],
[AS_HELP_STRING([--with-protocols=LIST], [include specified routing protocols @<:@all@:>@])],
[],
@@ -391,6 +397,10 @@ if test "$enable_debug" = yes ; then
fi
fi
+if test "$enable_class_e" = yes ; then
+ AC_DEFINE([ENABLE_CLASS_E], [1], [Define to 1 to enable support for class E addresses.])
+fi
+
CLIENT=birdcl
CLIENT_LIBS=
if test "$enable_client" = yes ; then
@@ -454,6 +464,7 @@ AC_MSG_RESULT([ Debugging: $enable_debug])
AC_MSG_RESULT([ POSIX threads: $enable_pthreads])
AC_MSG_RESULT([ Routing protocols: $protocols])
AC_MSG_RESULT([ Kernel MPLS support: $enable_mpls_kernel])
+AC_MSG_RESULT([ Allow Class E addresses: $enable_class_e])
AC_MSG_RESULT([ Client: $enable_client])
rm -f $objdir/.*-stamp
diff --git a/lib/ip.c b/lib/ip.c
index 2d19516..143ef01 100644
--- a/lib/ip.c
+++ b/lib/ip.c
@@ -103,6 +103,12 @@ ip4_classify(ip4_addr ad)
if (a == 0xffffffff)
return IADDR_BROADCAST | SCOPE_LINK;
+#ifdef ENABLE_CLASS_E
+ /* consider class E to be valid */
+ if (b >= 0xf0)
+ return IADDR_HOST | SCOPE_UNIVERSE;
+#endif
+
return IADDR_INVALID;
}
---