X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Finterface_api.c;h=ab9d04af2d80e913a21050d0225ef14675f927d4;hb=3d5f08a82;hp=387ef32a20723164d018afe800b572a1896331d1;hpb=aa27dcb84cb312277370b77370a69b2a3596c4c5;p=vpp.git diff --git a/src/vnet/interface_api.c b/src/vnet/interface_api.c index 387ef32a207..ab9d04af2d8 100644 --- a/src/vnet/interface_api.c +++ b/src/vnet/interface_api.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -79,8 +80,12 @@ _(CREATE_LOOPBACK_INSTANCE, create_loopback_instance) \ _(DELETE_LOOPBACK, delete_loopback) \ _(INTERFACE_NAME_RENUMBER, interface_name_renumber) \ _(COLLECT_DETAILED_INTERFACE_STATS, collect_detailed_interface_stats) \ -_(SW_INTERFACE_SET_IP_DIRECTED_BROADCAST, \ - sw_interface_set_ip_directed_broadcast) +_(SW_INTERFACE_SET_IP_DIRECTED_BROADCAST, \ + sw_interface_set_ip_directed_broadcast) \ +_(SW_INTERFACE_ADDRESS_REPLACE_BEGIN, \ + sw_interface_address_replace_begin) \ +_(SW_INTERFACE_ADDRESS_REPLACE_END, \ + sw_interface_address_replace_end) static void vl_api_sw_interface_set_flags_t_handler (vl_api_sw_interface_set_flags_t * mp) @@ -169,7 +174,6 @@ vl_api_sw_interface_set_mtu_t_handler (vl_api_sw_interface_set_mtu_t * mp) for (i = 0; i < VNET_N_MTU; i++) { per_protocol_mtu[i] = ntohl (mp->mtu[i]); - clib_warning ("MTU %u", per_protocol_mtu[i]); } vnet_sw_interface_set_protocol_mtu (vnm, sw_if_index, per_protocol_mtu); @@ -259,8 +263,8 @@ send_sw_interface_details (vpe_api_main_t * am, ethernet_interface_t *ei; ei = pool_elt_at_index (em->interfaces, hi->hw_instance); - ASSERT (sizeof (mp->l2_address) >= sizeof (ei->address)); - mac_address_encode ((mac_address_t *) ei->address, mp->l2_address); + ASSERT (sizeof (mp->l2_address) >= sizeof (ei->address.mac)); + mac_address_encode (&ei->address.mac, mp->l2_address); } else if (swif->sup_sw_if_index != swif->sw_if_index) { @@ -358,14 +362,14 @@ vl_api_sw_interface_dump_t_handler (vl_api_sw_interface_dump_t * mp) if (mp->name_filter_valid) { - filter = vl_api_from_api_to_vec (&mp->name_filter); + filter = vl_api_from_api_to_new_vec (mp, &mp->name_filter); vec_add1 (filter, 0); /* Ensure it's a C string for strcasecmp() */ } char *strcasestr (char *, char *); /* lnx hdr file botch */ /* *INDENT-OFF* */ - pool_foreach (swif, im->sw_interfaces, - ({ + pool_foreach (swif, im->sw_interfaces) + { if (!vnet_swif_is_api_visible (swif)) continue; vec_reset_length(name); @@ -376,7 +380,7 @@ vl_api_sw_interface_dump_t_handler (vl_api_sw_interface_dump_t * mp) continue; send_sw_interface_details (am, rp, swif, name, mp->context); - })); + } /* *INDENT-ON* */ vec_free (name); @@ -786,12 +790,12 @@ link_state_process (vlib_main_t * vm, continue; /* *INDENT-OFF* */ - pool_foreach(reg, vam->interface_events_registrations, - ({ + pool_foreach (reg, vam->interface_events_registrations) + { vl_reg = vl_api_client_index_to_registration (reg->client_index); if (vl_reg) send_sw_interface_event (vam, reg, vl_reg, i, event_by_sw_if_index[i]); - })); + } /* *INDENT-ON* */ } vec_reset_length (event_by_sw_if_index); @@ -990,7 +994,7 @@ static void vl_api_sw_interface_get_mac_address_t_handler rmp->context = mp->context; rmp->retval = htonl (rv); if (!rv && eth_if) - mac_address_encode ((mac_address_t *) eth_if->address, rmp->mac_address); + mac_address_encode (ð_if->address.mac, rmp->mac_address); vl_api_send_msg (reg, (u8 *) rmp); } @@ -1003,6 +1007,7 @@ static void vl_api_sw_interface_set_rx_mode_t_handler vnet_sw_interface_t *si; clib_error_t *error; int rv = 0; + vnet_hw_if_rx_mode rx_mode; VALIDATE_SW_IF_INDEX (mp); @@ -1013,11 +1018,11 @@ static void vl_api_sw_interface_set_rx_mode_t_handler goto bad_sw_if_index; } + rx_mode = (vnet_hw_if_rx_mode) ntohl (mp->mode); error = set_hw_interface_change_rx_mode (vnm, si->hw_if_index, mp->queue_id_valid, ntohl (mp->queue_id), - (vnet_hw_interface_rx_mode) - mp->mode); + (vnet_hw_if_rx_mode) rx_mode); if (error) { @@ -1045,7 +1050,7 @@ send_interface_rx_placement_details (vpe_api_main_t * am, mp->sw_if_index = htonl (sw_if_index); mp->queue_id = htonl (queue_id); mp->worker_id = htonl (worker_id); - mp->mode = mode; + mp->mode = htonl (mode); mp->context = context; vl_api_send_msg (rp, (u8 *) mp); @@ -1065,29 +1070,24 @@ static void vl_api_sw_interface_rx_placement_dump_t_handler if (sw_if_index == ~0) { - vnet_device_input_runtime_t *rt; - vnet_device_and_queue_t *dq; - vlib_node_t *pn = vlib_get_node_by_name (am->vlib_main, - (u8 *) "device-input"); - uword si; - int index = 0; - - /* *INDENT-OFF* */ - foreach_vlib_main (({ - clib_bitmap_foreach (si, pn->sibling_bitmap, - ({ - rt = vlib_node_get_runtime_data (this_vlib_main, si); - vec_foreach (dq, rt->devices_and_queues) - { - vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, - dq->hw_if_index); - send_interface_rx_placement_details (am, reg, hw->sw_if_index, index, - dq->queue_id, dq->mode, mp->context); - } - })); - index++; - })); - /* *INDENT-ON* */ + vnet_hw_if_rx_queue_t **all_queues = 0; + vnet_hw_if_rx_queue_t **qptr; + vnet_hw_if_rx_queue_t *q; + vec_foreach (q, vnm->interface_main.hw_if_rx_queues) + vec_add1 (all_queues, q); + vec_sort_with_function (all_queues, vnet_hw_if_rxq_cmp_cli_api); + + vec_foreach (qptr, all_queues) + { + u32 current_thread = qptr[0]->thread_index; + u32 hw_if_index = qptr[0]->hw_if_index; + vnet_hw_interface_t *hw_if = + vnet_get_hw_interface (vnm, hw_if_index); + send_interface_rx_placement_details ( + am, reg, hw_if->sw_if_index, current_thread, qptr[0]->queue_id, + qptr[0]->mode, mp->context); + } + vec_free (all_queues); } else { @@ -1110,13 +1110,13 @@ static void vl_api_sw_interface_rx_placement_dump_t_handler vnet_hw_interface_t *hw = vnet_get_hw_interface (vnm, si->hw_if_index); - for (i = 0; i < vec_len (hw->dq_runtime_index_by_queue); i++) + for (i = 0; i < vec_len (hw->rx_queue_indices); i++) { - send_interface_rx_placement_details (am, reg, hw->sw_if_index, - hw->input_node_thread_index_by_queue - [i], i, - hw->rx_mode_by_queue[i], - mp->context); + vnet_hw_if_rx_queue_t *rxq = + vnet_hw_if_get_rx_queue (vnm, hw->rx_queue_indices[i]); + send_interface_rx_placement_details ( + am, reg, hw->sw_if_index, rxq->thread_index, rxq->queue_id, + rxq->mode, mp->context); } } @@ -1367,6 +1367,30 @@ static void REPLY_MACRO (VL_API_COLLECT_DETAILED_INTERFACE_STATS_REPLY); } +static void + vl_api_sw_interface_address_replace_begin_t_handler + (vl_api_sw_interface_address_replace_begin_t * mp) +{ + vl_api_sw_interface_address_replace_begin_reply_t *rmp; + int rv = 0; + + ip_interface_address_mark (); + + REPLY_MACRO (VL_API_SW_INTERFACE_ADDRESS_REPLACE_BEGIN_REPLY); +} + +static void + vl_api_sw_interface_address_replace_end_t_handler + (vl_api_sw_interface_address_replace_end_t * mp) +{ + vl_api_sw_interface_address_replace_end_reply_t *rmp; + int rv = 0; + + ip_interface_address_sweep (); + + REPLY_MACRO (VL_API_SW_INTERFACE_ADDRESS_REPLACE_END_REPLY); +} + /* * vpe_api_hookup * Add vpe's API message handlers to the table. @@ -1391,7 +1415,7 @@ pub_sub_handler (interface_events, INTERFACE_EVENTS); static clib_error_t * interface_api_hookup (vlib_main_t * vm) { - api_main_t *am = &api_main; + api_main_t *am = vlibapi_get_main (); #define _(N,n) \ vl_msg_api_set_handlers(VL_API_##N, #n, \