From 0fa66d618e7d839782a896f75bc8b0337cc2a2b8 Mon Sep 17 00:00:00 2001 From: Ole Troan Date: Mon, 9 Dec 2019 14:25:09 +0100 Subject: ioam: use explicit api types Also remove API boilerplate. Type: fix Signed-off-by: Ole Troan Change-Id: I62e795f5af3843af7912707ade4ba178ff326942 --- src/plugins/ioam/udp-ping/udp_ping.api | 10 +- src/plugins/ioam/udp-ping/udp_ping_api.c | 12 +-- src/plugins/ioam/udp-ping/udp_ping_test.c | 159 ++++-------------------------- 3 files changed, 29 insertions(+), 152 deletions(-) (limited to 'src/plugins/ioam/udp-ping') 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 #include - +#include +#include /* define message IDs */ #include @@ -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 #include +#include +#include + +#define __plugin_msg_base udp_ping_test_main.msg_id_base +#include /* Declare message IDs */ #include #include -#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 -#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 start-src-port "\ - "end-src-port " \ - "dst start-dst-port "\ - "end-dst-port "\ - "interval