From a8b97e3a1db0a9366d58811411b904e4fef8160f Mon Sep 17 00:00:00 2001 From: Olivier Matz Date: Fri, 28 Feb 2014 18:25:47 +0100 Subject: [PATCH] devargs: use a comma instead of semicolon to separate key/values 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 Acked-by: Thomas Monjalon --- app/test/test_devargs.c | 10 +++++----- app/test/test_eal_flags.c | 4 ++-- app/test/test_kvargs.c | 14 +++++++------- lib/librte_eal/common/eal_common_devargs.c | 4 ++-- lib/librte_eal/common/include/rte_devargs.h | 8 ++++---- lib/librte_eal/linuxapp/eal/eal.c | 2 +- lib/librte_kvargs/rte_kvargs.h | 6 +++--- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/app/test/test_devargs.c b/app/test/test_devargs.c index 035ed59f3d..63eee0b580 100644 --- a/app/test/test_devargs.c +++ b/app/test/test_devargs.c @@ -67,7 +67,7 @@ test_devargs(void) 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; @@ -79,20 +79,20 @@ test_devargs(void) 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(); @@ -116,7 +116,7 @@ test_devargs(void) 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; diff --git a/app/test/test_eal_flags.c b/app/test/test_eal_flags.c index 9bab1a5ab0..45d3d02ad0 100644 --- a/app/test/test_eal_flags.c +++ b/app/test/test_eal_flags.c @@ -313,8 +313,8 @@ test_whitelist_flag(void) 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) { diff --git a/app/test/test_kvargs.c b/app/test/test_kvargs.c index 2db9d08dde..c417ba2348 100644 --- a/app/test/test_kvargs.c +++ b/app/test/test_kvargs.c @@ -84,7 +84,7 @@ static int test_valid_kvargs(void) 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) { @@ -145,7 +145,7 @@ static int test_valid_kvargs(void) 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) { @@ -190,11 +190,11 @@ static int test_invalid_kvargs(void) /* 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 }; diff --git a/lib/librte_eal/common/eal_common_devargs.c b/lib/librte_eal/common/eal_common_devargs.c index 52f5cc7669..c497ea31a8 100644 --- a/lib/librte_eal/common/eal_common_devargs.c +++ b/lib/librte_eal/common/eal_common_devargs.c @@ -69,8 +69,8 @@ rte_eal_devargs_add(enum rte_devtype devtype, const char *devargs_str) 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); diff --git a/lib/librte_eal/common/include/rte_devargs.h b/lib/librte_eal/common/include/rte_devargs.h index 2e6e1f39e9..c093c171b7 100644 --- a/lib/librte_eal/common/include/rte_devargs.h +++ b/lib/librte_eal/common/include/rte_devargs.h @@ -101,12 +101,12 @@ extern struct rte_devargs_list devargs_list; * 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. * diff --git a/lib/librte_eal/linuxapp/eal/eal.c b/lib/librte_eal/linuxapp/eal/eal.c index 78737cfb85..f5f02e96ba 100644 --- a/lib/librte_eal/linuxapp/eal/eal.c +++ b/lib/librte_eal/linuxapp/eal/eal.c @@ -612,7 +612,7 @@ eal_parse_use_device(const char *optarg) return -1; /* remove arguments in 'dup' string */ - sep = strchr(dup, ';'); + sep = strchr(dup, ','); if (sep != NULL) *sep = '\0'; diff --git a/lib/librte_kvargs/rte_kvargs.h b/lib/librte_kvargs/rte_kvargs.h index 71c9630d9d..ef4efabfb5 100644 --- a/lib/librte_kvargs/rte_kvargs.h +++ b/lib/librte_kvargs/rte_kvargs.h @@ -40,7 +40,7 @@ * 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 @@ -58,7 +58,7 @@ extern "C" { #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 "=" @@ -83,7 +83,7 @@ struct rte_kvargs { * 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(). * -- 2.20.1