diff options
Diffstat (limited to 'src/plugins/ioam/udp-ping')
-rw-r--r-- | src/plugins/ioam/udp-ping/udp_ping.api | 10 | ||||
-rw-r--r-- | src/plugins/ioam/udp-ping/udp_ping_api.c | 12 | ||||
-rw-r--r-- | src/plugins/ioam/udp-ping/udp_ping_test.c | 159 |
3 files changed, 29 insertions, 152 deletions
diff --git a/src/plugins/ioam/udp-ping/udp_ping.api b/src/plugins/ioam/udp-ping/udp_ping.api index 72e578c5674..6b6213acf75 100644 --- a/src/plugins/ioam/udp-ping/udp_ping.api +++ b/src/plugins/ioam/udp-ping/udp_ping.api @@ -14,7 +14,8 @@ * limitations under the License. */ -option version = "2.0.0"; +option version = "3.0.0"; +import "vnet/ip/ip_types.api"; /** \brief UDP-Probe Add/Delete request @param src_ip_address - Source ipv4/v6 address for the udp-ping flow @@ -30,14 +31,13 @@ option version = "2.0.0"; autoreply define udp_ping_add_del { u32 client_index; u32 context; - u8 src_ip_address[16]; - u8 dst_ip_address[16]; + vl_api_address_t src_ip_address; + vl_api_address_t dst_ip_address; u16 start_src_port; u16 end_src_port; u16 start_dst_port; u16 end_dst_port; u16 interval; - u8 is_ipv4; u8 dis; u8 fault_det; u8 reserve[3]; @@ -51,6 +51,6 @@ autoreply define udp_ping_add_del { autoreply define udp_ping_export { u32 client_index; u32 context; - u32 enable; + bool enable; }; diff --git a/src/plugins/ioam/udp-ping/udp_ping_api.c b/src/plugins/ioam/udp-ping/udp_ping_api.c index 82f56aa01bf..6c54e0d9929 100644 --- a/src/plugins/ioam/udp-ping/udp_ping_api.c +++ b/src/plugins/ioam/udp-ping/udp_ping_api.c @@ -25,7 +25,8 @@ #include <vlibapi/api.h> #include <vlibmemory/api.h> - +#include <vnet/format_fns.h> +#include <vnet/ip/ip_types_api.h> /* define message IDs */ #include <ioam/udp-ping/udp_ping.api_enum.h> @@ -42,16 +43,13 @@ vl_api_udp_ping_add_del_t_handler (vl_api_udp_ping_add_del_t * mp) udp_ping_main_t *sm = &udp_ping_main; vl_api_udp_ping_add_del_reply_t *rmp; - if (mp->is_ipv4) + if (clib_net_to_host_u32 (mp->src_ip_address.af) == ADDRESS_IP4) { rv = -1; //Not supported goto ERROROUT; } - - clib_memcpy ((void *) &src.ip6, (void *) mp->src_ip_address, - sizeof (ip6_address_t)); - clib_memcpy ((void *) &dst.ip6, (void *) mp->dst_ip_address, - sizeof (ip6_address_t)); + ip_address_decode (&mp->src_ip_address, &src); + ip_address_decode (&mp->dst_ip_address, &dst); ip46_udp_ping_set_flow (src, dst, ntohs (mp->start_src_port), diff --git a/src/plugins/ioam/udp-ping/udp_ping_test.c b/src/plugins/ioam/udp-ping/udp_ping_test.c index d435b224476..84b878cffa7 100644 --- a/src/plugins/ioam/udp-ping/udp_ping_test.c +++ b/src/plugins/ioam/udp-ping/udp_ping_test.c @@ -24,20 +24,16 @@ #include <vppinfra/error.h> #include <vnet/ip/ip.h> +#include <vnet/format_fns.h> +#include <vnet/ip/ip_types_api.h> + +#define __plugin_msg_base udp_ping_test_main.msg_id_base +#include <vlibapi/vat_helper_macros.h> /* Declare message IDs */ #include <ioam/udp-ping/udp_ping.api_enum.h> #include <ioam/udp-ping/udp_ping.api_types.h> -#define vl_endianfun /* define message structures */ -#define vl_printfun -#define vl_print(handle, ...) -#define vl_api_version(n,v) static u32 api_version=(v); -#include <ioam/udp-ping/udp_ping.api.h> -#undef vl_endianfun -#undef vl_printfun -#undef vl_api_version - typedef struct { /* API message ID base */ @@ -47,79 +43,21 @@ typedef struct udp_ping_test_main_t udp_ping_test_main; -#define foreach_standard_reply_retval_handler \ -_(udp_ping_add_del_reply) \ -_(udp_ping_export_reply) - -#define _(n) \ - static void vl_api_##n##_t_handler \ - (vl_api_##n##_t * mp) \ - { \ - vat_main_t * vam = udp_ping_test_main.vat_main; \ - i32 retval = ntohl(mp->retval); \ - if (vam->async_mode) { \ - vam->async_errors += (retval < 0); \ - } else { \ - vam->retval = retval; \ - vam->result_ready = 1; \ - } \ - } -foreach_standard_reply_retval_handler; -#undef _ - -/* - * Table of message reply handlers, must include boilerplate handlers - * we just generated - */ -#define foreach_vpe_api_reply_msg \ -_(UDP_PING_ADD_DEL_REPLY, udp_ping_add_del_reply) \ -_(UDP_PING_EXPORT_REPLY, udp_ping_export_reply) \ - - -/* M: construct, but don't yet send a message */ - -#define M(T,t) \ -do { \ - vam->result_ready = 0; \ - mp = vl_msg_api_alloc(sizeof(*mp)); \ - clib_memset (mp, 0, sizeof (*mp)); \ - mp->_vl_msg_id = ntohs (VL_API_##T + sm->msg_id_base); \ - mp->client_index = vam->my_client_index; \ -} while(0); - -/* S: send a message */ -#define S (vl_msg_api_send_shmem (vam->vl_input_queue, (u8 *)&mp)) - -/* W: wait for results, with timeout */ -#define W \ -do { \ - timeout = vat_time_now (vam) + 5.0; \ - \ - while (vat_time_now (vam) < timeout) { \ - if (vam->result_ready == 1) { \ - return (vam->retval); \ - } \ - } \ - return -99; \ -} while(0); - static int api_udp_ping_add_del (vat_main_t * vam) { - udp_ping_test_main_t *sm = &udp_ping_test_main; unformat_input_t *input = vam->input; vl_api_udp_ping_add_del_t *mp; int rv = 0; - ip6_address_t dst, src; + ip46_address_t dst, src; u32 start_src_port, end_src_port; u32 start_dst_port, end_dst_port; u32 interval; u8 is_disable = 0; - f64 timeout; while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { - if (unformat (input, "src %U", unformat_ip6_address, &src)) + if (unformat (input, "src %U", unformat_ip46_address, &src)) ; else if (unformat (input, "start-src-port %d", &start_src_port)) ; @@ -129,7 +67,7 @@ api_udp_ping_add_del (vat_main_t * vam) ; else if (unformat (input, "end-dst-port %d", &end_dst_port)) ; - else if (unformat (input, "dst %U", unformat_ip6_address, &dst)) + else if (unformat (input, "dst %U", unformat_ip46_address, &dst)) ; else if (unformat (input, "interval %d", &interval)) ; @@ -139,20 +77,19 @@ api_udp_ping_add_del (vat_main_t * vam) break; } - M (UDP_PING_ADD_DEL, udp_ping_add); + M (UDP_PING_ADD_DEL, mp); - clib_memcpy (mp->src_ip_address, &src, 16); - clib_memcpy (mp->dst_ip_address, &dst, 16); + ip_address_encode (&src, IP46_TYPE_IP6, &mp->src_ip_address); + ip_address_encode (&dst, IP46_TYPE_IP6, &mp->dst_ip_address); mp->start_src_port = (u16) start_src_port; mp->end_src_port = (u16) end_src_port; mp->start_dst_port = (u16) start_dst_port; mp->end_dst_port = (u16) end_dst_port; mp->interval = (u16) interval; - mp->is_ipv4 = 0; mp->dis = is_disable; - S; - W; + S (mp); + W (rv); return (rv); } @@ -160,12 +97,10 @@ api_udp_ping_add_del (vat_main_t * vam) static int api_udp_ping_export (vat_main_t * vam) { - udp_ping_test_main_t *sm = &udp_ping_test_main; unformat_input_t *input = vam->input; vl_api_udp_ping_export_t *mp; int rv = 0; int is_add = 1; - f64 timeout; while (unformat_check_input (input) != UNFORMAT_END_OF_INPUT) { @@ -177,75 +112,19 @@ api_udp_ping_export (vat_main_t * vam) break; } - M (UDP_PING_EXPORT, udp_ping_export); + M (UDP_PING_EXPORT, mp); mp->enable = is_add; - S; - W; + S (mp); + W (rv); return (rv); } -/* - * List of messages that the api test plugin sends, - * and that the data plane plugin processes - */ -#define foreach_vpe_api_msg \ -_(udp_ping_add_del, "src <local IPv6 address> start-src-port <first local port> "\ - "end-src-port <last local port> " \ - "dst <remote IPv6 address> start-dst-port <first destination port> "\ - "end-dst-port <last destination port> "\ - "interval <time interval in sec for which ping packet will be sent> "\ - "[disable]") \ -_(udp_ping_export, "export [disable]") \ - - -static void -udp_ping_test_api_hookup (vat_main_t * vam) -{ - udp_ping_test_main_t *sm = &udp_ping_test_main; - /* Hook up handlers for replies from the data plane plug-in */ -#define _(N,n) \ - vl_msg_api_set_handlers((VL_API_##N + sm->msg_id_base), \ - #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_reply_msg; -#undef _ - - /* API messages we can send */ -#define _(n,h) hash_set_mem (vam->function_by_name, #n, api_##n); - foreach_vpe_api_msg; -#undef _ - - /* Help strings */ -#define _(n,h) hash_set_mem (vam->help_by_name, #n, h); - foreach_vpe_api_msg; -#undef _ -} - -clib_error_t * -udp_ping_vat_plugin_register (vat_main_t * vam) -{ - udp_ping_test_main_t *sm = &udp_ping_test_main; - u8 *name; - - sm->vat_main = vam; - - name = format (0, "udp_ping_%08x%c", api_version, 0); - sm->msg_id_base = vl_client_get_first_plugin_msg_id ((char *) name); - - if (sm->msg_id_base != (u16) ~ 0) - udp_ping_test_api_hookup (vam); - - vec_free (name); - - return 0; -} +/* Override generated plugin register symbol */ +#define vat_plugin_register udp_ping_vat_plugin_register +#include <ioam/udp-ping/udp_ping.api_test.c> /* * fd.io coding-style-patch-verification: ON |