summaryrefslogtreecommitdiffstats
path: root/src/plugins/rdma/api.c
diff options
context:
space:
mode:
authorBenoît Ganne <bganne@cisco.com>2021-03-17 14:41:33 +0100
committerDamjan Marion <dmarion@me.com>2021-05-04 07:23:03 +0000
commitf5a45680ee1c9c586ab2b037e3d71354789e4403 (patch)
tree81cc137d27befc7802efccd91aa6728c627f9064 /src/plugins/rdma/api.c
parentee60ac638c9abcd0763c57fce0e3e646723ea0e0 (diff)
rdma: add support for RSS configuration
Type: feature Change-Id: I911ee94b624ef5edf46b34666597eff93df1d1ed Signed-off-by: Benoît Ganne <bganne@cisco.com>
Diffstat (limited to 'src/plugins/rdma/api.c')
-rw-r--r--src/plugins/rdma/api.c63
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)
{