diff options
-rw-r--r-- | src/plugins/lldp/lldp_cli.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/plugins/lldp/lldp_cli.c b/src/plugins/lldp/lldp_cli.c index d2cdf120e6e..ef3fccc8b4b 100644 --- a/src/plugins/lldp/lldp_cli.c +++ b/src/plugins/lldp/lldp_cli.c @@ -102,15 +102,20 @@ lldp_cfg_intf_set (u32 hw_if_index, u8 ** port_desc, u8 ** mgmt_ip4, *mgmt_oid = NULL; } - error = - vnet_hw_interface_add_del_mac_address (lm->vnet_main, hw_if_index, - lldp_mac_addr, - 1 /* is_add */ ); - if (error) + /* Add MAC address to an interface's filter */ + if (hi->flags & VNET_HW_INTERFACE_FLAG_SUPPORTS_MAC_FILTER) { - clib_error_free (error); - lldp_delete_intf (lm, n); - return lldp_internal_error; + error = + vnet_hw_interface_add_del_mac_address (lm->vnet_main, + hw_if_index, + lldp_mac_addr, + 1 /* is_add */ ); + if (error) + { + clib_error_free (error); + lldp_delete_intf (lm, n); + return lldp_internal_error; + } } const vnet_sw_interface_t *sw = @@ -124,10 +129,12 @@ lldp_cfg_intf_set (u32 hw_if_index, u8 ** port_desc, u8 ** mgmt_ip4, { lldp_intf_t *n = lldp_get_intf (lm, hi->sw_if_index); lldp_delete_intf (lm, n); - if (n) + /* Remove MAC address from the interface's filter */ + if ((n) && (hi->flags & VNET_HW_INTERFACE_FLAG_SUPPORTS_MAC_FILTER)) { error = - vnet_hw_interface_add_del_mac_address (lm->vnet_main, hw_if_index, + vnet_hw_interface_add_del_mac_address (lm->vnet_main, + hw_if_index, lldp_mac_addr, 0 /* is_add */ ); if (error) |