rdma: add rdma_create_v4 that handles flags properly
The _v3 was not handling endianness on flags (e.g. mode). Marking _v3 as deprecated, but keeping it as there might be users who learned to preprocess their flag values. + Also, format PCI product_name as a vector, not a string. Type: fix Change-Id: I50c4b44f3570f02518dbd9a43239c1a37612d24a Signed-off-by: Vratko Polak <vrpolak@cisco.com>
This commit is contained in:

committed by
Beno�t Ganne

parent
6d14c0cc5a
commit
04d262d1eb
@ -42,6 +42,8 @@ rdma_api_mode (vl_api_rdma_mode_t mode)
|
||||
case RDMA_API_MODE_DV:
|
||||
return RDMA_MODE_DV;
|
||||
}
|
||||
/* Fail the debug build. Useful for investigating endian issues. */
|
||||
ASSERT (0);
|
||||
return RDMA_MODE_AUTO;
|
||||
}
|
||||
|
||||
@ -79,6 +81,35 @@ rdma_api_rss6 (const vl_api_rdma_rss6_t rss6)
|
||||
return RDMA_RSS6_AUTO;
|
||||
}
|
||||
|
||||
static void
|
||||
vl_api_rdma_create_v4_t_handler (vl_api_rdma_create_v4_t *mp)
|
||||
{
|
||||
vlib_main_t *vm = vlib_get_main ();
|
||||
rdma_main_t *rm = &rdma_main;
|
||||
vl_api_rdma_create_v4_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 = mp->rxq_num;
|
||||
args.rxq_size = mp->rxq_size;
|
||||
args.txq_size = 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 = 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_END (VL_API_RDMA_CREATE_V4_REPLY,
|
||||
({ rmp->sw_if_index = args.sw_if_index; }));
|
||||
}
|
||||
|
||||
static void
|
||||
vl_api_rdma_create_v3_t_handler (vl_api_rdma_create_v3_t *mp)
|
||||
{
|
||||
|
@ -122,8 +122,8 @@ format_rdma_device (u8 * s, va_list * args)
|
||||
format_vlib_pci_addr, &rd->pci->addr);
|
||||
if ((d = vlib_pci_get_device_info (vm, &rd->pci->addr, 0)))
|
||||
{
|
||||
s = format (s, "%Uproduct name: %s\n", format_white_space, indent,
|
||||
d->product_name ? (char *) d->product_name : "");
|
||||
s = format (s, "%Uproduct name: %v\n", format_white_space, indent,
|
||||
d->product_name);
|
||||
s = format (s, "%Upart number: %U\n", format_white_space, indent,
|
||||
format_vlib_pci_vpd, d->vpd_r, "PN");
|
||||
s = format (s, "%Urevision: %U\n", format_white_space, indent,
|
||||
|
@ -98,6 +98,8 @@ enum rdma_rss6
|
||||
};
|
||||
|
||||
/** \brief
|
||||
Same as v4, just not an autoendian (expect buggy handling of flag values).
|
||||
|
||||
@param client_index - opaque cookie to identify the sender
|
||||
@param context - sender context, to match reply w/ request
|
||||
@param host_if - Linux netdev interface name
|
||||
@ -114,6 +116,9 @@ enum rdma_rss6
|
||||
|
||||
define rdma_create_v3
|
||||
{
|
||||
option deprecated;
|
||||
option replaced_by="rdma_create_v4";
|
||||
|
||||
u32 client_index;
|
||||
u32 context;
|
||||
|
||||
@ -130,6 +135,38 @@ define rdma_create_v3
|
||||
option vat_help = "<host-if ifname> [name <name>] [rx-queue-size <size>] [tx-queue-size <size>] [num-rx-queues <size>] [mode <auto|ibv|dv>] [no-multi-seg] [max-pktlen <size>] [rss <ipv4|ipv4-udp|ipv4-tcp>] [rss <ipv6|ipv6-udp|ipv6-tcp>]";
|
||||
};
|
||||
|
||||
/** \brief
|
||||
@param client_index - opaque cookie to identify the sender
|
||||
@param context - sender context, to match reply w/ request
|
||||
@param host_if - Linux netdev interface name
|
||||
@param name - new rdma interface name
|
||||
@param rxq_num - number of receive queues (optional)
|
||||
@param rxq_size - receive queue size (optional)
|
||||
@param txq_size - transmit queue size (optional)
|
||||
@param mode - operation mode (optional)
|
||||
@param no_multi_seg (optional) - disable chained buffer RX
|
||||
@param max_pktlen (optional) - maximal RX packet size.
|
||||
@param rss4 (optional) - IPv4 RSS
|
||||
@param rss6 (optional) - IPv6 RSS
|
||||
*/
|
||||
|
||||
autoendian define rdma_create_v4
|
||||
{
|
||||
u32 client_index;
|
||||
u32 context;
|
||||
|
||||
string host_if[64];
|
||||
string name[64];
|
||||
u16 rxq_num [default=1];
|
||||
u16 rxq_size [default=1024];
|
||||
u16 txq_size [default=1024];
|
||||
vl_api_rdma_mode_t mode [default=0];
|
||||
bool no_multi_seg [default=0];
|
||||
u16 max_pktlen [default=0];
|
||||
vl_api_rdma_rss4_t rss4 [default=0];
|
||||
vl_api_rdma_rss6_t rss6 [default=0];
|
||||
option vat_help = "<host-if ifname> [name <name>] [rx-queue-size <size>] [tx-queue-size <size>] [num-rx-queues <size>] [mode <auto|ibv|dv>] [no-multi-seg] [max-pktlen <size>] [rss <ipv4|ipv4-udp|ipv4-tcp>] [rss <ipv6|ipv6-udp|ipv6-tcp>]";
|
||||
};
|
||||
|
||||
/** \brief
|
||||
@param context - sender context, to match reply w/ request
|
||||
@ -180,6 +217,19 @@ define rdma_create_v3_reply
|
||||
@param sw_if_index - interface index
|
||||
*/
|
||||
|
||||
autoendian define rdma_create_v4_reply
|
||||
{
|
||||
u32 context;
|
||||
i32 retval;
|
||||
vl_api_interface_index_t sw_if_index;
|
||||
};
|
||||
|
||||
/** \brief
|
||||
@param client_index - opaque cookie to identify the sender
|
||||
@param context - sender context, to match reply w/ request
|
||||
@param sw_if_index - interface index
|
||||
*/
|
||||
|
||||
autoreply define rdma_delete
|
||||
{
|
||||
u32 client_index;
|
||||
|
@ -189,6 +189,41 @@ api_rdma_create_v3 (vat_main_t *vam)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
api_rdma_create_v4 (vat_main_t *vam)
|
||||
{
|
||||
vl_api_rdma_create_v4_t *mp;
|
||||
rdma_create_if_args_t args;
|
||||
int ret;
|
||||
|
||||
if (!unformat_user (vam->input, unformat_rdma_create_if_args, &args))
|
||||
{
|
||||
clib_warning ("unknown input `%U'", format_unformat_error, vam->input);
|
||||
return -99;
|
||||
}
|
||||
|
||||
M (RDMA_CREATE_V4, mp);
|
||||
|
||||
snprintf ((char *) mp->host_if, sizeof (mp->host_if), "%s", args.ifname);
|
||||
if (args.name)
|
||||
snprintf ((char *) mp->name, sizeof (mp->name), "%s", args.name);
|
||||
else
|
||||
mp->name[0] = 0;
|
||||
mp->rxq_num = args.rxq_num;
|
||||
mp->rxq_size = args.rxq_size;
|
||||
mp->txq_size = args.txq_size;
|
||||
mp->mode = api_rdma_mode (args.mode);
|
||||
mp->no_multi_seg = args.no_multi_seg;
|
||||
mp->max_pktlen = args.max_pktlen;
|
||||
mp->rss4 = api_rdma_rss4 (args.rss4);
|
||||
mp->rss6 = api_rdma_rss6 (args.rss6);
|
||||
|
||||
S (mp);
|
||||
W (ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* rdma-create reply handler */
|
||||
static void
|
||||
vl_api_rdma_create_reply_t_handler (vl_api_rdma_create_reply_t * mp)
|
||||
@ -243,6 +278,24 @@ vl_api_rdma_create_v3_reply_t_handler (vl_api_rdma_create_v3_reply_t *mp)
|
||||
vam->regenerate_interface_table = 1;
|
||||
}
|
||||
|
||||
/* rdma-create reply handler v4 */
|
||||
static void
|
||||
vl_api_rdma_create_v4_reply_t_handler (vl_api_rdma_create_v4_reply_t *mp)
|
||||
{
|
||||
vat_main_t *vam = rdma_test_main.vat_main;
|
||||
i32 retval = mp->retval;
|
||||
|
||||
if (retval == 0)
|
||||
{
|
||||
fformat (vam->ofp, "created rdma with sw_if_index %d\n",
|
||||
ntohl (mp->sw_if_index));
|
||||
}
|
||||
|
||||
vam->retval = retval;
|
||||
vam->result_ready = 1;
|
||||
vam->regenerate_interface_table = 1;
|
||||
}
|
||||
|
||||
/* rdma delete API */
|
||||
static int
|
||||
api_rdma_delete (vat_main_t * vam)
|
||||
|
Reference in New Issue
Block a user