On Thu, Jun 02, 2016 at 07:41:10PM +0000, Wiles, Keith wrote: > > On 6/2/16, 12:11 PM, "Neil Horman" <nhorman at tuxdriver.com> wrote: > > > > >1) The definition of a config structure that can be passed to rte_eal_init, > >defining the configuration for that running process > > Having a configuration structure means we have to have an ABI change to that > structure anytime we add or remove an option. I was thinking a very simple DB > of some kind would be better. Have the code query the DB to obtain the needed > information. The APIs used to query and set the DB needs to be very easy to > use as well.
Thats a fair point. A decent starting point is likely a simple struct that looks like this: struct key_vals { char *key; union { ulong longval; void *ptrval; } value; }; struct config { size_t count; struct key_vals kvp[0]; }; > > Maybe each option can define its own structure if needed or just a simple > variable type can be used for the basic types (int, string, bool, ?) > Well, if you have config sections that require mulitiple elements, I'd handle that with naming, i.e. if you have a config group that has an int and char value, I'd name them "group.intval", and "group.charval", so they are independently searchable, but linked from a nomenclature standpoint. > Would this work better in the long run, does a fixed structure still make > sense? > No. I think you're ABI concerns are valid, but the above is likely a good starting point to address them. Best Neil > > > >2) The creation and use of an API that various DPDK libraries can use to > >retrieve that structure (or elements thereof), based on some explicit or > >imlicit > >id, so that the configuration can be used (I'm thinking here specifically of > >multiple dpdk applications using a dpdk shared library) > > > >3) The removal of the eal_parse_args code from the core dpdk library > >entirely, > >packaging it instead as its own library that interprets command line > >arguments > >as currently defined, and populates an instance of the structure defined in > >(1) > > > >4) Altering the Makefiles, so that the example apps link against the new > >library > >in (3), altering the app source code to work with the config structure > >defined > >in (1) > > > >With those steps, I think we will remove the command line bits from the dpdk > >core, and do so without altering the user experience for any of the sample > >apps > >(which will demonstrate to other developers that the same can be done with > >their > >applications). From there we will be free to create alternate methods of > >populating the config struct defined in (1) (via JSON file, YAML, XML, or > >whatever). > > > >Neil > > > >> >> > >> >> For the purposes of the example apps, it would seem that either JSON, > >> >> YAML, or > >> >> the above Lua format would work just fine. > >> > > >> >+1 > >> > > >> > >> Regards, > >> ++Keith > >> > >> > > > > >