X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fmactime%2Fmactime_test.c;h=8d87e788b7a9c731c92aa491410e9613cadc9a9e;hb=7071952df;hp=309b101bad97adeefd0278d6cf88d479fc40c0f0;hpb=571ab20d1da227fb66d52ed52cce0cbd4591e1c9;p=vpp.git diff --git a/src/plugins/mactime/mactime_test.c b/src/plugins/mactime/mactime_test.c index 309b101bad9..8d87e788b7a 100644 --- a/src/plugins/mactime/mactime_test.c +++ b/src/plugins/mactime/mactime_test.c @@ -24,29 +24,8 @@ uword vat_unformat_sw_if_index (unformat_input_t * input, va_list * args); /* Declare message IDs */ -#include - -/* define message structures */ -#define vl_typedefs -#include -#undef vl_typedefs - -/* declare message handlers for each api */ - -#define vl_endianfun /* define message structures */ -#include -#undef vl_endianfun - -/* instantiate all the print functions we know about */ -#define vl_print(handle, ...) -#define vl_printfun -#include -#undef vl_printfun - -/* Get the API version number. */ -#define vl_api_version(n,v) static u32 api_version=(v); -#include -#undef vl_api_version +#include +#include typedef struct { @@ -60,34 +39,6 @@ mactime_test_main_t mactime_test_main; #define __plugin_msg_base mactime_test_main.msg_id_base #include -#define foreach_standard_reply_retval_handler \ -_(mactime_enable_disable_reply) \ -_(mactime_add_del_range_reply) - -#define _(n) \ - static void vl_api_##n##_t_handler \ - (vl_api_##n##_t * mp) \ - { \ - vat_main_t * vam = mactime_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 \ -_(MACTIME_ENABLE_DISABLE_REPLY, mactime_enable_disable_reply) \ -_(MACTIME_ADD_DEL_RANGE_REPLY, mactime_add_del_range_reply) - static int api_mactime_enable_disable (vat_main_t * vam) { @@ -129,6 +80,23 @@ api_mactime_enable_disable (vat_main_t * vam) return ret; } +/* These two ought to be in a library somewhere but they aren't */ +static uword +my_unformat_mac_address (unformat_input_t * input, va_list * args) +{ + u8 *a = va_arg (*args, u8 *); + return unformat (input, "%x:%x:%x:%x:%x:%x", &a[0], &a[1], &a[2], &a[3], + &a[4], &a[5]); +} + +static u8 * +my_format_mac_address (u8 * s, va_list * args) +{ + u8 *a = va_arg (*args, u8 *); + return format (s, "%02x:%02x:%02x:%02x:%02x:%02x", + a[0], a[1], a[2], a[3], a[4], a[5]); +} + static int api_mactime_add_del_range (vat_main_t * vam) { @@ -141,7 +109,10 @@ api_mactime_add_del_range (vat_main_t * vam) int mac_set = 0; u8 is_add = 1; u8 allow = 0; + u8 allow_quota = 0; u8 drop = 0; + u8 no_udp_10001 = 0; + u64 data_quota = 0; int ret; int ii; @@ -156,6 +127,9 @@ api_mactime_add_del_range (vat_main_t * vam) else if (unformat (i, "allow-range %U", unformat_clib_timebase_range_vector, &rp)) allow = 1; + else if (unformat (i, "allow-quota-range %U", + unformat_clib_timebase_range_vector, &rp)) + allow_quota = 1; else if (unformat (i, "drop-range %U", unformat_clib_timebase_range_vector, &rp)) drop = 1; @@ -163,10 +137,16 @@ api_mactime_add_del_range (vat_main_t * vam) allow = 1; else if (unformat (i, "drop-static")) drop = 1; - else if (unformat (i, "mac %U", unformat_mac_address, mac_address)) + else if (unformat (i, "no-udp-10001")) + no_udp_10001 = 1; + else if (unformat (i, "mac %U", my_unformat_mac_address, mac_address)) mac_set = 1; else if (unformat (i, "del")) is_add = 0; + else if (unformat (i, "data-quota %lldM", &data_quota)) + data_quota <<= 20; + else if (unformat (i, "data-quota %lldG", &data_quota)) + data_quota <<= 30; else break; } @@ -181,11 +161,12 @@ api_mactime_add_del_range (vat_main_t * vam) } /* allow-range / drop-range parse errors cause this condition */ - if (is_add && allow == 0 && drop == 0) + if (is_add && allow == 0 && drop == 0 && allow_quota == 0) { vec_free (rp); vec_free (device_name); - errmsg ("neither allow nor drop set, parse error...\n"); + errmsg ("parse error...\n"); + return -99; } /* Unlikely, but check anyhow */ @@ -200,7 +181,7 @@ api_mactime_add_del_range (vat_main_t * vam) /* Cough up a device name if none set */ if (name_set == 0) { - device_name = format (0, "mac %U%c", format_mac_address, + device_name = format (0, "mac %U%c", my_format_mac_address, mac_address, 0); } @@ -209,6 +190,9 @@ api_mactime_add_del_range (vat_main_t * vam) mp->is_add = is_add; mp->drop = drop; mp->allow = allow; + mp->allow_quota = allow_quota; + mp->no_udp_10001 = no_udp_10001; + mp->data_quota = clib_host_to_net_u64 (data_quota); memcpy (mp->mac_address, mac_address, sizeof (mp->mac_address)); memcpy (mp->device_name, device_name, vec_len (device_name)); mp->count = clib_host_to_net_u32 (vec_len (rp)); @@ -230,62 +214,7 @@ api_mactime_add_del_range (vat_main_t * vam) return ret; } -/* - * List of messages that the api test plugin sends, - * and that the data plane plugin processes - */ -#define foreach_vpe_api_msg \ -_(mactime_enable_disable, " [disable]") \ -_(mactime_add_del_range, \ - "name mac allow drop\n" \ - "allow-range Mon - Fri 9:00 - 17:00") - -static void -mactime_api_hookup (vat_main_t * vam) -{ - mactime_test_main_t *sm = &mactime_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 * -vat_plugin_register (vat_main_t * vam) -{ - mactime_test_main_t *sm = &mactime_test_main; - u8 *name; - - sm->vat_main = vam; - - /* Ask the vpp engine for the first assigned message-id */ - name = format (0, "mactime_%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) - mactime_api_hookup (vam); - - vec_free (name); - - return 0; -} +#include /* * fd.io coding-style-patch-verification: ON