* [dpdk-dev] [PATCH v5 0/5] Rework cfgfile API to enable apps config file support
@ 2017-09-19 10:25 Kuba Kozak
2017-09-19 10:25 ` [dpdk-dev] [PATCH v5 1/5] cfgfile: remove EAL dependency Kuba Kozak
0 siblings, 1 reply; 2+ messages in thread
From: Kuba Kozak @ 2017-09-19 10:25 UTC (permalink / raw)
To: dev
Cc: bruce.richardson, deepak.jain, michalx.k.jastrzebski,
jacekx.piasecki, Kuba Kozak
New API for cfgfile library allows to create a cfgfile at runtime, add new
section, add entry in a section, update existing entry and save cfgfile
structure to INI file - opens up the possibility to have applications
dynamically build up a proper DPDK configuration, rather than
having to have a pre-existing one. Due the new API functions, simplification
of load() function was made. One new unit test to TEST app was added. It
contains an example of a large INI file whose parsing requires multiple
reallocation of memory.
---
v5:
Some commit message reword
test_cfgfile.c - remove *.ini file created during realloc test
Add #ifdef RTE_NEXT_ABI for return value change in
- rte_cfgfile_section_num_entries(),
- rte_cfgfile_section_entries(),
- rte_cfgfile_section_entries_by_index()
v4:
Change members of structure cfgfile:
- struct *sections[] to *sections
- struct *entries[] to *entries
- remove free_sections and free_entries
Rework of existing cfgfile API functions to work with modified
rte_cfgfile struct.
Rework of malloc/realloc implementation due rte_cfgfile struct change,
reducing mulitiple mallocs.
Change return error codes for all library functions (errno.h)
Checkpatch fixes
v3:
split one patchset into two distinct patchsets:
1. cfgfile library and TEST app changes
2. EAL changes and examples (this patchset depends on cfgfile)
v2:
lib eal:
Rework of rte_eal_configure(struct rte_cfgfile *cfg, char *prgname).
Now this function load data from cfg structure and did initial
initialization of EAL arguments. Vdev argument are stored in different
subsections eg. DPDK.vdev0, DPDK.vdev1 etc. After execution of this
function it is necessary to call rte_eal_init to complete EAL
initialization. There is no more merging arguments from different
sources (cfg file and command line).
Added non_eal_configure to testpmd application.
Function maintain the same functionality as rte_eal_configure but
for non-eal arguments.
Added config JSON feature to testpmd last patch from patchset contain
example showing use of .json configuration files.
lib cfgfile:
Rework of add_section(), add_entry() new implementation
New members allocated_entries/sections, free_entries/sections
in rte_cfgfile structure, change in array of pointers
**sections, **entries instead of *sections[], *entries[]
Add set_entry() to update/overwrite already existing entry in cfgfile
struct
Add save() function to save on disc cfgfile structure in INI format
Rework of existing load() function simplifying the code
Add unit test realloc_sections() in TEST app for testing realloc/malloc
of new API functions, add test for save() function
Jacek Piasecki (5):
cfgfile: remove EAL dependency
cfgfile: change existing API functions
cfgfile: add APIs for cfgfile modification
cfgfile: rework of load function
test/cfgfile: add new unit test
doc/guides/rel_notes/deprecation.rst | 5 +
lib/Makefile | 3 +-
lib/librte_cfgfile/Makefile | 1 +
lib/librte_cfgfile/rte_cfgfile.c | 431 ++++++++++++++---------
lib/librte_cfgfile/rte_cfgfile.h | 82 ++++-
lib/librte_cfgfile/rte_cfgfile_version.map | 11 +
test/test/test_cfgfile.c | 41 +++
test/test/test_cfgfiles/etc/realloc_sections.ini | 128 +++++++
8 files changed, 532 insertions(+), 170 deletions(-)
create mode 100644 test/test/test_cfgfiles/etc/realloc_sections.ini
--
2.7.4
^ permalink raw reply [flat|nested] 2+ messages in thread
* [dpdk-dev] [PATCH v5 1/5] cfgfile: remove EAL dependency
2017-09-19 10:25 [dpdk-dev] [PATCH v5 0/5] Rework cfgfile API to enable apps config file support Kuba Kozak
@ 2017-09-19 10:25 ` Kuba Kozak
0 siblings, 0 replies; 2+ messages in thread
From: Kuba Kozak @ 2017-09-19 10:25 UTC (permalink / raw)
To: dev; +Cc: bruce.richardson, deepak.jain, michalx.k.jastrzebski, jacekx.piasecki
From: Jacek Piasecki <jacekx.piasecki@intel.com>
This patch removes the dependency to EAL in cfgfile library.
Signed-off-by: Jacek Piasecki <jacekx.piasecki@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
---
lib/Makefile | 3 +--
lib/librte_cfgfile/Makefile | 1 +
lib/librte_cfgfile/rte_cfgfile.c | 29 +++++++++++++++++------------
3 files changed, 19 insertions(+), 14 deletions(-)
diff --git a/lib/Makefile b/lib/Makefile
index 86caba1..1080a95 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -32,6 +32,7 @@
include $(RTE_SDK)/mk/rte.vars.mk
DIRS-y += librte_compat
+DIRS-$(CONFIG_RTE_LIBRTE_CFGFILE) += librte_cfgfile
DIRS-$(CONFIG_RTE_LIBRTE_EAL) += librte_eal
DIRS-$(CONFIG_RTE_LIBRTE_RING) += librte_ring
DEPDIRS-librte_ring := librte_eal
@@ -41,8 +42,6 @@ DIRS-$(CONFIG_RTE_LIBRTE_MBUF) += librte_mbuf
DEPDIRS-librte_mbuf := librte_eal librte_mempool
DIRS-$(CONFIG_RTE_LIBRTE_TIMER) += librte_timer
DEPDIRS-librte_timer := librte_eal
-DIRS-$(CONFIG_RTE_LIBRTE_CFGFILE) += librte_cfgfile
-DEPDIRS-librte_cfgfile := librte_eal
DIRS-$(CONFIG_RTE_LIBRTE_CMDLINE) += librte_cmdline
DEPDIRS-librte_cmdline := librte_eal
DIRS-$(CONFIG_RTE_LIBRTE_ETHER) += librte_ether
diff --git a/lib/librte_cfgfile/Makefile b/lib/librte_cfgfile/Makefile
index 755ef11..0bee43e 100644
--- a/lib/librte_cfgfile/Makefile
+++ b/lib/librte_cfgfile/Makefile
@@ -38,6 +38,7 @@ LIB = librte_cfgfile.a
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
+CFLAGS += -I$(SRCDIR)/../librte_eal/common/include
EXPORT_MAP := rte_cfgfile_version.map
diff --git a/lib/librte_cfgfile/rte_cfgfile.c b/lib/librte_cfgfile/rte_cfgfile.c
index 2588093..9dc25cc 100644
--- a/lib/librte_cfgfile/rte_cfgfile.c
+++ b/lib/librte_cfgfile/rte_cfgfile.c
@@ -36,7 +36,6 @@
#include <string.h>
#include <ctype.h>
#include <rte_common.h>
-#include <rte_string_fns.h>
#include "rte_cfgfile.h"
@@ -258,19 +257,25 @@ rte_cfgfile_load_with_params(const char *filename, int flags,
struct rte_cfgfile_section *sect =
cfg->sections[curr_section];
- int n;
+
char *split[2] = {NULL};
- n = rte_strsplit(buffer, sizeof(buffer), split, 2, '=');
- if (flags & CFG_FLAG_EMPTY_VALUES) {
- if ((n < 1) || (n > 2)) {
- printf("Error at line %d - cannot split string, n=%d\n",
- lineno, n);
- goto error1;
- }
+ split[0] = buffer;
+ split[1] = memchr(buffer, '=', len);
+
+ /* when delimeter not found */
+ if (split[1] == NULL) {
+ printf("Error at line %d - cannot "
+ "split string\n", lineno);
+ goto error1;
} else {
- if (n != 2) {
- printf("Error at line %d - cannot split string, n=%d\n",
- lineno, n);
+ /* when delimeter found */
+ *split[1] = '\0';
+ split[1]++;
+
+ if (!(flags & CFG_FLAG_EMPTY_VALUES) &&
+ (*split[1] == '\0')) {
+ printf("Error at line %d - cannot "
+ "split string\n", lineno);
goto error1;
}
}
--
2.7.4
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2017-09-19 10:41 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-19 10:25 [dpdk-dev] [PATCH v5 0/5] Rework cfgfile API to enable apps config file support Kuba Kozak
2017-09-19 10:25 ` [dpdk-dev] [PATCH v5 1/5] cfgfile: remove EAL dependency Kuba Kozak
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).