diff options
Diffstat (limited to 'zebra/zebra_l2.c')
| -rw-r--r-- | zebra/zebra_l2.c | 22 | 
1 files changed, 14 insertions, 8 deletions
diff --git a/zebra/zebra_l2.c b/zebra/zebra_l2.c index 5d059a4502..452bab003a 100644 --- a/zebra/zebra_l2.c +++ b/zebra/zebra_l2.c @@ -224,12 +224,18 @@ void zebra_l2if_update_bridge_slave(struct interface *ifp,  	zif->brslave_info.bridge_ifindex = bridge_ifindex;  	/* Set up or remove link with master */ -	if (bridge_ifindex != IFINDEX_INTERNAL) -		zebra_l2_map_slave_to_bridge(&zif->brslave_info); -	else if (old_bridge_ifindex != IFINDEX_INTERNAL) -		zebra_l2_unmap_slave_from_bridge(&zif->brslave_info); - -	/* In the case of VxLAN, invoke the handler for EVPN. */ -	if (zif->zif_type == ZEBRA_IF_VXLAN) -		zebra_vxlan_if_update(ifp, ZEBRA_VXLIF_MASTER_CHANGE); +	if (bridge_ifindex != IFINDEX_INTERNAL) { +		zebra_l2_map_slave_to_bridge (&zif->brslave_info); +		/* In the case of VxLAN, invoke the handler for EVPN. */ +		if (zif->zif_type == ZEBRA_IF_VXLAN) +			zebra_vxlan_if_update (ifp, ZEBRA_VXLIF_MASTER_CHANGE); +	} else if (old_bridge_ifindex != IFINDEX_INTERNAL) { +		/* In the case of VxLAN, invoke the handler for EVPN. Note that +		 * this should be done *prior* to unmapping the interface from the +		 * bridge. +		 */ +		if (zif->zif_type == ZEBRA_IF_VXLAN) +			zebra_vxlan_if_update (ifp, ZEBRA_VXLIF_MASTER_CHANGE); +		zebra_l2_unmap_slave_from_bridge (&zif->brslave_info); +	}  }  | 
