@@ -152,6 +152,12 @@ where,
* [no-]mac-updating: Enable or disable MAC addresses updating (enabled by default).
+* mp-emask: mask applicable for multiprocess, defining the ethernet ports
+ which would be used by this instance. (Default is all ports).
+
+* mp-cmask: mask applicable for multiprocess, defining the crypto ports
+ which would be used by this instance. (Default is all ports).
+
The application requires that crypto devices capable of performing
the specified crypto operation are available on application initialization.
@@ -168,6 +168,8 @@ struct l2fwd_crypto_options {
uint64_t cryptodev_mask;
unsigned int mac_updating;
+ uint64_t mp_emask;
+ uint64_t mp_cmask;
};
/** l2fwd crypto lcore params */
@@ -254,6 +256,9 @@ struct l2fwd_crypto_statistics crypto_statistics[RTE_CRYPTO_MAX_DEVS];
/* default period is 10 seconds */
static int64_t timer_period = 10 * TIMER_MILLISECOND * 1000;
+/* Process type*/
+static enum rte_proc_type_t proc_type = RTE_PROC_AUTO;
+
/* Print out statistics on packets dropped */
static void
print_stats(void)
@@ -994,7 +999,11 @@ l2fwd_crypto_usage(const char *prgname)
" --[no-]mac-updating: Enable or disable MAC addresses updating (enabled by default)\n"
" When enabled:\n"
" - The source MAC address is replaced by the TX port MAC address\n"
- " - The destination MAC address is replaced by 02:00:00:00:00:TX_PORT_ID\n",
+ " - The destination MAC address is replaced by 02:00:00:00:00:TX_PORT_ID\n"
+ " --mp-emask: mask applicable for multiprocess, defining the ethernet ports\n"
+ " which would be used by this instance. Default is all ports\n"
+ " --mp-cmask: mask applicable for multiprocess, defining the crypto ports\n"
+ " which would be used by this instance. Default is all ports\n",
prgname);
}
@@ -1169,8 +1178,7 @@ parse_aead_op(enum rte_crypto_aead_operation *op, char *optarg)
return -1;
}
static int
-parse_cryptodev_mask(struct l2fwd_crypto_options *options,
- const char *q_arg)
+parse_mask(uint64_t *mask, const char *q_arg, const char *type)
{
char *end = NULL;
uint64_t pm;
@@ -1180,11 +1188,11 @@ parse_cryptodev_mask(struct l2fwd_crypto_options *options,
if ((pm == '\0') || (end == NULL) || (*end != '\0'))
pm = 0;
- options->cryptodev_mask = pm;
- if (options->cryptodev_mask == 0) {
- printf("invalid cryptodev_mask specified\n");
+ if (pm == 0) {
+ printf("invalid %s mask specified\n", type);
return -1;
}
+ *mask = pm;
return 0;
}
@@ -1343,7 +1351,8 @@ l2fwd_crypto_parse_args_long_options(struct l2fwd_crypto_options *options,
}
else if (strcmp(lgopts[option_index].name, "cryptodev_mask") == 0)
- return parse_cryptodev_mask(options, optarg);
+ return parse_mask(&options->cryptodev_mask, optarg,
+ "cryptodev_mask");
else if (strcmp(lgopts[option_index].name, "mac-updating") == 0) {
options->mac_updating = 1;
@@ -1355,6 +1364,12 @@ l2fwd_crypto_parse_args_long_options(struct l2fwd_crypto_options *options,
return 0;
}
+ else if (strcmp(lgopts[option_index].name, "mp-emask") == 0)
+ return parse_mask(&options->mp_emask, optarg, "mp-emask");
+
+ else if (strcmp(lgopts[option_index].name, "mp-cmask") == 0)
+ return parse_mask(&options->mp_cmask, optarg, "mp-cmask");
+
return -1;
}
@@ -1488,6 +1503,8 @@ l2fwd_crypto_default_options(struct l2fwd_crypto_options *options)
options->type = CDEV_TYPE_ANY;
options->cryptodev_mask = UINT64_MAX;
+ options->mp_emask = UINT64_MAX;
+ options->mp_cmask = UINT64_MAX;
options->mac_updating = 1;
}
@@ -1654,6 +1671,9 @@ l2fwd_crypto_parse_args(struct l2fwd_crypto_options *options,
{ "mac-updating", no_argument, 0, 0},
{ "no-mac-updating", no_argument, 0, 0},
+ { "mp-emask", required_argument, 0, 0},
+ { "mp-cmask", required_argument, 0, 0},
+
{ NULL, 0, 0, 0 }
};
@@ -2282,6 +2302,8 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
"priv_sess_mp_%u", socket_id);
session_pool_socket[socket_id].priv_mp =
+ (proc_type == RTE_PROC_SECONDARY) ?
+ rte_mempool_lookup(mp_name) :
rte_mempool_create(mp_name,
sessions_needed,
max_sess_sz,
@@ -2305,6 +2327,8 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
"sess_mp_%u", socket_id);
session_pool_socket[socket_id].sess_mp =
+ (proc_type == RTE_PROC_SECONDARY) ?
+ rte_mempool_lookup(mp_name) :
rte_cryptodev_sym_session_pool_create(
mp_name,
sessions_needed,
@@ -2455,6 +2479,9 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
cap->sym.auth.digest_size.min;
}
+ if (proc_type == RTE_PROC_SECONDARY)
+ goto skip_cdev_init;
+
retval = rte_cryptodev_configure(cdev_id, &conf);
if (retval < 0) {
printf("Failed to configure cryptodev %u", cdev_id);
@@ -2480,6 +2507,12 @@ initialize_cryptodevs(struct l2fwd_crypto_options *options, unsigned nb_ports,
cdev_id, retval);
return -1;
}
+skip_cdev_init:
+ if ((options->mp_cmask & (1 << cdev_id)) != 0) {
+ l2fwd_enabled_crypto_mask |= (((uint64_t)1) << cdev_id);
+ enabled_cdevs[cdev_id] = 1;
+ enabled_cdev_count++;
+ }
}
return enabled_cdev_count;
@@ -2512,6 +2545,9 @@ initialize_ports(struct l2fwd_crypto_options *options)
if ((options->portmask & (1 << portid)) == 0)
continue;
+ if (proc_type == RTE_PROC_SECONDARY)
+ goto skip_port_init;
+
/* init port */
printf("Initializing port %u... ", portid);
fflush(stdout);
@@ -2570,7 +2606,7 @@ initialize_ports(struct l2fwd_crypto_options *options)
}
rte_eth_promiscuous_enable(portid);
-
+skip_port_init:
rte_eth_macaddr_get(portid, &l2fwd_ports_eth_addr[portid]);
printf("Port %u, MAC address: %02X:%02X:%02X:%02X:%02X:%02X\n\n",
@@ -2593,8 +2629,10 @@ initialize_ports(struct l2fwd_crypto_options *options)
last_portid = portid;
}
- l2fwd_enabled_port_mask |= (1 << portid);
- enabled_portcount++;
+ if ((options->mp_emask & (1 << portid)) != 0) {
+ l2fwd_enabled_port_mask |= (1 << portid);
+ enabled_portcount++;
+ }
}
if (enabled_portcount == 1) {
@@ -2675,17 +2713,22 @@ main(int argc, char **argv)
printf("MAC updating %s\n",
options.mac_updating ? "enabled" : "disabled");
+ proc_type = rte_eal_process_type();
/* create the mbuf pool */
- l2fwd_pktmbuf_pool = rte_pktmbuf_pool_create("mbuf_pool", NB_MBUF, 512,
- sizeof(struct rte_crypto_op),
- RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
+ l2fwd_pktmbuf_pool = (proc_type == RTE_PROC_SECONDARY) ?
+ rte_mempool_lookup("mbuf_pool") :
+ rte_pktmbuf_pool_create("mbuf_pool", NB_MBUF, 512,
+ sizeof(struct rte_crypto_op),
+ RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
if (l2fwd_pktmbuf_pool == NULL)
rte_exit(EXIT_FAILURE, "Cannot create mbuf pool\n");
/* create crypto op pool */
- l2fwd_crypto_op_pool = rte_crypto_op_pool_create("crypto_op_pool",
- RTE_CRYPTO_OP_TYPE_SYMMETRIC, NB_MBUF, 128, MAXIMUM_IV_LENGTH,
- rte_socket_id());
+ l2fwd_crypto_op_pool = (proc_type == RTE_PROC_SECONDARY) ?
+ rte_mempool_lookup("crypto_op_pool") :
+ rte_crypto_op_pool_create("crypto_op_pool",
+ RTE_CRYPTO_OP_TYPE_SYMMETRIC, NB_MBUF, 128,
+ MAXIMUM_IV_LENGTH, rte_socket_id());
if (l2fwd_crypto_op_pool == NULL)
rte_exit(EXIT_FAILURE, "Cannot create crypto op pool\n");
@@ -2700,6 +2743,8 @@ main(int argc, char **argv)
/* skip ports that are not enabled */
if ((options.portmask & (1 << portid)) == 0)
continue;
+ if ((options.mp_emask & (1 << portid)) == 0)
+ continue;
if (options.single_lcore && qconf == NULL) {
while (rte_lcore_is_enabled(rx_lcore_id) == 0) {
@@ -2731,8 +2776,13 @@ main(int argc, char **argv)
}
/* Enable Crypto devices */
- enabled_cdevcount = initialize_cryptodevs(&options, enabled_portcount,
+ if (options.mp_cmask != UINT64_MAX)
+ enabled_cdevcount = initialize_cryptodevs(&options, nb_ports,
enabled_cdevs);
+ else
+ enabled_cdevcount = initialize_cryptodevs(&options,
+ enabled_portcount, enabled_cdevs);
+
if (enabled_cdevcount < 0)
rte_exit(EXIT_FAILURE, "Failed to initialize crypto devices\n");
@@ -2750,6 +2800,8 @@ main(int argc, char **argv)
/* Crypto op not supported by crypto device */
if (!enabled_cdevs[cdev_id])
continue;
+ if ((options.mp_cmask & (1 << cdev_id)) == 0)
+ continue;
if (options.single_lcore && qconf == NULL) {
while (rte_lcore_is_enabled(rx_lcore_id) == 0) {