diff options
author | arikachen <eaglesora@gmail.com> | 2021-11-12 06:40:55 +0000 |
---|---|---|
committer | Beno�t Ganne <bganne@cisco.com> | 2021-11-18 16:56:22 +0000 |
commit | 57bdb26ba42c3fc6da601d007b27fa5c3f09dd96 (patch) | |
tree | a5f4a9f29bff156a974139416ee75e3a69c867e9 /src/plugins/af_xdp/test_api.c | |
parent | ef048034be365ba312e37e0fd19c22414f4e6434 (diff) |
af_xdp: introduce to netns api
In some situation, we support to deploy vpp as per host
and handler packet in container, so we use xdp to redirect
the flow.
Type: improvement
Signed-off-by: arikachen <eaglesora@gmail.com>
Change-Id: Iab42d6a0abb2b330a284d519018a90aff2fa4371
Diffstat (limited to 'src/plugins/af_xdp/test_api.c')
-rw-r--r-- | src/plugins/af_xdp/test_api.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/plugins/af_xdp/test_api.c b/src/plugins/af_xdp/test_api.c index 6dffa29bdd1..46ba6f100ee 100644 --- a/src/plugins/af_xdp/test_api.c +++ b/src/plugins/af_xdp/test_api.c @@ -91,6 +91,41 @@ api_af_xdp_create (vat_main_t * vam) return ret; } +/* af_xdp create v2 API */ +static int +api_af_xdp_create_v2 (vat_main_t *vam) +{ + vl_api_af_xdp_create_v2_t *mp; + af_xdp_create_if_args_t args; + int ret; + + if (!unformat_user (vam->input, unformat_af_xdp_create_if_args, &args)) + { + clib_warning ("unknown input `%U'", format_unformat_error, vam->input); + return -99; + } + + M (AF_XDP_CREATE, mp); + + snprintf ((char *) mp->host_if, sizeof (mp->host_if), "%s", + args.linux_ifname ?: ""); + snprintf ((char *) mp->name, sizeof (mp->name), "%s", args.name ?: ""); + snprintf ((char *) mp->namespace, sizeof (mp->namespace), "%s", + args.netns ?: ""); + mp->rxq_num = clib_host_to_net_u16 (args.rxq_num); + mp->rxq_size = clib_host_to_net_u16 (args.rxq_size); + mp->txq_size = clib_host_to_net_u16 (args.txq_size); + mp->mode = api_af_xdp_mode (args.mode); + if (args.flags & AF_XDP_CREATE_FLAGS_NO_SYSCALL_LOCK) + mp->flags |= AF_XDP_API_FLAGS_NO_SYSCALL_LOCK; + snprintf ((char *) mp->prog, sizeof (mp->prog), "%s", args.prog ?: ""); + + S (mp); + W (ret); + + return ret; +} + /* af_xdp-create reply handler */ static void vl_api_af_xdp_create_reply_t_handler (vl_api_af_xdp_create_reply_t * mp) @@ -109,6 +144,24 @@ vl_api_af_xdp_create_reply_t_handler (vl_api_af_xdp_create_reply_t * mp) vam->regenerate_interface_table = 1; } +/* af_xdp-create v2 reply handler */ +static void +vl_api_af_xdp_create_v2_reply_t_handler (vl_api_af_xdp_create_v2_reply_t *mp) +{ + vat_main_t *vam = af_xdp_test_main.vat_main; + i32 retval = ntohl (mp->retval); + + if (retval == 0) + { + fformat (vam->ofp, "created af_xdp with sw_if_index %d\n", + ntohl (mp->sw_if_index)); + } + + vam->retval = retval; + vam->result_ready = 1; + vam->regenerate_interface_table = 1; +} + /* af_xdp delete API */ static int api_af_xdp_delete (vat_main_t * vam) |