summaryrefslogtreecommitdiff
path: root/zebra/if_netlink.c
diff options
context:
space:
mode:
authorPhilippe Guibert <philippe.guibert@6wind.com>2021-08-17 10:56:32 +0200
committerPhilippe Guibert <philippe.guibert@6wind.com>2021-09-17 10:25:38 +0200
commitf56a15b5bd231c78456a2d340abbd0300a686e81 (patch)
tree081c3e8bc73c2c1d92820b28c57752ddfc6dc72c /zebra/if_netlink.c
parentc7620108890f58796b0155bb9ef3d65f0b39909f (diff)
zebra: refresh vxlan evpn contexts, when bridge interface goes up
When using bgp evpn rt5 setup, after BGP configuration has been loaded, if the user attempts to detach and reattach the bridged vxlan interface from the bridge, then BGP loses its BGP EVPN contexts, and a refresh of BGP configuration is necessary to maintain consistency between linux configuration and BGP EVPN contexts (RIB). The following command can lead to inconsistency: ip netns exec cust1 ip link set dev vxlan1000 nomaster ip netns exec cust1 ip link set dev vxlan1000 master br1000 consecutive to the, BGP l2vpn evpn RIB is empty, and the way to solve this until now is to reconfigure EVPN like this: vrf cust1 no vni 1000 vni 1000 exit-vrf Actually, the link information is correctly handled. In fact, at the time of link event, the lower link status of the bridge interface was not yet up, thus preventing from establishing BGP EVPN contexts. In fact, when a bridge interface does not have any slave interface, the link status of the bridge interface is down. That change of status comes a bit after, and is not detected by slave interfaces, as this event is not intercepted. This commit intercepts the bridge link up event, and triggers a check on slaved vxlan interfaces. Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
Diffstat (limited to 'zebra/if_netlink.c')
-rw-r--r--zebra/if_netlink.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/zebra/if_netlink.c b/zebra/if_netlink.c
index 658b862e62..a78b7607a0 100644
--- a/zebra/if_netlink.c
+++ b/zebra/if_netlink.c
@@ -1756,6 +1756,9 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
"Intf %s(%u) has come UP",
name, ifp->ifindex);
if_up(ifp);
+ if (IS_ZEBRA_IF_BRIDGE(ifp))
+ chgflags =
+ ZEBRA_BRIDGE_MASTER_UP;
} else {
if (IS_ZEBRA_DEBUG_KERNEL)
zlog_debug(