This change enables Bird to establish BGP sessions to devices in class E address space.
Without this change, prefixes in class e announced via BGP are unconditionally ignored, e.g: $ bird -d bird: Started bird: Ignoring bogus route 241.1.2.3/32 received via <neighbor> 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. Marking class E addresses as bogus was previously discussed in Sep 2017 with no patch and no proposed change of behaviour ( https://bird.network.cz/pipermail/bird-users/2017-September/011558.html). Signed-off-by: lincoln dale <[email protected]> --- 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; } ---
