This commit changes the API of --use-device command line argument.
It changes the separators from ';' to ','. Indeed, ';' is not the best
choice as this character is also used to separate shell commands,
forcing the user to surround arguments with quotes.
This commit impacts both devargs and kvargs as each of them define
a separator in --use-device argument:
- devargs defines the separator between the device name or pci_id and
its arguments
- kvargs defines the separator between each key/value pairs in
arguments for drivers using the kvargs API to parse their arguments
The modification of devargs and kvargs is done in one commit to keep
the coherency of --use-device.
Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "0000:5:00.0") < 0)
goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "04:00.0;arg=val") < 0)
+ if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "04:00.0,arg=val") < 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_BLACKLISTED_PCI, "0000:01:00.1") < 0)
goto fail;
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "eth_ring0") < 0)
goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "eth_ring1;key=val;k2=val2") < 0)
+ if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "eth_ring1,key=val,k2=val2") < 0)
goto fail;
if (rte_eal_devargs_type_count(RTE_DEVTYPE_VIRTUAL) != 2)
goto fail;
free_devargs_list();
/* check virtual device with argument parsing */
- if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "eth_ring1;k1=val;k2=val2") < 0)
+ if (rte_eal_devargs_add(RTE_DEVTYPE_VIRTUAL, "eth_ring1,k1=val,k2=val2") < 0)
goto fail;
devargs = TAILQ_FIRST(&devargs_list);
if (strncmp(devargs->virtual.drv_name, "eth_ring1",
sizeof(devargs->virtual.drv_name) != 0))
goto fail;
- if (strncmp(devargs->args, "k1=val;k2=val2", sizeof(devargs->args) != 0))
+ if (strncmp(devargs->args, "k1=val,k2=val2", sizeof(devargs->args) != 0))
goto fail;
free_devargs_list();
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "foo") == 0)
goto fail;
- if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, ";") == 0)
+ if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, ",") == 0)
goto fail;
if (rte_eal_devargs_add(RTE_DEVTYPE_WHITELISTED_PCI, "000f:0:0") == 0)
goto fail;
const char *wlval2[] = {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
use_device, "09:0B.3", use_device, "0a:0b.1"};
const char *wlval3[] = {prgname, prefix, mp_flag, "-n", "1", "-c", "1",
- use_device, "09:0B.3;type=test",
- use_device, "08:00.1;type=normal"};
+ use_device, "09:0B.3,type=test",
+ use_device, "08:00.1,type=normal"};
for (i = 0; i < sizeof(wlinval) / sizeof(wlinval[0]); i++) {
if (launch_proc(wlinval[i]) == 0) {
rte_kvargs_free(kvlist);
/* first test without valid_keys */
- args = "foo=1234;check=value0;check=value1";
+ args = "foo=1234,check=value0,check=value1";
valid_keys = NULL;
kvlist = rte_kvargs_parse(args, valid_keys);
if (kvlist == NULL) {
rte_kvargs_free(kvlist);
/* second test using valid_keys */
- args = "foo=droids;check=value0;check=value1;check=wrong_value";
+ args = "foo=droids,check=value0,check=value1,check=wrong_value";
valid_keys = valid_keys_list;
kvlist = rte_kvargs_parse(args, valid_keys);
if (kvlist == NULL) {
/* list of argument that should fail */
const char *args_list[] = {
"wrong-key=x", /* key not in valid_keys_list */
- "foo=1;foo=", /* empty value */
- "foo=1;;foo=2", /* empty key/value */
- "foo=1;foo", /* no value */
- "foo=1;=2", /* no key */
- ";=", /* also test with a smiley */
+ "foo=1,foo=", /* empty value */
+ "foo=1,,foo=2", /* empty key/value */
+ "foo=1,foo", /* no value */
+ "foo=1,=2", /* no key */
+ ",=", /* also test with a smiley */
NULL };
const char **args;
const char *valid_keys_list[] = { "foo", "check", NULL };
memset(devargs, 0, sizeof(*devargs));
devargs->type = devtype;
- /* set the first ';' to '\0' to split name and arguments */
- sep = strchr(buf, ';');
+ /* set the first ',' to '\0' to split name and arguments */
+ sep = strchr(buf, ',');
if (sep != NULL) {
sep[0] = '\0';
snprintf(devargs->args, sizeof(devargs->args), "%s", sep + 1);
* Add a device to the user device list
*
* For PCI devices, the format of arguments string is "PCI_ADDR" or
- * "PCI_ADDR;key=val;key2=val2;...". Examples: "08:00.1", "0000:5:00.0",
- * "04:00.0;arg=val".
+ * "PCI_ADDR,key=val,key2=val2,...". Examples: "08:00.1", "0000:5:00.0",
+ * "04:00.0,arg=val".
*
* For virtual devices, the format of arguments string is "DRIVER_NAME*"
- * or "DRIVER_NAME*;key=val;key2=val2;...". Examples: "eth_ring",
- * "eth_ring0", "eth_pmdAnything;arg=0:arg2=1". The validity of the
+ * or "DRIVER_NAME*,key=val,key2=val2,...". Examples: "eth_ring",
+ * "eth_ring0", "eth_pmdAnything,arg=0:arg2=1". The validity of the
* driver name is not checked by this function, it is done when probing
* the drivers.
*
return -1;
/* remove arguments in 'dup' string */
- sep = strchr(dup, ';');
+ sep = strchr(dup, ',');
if (sep != NULL)
*sep = '\0';
* RTE Argument parsing
*
* This module can be used to parse arguments whose format is
- * key1=value1;key2=value2;key3=value3;...
+ * key1=value1,key2=value2,key3=value3,...
*
* The same key can appear several times with the same or a different
* value. Indeed, the arguments are stored as a list of key/values
#define RTE_KVARGS_MAX 32
/** separator character used between each pair */
-#define RTE_KVARGS_PAIRS_DELIM ";"
+#define RTE_KVARGS_PAIRS_DELIM ","
/** separator character used between key and value */
#define RTE_KVARGS_KV_DELIM "="
* Allocate a rte_kvargs and store key/value associations from a string
*
* The function allocates and fills a rte_kvargs structure from a given
- * string whose format is key1=value1;key2=value2;...
+ * string whose format is key1=value1,key2=value2,...
*
* The structure can be freed with rte_kvargs_free().
*