diff options
Diffstat (limited to 'src/plugins/srv6-ad/ad.c')
-rw-r--r-- | src/plugins/srv6-ad/ad.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/plugins/srv6-ad/ad.c b/src/plugins/srv6-ad/ad.c index 73ea3f6ac1f..9bf48147188 100644 --- a/src/plugins/srv6-ad/ad.c +++ b/src/plugins/srv6-ad/ad.c @@ -105,8 +105,12 @@ srv6_ad_localsid_creation_fn (ip6_sr_localsid_t * localsid) /* Set interface in promiscuous mode */ vnet_main_t *vnm = vnet_get_main (); - ethernet_set_flags (vnm, ls_mem->sw_if_index_in, - ETHERNET_INTERFACE_FLAG_ACCEPT_ALL); + vnet_hw_interface_t *hi = + vnet_get_sup_hw_interface (vnm, ls_mem->sw_if_index_in); + /* Make sure it is main interface */ + if (hi->sw_if_index == ls_mem->sw_if_index_in) + ethernet_set_flags (vnm, hi->hw_if_index, + ETHERNET_INTERFACE_FLAG_ACCEPT_ALL); /* Associate local SID index to this interface (resize vector if needed) */ if (ls_mem->sw_if_index_in >= vec_len (sm->sw_iface_localsid2)) @@ -196,7 +200,11 @@ srv6_ad_localsid_removal_fn (ip6_sr_localsid_t * localsid) /* Disable promiscuous mode on the interface */ vnet_main_t *vnm = vnet_get_main (); - ethernet_set_flags (vnm, ls_mem->sw_if_index_in, 0); + vnet_hw_interface_t *hi = + vnet_get_sup_hw_interface (vnm, ls_mem->sw_if_index_in); + /* Make sure it is main interface */ + if (hi->sw_if_index == ls_mem->sw_if_index_in) + ethernet_set_flags (vnm, hi->hw_if_index, 0); /* Remove local SID index from interface table */ sm->sw_iface_localsid2[ls_mem->sw_if_index_in] = ~(u32) 0; |