From 6776485deef32900c119a61d43faecb515d3b20b Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Mon, 20 Jun 2016 08:21:00 -0400 Subject: [PATCH] quagga: Allow compile time determination of v6 RR semantics The patches to allow kernel v6 Route Replacement semantics to work correctly are on a very recent kernel. If you are compiling on a linux kernel where it's broken, just compile with --disable-rr-semantics. Signed-off-by: Donald Sharp (cherry picked from commit 76981cd383e4bed69454bcc4151a0aae89e8ca84) --- configure.ac | 6 ++++++ zebra/rt_netlink.c | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/configure.ac b/configure.ac index 8758d9d3c1..8338ad1462 100755 --- a/configure.ac +++ b/configure.ac @@ -304,6 +304,8 @@ AC_ARG_ENABLE(werror, AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)])) AC_ARG_ENABLE(cumulus, [ --enable-cumulus enable Cumulus Switch Special Extensions]) +AC_ARG_ENABLE(rr-semantics, + AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics])) if test x"${enable_gcc_ultra_verbose}" = x"yes" ; then CFLAGS="${CFLAGS} -W -Wcast-qual -Wstrict-prototypes" @@ -345,6 +347,10 @@ case "${enable_systemd}" in "*") ;; esac +if test "${enable_rr_semantics}" != "no" ; then + AC_DEFINE(HAVE_V6_RR_SEMANTICS,, Compile in v6 Route Replacement Semantics) +fi + if test "${enable_poll}" = "yes" ; then AC_DEFINE(HAVE_POLL,,Compile systemd support in) fi diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index e52fcd4342..1f7b1a9cff 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -2390,7 +2390,12 @@ kernel_add_ipv6 (struct prefix *p, struct rib *rib) int kernel_update_ipv6 (struct prefix *p, struct rib *rib) { +#if defined (HAVE_V6_RR_SEMANTICS) return netlink_route_multipath (RTM_NEWROUTE, p, rib, AF_INET6, 1); +#else + kernel_delete_ipv6 (p, rib); + return kernel_add_ipv6 (p, rib); +#endif } int -- 2.39.5