@@ -1656,8 +1656,10 @@ static void interface_if_protodown(struct interface *ifp, bool protodown,
1656
1656
uint32_t rc_bitfield )
1657
1657
{
1658
1658
struct zebra_if * zif = ifp -> info ;
1659
- bool old_protodown ;
1659
+ bool old_protodown , reason_extern ;
1660
1660
1661
+ reason_extern = !!CHECK_FLAG (zif -> protodown_rc ,
1662
+ ZEBRA_PROTODOWN_EXTERNAL );
1661
1663
/*
1662
1664
* Set our reason code to note it wasn't us.
1663
1665
* If the reason we got from the kernel is ONLY frr though, don't
@@ -1673,8 +1675,8 @@ static void interface_if_protodown(struct interface *ifp, bool protodown,
1673
1675
return ;
1674
1676
1675
1677
if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_DPLANE )
1676
- zlog_debug ("interface %s dplane change, protodown %s" ,
1677
- ifp -> name , protodown ? "on" : "off" );
1678
+ zlog_debug ("interface %s dplane change, protodown %s curr reason_extern %u " ,
1679
+ ifp -> name , protodown ? "on" : "off" , reason_extern );
1678
1680
1679
1681
/* Set protodown, respectively */
1680
1682
COND_FLAG (zif -> flags , ZIF_FLAG_PROTODOWN , protodown );
@@ -1699,6 +1701,13 @@ static void interface_if_protodown(struct interface *ifp, bool protodown,
1699
1701
return ;
1700
1702
}
1701
1703
1704
+ if (!protodown && reason_extern ) {
1705
+ if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL )
1706
+ zlog_debug ("bond member %s has protodown reason external and clear the reason, skip reinstall." ,
1707
+ ifp -> name );
1708
+ return ;
1709
+ }
1710
+
1702
1711
if (IS_ZEBRA_DEBUG_EVPN_MH_ES || IS_ZEBRA_DEBUG_KERNEL )
1703
1712
zlog_debug (
1704
1713
"bond mbr %s reinstate protodown %s in the dplane" ,
0 commit comments