On 22 December 2016 at 21:12, Maxim Uvarov <maxim.uva...@linaro.org> wrote:
> On 12/19/16 13:50, Christophe Milard wrote:
>> The parsing of the odp.conf configuration file is added.
>> The file is searched first in the local directory (.) and
>> then is the $prefix/etc directory.
>> This requires libconfig (sudo apt-get install libconfig-dev)
>>
>> Signed-off-by: Christophe Milard <christophe.mil...@linaro.org>
>> ---
>>  DEPENDENCIES                                  |  2 +-
>>  platform/linux-generic/Makefile.am            |  1 +
>>  platform/linux-generic/include/odp_internal.h |  2 +
>>  platform/linux-generic/m4/configure.m4        | 11 +++++
>>  platform/linux-generic/odp_init.c             | 70 
>> +++++++++++++++++++++++++++
>>  5 files changed, 85 insertions(+), 1 deletion(-)
>>
>> diff --git a/DEPENDENCIES b/DEPENDENCIES
>> index f1f0edd..a24b1c8 100644
>> --- a/DEPENDENCIES
>> +++ b/DEPENDENCIES
>> @@ -18,7 +18,7 @@ Prerequisites for building the OpenDataPlane (ODP) API
>>
>>  3. Required libraries
>>
>> -   Libraries currently required to link: openssl
>> +   Libraries currently required to link: openssl, libconfig-dev
>>
>
> apt-get install libconfig-dev
> is needed, or at least we specify it everywhere.

I don't understand what you mean here. What is missing?

>
> .travis.yml file also needs to be updated.

yes


Christophe
>
> Maxim.
>
>
>>  3.1 OpenSSL native compile
>>
>> diff --git a/platform/linux-generic/Makefile.am 
>> b/platform/linux-generic/Makefile.am
>> index 9d219da..9e5e095 100644
>> --- a/platform/linux-generic/Makefile.am
>> +++ b/platform/linux-generic/Makefile.am
>> @@ -8,6 +8,7 @@ AM_CFLAGS +=  -I$(srcdir)/include
>>  AM_CFLAGS +=  -I$(top_srcdir)/include
>>  AM_CFLAGS +=  -I$(top_builddir)/include
>>  AM_CFLAGS +=  -Iinclude
>> +AM_CFLAGS +=  -DSYSCONFDIR=\"@sysconfdir@\"
>>
>>  include_HEADERS = \
>>                 $(top_srcdir)/include/odp.h \
>> diff --git a/platform/linux-generic/include/odp_internal.h 
>> b/platform/linux-generic/include/odp_internal.h
>> index b313b1f..9d1fc58 100644
>> --- a/platform/linux-generic/include/odp_internal.h
>> +++ b/platform/linux-generic/include/odp_internal.h
>> @@ -22,6 +22,7 @@ extern "C" {
>>  #include <odp/api/thread.h>
>>  #include <stdio.h>
>>  #include <sys/types.h>
>> +#include <libconfig.h>
>>
>>  extern __thread int __odp_errno;
>>
>> @@ -50,6 +51,7 @@ struct odp_global_data_s {
>>       odp_cpumask_t control_cpus;
>>       odp_cpumask_t worker_cpus;
>>       int num_cpus_installed;
>> +     config_t configuration;
>>  };
>>
>>  enum init_stage {
>> diff --git a/platform/linux-generic/m4/configure.m4 
>> b/platform/linux-generic/m4/configure.m4
>> index d3e5528..5fab0cc 100644
>> --- a/platform/linux-generic/m4/configure.m4
>> +++ b/platform/linux-generic/m4/configure.m4
>> @@ -28,6 +28,17 @@ AC_LINK_IFELSE(
>>      echo "Use newer version. For gcc > 4.7.0"
>>      exit -1)
>>
>> +# Check for libconfig (required)
>> +AC_CHECK_HEADERS([libconfig.h], HEADER_LIBCONFIG="yes")
>> +PKG_CHECK_MODULES([PKGCONFIG], [libconfig >= 1.3.2], 
>> LIBRARY_LIBCONFIG="yes")
>> +if test "x$LIBRARY_LIBCONFIG" != "x" && test "x$HEADER_LIBCONFIG" != "x" ; 
>> then
>> +    CFLAGS="$CFLAGS $PKGCONFIG_CFLAGS"
>> +    LIBS="$LIBS $PKGCONFIG_LIBS"
>> +    AM_CPPFLAGS="$AM_CPPFLAGS `pkg-config --cflags-only-I libconfig`"
>> +else
>> +    AC_MSG_FAILURE([libconfig not found (required)])
>> +fi
>> +
>>  m4_include([platform/linux-generic/m4/odp_pthread.m4])
>>  m4_include([platform/linux-generic/m4/odp_openssl.m4])
>>  m4_include([platform/linux-generic/m4/odp_pcap.m4])
>> diff --git a/platform/linux-generic/odp_init.c 
>> b/platform/linux-generic/odp_init.c
>> index 1b0d8f8..bd43af1 100644
>> --- a/platform/linux-generic/odp_init.c
>> +++ b/platform/linux-generic/odp_init.c
>> @@ -10,6 +10,8 @@
>>  #include <odp_internal.h>
>>  #include <odp_schedule_if.h>
>>  #include <string.h>
>> +#include <libconfig.h>
>> +#include <stdlib.h>
>>  #include <stdio.h>
>>  #include <linux/limits.h>
>>  #include <dirent.h>
>> @@ -21,6 +23,15 @@
>>  #define _ODP_FILES_FMT "odp-%d-"
>>  #define _ODP_TMPDIR    "/tmp"
>>
>> +/* the name of the ODP configuration file: */
>> +#define CONFIGURATION_FILE_ENV_NONE "none"
>> +#define CONFIGURATION_FILE "odp.conf"
>> +#define CONFIGURATION_FILE_REL ("./" CONFIGURATION_FILE)
>> +#define CONFIGURATION_FILE_ABS (SYSCONFDIR "/" CONFIGURATION_FILE)
>> +
>> +/* the ODP configuration file name can also be oveerwritten by env. 
>> variable: */
>> +#define ODP_SYSCONFIG_FILE_ENV "ODP_SYSCONFIG_FILE"
>> +
>>  struct odp_global_data_s odp_global_data;
>>
>>  /* remove all files staring with "odp-<pid>" from a directory "dir" */
>> @@ -65,6 +76,62 @@ static int cleanup_files(const char *dirpath, int odp_pid)
>>       return 0;
>>  }
>>
>> +/* read the odp configuration file
>> + *
>> + * the configuration file is read from:
>> + * 1) Wherever env variable ODP_SYSCONFIG_FILE says (or "none")
>> + * 2) ./odp.conf
>> + * 3) the @sysconfig@/odp.conf
>> + * (checked in reversed order overwritting each-other)
>> + * So the environment variable setting supperseeds any other file.
>> + * If the environment variable exists and set to the string "none"
>> + * the configuration file reading is inibited (used to prevent
>> + * test which do not need a file to read the user or system files)
>> + */
>> +static int read_configfile(void)
>> +{
>> +     char *env_config_filename;
>> +     const char *config_filename;
>> +     config_t *cf;
>> +
>> +     /* initialize and read the configuration file if any: */
>> +     cf = &odp_global_data.configuration;
>> +     config_init(cf);
>> +     config_filename = NULL;
>> +     if (access(CONFIGURATION_FILE_ABS, R_OK) != -1)
>> +             config_filename = CONFIGURATION_FILE_ABS;
>> +     if (access(CONFIGURATION_FILE_REL, R_OK) != -1)
>> +             config_filename = CONFIGURATION_FILE_REL;
>> +     env_config_filename = getenv(ODP_SYSCONFIG_FILE_ENV);
>> +     if (env_config_filename) {
>> +             if (!strcmp(env_config_filename, CONFIGURATION_FILE_ENV_NONE))
>> +                     return 0;
>> +             if (access(env_config_filename, R_OK) != -1) {
>> +                     config_filename = env_config_filename;
>> +             } else {
>> +                     ODP_ERR("Cannot read ODP configurattion file %s "
>> +                             "(set by env variable "
>> +                             ODP_SYSCONFIG_FILE_ENV ")\n",
>> +                             env_config_filename);
>> +                     config_filename = NULL;
>> +                     return -1;
>> +             }
>> +     }
>> +     if (config_filename) {
>> +             ODP_DBG("Reading configuration file: %s\n", config_filename);
>> +             if (!config_read_file(cf, config_filename)) {
>> +                     ODP_ERR("%s:%d - %s\n",
>> +                             config_error_file(cf),
>> +                             config_error_line(cf),
>> +                             config_error_text(cf));
>> +                     config_destroy(cf);
>> +                     return(-1);
>> +             }
>> +     }
>> +
>> +     return 0;
>> +}
>> +
>>  int odp_init_global(odp_instance_t *instance,
>>                   const odp_init_t *params,
>>                   const odp_platform_init_t *platform_params ODP_UNUSED)
>> @@ -86,6 +153,9 @@ int odp_init_global(odp_instance_t *instance,
>>                       odp_global_data.abort_fn = params->abort_fn;
>>       }
>>
>> +     if (read_configfile())
>> +             goto init_failed;
>> +
>>       if (odp_cpumask_init_global(params)) {
>>               ODP_ERR("ODP cpumask init failed.\n");
>>               goto init_failed;
>>
>

Reply via email to