summaryrefslogtreecommitdiffstats
path: root/zebra/interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'zebra/interface.c')
-rw-r--r--zebra/interface.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/zebra/interface.c b/zebra/interface.c
index ce506056..916c58a6 100644
--- a/zebra/interface.c
+++ b/zebra/interface.c
@@ -32,6 +32,7 @@
#include "connected.h"
#include "log.h"
#include "zclient.h"
+#include "ipforward.h"
#include "zebra/interface.h"
#include "zebra/rtadv.h"
@@ -1031,6 +1032,12 @@ DEFUN (linkdetect,
if_was_operative = if_is_operative(ifp);
SET_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION);
+ /* Enable FIB to remove kernel routes as well */
+ if_linkdetect_on(ifp->name);
+#ifdef HAVE_IPV6
+ if_linkdetect_ipv6_on(ifp->name);
+#endif
+
/* When linkdetection is enabled, if might come down */
if (!if_is_operative(ifp) && if_was_operative) if_down(ifp);
@@ -1054,6 +1061,12 @@ DEFUN (no_linkdetect,
if_was_operative = if_is_operative(ifp);
UNSET_FLAG(ifp->status, ZEBRA_INTERFACE_LINKDETECTION);
+ /* Disable FIB update on link-detect */
+ if_linkdetect_off(ifp->name);
+#ifdef HAVE_IPV6
+ if_linkdetect_ipv6_off(ifp->name);
+#endif
+
/* Interface may come up after disabling link detection */
if (if_is_operative(ifp) && !if_was_operative) if_up(ifp);