diff --git a/configure.ac b/configure.ac index e7ca6015d2..1f7d59d3aa 100755 --- a/configure.ac +++ b/configure.ac @@ -320,6 +320,8 @@ AC_ARG_ENABLE(werror, AS_HELP_STRING([--enable-werror], [enable -Werror (recommended for developers only)])) AC_ARG_ENABLE(cumulus, AS_HELP_STRING([--enable-cumulus], [enable Cumulus Switch Special Extensions])) +AC_ARG_ENABLE(rr-semantics, + AS_HELP_STRING([--disable-rr-semantics], [disable the v6 Route Replace semantics])) AC_CHECK_HEADERS(json-c/json.h) AC_CHECK_LIB(json-c, json_object_get, LIBS="$LIBS -ljson-c") @@ -354,6 +356,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 b0e680b7a9..0e336fe974 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -2299,7 +2299,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