X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_api.c;h=8d982e36b739542f20adb4e97faf3d781b2d93dd;hb=fe7d4a2e31529eed5416b38b520fdc84687df03c;hp=0541f311bc2f76f3cc5bf4c3fea3931a396632c9;hpb=6c4dae27e75fc668f86c9cca0f3f58273b680621;p=vpp.git diff --git a/src/vnet/interface_api.c b/src/vnet/interface_api.c index 0541f311bc2..8d982e36b73 100644 --- a/src/vnet/interface_api.c +++ b/src/vnet/interface_api.c @@ -61,13 +61,15 @@ _(SW_INTERFACE_SET_UNNUMBERED, sw_interface_set_unnumbered) \ _(SW_INTERFACE_CLEAR_STATS, sw_interface_clear_stats) \ _(SW_INTERFACE_TAG_ADD_DEL, sw_interface_tag_add_del) \ _(SW_INTERFACE_SET_MAC_ADDRESS, sw_interface_set_mac_address) \ +_(SW_INTERFACE_GET_MAC_ADDRESS, sw_interface_get_mac_address) \ _(CREATE_VLAN_SUBIF, create_vlan_subif) \ _(CREATE_SUBIF, create_subif) \ _(DELETE_SUBIF, delete_subif) \ _(CREATE_LOOPBACK, create_loopback) \ _(CREATE_LOOPBACK_INSTANCE, create_loopback_instance) \ _(DELETE_LOOPBACK, delete_loopback) \ -_(INTERFACE_NAME_RENUMBER, interface_name_renumber) +_(INTERFACE_NAME_RENUMBER, interface_name_renumber) \ +_(COLLECT_DETAILED_INTERFACE_STATS, collect_detailed_interface_stats) static void vl_api_sw_interface_set_flags_t_handler (vl_api_sw_interface_set_flags_t * mp) @@ -98,7 +100,6 @@ vl_api_sw_interface_set_mtu_t_handler (vl_api_sw_interface_set_mtu_t * mp) { vl_api_sw_interface_set_mtu_reply_t *rmp; vnet_main_t *vnm = vnet_get_main (); - u32 flags = ETHERNET_INTERFACE_FLAG_MTU; u32 sw_if_index = ntohl (mp->sw_if_index); u16 mtu = ntohs (mp->mtu); ethernet_main_t *em = ðernet_main; @@ -134,11 +135,7 @@ vl_api_sw_interface_set_mtu_t_handler (vl_api_sw_interface_set_mtu_t * mp) goto bad_sw_if_index; } - if (hi->max_packet_bytes != mtu) - { - hi->max_packet_bytes = mtu; - ethernet_set_flags (vnm, si->hw_if_index, flags); - } + vnet_hw_interface_set_mtu (vnm, si->hw_if_index, mtu); BAD_SW_IF_INDEX_LABEL; REPLY_MACRO (VL_API_SW_INTERFACE_SET_MTU_REPLY); @@ -586,7 +583,6 @@ static void vl_api_sw_interface_set_unnumbered_t_handler vnet_main_t *vnm = vnet_get_main (); u32 sw_if_index = ntohl (mp->sw_if_index); u32 unnumbered_sw_if_index = ntohl (mp->unnumbered_sw_if_index); - u32 was_unnum; /* * The API message field names are backwards from @@ -606,42 +602,8 @@ static void vl_api_sw_interface_set_unnumbered_t_handler goto done; } - vnet_sw_interface_t *si = - vnet_get_sw_interface (vnm, unnumbered_sw_if_index); - was_unnum = (si->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED); - - if (mp->is_add) - { - si->flags |= VNET_SW_INTERFACE_FLAG_UNNUMBERED; - si->unnumbered_sw_if_index = sw_if_index; - - ip4_main.lookup_main.if_address_pool_index_by_sw_if_index - [unnumbered_sw_if_index] = - ip4_main. - lookup_main.if_address_pool_index_by_sw_if_index[sw_if_index]; - ip6_main. - lookup_main.if_address_pool_index_by_sw_if_index - [unnumbered_sw_if_index] = - ip6_main. - lookup_main.if_address_pool_index_by_sw_if_index[sw_if_index]; - } - else - { - si->flags &= ~(VNET_SW_INTERFACE_FLAG_UNNUMBERED); - si->unnumbered_sw_if_index = (u32) ~ 0; - - ip4_main.lookup_main.if_address_pool_index_by_sw_if_index - [unnumbered_sw_if_index] = ~0; - ip6_main.lookup_main.if_address_pool_index_by_sw_if_index - [unnumbered_sw_if_index] = ~0; - } - - if (was_unnum != (si->flags & VNET_SW_INTERFACE_FLAG_UNNUMBERED)) - { - ip4_sw_interface_enable_disable (unnumbered_sw_if_index, mp->is_add); - ip6_sw_interface_enable_disable (unnumbered_sw_if_index, mp->is_add); - } - + vnet_sw_interface_update_unnumbered (unnumbered_sw_if_index, + sw_if_index, mp->is_add); done: REPLY_MACRO (VL_API_SW_INTERFACE_SET_UNNUMBERED_REPLY); } @@ -908,6 +870,37 @@ out: REPLY_MACRO (VL_API_SW_INTERFACE_SET_MAC_ADDRESS_REPLY); } +static void vl_api_sw_interface_get_mac_address_t_handler + (vl_api_sw_interface_get_mac_address_t * mp) +{ + vl_api_sw_interface_get_mac_address_reply_t *rmp; + vl_api_registration_t *reg; + vnet_main_t *vnm = vnet_get_main (); + u32 sw_if_index = ntohl (mp->sw_if_index); + vnet_sw_interface_t *si; + ethernet_interface_t *eth_if = 0; + int rv = 0; + + VALIDATE_SW_IF_INDEX (mp); + + si = vnet_get_sup_sw_interface (vnm, sw_if_index); + if (si->type == VNET_SW_INTERFACE_TYPE_HARDWARE) + eth_if = ethernet_get_interface (ðernet_main, si->hw_if_index); + + BAD_SW_IF_INDEX_LABEL; + + reg = vl_api_client_index_to_registration (mp->client_index); + if (!reg) + return; + rmp = vl_msg_api_alloc (sizeof (*rmp)); + rmp->_vl_msg_id = htons (VL_API_SW_INTERFACE_GET_MAC_ADDRESS_REPLY); + rmp->context = mp->context; + rmp->retval = htonl (rv); + if (!rv && eth_if) + memcpy (rmp->mac_address, eth_if->address, 6); + vl_api_send_msg (reg, (u8 *) rmp); +} + static void vl_api_sw_interface_set_rx_mode_t_handler (vl_api_sw_interface_set_rx_mode_t * mp) { @@ -1177,6 +1170,20 @@ vl_api_delete_loopback_t_handler (vl_api_delete_loopback_t * mp) REPLY_MACRO (VL_API_DELETE_LOOPBACK_REPLY); } +static void + vl_api_collect_detailed_interface_stats_t_handler + (vl_api_collect_detailed_interface_stats_t * mp) +{ + vl_api_collect_detailed_interface_stats_reply_t *rmp; + int rv = 0; + + rv = + vnet_sw_interface_stats_collect_enable_disable (ntohl (mp->sw_if_index), + mp->enable_disable); + + REPLY_MACRO (VL_API_COLLECT_DETAILED_INTERFACE_STATS_REPLY); +} + /* * vpe_api_hookup * Add vpe's API message handlers to the table.