summaryrefslogtreecommitdiffstats
path: root/vnet/vnet/interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'vnet/vnet/interface.c')
-rw-r--r--vnet/vnet/interface.c23
1 files changed, 7 insertions, 16 deletions
diff --git a/vnet/vnet/interface.c b/vnet/vnet/interface.c
index b72dcd41f46..78610ed460b 100644
--- a/vnet/vnet/interface.c
+++ b/vnet/vnet/interface.c
@@ -1311,25 +1311,16 @@ vnet_hw_interface_change_mac_address_helper (vnet_main_t * vnm,
if (dev_class->mac_addr_change_function)
{
error =
- dev_class->mac_addr_change_function (vnet_get_hw_interface
- (vnm, hw_if_index),
- (char *) &mac_address);
+ dev_class->mac_addr_change_function (hi, (char *) &mac_address);
}
if (!error)
{
- ethernet_main_t *em = &ethernet_main;
- ethernet_interface_t *ei =
- pool_elt_at_index (em->interfaces, hi->hw_instance);
-
- vec_validate (hi->hw_address,
- STRUCT_SIZE_OF (ethernet_header_t, src_address) - 1);
- clib_memcpy (hi->hw_address, &mac_address,
- vec_len (hi->hw_address));
-
- clib_memcpy (ei->address, (u8 *) & mac_address,
- sizeof (ei->address));
- ethernet_arp_change_mac (vnm, hw_if_index);
- ethernet_ndp_change_mac (vnm->vlib_main, hw_if_index);
+ vnet_hw_interface_class_t *hw_class;
+
+ hw_class = vnet_get_hw_interface_class (vnm, hi->hw_class_index);
+
+ if (NULL != hw_class->mac_addr_change_function)
+ hw_class->mac_addr_change_function (hi, (char *) &mac_address);
}
else
{