X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fethernet%2Fp2p_ethernet_api.c;h=903678ce445216a372554ea42d7f2dfd2ecc475c;hb=HEAD;hp=3f537168a8e4afb175423205a160285e9350eb31;hpb=f324dec0a371431f9326f67e920630579741da3c;p=vpp.git diff --git a/src/vnet/ethernet/p2p_ethernet_api.c b/src/vnet/ethernet/p2p_ethernet_api.c index 3f537168a8e..903678ce445 100644 --- a/src/vnet/ethernet/p2p_ethernet_api.c +++ b/src/vnet/ethernet/p2p_ethernet_api.c @@ -19,30 +19,15 @@ #include #include - -#include #include -#define vl_typedefs /* define message structures */ -#include -#undef vl_typedefs - -#define vl_endianfun /* define message structures */ -#include -#undef vl_endianfun - -/* instantiate all the print functions we know about */ -#define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__) -#define vl_printfun -#include -#undef vl_printfun +#include +#include +#include +#define REPLY_MSG_ID_BASE p2p_main.msg_id_base #include -#define foreach_vpe_api_msg \ -_(P2P_ETHERNET_ADD, p2p_ethernet_add) \ -_(P2P_ETHERNET_DEL, p2p_ethernet_del) - void vl_api_p2p_ethernet_add_t_handler (vl_api_p2p_ethernet_add_t * mp) { @@ -52,20 +37,33 @@ vl_api_p2p_ethernet_add_t_handler (vl_api_p2p_ethernet_add_t * mp) u32 parent_if_index = htonl (mp->parent_if_index); u32 sub_id = htonl (mp->subif_id); - u32 p2pe_if_index; + u32 p2pe_if_index = ~0; u8 remote_mac[6]; + if (!vnet_sw_if_index_is_api_valid (parent_if_index)) + { + rv = VNET_API_ERROR_INVALID_SW_IF_INDEX; + goto bad_sw_if_index; + } + if (!vnet_sw_if_index_is_api_valid (sub_id)) + { + rv = VNET_API_ERROR_INVALID_SW_IF_INDEX_2; + goto bad_sw_if_index; + } + clib_memcpy (remote_mac, mp->remote_mac, 6); rv = p2p_ethernet_add_del (vm, parent_if_index, remote_mac, sub_id, 1, &p2pe_if_index); - /* *INDENT-OFF* */ + BAD_SW_IF_INDEX_LABEL; + REPLY_MACRO2(VL_API_P2P_ETHERNET_ADD_REPLY, ({ rmp->sw_if_index = htonl(p2pe_if_index); })); - /* *INDENT-ON* */ + + } void @@ -78,50 +76,27 @@ vl_api_p2p_ethernet_del_t_handler (vl_api_p2p_ethernet_del_t * mp) u32 parent_if_index = htonl (mp->parent_if_index); u8 remote_mac[6]; + if (!vnet_sw_if_index_is_api_valid (parent_if_index)) + { + rv = VNET_API_ERROR_INVALID_SW_IF_INDEX; + goto bad_sw_if_index; + } + clib_memcpy (remote_mac, mp->remote_mac, 6); rv = p2p_ethernet_add_del (vm, parent_if_index, remote_mac, ~0, 0, 0); + BAD_SW_IF_INDEX_LABEL; REPLY_MACRO (VL_API_P2P_ETHERNET_DEL_REPLY); } -/* - * p2p_ethernet_api_hookup - * Add vpe's API message handlers to the table. - * vlib has already mapped shared memory and - * added the client registration handlers. - * See .../vlib-api/vlibmemory/memclnt_vlib.c:memclnt_process() - */ -#define vl_msg_name_crc_list -#include -#undef vl_msg_name_crc_list - -static void -setup_message_id_table (api_main_t * am) -{ -#define _(id,n,crc) vl_msg_api_add_msg_name_crc (am, #n "_" #crc, id); - foreach_vl_msg_name_crc_p2p_ethernet; -#undef _ -} - +#include static clib_error_t * p2p_ethernet_api_hookup (vlib_main_t * vm) { - api_main_t *am = &api_main; - -#define _(N,n) \ - vl_msg_api_set_handlers(VL_API_##N, #n, \ - vl_api_##n##_t_handler, \ - vl_noop_handler, \ - vl_api_##n##_t_endian, \ - vl_api_##n##_t_print, \ - sizeof(vl_api_##n##_t), 1); - foreach_vpe_api_msg; -#undef _ - /* * Set up the (msg_name, crc, message-id) table */ - setup_message_id_table (am); + REPLY_MSG_ID_BASE = setup_message_id_table (); return 0; }