diff options
Diffstat (limited to 'src/plugins/rdma/api.c')
-rw-r--r-- | src/plugins/rdma/api.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/plugins/rdma/api.c b/src/plugins/rdma/api.c index 06e7385136f..7fe77105596 100644 --- a/src/plugins/rdma/api.c +++ b/src/plugins/rdma/api.c @@ -44,6 +44,69 @@ rdma_api_mode (vl_api_rdma_mode_t mode) return RDMA_MODE_AUTO; } +static rdma_rss4_t +rdma_api_rss4 (const vl_api_rdma_rss4_t rss4) +{ + switch (rss4) + { + case RDMA_API_RSS4_AUTO: + return RDMA_RSS4_AUTO; + case RDMA_API_RSS4_IP: + return RDMA_RSS4_IP; + case RDMA_API_RSS4_IP_UDP: + return RDMA_RSS4_IP_UDP; + case RDMA_API_RSS4_IP_TCP: + return RDMA_RSS4_IP_TCP; + } + return RDMA_RSS4_AUTO; +} + +static rdma_rss6_t +rdma_api_rss6 (const vl_api_rdma_rss6_t rss6) +{ + switch (rss6) + { + case RDMA_API_RSS6_AUTO: + return RDMA_RSS6_AUTO; + case RDMA_API_RSS6_IP: + return RDMA_RSS6_IP; + case RDMA_API_RSS6_IP_UDP: + return RDMA_RSS6_IP_UDP; + case RDMA_API_RSS6_IP_TCP: + return RDMA_RSS6_IP_TCP; + } + return RDMA_RSS6_AUTO; +} + +static void +vl_api_rdma_create_v3_t_handler (vl_api_rdma_create_v3_t *mp) +{ + vlib_main_t *vm = vlib_get_main (); + rdma_main_t *rm = &rdma_main; + vl_api_rdma_create_v3_reply_t *rmp; + rdma_create_if_args_t args; + int rv; + + clib_memset (&args, 0, sizeof (rdma_create_if_args_t)); + + args.ifname = mp->host_if; + args.name = mp->name; + args.rxq_num = ntohs (mp->rxq_num); + args.rxq_size = ntohs (mp->rxq_size); + args.txq_size = ntohs (mp->txq_size); + args.mode = rdma_api_mode (mp->mode); + args.disable_striding_rq = 0; + args.no_multi_seg = mp->no_multi_seg; + args.max_pktlen = ntohs (mp->max_pktlen); + args.rss4 = rdma_api_rss4 (mp->rss4); + args.rss6 = rdma_api_rss6 (mp->rss6); + rdma_create_if (vm, &args); + rv = args.rv; + + REPLY_MACRO2 (VL_API_RDMA_CREATE_V3_REPLY + rm->msg_id_base, + ({ rmp->sw_if_index = ntohl (args.sw_if_index); })); +} + static void vl_api_rdma_create_v2_t_handler (vl_api_rdma_create_v2_t * mp) { |