X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=blobdiff_plain;f=src%2Fvnet%2Fethernet%2Finterface.c;h=0f54aa1e393a66bad0da28dee61919192b61c396;hp=bef13b8672c04946cd337358bc0e86e2b318f494;hb=192b13f96;hpb=78451a6a660cd26a67d2284219f48878a2dfe2c3 diff --git a/src/vnet/ethernet/interface.c b/src/vnet/ethernet/interface.c index bef13b8672c..0f54aa1e393 100644 --- a/src/vnet/ethernet/interface.c +++ b/src/vnet/ethernet/interface.c @@ -41,7 +41,9 @@ #include #include #include +#include #include +#include #include /** @@ -151,7 +153,7 @@ ethernet_build_rewrite (vnet_main_t * vnm, if (dst_address) clib_memcpy (h->dst_address, dst_address, sizeof (h->dst_address)); else - memset (h->dst_address, ~0, sizeof (h->dst_address)); /* broadcast */ + clib_memset (h->dst_address, ~0, sizeof (h->dst_address)); /* broadcast */ } if (PREDICT_FALSE (!is_p2p) && sub_sw->sub.eth.flags.one_tag) @@ -218,7 +220,8 @@ ethernet_update_adjacency (vnet_main_t * vnm, u32 sw_if_index, u32 ai) } static clib_error_t * -ethernet_mac_change (vnet_hw_interface_t * hi, char *mac_address) +ethernet_mac_change (vnet_hw_interface_t * hi, + const u8 * old_address, const u8 * mac_address) { ethernet_interface_t *ei; ethernet_main_t *em; @@ -275,7 +278,7 @@ clib_error_t * ethernet_register_interface (vnet_main_t * vnm, u32 dev_class_index, u32 dev_instance, - u8 * address, + const u8 * address, u32 * hw_if_index_return, ethernet_flag_change_function_t flag_change) { @@ -340,6 +343,7 @@ ethernet_delete_interface (vnet_main_t * vnm, u32 hw_if_index) if (vlan_table->vlans[idx].qinqs) { pool_put_index (em->qinq_pool, vlan_table->vlans[idx].qinqs); + vlan_table->vlans[idx].qinqs = 0; } } pool_put_index (em->vlan_pool, main_intf->dot1q_vlans); @@ -353,6 +357,7 @@ ethernet_delete_interface (vnet_main_t * vnm, u32 hw_if_index) if (vlan_table->vlans[idx].qinqs) { pool_put_index (em->qinq_pool, vlan_table->vlans[idx].qinqs); + vlan_table->vlans[idx].qinqs = 0; } } pool_put_index (em->vlan_pool, main_intf->dot1ad_vlans); @@ -375,6 +380,7 @@ ethernet_set_flags (vnet_main_t * vnm, u32 hw_if_index, u32 flags) ASSERT (hi->hw_class_index == ethernet_hw_interface_class.index); ei = pool_elt_at_index (em->interfaces, hi->hw_instance); + ei->flags = flags; if (ei->flag_change) return ei->flag_change (vnm, hi, flags); return (u32) ~ 0; @@ -401,7 +407,7 @@ simulated_ethernet_interface_tx (vlib_main_t * vm, u32 new_tx_sw_if_index = ~0; n_left_from = frame->n_vectors; - from = vlib_frame_args (frame); + from = vlib_frame_vector_args (frame); vlib_get_buffers (vm, from, bufs, n_left_from); b = bufs; @@ -633,18 +639,26 @@ simulated_ethernet_admin_up_down (vnet_main_t * vnm, u32 hw_if_index, return 0; } +static clib_error_t * +simulated_ethernet_mac_change (vnet_hw_interface_t * hi, + const u8 * old_address, const u8 * mac_address) +{ + l2input_interface_mac_change (hi->sw_if_index, old_address, mac_address); + + return (NULL); +} + + /* *INDENT-OFF* */ VNET_DEVICE_CLASS (ethernet_simulated_device_class) = { .name = "Loopback", .format_device_name = format_simulated_ethernet_name, .tx_function = simulated_ethernet_interface_tx, .admin_up_down_function = simulated_ethernet_admin_up_down, + .mac_addr_change_function = simulated_ethernet_mac_change, }; /* *INDENT-ON* */ -VLIB_DEVICE_TX_FUNCTION_MULTIARCH (ethernet_simulated_device_class, - simulated_ethernet_interface_tx); - /* * Maintain a bitmap of allocated loopback instance numbers. */ @@ -735,7 +749,7 @@ vnet_create_loopback_interface (u32 * sw_if_indexp, u8 * mac_address, *sw_if_indexp = (u32) ~ 0; - memset (address, 0, sizeof (address)); + clib_memset (address, 0, sizeof (address)); /* * Allocate a loopback instance. Either select on dynamically @@ -807,7 +821,7 @@ create_simulated_ethernet_interfaces (vlib_main_t * vm, u8 is_specified = 0; u32 user_instance = 0; - memset (mac_address, 0, sizeof (mac_address)); + clib_memset (mac_address, 0, sizeof (mac_address)); while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) {