]> git.proxmox.com Git - mirror_frr.git/blobdiff - zebra/interface.c
Merge pull request #5706 from mjstapp/fix_nh_debug_show
[mirror_frr.git] / zebra / interface.c
index eea80652e57957e6e2d2a7b2067b0a722721e1f7..bcb833b8d8f019b1ed7532533345b9a5bb2c4e42 100644 (file)
@@ -161,6 +161,7 @@ static int if_zebra_new_hook(struct interface *ifp)
                rtadv->HomeAgentLifetime =
                        -1; /* derive from AdvDefaultLifetime */
                rtadv->AdvIntervalOption = 0;
+               rtadv->UseFastRexmit = true;
                rtadv->DefaultPreference = RTADV_PREF_MEDIUM;
 
                rtadv->AdvPrefixList = list_new();
@@ -1037,7 +1038,8 @@ void if_up(struct interface *ifp)
 #if defined(HAVE_RTADV)
        /* Enable fast tx of RA if enabled && RA interval is not in msecs */
        if (zif->rtadv.AdvSendAdvertisements
-           && (zif->rtadv.MaxRtrAdvInterval >= 1000)) {
+           && (zif->rtadv.MaxRtrAdvInterval >= 1000)
+           && zif->rtadv.UseFastRexmit) {
                zif->rtadv.inFastRexmit = 1;
                zif->rtadv.NumFastReXmitsRemain = RTADV_NUM_FAST_REXMITS;
        }
@@ -1060,7 +1062,9 @@ void if_up(struct interface *ifp)
                                                    zif->link_ifindex);
                if (link_if)
                        zebra_vxlan_svi_up(ifp, link_if);
-       }
+       } else if (IS_ZEBRA_IF_MACVLAN(ifp))
+               zebra_vxlan_macvlan_up(ifp);
+
 }
 
 /* Interface goes down.  We have to manage different behavior of based
@@ -1092,7 +1096,8 @@ void if_down(struct interface *ifp)
                                                    zif->link_ifindex);
                if (link_if)
                        zebra_vxlan_svi_down(ifp, link_if);
-       }
+       } else if (IS_ZEBRA_IF_MACVLAN(ifp))
+               zebra_vxlan_macvlan_down(ifp);
 
 
        /* Notify to the protocol daemons. */
@@ -1972,6 +1977,8 @@ DEFUN (shutdown_if,
        struct zebra_if *if_data;
 
        if (ifp->ifindex != IFINDEX_INTERNAL) {
+               /* send RA lifetime of 0 before stopping. rfc4861/6.2.5 */
+               rtadv_stop_ra(ifp);
                ret = if_unset_flags(ifp, IFF_UP);
                if (ret < 0) {
                        vty_out(vty, "Can't shutdown interface\n");