aboutsummaryrefslogtreecommitdiffstats
path: root/vnet/vnet/devices/dpdk/init.c
diff options
context:
space:
mode:
authorDamjan Marion <damarion@cisco.com>2016-05-25 18:40:13 +0200
committerDamjan Marion <damarion@cisco.com>2016-05-25 18:45:07 +0200
commit64ae66903847cff20f0752caa7796b02e2fcec23 (patch)
treeffc75a1b749eb2a7caf9fd358e04b8cbb68b6564 /vnet/vnet/devices/dpdk/init.c
parent94e34764b46a2babcaea6b309158524a7c1bb632 (diff)
Move dpdk startup config data to separate struct
This is preparation work for moving DPDK EAL and mempool initialization to vlib. Change-Id: I2dc35aa53edec0e07fc2650d630aa625831154c3 Signed-off-by: Damjan Marion <damarion@cisco.com>
Diffstat (limited to 'vnet/vnet/devices/dpdk/init.c')
-rw-r--r--vnet/vnet/devices/dpdk/init.c182
1 files changed, 92 insertions, 90 deletions
diff --git a/vnet/vnet/devices/dpdk/init.c b/vnet/vnet/devices/dpdk/init.c
index 8ee59ff8327..fac7e9acfeb 100644
--- a/vnet/vnet/devices/dpdk/init.c
+++ b/vnet/vnet/devices/dpdk/init.c
@@ -296,6 +296,10 @@ dpdk_lib_init (dpdk_main_t * dm)
vlib_buffer_get_or_create_free_list (
vm, VLIB_BUFFER_DEFAULT_FREE_LIST_BYTES, "dpdk rx");
+ if (dm->conf->enable_tcp_udp_checksum)
+ dm->buffer_flags_template &= ~(IP_BUFFER_L4_CHECKSUM_CORRECT
+ | IP_BUFFER_L4_CHECKSUM_COMPUTED);
+
for (i = 0; i < nports; i++)
{
u8 addr[6];
@@ -313,7 +317,7 @@ dpdk_lib_init (dpdk_main_t * dm)
clib_memcpy(&xd->tx_conf, &dev_info.default_txconf,
sizeof(struct rte_eth_txconf));
- if (dm->no_multi_seg)
+ if (dm->conf->no_multi_seg)
{
xd->tx_conf.txq_flags |= ETH_TXQ_FLAGS_NOMULTSEGS;
port_conf_template.rxmode.jumbo_frame = 0;
@@ -328,12 +332,12 @@ dpdk_lib_init (dpdk_main_t * dm)
xd->tx_q_used = clib_min(dev_info.max_tx_queues, tm->n_vlib_mains);
- if (dm->max_tx_queues)
- xd->tx_q_used = clib_min(xd->tx_q_used, dm->max_tx_queues);
+ if (dm->conf->max_tx_queues)
+ xd->tx_q_used = clib_min(xd->tx_q_used, dm->conf->max_tx_queues);
- if (dm->use_rss > 1 && dev_info.max_rx_queues >= dm->use_rss)
+ if (dm->conf->use_rss > 1 && dev_info.max_rx_queues >= dm->conf->use_rss)
{
- xd->rx_q_used = dm->use_rss;
+ xd->rx_q_used = dm->conf->use_rss;
xd->port_conf.rxmode.mq_mode = ETH_MQ_RX_RSS;
xd->port_conf.rx_adv_conf.rss_conf.rss_hf = ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP;
}
@@ -652,10 +656,10 @@ dpdk_lib_init (dpdk_main_t * dm)
}
#ifdef RTE_LIBRTE_KNI
- if (dm->num_kni) {
+ if (dm->conf->num_kni) {
clib_warning("Initializing KNI interfaces...");
- rte_kni_init(dm->num_kni);
- for (i = 0; i < dm->num_kni; i++)
+ rte_kni_init(dm->conf->num_kni);
+ for (i = 0; i < dm->conf->num_kni; i++)
{
u8 addr[6];
int j;
@@ -730,9 +734,9 @@ dpdk_lib_init (dpdk_main_t * dm)
}
#endif
- if (nb_desc > dm->num_mbufs)
+ if (nb_desc > dm->conf->num_mbufs)
clib_warning ("%d mbufs allocated but total rx/tx ring size is %d\n",
- dm->num_mbufs, nb_desc);
+ dm->conf->num_mbufs, nb_desc);
/* init next vhost-user if index */
dm->next_vu_if_id = 0;
@@ -741,7 +745,7 @@ dpdk_lib_init (dpdk_main_t * dm)
}
static void
-dpdk_bind_devices_to_uio (dpdk_main_t * dm)
+dpdk_bind_devices_to_uio (dpdk_config_main_t * conf)
{
vlib_pci_main_t * pm = &pci_main;
clib_error_t * error;
@@ -758,8 +762,8 @@ dpdk_bind_devices_to_uio (dpdk_main_t * dm)
continue;
/* if whitelist exists process only whitelisted devices */
- if (dm->eth_if_whitelist &&
- !strstr ((char *) dm->eth_if_whitelist, (char *) pci_addr))
+ if (conf->eth_if_whitelist &&
+ !strstr ((char *) conf->eth_if_whitelist, (char *) pci_addr))
continue;
/* virtio */
@@ -785,13 +789,13 @@ dpdk_bind_devices_to_uio (dpdk_main_t * dm)
continue;
}
- error = vlib_pci_bind_to_uio (d, (char *) dm->uio_driver_name);
+ error = vlib_pci_bind_to_uio (d, (char *) conf->uio_driver_name);
if (error)
{
- if (!dm->eth_if_whitelist)
- dm->eth_if_blacklist = format (dm->eth_if_blacklist, "%U ",
- format_vlib_pci_addr, &d->bus_address);
+ if (!conf->eth_if_whitelist)
+ conf->eth_if_blacklist = format (conf->eth_if_blacklist, "%U ",
+ format_vlib_pci_addr, &d->bus_address);
clib_error_report (error);
}
}));
@@ -802,7 +806,7 @@ static clib_error_t *
dpdk_config (vlib_main_t * vm, unformat_input_t * input)
{
clib_error_t * error = 0;
- dpdk_main_t * dm = &dpdk_main;
+ dpdk_config_main_t * conf = &dpdk_config_main;
vlib_thread_main_t * tm = vlib_get_thread_main();
vlib_node_runtime_t * rt = vlib_node_get_runtime (vm, dpdk_input_node.index);
u8 * s, * tmp = 0;
@@ -824,45 +828,42 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
u8 * socket_mem = 0;
// MATT-FIXME: inverted virtio-vhost logic to use virtio by default
- dm->use_virtio_vhost = 1;
+ conf->use_virtio_vhost = 1;
while (unformat_check_input(input) != UNFORMAT_END_OF_INPUT)
{
/* Prime the pump */
if (unformat (input, "no-hugetlb"))
{
- vec_add1 (dm->eal_init_args, (u8 *) "no-huge");
+ vec_add1 (conf->eal_init_args, (u8 *) "no-huge");
no_huge = 1;
}
else if (unformat (input, "enable-tcp-udp-checksum"))
- {
- dm->buffer_flags_template &=
- ~(IP_BUFFER_L4_CHECKSUM_CORRECT | IP_BUFFER_L4_CHECKSUM_COMPUTED);
- }
+ conf->enable_tcp_udp_checksum = 1;
else if (unformat (input, "decimal-interface-names"))
- dm->interface_name_format_decimal = 1;
+ conf->interface_name_format_decimal = 1;
else if (unformat (input, "no-multi-seg"))
- dm->no_multi_seg = 1;
+ conf->no_multi_seg = 1;
else if (unformat (input, "dev %s", &pci_dev_id))
{
- if (dm->eth_if_whitelist)
+ if (conf->eth_if_whitelist)
{
/*
* Don't add duplicate device id's.
*/
- if (strstr ((char *)dm->eth_if_whitelist, (char *)pci_dev_id))
+ if (strstr ((char *)conf->eth_if_whitelist, (char *)pci_dev_id))
continue;
- _vec_len (dm->eth_if_whitelist) -= 1; // chomp trailing NULL.
- dm->eth_if_whitelist = format (dm->eth_if_whitelist, " %s%c",
- pci_dev_id, 0);
+ _vec_len (conf->eth_if_whitelist) -= 1; // chomp trailing NULL.
+ conf->eth_if_whitelist = format (conf->eth_if_whitelist, " %s%c",
+ pci_dev_id, 0);
}
else
- dm->eth_if_whitelist = format (0, "%s%c", pci_dev_id, 0);
+ conf->eth_if_whitelist = format (0, "%s%c", pci_dev_id, 0);
}
#ifdef NETMAP
@@ -886,23 +887,23 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
}
#endif
- else if (unformat (input, "num-mbufs %d", &dm->num_mbufs))
+ else if (unformat (input, "num-mbufs %d", &conf->num_mbufs))
;
- else if (unformat (input, "max-tx-queues %d", &dm->max_tx_queues))
+ else if (unformat (input, "max-tx-queues %d", &conf->max_tx_queues))
;
- else if (unformat (input, "kni %d", &dm->num_kni))
+ else if (unformat (input, "kni %d", &conf->num_kni))
;
- else if (unformat (input, "uio-driver %s", &dm->uio_driver_name))
+ else if (unformat (input, "uio-driver %s", &conf->uio_driver_name))
;
else if (unformat (input, "socket-mem %s", &socket_mem))
;
- else if (unformat (input, "vhost-user-coalesce-frames %d", &dm->vhost_coalesce_frames))
+ else if (unformat (input, "vhost-user-coalesce-frames %d", &conf->vhost_coalesce_frames))
;
- else if (unformat (input, "vhost-user-coalesce-time %f", &dm->vhost_coalesce_time))
+ else if (unformat (input, "vhost-user-coalesce-time %f", &conf->vhost_coalesce_time))
;
else if (unformat (input, "enable-vhost-user"))
- dm->use_virtio_vhost = 0;
- else if (unformat (input, "rss %d", &dm->use_rss))
+ conf->use_virtio_vhost = 0;
+ else if (unformat (input, "rss %d", &conf->use_rss))
;
#define _(a) \
@@ -911,7 +912,7 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
if (!strncmp(#a, "no-pci", 6)) \
no_pci = 1; \
tmp = format (0, "--%s%c", #a, 0); \
- vec_add1 (dm->eal_init_args, tmp); \
+ vec_add1 (conf->eal_init_args, tmp); \
}
foreach_eal_double_hyphen_predicate_arg
#undef _
@@ -924,9 +925,9 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
else if (!strncmp(#a, "file-prefix", 11)) \
file_prefix = 1; \
tmp = format (0, "--%s%c", #a, 0); \
- vec_add1 (dm->eal_init_args, tmp); \
+ vec_add1 (conf->eal_init_args, tmp); \
vec_add1 (s, 0); \
- vec_add1 (dm->eal_init_args, s); \
+ vec_add1 (conf->eal_init_args, s); \
}
foreach_eal_double_hyphen_arg
#undef _
@@ -935,9 +936,9 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
else if (unformat(input, #a " %s", &s)) \
{ \
tmp = format (0, "-%s%c", #b, 0); \
- vec_add1 (dm->eal_init_args, tmp); \
+ vec_add1 (conf->eal_init_args, tmp); \
vec_add1 (s, 0); \
- vec_add1 (dm->eal_init_args, s); \
+ vec_add1 (conf->eal_init_args, s); \
}
foreach_eal_single_hyphen_arg
#undef _
@@ -946,10 +947,10 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
else if (unformat(input, #a " %s", &s)) \
{ \
tmp = format (0, "-%s%c", #b, 0); \
- vec_add1 (dm->eal_init_args, tmp); \
+ vec_add1 (conf->eal_init_args, tmp); \
vec_add1 (s, 0); \
- vec_add1 (dm->eal_init_args, s); \
- dm->a##_set_manually = 1; \
+ vec_add1 (conf->eal_init_args, s); \
+ conf->a##_set_manually = 1; \
}
foreach_eal_single_hyphen_mandatory_arg
#undef _
@@ -965,8 +966,8 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
}
}
- if (!dm->uio_driver_name)
- dm->uio_driver_name = format (0, "igb_uio%c", 0);
+ if (!conf->uio_driver_name)
+ conf->uio_driver_name = format (0, "igb_uio%c", 0);
/*
* Use 1G huge pages if available.
@@ -1116,15 +1117,15 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
}
tmp = format (0, "--huge-dir%c", 0);
- vec_add1 (dm->eal_init_args, tmp);
+ vec_add1 (conf->eal_init_args, tmp);
tmp = format (0, "%s%c", DEFAULT_HUGE_DIR, 0);
- vec_add1 (dm->eal_init_args, tmp);
+ vec_add1 (conf->eal_init_args, tmp);
if (!file_prefix)
{
tmp = format (0, "--file-prefix%c", 0);
- vec_add1 (dm->eal_init_args, tmp);
+ vec_add1 (conf->eal_init_args, tmp);
tmp = format (0, "vpp%c", 0);
- vec_add1 (dm->eal_init_args, tmp);
+ vec_add1 (conf->eal_init_args, tmp);
}
}
@@ -1135,7 +1136,7 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
return error;
/* I'll bet that -c and -n must be the first and second args... */
- if (!dm->coremask_set_manually)
+ if (!conf->coremask_set_manually)
{
vlib_thread_registration_t * tr;
uword * coremask = 0;
@@ -1150,32 +1151,32 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
coremask = clib_bitmap_or(coremask, tr->coremask);
}
- vec_insert (dm->eal_init_args, 2, 1);
- dm->eal_init_args[1] = (u8 *) "-c";
+ vec_insert (conf->eal_init_args, 2, 1);
+ conf->eal_init_args[1] = (u8 *) "-c";
tmp = format (0, "%U%c", format_bitmap_hex, coremask, 0);
- dm->eal_init_args[2] = tmp;
+ conf->eal_init_args[2] = tmp;
clib_bitmap_free(coremask);
}
- if (!dm->nchannels_set_manually)
+ if (!conf->nchannels_set_manually)
{
- vec_insert (dm->eal_init_args, 2, 3);
- dm->eal_init_args[3] = (u8 *) "-n";
- tmp = format (0, "%d", dm->nchannels);
- dm->eal_init_args[4] = tmp;
+ vec_insert (conf->eal_init_args, 2, 3);
+ conf->eal_init_args[3] = (u8 *) "-n";
+ tmp = format (0, "%d", conf->nchannels);
+ conf->eal_init_args[4] = tmp;
}
if (no_pci == 0 && geteuid() == 0)
- dpdk_bind_devices_to_uio(dm);
+ dpdk_bind_devices_to_uio(conf);
/*
* If there are whitelisted devices,
* add the whitelist option & device list to the dpdk arg list...
*/
- if (dm->eth_if_whitelist)
+ if (conf->eth_if_whitelist)
{
- unformat_init_string (in, (char *)dm->eth_if_whitelist,
- vec_len(dm->eth_if_whitelist) - 1);
+ unformat_init_string (in, (char *) conf->eth_if_whitelist,
+ vec_len (conf->eth_if_whitelist) - 1);
fmt = "-w%c";
}
@@ -1184,34 +1185,34 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
*/
else
{
- unformat_init_string (in, (char *)dm->eth_if_blacklist,
- vec_len(dm->eth_if_blacklist) - 1);
+ unformat_init_string (in, (char *)conf->eth_if_blacklist,
+ vec_len(conf->eth_if_blacklist) - 1);
fmt = "-b%c";
}
while (unformat_check_input (in) != UNFORMAT_END_OF_INPUT)
{
tmp = format (0, fmt, 0);
- vec_add1 (dm->eal_init_args, tmp);
+ vec_add1 (conf->eal_init_args, tmp);
unformat (in, "%s", &pci_dev_id);
- vec_add1 (dm->eal_init_args, pci_dev_id);
+ vec_add1 (conf->eal_init_args, pci_dev_id);
}
/* set master-lcore */
tmp = format (0, "--master-lcore%c", 0);
- vec_add1 (dm->eal_init_args, tmp);
+ vec_add1 (conf->eal_init_args, tmp);
tmp = format (0, "%u%c", tm->main_lcore, 0);
- vec_add1 (dm->eal_init_args, tmp);
+ vec_add1 (conf->eal_init_args, tmp);
/* set socket-mem */
tmp = format (0, "--socket-mem%c", 0);
- vec_add1 (dm->eal_init_args, tmp);
+ vec_add1 (conf->eal_init_args, tmp);
tmp = format (0, "%s%c", socket_mem, 0);
- vec_add1 (dm->eal_init_args, tmp);
+ vec_add1 (conf->eal_init_args, tmp);
/* NULL terminate the "argv" vector, in case of stupidity */
- vec_add1 (dm->eal_init_args, 0);
- _vec_len(dm->eal_init_args) -= 1;
+ vec_add1 (conf->eal_init_args, 0);
+ _vec_len(conf->eal_init_args) -= 1;
/* Set up DPDK eal and packet mbuf pool early. */
@@ -1219,14 +1220,14 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
rte_set_log_level (log_level);
- vm = dm->vlib_main;
+ vm = vlib_get_main ();
/* make copy of args as rte_eal_init tends to mess up with arg array */
- for (i = 1; i < vec_len(dm->eal_init_args); i++)
- dm->eal_init_args_str = format(dm->eal_init_args_str, "%s ",
- dm->eal_init_args[i]);
+ for (i = 1; i < vec_len(conf->eal_init_args); i++)
+ conf->eal_init_args_str = format(conf->eal_init_args_str, "%s ",
+ conf->eal_init_args[i]);
- ret = rte_eal_init(vec_len(dm->eal_init_args), (char **) dm->eal_init_args);
+ ret = rte_eal_init(vec_len(conf->eal_init_args), (char **) conf->eal_init_args);
/* lazy umount hugepages */
umount2(DEFAULT_HUGE_DIR, MNT_DETACH);
@@ -1239,19 +1240,19 @@ dpdk_config (vlib_main_t * vm, unformat_input_t * input)
rte_dump_physmem_layout(stdout);
/* main thread 1st */
- error = vlib_buffer_pool_create(vm, dm->num_mbufs, rte_socket_id());
+ error = vlib_buffer_pool_create(vm, conf->num_mbufs, rte_socket_id());
if (error)
return error;
for (i = 0; i < RTE_MAX_LCORE; i++)
{
- error = vlib_buffer_pool_create(vm, dm->num_mbufs,
+ error = vlib_buffer_pool_create(vm, conf->num_mbufs,
rte_lcore_to_socket_id(i));
if (error)
return error;
}
- if (dm->use_rss)
+ if (conf->use_rss)
rt->function = dpdk_input_rss_multiarch_select();
else
rt->function = dpdk_input_multiarch_select();
@@ -1586,6 +1587,7 @@ dpdk_init (vlib_main_t * vm)
dm->vlib_main = vm;
dm->vnet_main = vnet_get_main();
+ dm->conf = &dpdk_config_main;
ei = vlib_get_node_by_name (vm, (u8 *) "ethernet-input");
if (ei == 0)
@@ -1593,9 +1595,9 @@ dpdk_init (vlib_main_t * vm)
dm->ethernet_input_node_index = ei->index;
- dm->nchannels = 4;
- dm->num_mbufs = dm->num_mbufs ? dm->num_mbufs : NB_MBUF;
- vec_add1 (dm->eal_init_args, (u8 *) "vnet");
+ dm->conf->nchannels = 4;
+ dm->conf->num_mbufs = dm->conf->num_mbufs ? dm->conf->num_mbufs : NB_MBUF;
+ vec_add1 (dm->conf->eal_init_args, (u8 *) "vnet");
dm->dpdk_device_by_kni_port_id = hash_create (0, sizeof (uword));
dm->vu_sw_if_index_by_listener_fd = hash_create (0, sizeof (uword));
@@ -1612,8 +1614,8 @@ dpdk_init (vlib_main_t * vm)
DPDK_EFD_DEFAULT_CONSEC_FULL_FRAMES_HI_THRESH;
/* vhost-user coalescence frames defaults */
- dm->vhost_coalesce_frames = 32;
- dm->vhost_coalesce_time = 1e-3;
+ dm->conf->vhost_coalesce_frames = 32;
+ dm->conf->vhost_coalesce_time = 1e-3;
/* Default vlib_buffer_t flags, DISABLES tcp/udp checksumming... */
dm->buffer_flags_template =