diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 8375eb71d5f4019099569ff8cac37880d842121e..ce1d3faf188642d036776c48b5212cc7faec0189 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -485,8 +485,20 @@ add_list1_option(NB_ANTENNAS_TXRX "2" "Number of antennas in ????" "1" "2" "4")
 add_list2_option(RF_BOARD "EXMIMO" "RF head type" "None" "EXMIMO" "OAI_USRP" "OAI_BLADERF" "CPRIGW" "OAI_LMSSDR")
 
 add_list2_option(TRANSP_PRO "None" "Transport protocol type" "None" "ETHERNET")
-
-
+#NOKIA config enhancement
+set (CONFIG_ROOTDIR
+    ${OPENAIR_DIR}/common/config
+   )
+set (CONFIG_SOURCES
+    ${CONFIG_ROOTDIR}/config_load_configmodule.c
+    ${CONFIG_ROOTDIR}/config_userapi.c
+    ${CONFIG_ROOTDIR}/config_cmdline.c
+   ) 
+set (CONFIG_LIBCONFIG_SOURCES
+    ${CONFIG_ROOTDIR}/libconfig/config_libconfig.c
+   )   
+add_library(params_libconfig MODULE ${CONFIG_LIBCONFIG_SOURCES} )
+target_link_libraries(params_libconfig config)  
 # include RF devices / transport protocols library modules
 ######################################################################
 
@@ -1721,6 +1733,7 @@ add_executable(lte-softmodem
   ${XFORMS_SOURCE}
   ${XFORMS_SOURCE_SOFTMODEM}
   ${T_SOURCE}
+  ${CONFIG_SOURCES}
   )
 
 target_link_libraries (lte-softmodem -ldl 
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 93a7ac073ee88a9d2b359025a4c33c743ce19efc..8ed9726e0fc5c7aec937ecae7e771da7c4bb2c83 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -478,6 +478,9 @@ function main() {
       lte_exec=lte-softmodem
   fi
 
+# configuration module libraries, one currently available, using libconfig 
+  config_libconfig_shlib=params_libconfig
+  
   # first generate the CMakefile in the right directory
   if [ "$eNB" = "1" -o "$UE" = "1" -o "$HW" = "EXMIMO" ] ; then
 
@@ -520,6 +523,11 @@ function main() {
 	  $lte_build_dir $lte_exec \
 	  $lte_exec $dbin/$lte_exec.$REL
 
+# mandatory shared lib
+    compilations \
+	  $lte_build_dir $config_libconfig_shlib \
+	  lib$config_libconfig_shlib.so $dbin/lib$config_libconfig_shlib.so
+	  
     if [ "$NOS1" = "1" ] ; then
 	compilations \
 	    $lte_build_dir nasmesh \
diff --git a/common/config/config_cmdline.c b/common/config/config_cmdline.c
new file mode 100644
index 0000000000000000000000000000000000000000..b7885ce456f8962f50ca13586e608593463e77d7
--- /dev/null
+++ b/common/config/config_cmdline.c
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file common/config/cmdline/config_libconfig.c
+ * \brief configuration module, command line parsing implementation 
+ * \author Francois TABURET
+ * \date 2017
+ * \version 0.1
+ * \company NOKIA BellLabs France
+ * \email: francois.taburet@nokia-bell-labs.com
+ * \note
+ * \warning
+ */
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include "config_userapi.h"
+
+int processoption(paramdef_t *cfgoptions, char *value)
+{
+int ret = 0;
+
+     switch(cfgoptions->type)
+       {
+       	case TYPE_STRING:
+           check_valptr(cfgoptions, (char **)(cfgoptions->strptr), sizeof(char *));
+           check_valptr(cfgoptions, cfgoptions->strptr, strlen(value+1));
+           sprintf(*(cfgoptions->strptr), "%s",value);
+           printf_cmdl("[LIBCONFIG] %s set to  %s from command line\n", cfgoptions->optname, value);
+           ret++;
+       break;
+       case TYPE_STRINGLIST:
+
+       break;
+	
+       	case TYPE_UINT:
+       	case TYPE_INT:
+       	case TYPE_UINT64:
+       	case TYPE_INT64:
+           check_valptr(cfgoptions, (char **)&(cfgoptions->i64ptr),sizeof(uint64_t)); 
+           *(cfgoptions->uptr) =strtol(value,NULL,0);  
+           printf_cmdl("[LIBCONFIG] %s set to  %lli from command line\n", cfgoptions->optname, (long long)*(cfgoptions->i64ptr));
+           ret++; 
+        break;        
+       	case TYPE_UINTARRAY:
+       	case TYPE_INTARRAY:
+
+        break;
+       	case TYPE_IPV4ADDR:
+
+        break;
+
+       default:
+            fprintf(stderr,"[LIBCONFIG] command line, %s type %i  not supported\n",cfgoptions->optname, cfgoptions->type);
+       break;
+       } /* switch on param type */
+    return ret;
+}
+
+int config_process_cmdline(paramdef_t *cfgoptions,int numoptions, char *prefix)
+{
+char **p = config_get_if()->argv;
+int c = config_get_if()->argc;
+int j;
+char *cfgpath; 
+ 
+  j = (prefix ==NULL) ? 0 : strlen(prefix); 
+  cfgpath = malloc( j + MAX_OPTNAME_SIZE +1);
+  if (cfgpath == NULL) {
+     fprintf(stderr,"[CONFIG] %s %i malloc error,  %s\n", __FILE__, __LINE__,strerror(errno));
+     return -1;
+  }
+
+  j=0;
+  p++;
+  c--;
+    while (c >= 0 && *p != NULL) {
+        if (strcmp(*p, "-h") == 0 || strcmp(*p, "--help") == 0 ) {
+            config_printhelp(cfgoptions,numoptions);
+        }
+        for(int i=0;i<numoptions;i++) {
+            if ( ( cfgoptions[i].paramflags & PARAMFLAG_DISABLECMDLINE) != 0) {
+              continue;
+             }
+            sprintf(cfgpath,"%s.%s",prefix,cfgoptions[i].optname);
+            if ( strcmp(*p + 1,cfgoptions[i].shortopt) == 0  || 
+                 strcmp(*p + 2,cfgpath ) == 0 ) {
+               p++;
+               j =+ processoption(&(cfgoptions[i]), *p);
+               c--;
+            }
+         }   	     
+   	 p++;
+         c--;  
+    }   /* fin du while */
+  printf_cmdl("[CONFIG] %s %i options set from command line\n",((prefix == NULL) ? "":prefix),j);
+  free(cfgpath);
+  return j;            
+}  /* parse_cmdline*/
+
+
+
diff --git a/common/config/config_load_configmodule.c b/common/config/config_load_configmodule.c
new file mode 100644
index 0000000000000000000000000000000000000000..cec08b7e450c09fe0665c763925702e368f59c25
--- /dev/null
+++ b/common/config/config_load_configmodule.c
@@ -0,0 +1,210 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file common/config/config_load_configmodule.c
+ * \brief configuration module, load the shared library implementing the configuration module 
+ * \author Francois TABURET
+ * \date 2017
+ * \version 0.1
+ * \company NOKIA BellLabs France
+ * \email: francois.taburet@nokia-bell-labs.com
+ * \note
+ * \warning
+ */
+#define _GNU_SOURCE
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <dlfcn.h>
+
+#define CONFIG_LOADCONFIG_MAIN
+#include "config_load_configmodule.h"
+#include "config_userapi.h"
+#define CONFIG_SHAREDLIBFORMAT "libparams_%s.so"
+
+int load_config_sharedlib(char *cfgmode, char *cfgP[], int numP, configmodule_interface_t *cfgptr)
+{
+void *lib_handle;
+char fname[128];
+char libname[FILENAME_MAX]; 
+int st;
+
+   st=0;  
+   sprintf(libname,CONFIG_SHAREDLIBFORMAT,cfgmode);
+
+   lib_handle = dlopen(libname,RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE);
+   if (!lib_handle) {
+      fprintf(stderr,"[CONFIG] %s %d Error calling dlopen(%s): %s\n",__FILE__, __LINE__, libname,dlerror());
+      st = -1;
+   } else { 
+      sprintf (fname,"config_%s_init",cfgmode);
+      cfgptr->init = dlsym(lib_handle,fname);
+
+      if (cfgptr->init == NULL ) {
+         printf("[CONFIG] %s %d no function %s for config mode %s\n",
+               __FILE__, __LINE__,fname, cfgmode);
+      } else {
+         st=cfgptr->init(cfgP,numP); 
+         printf("[CONFIG] function %s returned %i\n",
+               fname, st);	 
+      }
+
+      sprintf (fname,"config_%s_get",cfgmode);
+      cfgptr->get = dlsym(lib_handle,fname);
+      if (cfgptr->get == NULL ) { 
+         printf("[CONFIG] %s %d no function %s for config mode %s\n",
+               __FILE__, __LINE__,fname, cfgmode);
+	 st = -1;
+      }
+      
+      sprintf (fname,"config_%s_getlist",cfgmode);
+      cfgptr->getlist = dlsym(lib_handle,fname);
+      if (cfgptr->getlist == NULL ) { 
+         printf("[CONFIG] %s %d no function %s for config mode %s\n",
+               __FILE__, __LINE__,fname, cfgmode);
+	 st = -1;
+      }
+
+      sprintf (fname,"config_%s_end",cfgmode);
+      cfgptr->end = dlsym(lib_handle,fname);
+      if (cfgptr->getlist == NULL ) { 
+         printf("[CONFIG] %s %d no function %s for config mode %s\n",
+               __FILE__, __LINE__,fname, cfgmode);
+      }      
+   } 
+   
+   return st;	       
+}
+/*-----------------------------------------------------------------------------------*/
+/* from here: interface implementtion of the configuration module */
+
+
+configmodule_interface_t *load_configmodule(int argc, char **argv)
+{
+char *cfgparam=NULL;
+char *modeparams=NULL;
+char *cfgmode=NULL;
+char *strtokctx=NULL;
+char *cfgP[CONFIG_MAX_OOPT_PARAMS];
+
+int i; 
+int p;  
+
+ 
+  for(i=0; i<CONFIG_MAX_OOPT_PARAMS ; i++) {
+      cfgP[i]=NULL;
+  }
+    
+/* first parse the command line to look for the -O option */
+  opterr=0;
+  while ((i = getopt(argc, argv, "O:")) != -1) {
+       if ( i == 'O' ) {
+          cfgparam = optarg; 
+       }      
+   }
+/* look for the OAI_CONFIGMODULE environement variable */
+  if ( cfgparam == NULL ) {
+     cfgparam = getenv("OAI_CONFIGMODULE");
+     }
+
+/* default */
+  if (cfgparam == NULL) {
+     cfgparam = "libconfig:oaisoftmodem.conf";
+     }
+/* parse the config parameters to set the config source */
+   i = sscanf(cfgparam,"%m[^':']:%ms",&cfgmode,&modeparams);
+   if (i< 0) {
+       fprintf(stderr,"[CONFIG] %s, %d, sscanf error parsing config source  %s: %s\n", __FILE__, __LINE__,cfgparam, strerror(errno));
+       return NULL;
+   }
+   else if ( i == 1 ) {
+       modeparams=cfgmode;
+       cfgmode=strdup("libconfig");
+   }
+
+   cfgptr = malloc(sizeof(configmodule_interface_t));
+
+   p=0;
+   cfgP[p]=strtok_r(modeparams,":",&strtokctx);     
+   while ( p< CONFIG_MAX_OOPT_PARAMS && cfgP[p] != NULL) {
+       char *aptr;
+       aptr=strcasestr(cfgP[p],"dbgl");
+       if (aptr != NULL) {
+           cfgptr->rtflags = strtol(aptr+4,NULL,0);
+           Config_Params[CONFIGPARAM_DEBUGFLAGS_IDX].paramflags = Config_Params[CONFIGPARAM_DEBUGFLAGS_IDX].paramflags | PARAMFLAG_DONOTREAD;
+           for (int j=p; j<(CONFIG_MAX_OOPT_PARAMS-1); j++) cfgP[j] = cfgP[j+1];
+           p--;
+       }
+       p++;
+       cfgP[p] = strtok_r(NULL,":",&strtokctx);
+   }
+
+   
+   printf("[CONFIG] get parameters from %s ",cfgmode);
+   for (i=0;i<p; i++) {
+        printf("%s ",cfgP[i]); 
+   }
+   printf("\n");
+
+ 
+   i=load_config_sharedlib(cfgmode, cfgP,p,cfgptr);
+   if (i< 0) {
+      fprintf(stderr,"[CONFIG] %s %d config module %s couldn't be loaded\n", __FILE__, __LINE__,cfgmode);
+      return NULL;
+   } else {
+      printf("[CONFIG] config module %s loaded\n",cfgmode);
+   }
+
+   Config_Params[CONFIGPARAM_DEBUGFLAGS_IDX].uptr=&(cfgptr->rtflags);
+   config_get(Config_Params,CONFIG_PARAMLENGTH(Config_Params), CONFIG_SECTIONNAME );   
+
+   if (modeparams != NULL) free(modeparams);
+   if (cfgmode != NULL) free(cfgmode);
+   optind=1;
+   cfgptr->argc = argc;
+   cfgptr->argv  = argv;    
+   return cfgptr;
+}
+
+void end_configmodule()
+{ 
+  if (cfgptr != NULL) {
+      printf ("[CONFIG] free %u pointers\n",cfgptr->numptrs);  
+      for(int i=0; i<cfgptr->numptrs ; i++) {
+          if (cfgptr->ptrs[i] != NULL) {
+             free(cfgptr->ptrs[i]);
+          }
+          cfgptr->ptrs[i]=NULL;
+      }
+      if (cfgptr->end != NULL) {
+      printf ("[CONFIG] calling config module end function...\n"); 
+      cfgptr->end();
+      }
+  free(cfgptr);
+  cfgptr=NULL;
+  }
+}
+
+
+
+
diff --git a/common/config/config_load_configmodule.h b/common/config/config_load_configmodule.h
new file mode 100644
index 0000000000000000000000000000000000000000..530470173fbdcca788eccdc3d051806477e858ee
--- /dev/null
+++ b/common/config/config_load_configmodule.h
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file common/config/config_load_configmodule.h
+ * \brief: configuration module, include file to be used by the source code calling the 
+ *  configuration module initialization 
+ * \author Francois TABURET
+ * \date 2017
+ * \version 0.1
+ * \company NOKIA BellLabs France
+ * \email: francois.taburet@nokia-bell-labs.com
+ * \note
+ * \warning
+ */
+#ifndef INCLUDE_CONFIG_LOADCONFIGMODULE_H
+#define INCLUDE_CONFIG_LOADCONFIGMODULE_H 
+
+
+#include <string.h>
+#include <stdlib.h>
+#include "common/config/config_paramdesc.h"
+#define CONFIG_MAX_OOPT_PARAMS    10     // maximum number of parameters in the -O option (-O <cfgmode>:P1:P2...
+#define CONFIG_MAX_ALLOCATEDPTRS  1024   // maximum number of parameters that can be dynamicaly alloted in the config module
+
+/* rtflags bit position definitions */
+#define CONFIG_PRINTPARAMS    1        // print parameters values while processing
+#define CONFIG_DEBUGPTR       2        // print memory allocation/free debug messages
+#define CONFIG_DEBUGCMDLINE   4        // print command line processing messages
+
+typedef int(*configmodule_initfunc_t)(char *cfgP[],int numP);
+typedef int(*configmodule_getfunc_t)(paramdef_t *,int numparams, char *prefix);
+typedef int(*configmodule_getlistfunc_t)(paramlist_def_t *, paramdef_t *,int numparams, char *prefix);
+typedef void(*configmodule_endfunc_t)(void);
+typedef struct configmodule_interface
+{
+  int   argc;
+  char  **argv;
+  configmodule_initfunc_t         init;
+  configmodule_getfunc_t          get;
+  configmodule_getlistfunc_t      getlist;
+  configmodule_endfunc_t          end;
+  uint32_t                        numptrs;
+  uint32_t                        rtflags;
+  char  *ptrs[CONFIG_MAX_ALLOCATEDPTRS];  
+} configmodule_interface_t;
+
+#ifdef CONFIG_LOADCONFIG_MAIN
+configmodule_interface_t *cfgptr=NULL;
+
+static char config_helpstr [] =" \
+      config debugflags: mask, 1->print parameters, 2->print memory allocations debug messages \
+                               4->print command line processing debug messages \
+          -O <config mode><:dbg> \
+          debugflags can also be defined in the config_libconfig section of the config file \
+";
+#define CONFIG_SECTIONNAME "config"
+
+#define CONFIGPARAM_DEBUGFLAGS_IDX        0
+static paramdef_t Config_Params[] = {
+{"debugflags",         "",   config_helpstr,   0,   uptr:NULL,   defintval:0,        TYPE_UINT,  0}, 
+};
+
+#else
+extern configmodule_interface_t *cfgptr;
+#endif
+
+
+#define printf_params(...) if ( (cfgptr->rtflags & CONFIG_PRINTPARAMS) != 0 )  { printf ( __VA_ARGS__ ); }
+#define printf_ptrs(...)   if ( (cfgptr->rtflags & CONFIG_DEBUGPTR) != 0 )     { printf ( __VA_ARGS__ ); }     
+#define printf_cmdl(...)   if ( (cfgptr->rtflags & CONFIG_DEBUGCMDLINE) != 0 ) { printf ( __VA_ARGS__ ); }
+ 
+extern configmodule_interface_t *load_configmodule(int argc, char **argv);
+extern void end_configmodule(void);
+
+#endif  /* INCLUDE_CONFIG_LOADCONFIGMODULE_H */
diff --git a/common/config/config_paramdesc.h b/common/config/config_paramdesc.h
new file mode 100644
index 0000000000000000000000000000000000000000..978178eac4bb95a47f9c11714ffef3d9a57b0383
--- /dev/null
+++ b/common/config/config_paramdesc.h
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file common/config/config_paramdesc.h
+ * \brief configuration module, include file describing parameters, common to all implementations
+ * \author Francois TABURET
+ * \date 2017
+ * \version 0.1
+ * \company NOKIA BellLabs France
+ * \email: francois.taburet@nokia-bell-labs.com
+ * \note
+ * \warning
+ */
+#include <stdint.h>
+#ifndef INCLUDE_CONFIG_PARAMDESC_H
+#define INCLUDE_CONFIG_PARAMDESC_H
+
+
+
+
+
+#define MAX_OPTNAME_SIZE 64
+#define MAX_SHORTOPT_SIZE 8
+
+
+/* parameter flags definitions */
+/*   Flags to be used by calling modules in their parameters definitions: */
+#define PARAMFLAG_DISABLECMDLINE          (1 << 0)         // parameter can bet set from comand line
+
+/*   Flags used by config modules: */
+/* flags to be used by caller modules when defining parameters */
+#define PARAMFLAG_MANDATORY               (1 << 1)               // parameter must be explicitely set, default value ignored
+
+/* flags used by config modules, at runtime to manage memory allocations */
+#define PARAMFLAG_MALLOCINCONFIG         (1 << 15)        // parameter allocated in config module
+#define PARAMFLAG_NOFREE                 (1 << 14)        // don't free parameter in end function
+
+/* flags to be used by caller modules to modify get behavior */
+#define PARAMFLAG_DONOTREAD              (1 << 20)        // parameter must be ignored in get function
+
+typedef struct paramdef
+{
+   char optname[MAX_OPTNAME_SIZE];
+   char shortopt[MAX_SHORTOPT_SIZE];
+   char *helpstr;
+   unsigned int paramflags;
+   union {
+     char **strptr;
+     char **strlistptr;
+     uint32_t *uptr;
+     int32_t *iptr;
+     uint64_t *u64ptr;
+     int64_t *i64ptr;
+     } ;
+   union {
+     char *defstrval;
+     char **defstrlistval;
+     uint32_t defuintval;
+     int defintval;
+     uint64_t defint64val;
+     int *defintarrayval;
+     } ;   
+   char type;
+   int numelt;
+} paramdef_t;
+
+#define TYPE_STRING     1
+#define TYPE_INT        2
+#define TYPE_UINT       3
+#define TYPE_INT64      4
+#define TYPE_UINT64     5
+#define TYPE_IPV4ADDR   20
+
+
+#define TYPE_STRINGLIST 50
+#define TYPE_INTARRAY   51
+#define TYPE_UINTARRAY  52
+#define TYPE_LIST       55
+#define NO_UINTDEFAULT ((int)(-1))
+#define ANY_IPV4ADDR_STRING "0.0.0.0"
+
+typedef struct paramlist_def {
+    char listname[MAX_OPTNAME_SIZE];
+    paramdef_t **paramarray;
+    int numelt ;
+} paramlist_def_t;
+
+/* macro helpers for module users */
+#define CONFIG_PARAMLENGTH(A)    (sizeof(A)/sizeof(paramdef_t))
+#endif  /* INCLUDE_CONFIG_PARAMDESC_H */
diff --git a/common/config/config_userapi.c b/common/config/config_userapi.c
new file mode 100644
index 0000000000000000000000000000000000000000..3b0a0a2a56d9e8c667425b57cfafcd4e0db78dc9
--- /dev/null
+++ b/common/config/config_userapi.c
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file common/config/config_userapi.c
+ * \brief configuration module, api implementation to access configuration parameters
+ * \author Francois TABURET
+ * \date 2017
+ * \version 0.1
+ * \company NOKIA BellLabs France
+ * \email: francois.taburet@nokia-bell-labs.com
+ * \note
+ * \warning
+ */
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <dlfcn.h>
+#include "config_userapi.h"
+
+
+configmodule_interface_t *config_get_if(void)
+{
+    if (cfgptr == NULL) {
+        fprintf(stderr,"[CONFIG] %s %d config module not initialized\n",__FILE__, __LINE__);
+	exit(-1);
+    }
+    return cfgptr;
+}
+
+char * check_valptr(paramdef_t *cfgoptions, char **ptr, int length) 
+{
+
+     printf_ptrs("-- %s 0x%08lx %i\n",cfgoptions->optname,(uintptr_t)(*ptr),length);
+     if (*ptr == NULL) {
+        *ptr = malloc(length);
+        if ( *ptr != NULL) {
+             memset(*ptr,0,length);
+             if ( (cfgoptions->paramflags & PARAMFLAG_NOFREE) != 0) {
+                 config_get_if()->ptrs[config_get_if()->numptrs] = *ptr;
+                 config_get_if()->numptrs++;
+             }
+        } else {
+             fprintf (stderr,"[LIBCONFIG] %s %d malloc error\n",__FILE__, __LINE__);
+             exit(-1);
+        }       
+     }
+     return *ptr;
+}
+
+void config_printhelp(paramdef_t *params,int numparams)
+{
+   for (int i=0 ; i<numparams ; i++) {
+       if ( params[i].helpstr != NULL) {
+           printf("%s", params[i].helpstr);
+       }
+   }
+}
+
+int config_get(paramdef_t *params,int numparams, char *prefix)
+{
+int ret= -1;
+configmodule_interface_t *cfgif = config_get_if();
+if (cfgif != NULL) {
+    ret = config_get_if()->get(params, numparams,prefix);
+    if (ret >= 0) {
+       config_process_cmdline(params,numparams,prefix);
+   }
+return ret;
+}
+return ret;
+}
diff --git a/common/config/config_userapi.h b/common/config/config_userapi.h
new file mode 100644
index 0000000000000000000000000000000000000000..06e531f56c347592a87496bbcccdbafcd671216e
--- /dev/null
+++ b/common/config/config_userapi.h
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file common/config/config_userapi.h
+ * \brief: configuration module, include file to be used by the source code calling the 
+ *  configuration module to access configuration parameters
+ * \author Francois TABURET
+ * \date 2017
+ * \version 0.1
+ * \company NOKIA BellLabs France
+ * \email: francois.taburet@nokia-bell-labs.com
+ * \note
+ * \warning
+ */
+#ifndef INCLUDE_CONFIG_USERAPI_H
+#define INCLUDE_CONFIG_USERAPI_H 
+#include "config_load_configmodule.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+extern configmodule_interface_t *config_get_if(void);
+extern char * check_valptr(paramdef_t *cfgoptions, char **ptr, int length) ;
+extern void config_printhelp(paramdef_t *,int numparams);
+extern int config_process_cmdline(paramdef_t *params,int numparams, char *prefix);
+extern int config_get(paramdef_t *params,int numparams, char *prefix);
+#define config_getlist config_get_if()->getlist
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/common/config/libconfig/config_libconfig.c b/common/config/libconfig/config_libconfig.c
new file mode 100644
index 0000000000000000000000000000000000000000..797666bf0683163ec80b8de783dbc1172fd4e5ce
--- /dev/null
+++ b/common/config/libconfig/config_libconfig.c
@@ -0,0 +1,337 @@
+#define _GNU_SOURCE
+#include <libconfig.h>
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <arpa/inet.h>
+
+#include "config_libconfig.h"
+#include "config_libconfig_private.h"
+#include "../config_userapi.h"
+#include "errno.h"
+
+void config_libconfig_end(void );
+
+int read_strlist(paramdef_t *cfgoptions,config_setting_t *setting, char *cfgpath)
+{
+const char *str;
+int st;
+
+   cfgoptions->numelt=config_setting_length(setting);
+   cfgoptions->strlistptr=malloc(sizeof(char *) * (cfgoptions->numelt));
+   st=0;
+   for (int i=0; i< cfgoptions->numelt && cfgoptions->strlistptr != NULL; i++) {
+       str=config_setting_get_string_elem(setting,i);
+       if (str==NULL) {
+          printf("[LIBCONFIG] %s%i  not found in config file\n", cfgoptions->optname,i);
+       } else {
+            cfgoptions->strlistptr[i]=malloc(strlen(str)+1);
+            sprintf(cfgoptions->strlistptr[i],"%s",str);
+	    st++;
+            printf_params("[LIBCONFIG] %s%i: %s\n", cfgpath,i,cfgoptions->strlistptr[i]);
+       }
+   }
+   return st;
+}
+
+int read_intarray(paramdef_t *cfgoptions,config_setting_t *setting, char *cfgpath)
+{
+
+   cfgoptions->numelt=config_setting_length(setting);
+   
+   if (cfgoptions->numelt > 0) {
+       cfgoptions->iptr=malloc(sizeof(int) * (cfgoptions->numelt));
+       for (int i=0; i< cfgoptions->numelt && cfgoptions->iptr != NULL; i++) {
+            cfgoptions->iptr[i]=config_setting_get_int_elem(setting,i);
+            printf_params("[LIBCONFIG] %s[%i]: %i\n", cfgpath,i,cfgoptions->iptr[i]);
+       } /* for loop on array element... */
+   }
+   return cfgoptions->numelt;
+}
+
+
+
+
+int config_libconfig_get(paramdef_t *cfgoptions,int numoptions, char *prefix )
+{
+
+
+  config_setting_t *setting;
+  const char *str;
+  int i,u;
+  long long int llu;
+  int rst;
+  int status=0;
+  int notfound;
+  int fatalerror=0;
+  char *cfgpath; /* listname.[listindex].paramname */
+  int defvals=0;
+ 
+  i = (prefix ==NULL) ? 0 : strlen(prefix); 
+  cfgpath = malloc( i+ MAX_OPTNAME_SIZE +1);
+  if (cfgpath == NULL) {
+     fprintf(stderr,"[LIBCONFIG] %s %i malloc error,  %s\n", __FILE__, __LINE__,strerror(errno));
+     return -1;
+  }
+  for(i=0;i<numoptions;i++) {
+
+     if (prefix != NULL) {
+         sprintf(cfgpath,"%s.%s",prefix,cfgoptions[i].optname);
+     } else {
+         sprintf(cfgpath,"%s",cfgoptions[i].optname);
+     }
+
+     if( (cfgoptions->paramflags & PARAMFLAG_DONOTREAD) != 0) {
+         printf_params("[LIBCONFIG] %s.%s ignored\n", cfgpath,cfgoptions[i].optname );
+         continue;
+     }
+     notfound=0;
+     switch(cfgoptions[i].type)
+       {
+       	case TYPE_STRING:
+           
+           if ( config_lookup_string(&(libconfig_privdata.cfg),cfgpath, &str)) {
+              check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *));
+              check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(str)+1);
+              sprintf( *(cfgoptions[i].strptr) , "%s", str);
+              printf_params("[LIBCONFIG] %s: %s\n", cfgpath,*(cfgoptions[i].strptr) );
+           } else {
+	      if( cfgoptions[i].defstrval != NULL) {
+                 defvals++;
+                 check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].strptr)), sizeof(char *));
+                 check_valptr(&(cfgoptions[i]), cfgoptions[i].strptr, strlen(cfgoptions[i].defstrval)+1);
+                 sprintf(*(cfgoptions[i].strptr), "%s",cfgoptions[i].defstrval);
+                 printf_params("[LIBCONFIG] %s set to default value %s\n", cfgpath, *(cfgoptions[i].strptr));
+              } else {
+	         notfound=1;
+              } 
+	   }
+       break;
+       	case TYPE_STRINGLIST:
+	   setting = config_setting_lookup (config_root_setting(&(libconfig_privdata.cfg)),cfgpath );
+           if ( setting != NULL) {
+              read_strlist(&cfgoptions[i],setting,cfgpath);
+           } else {
+              if( cfgoptions[i].defstrlistval != NULL) {
+                cfgoptions[i].strlistptr=cfgoptions[i].defstrlistval;
+                defvals++;
+		for(int j=0; j<cfgoptions[i].numelt; j++)
+                     printf_params("[LIBCONFIG] %s%i set to default value %s\n", cfgpath,j, cfgoptions[i].strlistptr[j]);
+              } else {
+                notfound=1;
+              }
+	   }
+       break;
+	
+       	case TYPE_UINT:
+       	case TYPE_INT:
+           check_valptr(&(cfgoptions[i]), (char **)(&(cfgoptions[i].iptr)),sizeof(int));
+           if ( config_lookup_int(&(libconfig_privdata.cfg),cfgpath, &u)) {
+              if(cfgoptions[i].type==TYPE_UINT) {
+                 *(cfgoptions[i].uptr) = (unsigned int)u;
+                 printf_params("[LIBCONFIG] %s: %u\n", cfgpath,*(cfgoptions[i].uptr) );
+              } else {
+                 *(cfgoptions[i].iptr) = u;
+                 printf_params("[LIBCONFIG] %s: %i\n", cfgpath,*(cfgoptions[i].iptr) ); 
+              }
+           } else {
+	      if( cfgoptions[i].defuintval != NO_UINTDEFAULT) {
+                 *(cfgoptions[i].uptr)=cfgoptions[i].defuintval;
+                 defvals++;
+                 printf_params("[LIBCONFIG] %s set to default value %i\n", cfgpath, (int32_t)(*(cfgoptions[i].uptr)));
+              } else {
+	         notfound=1;
+              }
+	   }	      
+        break;
+       	case TYPE_UINT64:
+       	case TYPE_INT64:
+           check_valptr(&(cfgoptions[i]), (char **)&(cfgoptions[i].i64ptr),sizeof(long long));
+           if ( config_lookup_int64(&(libconfig_privdata.cfg),cfgpath, &llu)) {
+              if(cfgoptions[i].type==TYPE_UINT64) {
+                 *(cfgoptions[i].u64ptr) = (uint64_t)llu;
+                 printf_params("[LIBCONFIG] %s: %llu\n", cfgpath,(long long unsigned)(*(cfgoptions[i].u64ptr)) );
+              } else {
+                 *(cfgoptions[i].iptr) = llu;
+                 printf_params("[LIBCONFIG] %s: %lli\n", cfgpath,(long long unsigned)(*(cfgoptions[i].i64ptr)) ); 
+              }
+           } else {
+	      if( cfgoptions[i].defuintval != NO_UINTDEFAULT) {
+                 *(cfgoptions[i].u64ptr)=cfgoptions[i].defuintval;
+                 defvals++;
+                 printf_params("[LIBCONFIG] %s set to default value %llu\n", cfgpath, (long long unsigned)(*(cfgoptions[i].u64ptr)));
+              } else {
+	         notfound=1;
+              }
+	   }	      
+        break;        
+       	case TYPE_UINTARRAY:
+       	case TYPE_INTARRAY:
+	   setting = config_setting_lookup (config_root_setting(&(libconfig_privdata.cfg)),cfgpath );
+           if ( setting != NULL) {
+              read_intarray(&cfgoptions[i],setting,cfgpath);
+           } else {
+              if( cfgoptions[i].defintarrayval != NULL) {
+                check_valptr(&(cfgoptions[i]),(char **)&(cfgoptions[i].iptr), sizeof(int32_t));
+                cfgoptions[i].iptr=cfgoptions[i].defintarrayval;
+                defvals++;
+                for (int j=0; j<cfgoptions[i].numelt ; j++) {
+                    printf_params("[LIBCONFIG] %s[%i] set to default value %i\n", cfgpath,j,(int)cfgoptions[i].iptr[j]);
+                }
+              } else {
+                notfound=1;
+              }
+	   }    
+        break;
+       	case TYPE_IPV4ADDR:
+           check_valptr(&(cfgoptions[i]),(char **)&(cfgoptions[i].uptr), sizeof(int));
+           if ( !config_lookup_string(&(libconfig_privdata.cfg),cfgpath, &str)) {
+	      str=cfgoptions[i].defstrval;
+              defvals++;
+	      printf_params("[LIBCONFIG] %s set to default value %s\n", cfgpath, str);
+	   }
+	   if (str != NULL) {
+              rst=inet_pton(AF_INET, str,cfgoptions[i].uptr );
+	      if (rst == 1 && *(cfgoptions[i].uptr) > 0) {
+                 printf_params("[LIBCONFIG] %s: %s\n", cfgpath,str );
+              } else {
+		 if ( strncmp(str,ANY_IPV4ADDR_STRING,sizeof(ANY_IPV4ADDR_STRING)) == 0) {
+		    printf_params("[LIBCONFIG] %s:%s (INADDR_ANY) \n",cfgpath,str);
+		    *cfgoptions[i].uptr=INADDR_ANY;
+		 } else {
+		    fprintf(stderr,"[LIBCONFIG] %s not valid for %s \n", str, cfgpath);
+                    fatalerror=1;
+                 }
+              }
+           } else {
+	      notfound=1;
+	   }
+              
+        break;
+       	case TYPE_LIST:
+	   setting = config_setting_lookup (config_root_setting(&(libconfig_privdata.cfg)),cfgpath );
+           if ( setting) {
+              cfgoptions[i].numelt=config_setting_length(setting);
+           } else {
+              notfound=1;
+	   }
+       break;
+       default:
+            fprintf(stderr,"[LIBCONFIG] %s type %i  not supported\n", cfgpath,cfgoptions[i].type);
+            fatalerror=1;
+       break;
+       } /* switch on param type */
+    if( notfound == 1) {
+        printf("[LIBCONFIG] %s not found in %s ", cfgpath,libconfig_privdata.configfile );
+        if ( (cfgoptions[i].paramflags & PARAMFLAG_MANDATORY) != 0) {
+            fatalerror=1;
+            printf("  mandatory parameter missing\n");
+        } else {
+           printf("\n");
+        }
+    } else {
+      status++;
+    }
+  } /* for loop on options */
+  printf("[LIBCONFIG] %s: %i/%i parameters successfully set, (%i to default value)\n",
+         ((prefix == NULL)?"(root)":prefix), 
+         status,numoptions,defvals );
+  if (fatalerror == 1) {
+      fprintf(stderr,"[LIBCONFIG] fatal errors found when processing  %s \n", libconfig_privdata.configfile );
+      config_libconfig_end();
+      end_configmodule();
+  }
+  free(cfgpath);
+  return status;
+}
+
+int config_libconfig_getlist(paramlist_def_t *ParamList, 
+                                   paramdef_t *params, int numparams, char *prefix)
+{
+config_setting_t *setting;
+int i,j,status;
+char *listpath=NULL;
+char cfgpath[MAX_OPTNAME_SIZE*2 + 6]; /* prefix.listname.[listindex] */
+
+    if (prefix != NULL)
+        {
+        i=asprintf(&listpath ,"%s.%s",prefix,ParamList->listname);
+        }
+    else
+        {
+        i=asprintf(&listpath ,"%s",ParamList->listname);
+        }
+    setting = config_lookup(&(libconfig_privdata.cfg), listpath);
+    if ( setting) {
+        status = ParamList->numelt = config_setting_length(setting);
+        printf_params("[LIBCONFIG] %i %s in config file %s \n", 
+               ParamList->numelt,listpath,libconfig_privdata.configfile );
+    } else {
+        printf("[LIBCONFIG] list %s not found in config file %s \n", 
+               listpath,libconfig_privdata.configfile );
+        ParamList->numelt= 0;
+        status = -1;
+    }
+    if (ParamList->numelt > 0 && params != NULL) {
+        ParamList->paramarray = malloc(ParamList->numelt * sizeof(paramdef_t *));
+        if ( ParamList->paramarray != NULL) {
+             config_get_if()->ptrs[config_get_if()->numptrs] = (char *)(ParamList->paramarray); 
+             config_get_if()->numptrs++;
+        } else {
+             fprintf (stderr,"[LIBCONFIG] %s %d malloc error\n",__FILE__, __LINE__);
+             exit(-1);
+        }
+        for (i=0 ; i < ParamList->numelt ; i++) {
+            ParamList->paramarray[i] = malloc(numparams * sizeof(paramdef_t));
+            if ( ParamList->paramarray[i] != NULL) {
+                 config_get_if()->ptrs[config_get_if()->numptrs] = (char *)(ParamList->paramarray[i]); 
+                 config_get_if()->numptrs++;
+            } else {
+                 fprintf (stderr,"[LIBCONFIG] %s %d malloc error\n",__FILE__, __LINE__);
+                 exit(-1);
+            }
+            
+            memcpy(ParamList->paramarray[i], params, sizeof(paramdef_t)*numparams);
+            for (j=0;j<numparams;j++) {
+                ParamList->paramarray[i][j].strptr = NULL ;
+                } 
+            sprintf(cfgpath,"%s.[%i]",listpath,i);
+            config_libconfig_get(ParamList->paramarray[i], numparams, cfgpath );
+        } /* for i... */
+    } /* ParamList->numelt > 0 && params != NULL */
+    if (listpath != NULL)
+        free(listpath);
+    return status;
+}
+
+int config_libconfig_init(char *cfgP[], int numP)
+{
+  config_init(&(libconfig_privdata.cfg));
+  libconfig_privdata.configfile = strdup((char *)cfgP[0]);
+  config_get_if()->numptrs=0;
+ 
+  memset(config_get_if()->ptrs,0,sizeof(void *) * CONFIG_MAX_ALLOCATEDPTRS);
+
+  /* Read the file. If there is an error, report it and exit. */
+  if(! config_read_file(&(libconfig_privdata.cfg), libconfig_privdata.configfile)) {
+    fprintf(stderr,"[LIBCONFIG] %s:%d - %s\n", config_error_file(&(libconfig_privdata.cfg)),
+            config_error_line(&(libconfig_privdata.cfg)), config_error_text(&(libconfig_privdata.cfg)));
+    config_destroy(&(libconfig_privdata.cfg));
+    printf( "\n");
+    return -1;
+  }
+  
+
+  return 0;
+}
+
+
+void config_libconfig_end(void )
+{
+  config_destroy(&(libconfig_privdata.cfg));
+  if ( libconfig_privdata.configfile != NULL ) {
+     free(libconfig_privdata.configfile);
+  } 
+  
+}
diff --git a/common/config/libconfig/config_libconfig.h b/common/config/libconfig/config_libconfig.h
new file mode 100644
index 0000000000000000000000000000000000000000..8013d602cf6d1da96ee79ac6e66aede9958c2495
--- /dev/null
+++ b/common/config/libconfig/config_libconfig.h
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file common/config/libconfig/config_libconfig.c
+ * \brief configuration module, include file for libconfig implementation 
+ * \author Francois TABURET
+ * \date 2017
+ * \version 0.1
+ * \company NOKIA BellLabs France
+ * \email: francois.taburet@nokia-bell-labs.com
+ * \note
+ * \warning
+ */
+#ifndef INCLUDE_CONFIG_LIBCONFIG_H
+#define INCLUDE_CONFIG_LIBCONFIG_H
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include "common/config/config_paramdesc.h"
+
+
+
+ 
+typedef struct libconfig_privatedata {
+      char *configfile;
+      config_t cfg;
+} libconfig_privatedata_t;
+ 
+#ifdef __cplusplus
+}
+#endif
+#endif  /* INCLUDE_CONFIG_LIBCONFIG_H */
diff --git a/common/config/libconfig/config_libconfig_private.h b/common/config/libconfig/config_libconfig_private.h
new file mode 100644
index 0000000000000000000000000000000000000000..022e0e6330457aefce694cdc778107a87c8b1873
--- /dev/null
+++ b/common/config/libconfig/config_libconfig_private.h
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file common/config/libconfig/config_libconfig_private.h
+ * \brief configuration module, include file for libconfig implementation 
+ * \author Francois TABURET
+ * \date 2017
+ * \version 0.1
+ * \company NOKIA BellLabs France
+ * \email: francois.taburet@nokia-bell-labs.com
+ * \note
+ * \warning
+ */
+
+
+static libconfig_privatedata_t libconfig_privdata;
+
+
+
+      
+
diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c
index be55afa231dee67312fe60e8b8ce9092cf9d481e..12e66d86e4f724006b5920e949103f25dbec8043 100644
--- a/openair2/ENB_APP/enb_config.c
+++ b/openair2/ENB_APP/enb_config.c
@@ -53,7 +53,7 @@
 #include "LAYER2/MAC/extern.h"
 #include "PHY/extern.h"
 #include "targets/ARCH/ETHERNET/USERSPACE/LIB/ethernet_lib.h"
-
+#include "enb_paramdef.h"
 /* those macros are here to help diagnose problems in configuration files
  * if the lookup fails, a warning is printed
  * (yes we can use the function name for the macro itself, the C preprocessor
@@ -75,276 +75,6 @@
   (config_setting_lookup_string(setting, name, value) ||		\
    (printf("WARNING: setting '%s' not found in configuration file\n", name), 0))
 
-#define ENB_CONFIG_STRING_ACTIVE_ENBS                   "Active_eNBs"
-
-#define ENB_CONFIG_STRING_ENB_LIST                      "eNBs"
-#define ENB_CONFIG_STRING_ENB_ID                        "eNB_ID"
-#define ENB_CONFIG_STRING_CELL_TYPE                     "cell_type"
-#define ENB_CONFIG_STRING_ENB_NAME                      "eNB_name"
-
-#define ENB_CONFIG_STRING_TRACKING_AREA_CODE            "tracking_area_code"
-#define ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE           "mobile_country_code"
-#define ENB_CONFIG_STRING_MOBILE_NETWORK_CODE           "mobile_network_code"
-
-#define ENB_CONFIG_STRING_LOCAL_S_IF_NAME               "local_s_if_name"
-#define ENB_CONFIG_STRING_LOCAL_S_ADDRESS               "local_s_address"
-#define ENB_CONFIG_STRING_REMOTE_S_ADDRESS              "remote_s_address"
-#define ENB_CONFIG_STRING_LOCAL_S_PORTC                 "local_s_portc"
-#define ENB_CONFIG_STRING_REMOTE_S_PORTC                "remote_s_portc"
-#define ENB_CONFIG_STRING_LOCAL_S_PORTD                 "local_s_portd"
-#define ENB_CONFIG_STRING_REMOTE_S_PORTD                "remote_s_portd"
-#define ENB_CONFIG_STRING_TRANSPORT_S_PREFERENCE        "tr_s_preference"
-
-
-#define ENB_CONFIG_STRING_COMPONENT_CARRIERS                            "component_carriers"
-
-#define ENB_CONFIG_STRING_CC_NODE_FUNCTION                              "node_function"
-#define ENB_CONFIG_STRING_CC_NODE_TIMING                                "node_timing"   
-#define ENB_CONFIG_STRING_CC_NODE_SYNCH_REF                             "node_synch_ref"   
-
-#define ENB_CONFIG_STRING_FRAME_TYPE                                    "frame_type"
-#define ENB_CONFIG_STRING_TDD_CONFIG                                    "tdd_config"
-#define ENB_CONFIG_STRING_TDD_CONFIG_S                                  "tdd_config_s"
-#define ENB_CONFIG_STRING_PREFIX_TYPE                                   "prefix_type"
-#define ENB_CONFIG_STRING_PBCH_REPETITION                               "pbch_repetition"
-#define ENB_CONFIG_STRING_EUTRA_BAND                                    "eutra_band"
-#define ENB_CONFIG_STRING_DOWNLINK_FREQUENCY                            "downlink_frequency"
-#define ENB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET                       "uplink_frequency_offset"
-
-#define ENB_CONFIG_STRING_NID_CELL                                      "Nid_cell"
-#define ENB_CONFIG_STRING_N_RB_DL                                       "N_RB_DL"
-#define ENB_CONFIG_STRING_CELL_MBSFN                                  "Nid_cell_mbsfn"
-#define ENB_CONFIG_STRING_NB_ANT_PORTS                              "nb_antenna_ports"
-#define ENB_CONFIG_STRING_NB_ANT_TX                                 "nb_antennas_tx"
-#define ENB_CONFIG_STRING_NB_ANT_RX                                 "nb_antennas_rx"
-#define ENB_CONFIG_STRING_TX_GAIN                                       "tx_gain"
-#define ENB_CONFIG_STRING_RX_GAIN                                       "rx_gain"
-#define ENB_CONFIG_STRING_PRACH_ROOT                                  "prach_root"
-#define ENB_CONFIG_STRING_PRACH_CONFIG_INDEX                          "prach_config_index"
-#define ENB_CONFIG_STRING_PRACH_HIGH_SPEED                          "prach_high_speed"
-#define ENB_CONFIG_STRING_PRACH_ZERO_CORRELATION                  "prach_zero_correlation"
-#define ENB_CONFIG_STRING_PRACH_FREQ_OFFSET                         "prach_freq_offset"
-#define ENB_CONFIG_STRING_PUCCH_DELTA_SHIFT                         "pucch_delta_shift"
-#define ENB_CONFIG_STRING_PUCCH_NRB_CQI                                 "pucch_nRB_CQI"
-#define ENB_CONFIG_STRING_PUCCH_NCS_AN                                  "pucch_nCS_AN"
-#if !defined(Rel10) && !defined(Rel14)
-#define ENB_CONFIG_STRING_PUCCH_N1_AN                                 "pucch_n1_AN"
-#endif
-#define ENB_CONFIG_STRING_PDSCH_RS_EPRE                                 "pdsch_referenceSignalPower"
-#define ENB_CONFIG_STRING_PDSCH_PB                                  "pdsch_p_b"
-#define ENB_CONFIG_STRING_PUSCH_N_SB                                  "pusch_n_SB"
-#define ENB_CONFIG_STRING_PUSCH_HOPPINGMODE                             "pusch_hoppingMode"
-#define ENB_CONFIG_STRING_PUSCH_HOPPINGOFFSET                           "pusch_hoppingOffset"
-#define ENB_CONFIG_STRING_PUSCH_ENABLE64QAM                         "pusch_enable64QAM"
-#define ENB_CONFIG_STRING_PUSCH_GROUP_HOPPING_EN                  "pusch_groupHoppingEnabled"
-#define ENB_CONFIG_STRING_PUSCH_GROUP_ASSIGNMENT                  "pusch_groupAssignment"
-#define ENB_CONFIG_STRING_PUSCH_SEQUENCE_HOPPING_EN                 "pusch_sequenceHoppingEnabled"
-#define ENB_CONFIG_STRING_PUSCH_NDMRS1                                  "pusch_nDMRS1"
-#define ENB_CONFIG_STRING_PHICH_DURATION                          "phich_duration"
-#define ENB_CONFIG_STRING_PHICH_RESOURCE                          "phich_resource"
-#define ENB_CONFIG_STRING_SRS_ENABLE                                  "srs_enable"
-#define ENB_CONFIG_STRING_SRS_BANDWIDTH_CONFIG                          "srs_BandwidthConfig"
-#define ENB_CONFIG_STRING_SRS_SUBFRAME_CONFIG                         "srs_SubframeConfig"
-#define ENB_CONFIG_STRING_SRS_ACKNACKST_CONFIG                          "srs_ackNackST"
-#define ENB_CONFIG_STRING_SRS_MAXUPPTS                                  "srs_MaxUpPts"
-#define ENB_CONFIG_STRING_PUSCH_PO_NOMINAL                          "pusch_p0_Nominal"
-#define ENB_CONFIG_STRING_PUSCH_ALPHA                                 "pusch_alpha"
-#define ENB_CONFIG_STRING_PUCCH_PO_NOMINAL                          "pucch_p0_Nominal"
-#define ENB_CONFIG_STRING_MSG3_DELTA_PREAMBLE                         "msg3_delta_Preamble"
-#define ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT1                          "pucch_deltaF_Format1"
-#define ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT1b                         "pucch_deltaF_Format1b"
-#define ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2                          "pucch_deltaF_Format2"
-#define ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2A                         "pucch_deltaF_Format2a"
-#define ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2B                         "pucch_deltaF_Format2b"
-#define ENB_CONFIG_STRING_RACH_NUM_RA_PREAMBLES                         "rach_numberOfRA_Preambles"
-#define ENB_CONFIG_STRING_RACH_PREAMBLESGROUPACONFIG                  "rach_preamblesGroupAConfig"
-#define ENB_CONFIG_STRING_RACH_SIZEOFRA_PREAMBLESGROUPA                 "rach_sizeOfRA_PreamblesGroupA"
-#define ENB_CONFIG_STRING_RACH_MESSAGESIZEGROUPA                        "rach_messageSizeGroupA"
-#define ENB_CONFIG_STRING_RACH_MESSAGEPOWEROFFSETGROUPB                 "rach_messagePowerOffsetGroupB"
-#define ENB_CONFIG_STRING_RACH_POWERRAMPINGSTEP                         "rach_powerRampingStep"
-#define ENB_CONFIG_STRING_RACH_PREAMBLEINITIALRECEIVEDTARGETPOWER "rach_preambleInitialReceivedTargetPower"
-#define ENB_CONFIG_STRING_RACH_PREAMBLETRANSMAX                         "rach_preambleTransMax"
-#define ENB_CONFIG_STRING_RACH_RARESPONSEWINDOWSIZE                 "rach_raResponseWindowSize"
-#define ENB_CONFIG_STRING_RACH_MACCONTENTIONRESOLUTIONTIMER         "rach_macContentionResolutionTimer"
-#define ENB_CONFIG_STRING_RACH_MAXHARQMSG3TX                          "rach_maxHARQ_Msg3Tx"
-#define ENB_CONFIG_STRING_PCCH_DEFAULT_PAGING_CYCLE                     "pcch_default_PagingCycle"
-#define ENB_CONFIG_STRING_PCCH_NB                                       "pcch_nB"
-#define ENB_CONFIG_STRING_BCCH_MODIFICATIONPERIODCOEFF                  "bcch_modificationPeriodCoeff"
-#define ENB_CONFIG_STRING_UETIMERS_T300                                 "ue_TimersAndConstants_t300"
-#define ENB_CONFIG_STRING_UETIMERS_T301                                 "ue_TimersAndConstants_t301"
-#define ENB_CONFIG_STRING_UETIMERS_T310                                 "ue_TimersAndConstants_t310"
-#define ENB_CONFIG_STRING_UETIMERS_T311                                 "ue_TimersAndConstants_t311"
-#define ENB_CONFIG_STRING_UETIMERS_N310                                 "ue_TimersAndConstants_n310"
-#define ENB_CONFIG_STRING_UETIMERS_N311                                 "ue_TimersAndConstants_n311"
-#define ENB_CONFIG_STRING_UE_TRANSMISSION_MODE                          "ue_TransmissionMode"
-
-#define ENB_CONFIG_STRING_SRB1                                          "srb1_parameters"
-#define ENB_CONFIG_STRING_SRB1_TIMER_POLL_RETRANSMIT                    "timer_poll_retransmit"
-#define ENB_CONFIG_STRING_SRB1_TIMER_REORDERING                         "timer_reordering"
-#define ENB_CONFIG_STRING_SRB1_TIMER_STATUS_PROHIBIT                    "timer_status_prohibit"
-#define ENB_CONFIG_STRING_SRB1_POLL_PDU                                 "poll_pdu"
-#define ENB_CONFIG_STRING_SRB1_POLL_BYTE                                "poll_byte"
-#define ENB_CONFIG_STRING_SRB1_MAX_RETX_THRESHOLD                       "max_retx_threshold"
-#define ENB_CONFIG_STRING_MME_IP_ADDRESS                "mme_ip_address"
-#define ENB_CONFIG_STRING_MME_IPV4_ADDRESS              "ipv4"
-#define ENB_CONFIG_STRING_MME_IPV6_ADDRESS              "ipv6"
-#define ENB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE         "active"
-#define ENB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE     "preference"
-
-#define ENB_CONFIG_STRING_SCTP_CONFIG                    "SCTP"
-#define ENB_CONFIG_STRING_SCTP_INSTREAMS                 "SCTP_INSTREAMS"
-#define ENB_CONFIG_STRING_SCTP_OUTSTREAMS                "SCTP_OUTSTREAMS"
-
-#define ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG     "NETWORK_INTERFACES"
-#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME "ENB_INTERFACE_NAME_FOR_S1_MME"
-#define ENB_CONFIG_STRING_ENB_IPV4_ADDRESS_FOR_S1_MME   "ENB_IPV4_ADDRESS_FOR_S1_MME"
-#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1U    "ENB_INTERFACE_NAME_FOR_S1U"
-#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U         "ENB_IPV4_ADDRESS_FOR_S1U"
-#define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U              "ENB_PORT_FOR_S1U"
-
-#define ENB_CONFIG_STRING_NETWORK_CONTROLLER_CONFIG     "NETWORK_CONTROLLER"
-#define ENB_CONFIG_STRING_FLEXRAN_AGENT_INTERFACE_NAME      "FLEXRAN_AGENT_INTERFACE_NAME"
-#define ENB_CONFIG_STRING_FLEXRAN_AGENT_IPV4_ADDRESS        "FLEXRAN_AGENT_IPV4_ADDRESS"
-#define ENB_CONFIG_STRING_FLEXRAN_AGENT_PORT                "FLEXRAN_AGENT_PORT"
-#define ENB_CONFIG_STRING_FLEXRAN_AGENT_CACHE               "FLEXRAN_AGENT_CACHE"
-
-
-
-
-#define ENB_CONFIG_STRING_ASN1_VERBOSITY                   "Asn1_verbosity"
-#define ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE              "none"
-#define ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING          "annoying"
-#define ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO              "info"
-
-// OTG config per ENB-UE DL
-#define ENB_CONF_STRING_OTG_CONFIG                         "otg_config"
-#define ENB_CONF_STRING_OTG_UE_ID                          "ue_id"
-#define ENB_CONF_STRING_OTG_APP_TYPE                       "app_type"
-#define ENB_CONF_STRING_OTG_BG_TRAFFIC                     "bg_traffic"
-
-// per eNB configuration
-#define ENB_CONFIG_STRING_LOG_CONFIG                       "log_config"
-#define ENB_CONFIG_STRING_GLOBAL_LOG_LEVEL                 "global_log_level"
-#define ENB_CONFIG_STRING_GLOBAL_LOG_VERBOSITY             "global_log_verbosity"
-#define ENB_CONFIG_STRING_HW_LOG_LEVEL                     "hw_log_level"
-#define ENB_CONFIG_STRING_HW_LOG_VERBOSITY                 "hw_log_verbosity"
-#define ENB_CONFIG_STRING_PHY_LOG_LEVEL                    "phy_log_level"
-#define ENB_CONFIG_STRING_PHY_LOG_VERBOSITY                "phy_log_verbosity"
-#define ENB_CONFIG_STRING_MAC_LOG_LEVEL                    "mac_log_level"
-#define ENB_CONFIG_STRING_MAC_LOG_VERBOSITY                "mac_log_verbosity"
-#define ENB_CONFIG_STRING_RLC_LOG_LEVEL                    "rlc_log_level"
-#define ENB_CONFIG_STRING_RLC_LOG_VERBOSITY                "rlc_log_verbosity"
-#define ENB_CONFIG_STRING_PDCP_LOG_LEVEL                   "pdcp_log_level"
-#define ENB_CONFIG_STRING_PDCP_LOG_VERBOSITY               "pdcp_log_verbosity"
-#define ENB_CONFIG_STRING_RRC_LOG_LEVEL                    "rrc_log_level"
-#define ENB_CONFIG_STRING_RRC_LOG_VERBOSITY                "rrc_log_verbosity"
-#define ENB_CONFIG_STRING_GTPU_LOG_LEVEL                   "gtpu_log_level"
-#define ENB_CONFIG_STRING_GTPU_LOG_VERBOSITY               "gtpu_log_verbosity"
-#define ENB_CONFIG_STRING_UDP_LOG_LEVEL                    "udp_log_level"
-#define ENB_CONFIG_STRING_UDP_LOG_VERBOSITY                "udp_log_verbosity"
-#define ENB_CONFIG_STRING_OSA_LOG_LEVEL                    "osa_log_level"
-#define ENB_CONFIG_STRING_OSA_LOG_VERBOSITY                "osa_log_verbosity"
-
-#define CONFIG_STRING_MACRLC_LIST                          "MACRLCs"
-#define CONFIG_STRING_MACRLC_CONFIG                        "macrlc_config"
-#define CONFIG_STRING_MACRLC_CC                            "num_cc"
-#define CONFIG_STRING_MACRLC_LOCAL_N_IF_NAME               "local_n_if_name"
-#define CONFIG_STRING_MACRLC_LOCAL_N_ADDRESS               "local_n_address"
-#define CONFIG_STRING_MACRLC_REMOTE_N_ADDRESS              "remote_n_address"
-#define CONFIG_STRING_MACRLC_LOCAL_N_PORTC                 "local_n_portc"
-#define CONFIG_STRING_MACRLC_REMOTE_N_PORTC                "remote_n_portc"
-#define CONFIG_STRING_MACRLC_LOCAL_N_PORTD                 "local_n_portd"
-#define CONFIG_STRING_MACRLC_REMOTE_N_PORTD                "remote_n_portd"
-#define CONFIG_STRING_MACRLC_LOCAL_S_IF_NAME               "local_s_if_name"
-#define CONFIG_STRING_MACRLC_LOCAL_S_ADDRESS               "local_s_address"
-#define CONFIG_STRING_MACRLC_REMOTE_S_ADDRESS              "remote_s_address"
-#define CONFIG_STRING_MACRLC_LOCAL_S_PORTC                 "local_s_portc"
-#define CONFIG_STRING_MACRLC_REMOTE_S_PORTC                "remote_s_portc"
-#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD                 "local_s_portd"
-#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD                "remote_s_portd"
-#define CONFIG_STRING_MACRLC_TRANSPORT_S_PREFERENCE        "tr_s_preference"
-#define CONFIG_STRING_MACRLC_TRANSPORT_N_PREFERENCE        "tr_n_preference"
-
-#define CONFIG_STRING_L1_LIST                              "L1s"
-#define CONFIG_STRING_L1_CONFIG                            "l1_config"
-#define CONFIG_STRING_L1_CC                                "num_cc"
-#define CONFIG_STRING_L1_LOCAL_N_IF_NAME                   "local_n_if_name"
-#define CONFIG_STRING_L1_LOCAL_N_ADDRESS                   "local_n_address"
-#define CONFIG_STRING_L1_REMOTE_N_ADDRESS                  "remote_n_address"
-#define CONFIG_STRING_L1_LOCAL_N_PORTC                     "local_n_portc"
-#define CONFIG_STRING_L1_REMOTE_N_PORTC                    "remote_n_portc"
-#define CONFIG_STRING_L1_LOCAL_N_PORTD                     "local_n_portd"
-#define CONFIG_STRING_L1_REMOTE_N_PORTD                    "remote_n_portd"
-#define CONFIG_STRING_L1_TRANSPORT_N_PREFERENCE            "tr_n_preference"
-
-#define CONFIG_STRING_ACTIVE_RUS                  "Active_RUs"
-#define CONFIG_STRING_RU_LIST                     "RUs"
-#define CONFIG_STRING_RU_CONFIG                   "ru_config"
-#define CONFIG_STRING_RU_LOCAL_IF_NAME            "local_if_name"
-#define CONFIG_STRING_RU_LOCAL_ADDRESS            "local_address"
-#define CONFIG_STRING_RU_REMOTE_ADDRESS           "remote_address"
-#define CONFIG_STRING_RU_LOCAL_PORTC              "local_portc"
-#define CONFIG_STRING_RU_REMOTE_PORTC             "remote_portc"
-#define CONFIG_STRING_RU_LOCAL_PORTD              "local_portd"
-#define CONFIG_STRING_RU_REMOTE_PORTD             "remote_portd"
-#define CONFIG_STRING_RU_LOCAL_RF                 "local_rf"
-#define CONFIG_STRING_RU_TRANSPORT_PREFERENCE     "tr_preference"
-#define CONFIG_STRING_RU_BAND_LIST                "bands"
-#define CONFIG_STRING_RU_ENB_LIST                 "eNB_instances"
-#define CONFIG_STRING_RU_NB_TX                    "nb_tx"
-#define CONFIG_STRING_RU_NB_RX                    "nb_rx"
-#define CONFIG_STRING_RU_ATT_TX                   "att_tx"
-#define CONFIG_STRING_RU_ATT_RX                   "att_rx"
-#define CONFIG_STRING_RU_MAX_RS_EPRE              "max_pdschReferenceSignalPower"
-#define CONFIG_STRING_RU_MAX_RXGAIN               "max_rxgain"
-#define CONFIG_STRING_RU_IF_COMPRESSION           "if_compression"
-
-#define KHz (1000UL)
-#define MHz (1000 * KHz)
-
-typedef struct eutra_band_s {
-  int16_t             band;
-  uint32_t            ul_min;
-  uint32_t            ul_max;
-  uint32_t            dl_min;
-  uint32_t            dl_max;
-  lte_frame_type_t    frame_type;
-} eutra_band_t;
-
-static const eutra_band_t eutra_bands[] = {
-  { 1, 1920    * MHz, 1980    * MHz, 2110    * MHz, 2170    * MHz, FDD},
-  { 2, 1850    * MHz, 1910    * MHz, 1930    * MHz, 1990    * MHz, FDD},
-  { 3, 1710    * MHz, 1785    * MHz, 1805    * MHz, 1880    * MHz, FDD},
-  { 4, 1710    * MHz, 1755    * MHz, 2110    * MHz, 2155    * MHz, FDD},
-  { 5,  824    * MHz,  849    * MHz,  869    * MHz,  894    * MHz, FDD},
-  { 6,  830    * MHz,  840    * MHz,  875    * MHz,  885    * MHz, FDD},
-  { 7, 2500    * MHz, 2570    * MHz, 2620    * MHz, 2690    * MHz, FDD},
-  { 8,  880    * MHz,  915    * MHz,  925    * MHz,  960    * MHz, FDD},
-  { 9, 1749900 * KHz, 1784900 * KHz, 1844900 * KHz, 1879900 * KHz, FDD},
-  {10, 1710    * MHz, 1770    * MHz, 2110    * MHz, 2170    * MHz, FDD},
-  {11, 1427900 * KHz, 1452900 * KHz, 1475900 * KHz, 1500900 * KHz, FDD},
-  {12,  698    * MHz,  716    * MHz,  728    * MHz,  746    * MHz, FDD},
-  {13,  777    * MHz,  787    * MHz,  746    * MHz,  756    * MHz, FDD},
-  {14,  788    * MHz,  798    * MHz,  758    * MHz,  768    * MHz, FDD},
-
-  {17,  704    * MHz,  716    * MHz,  734    * MHz,  746    * MHz, FDD},
-  {20,  832    * MHz,  862    * MHz,  791    * MHz,  821    * MHz, FDD},
-  {33, 1900    * MHz, 1920    * MHz, 1900    * MHz, 1920    * MHz, TDD},
-  {33, 1900    * MHz, 1920    * MHz, 1900    * MHz, 1920    * MHz, TDD},
-  {34, 2010    * MHz, 2025    * MHz, 2010    * MHz, 2025    * MHz, TDD},
-  {35, 1850    * MHz, 1910    * MHz, 1850    * MHz, 1910    * MHz, TDD},
-  {36, 1930    * MHz, 1990    * MHz, 1930    * MHz, 1990    * MHz, TDD},
-  {37, 1910    * MHz, 1930    * MHz, 1910    * MHz, 1930    * MHz, TDD},
-  {38, 2570    * MHz, 2620    * MHz, 2570    * MHz, 2630    * MHz, TDD},
-  {39, 1880    * MHz, 1920    * MHz, 1880    * MHz, 1920    * MHz, TDD},
-  {40, 2300    * MHz, 2400    * MHz, 2300    * MHz, 2400    * MHz, TDD},
-  {41, 2496    * MHz, 2690    * MHz, 2496    * MHz, 2690    * MHz, TDD},
-  {42, 3400    * MHz, 3600    * MHz, 3400    * MHz, 3600    * MHz, TDD},
-  {43, 3600    * MHz, 3800    * MHz, 3600    * MHz, 3800    * MHz, TDD},
-  {44, 703    * MHz, 803    * MHz, 703    * MHz, 803    * MHz, TDD},
-};
-
-
 
 
 static int enb_check_band_frequencies(char* lib_config_file_name_pP,
@@ -387,26 +117,6 @@ static int enb_check_band_frequencies(char* lib_config_file_name_pP,
   return errors;
 }
 
-#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
-extern int asn_debug;
-extern int asn1_xer_print;
-#endif
-
-#ifdef LIBCONFIG_LONG
-#define libconfig_int long
-#else
-#define libconfig_int int
-#endif
-
-typedef enum {
-  RU     = 0,
-  L1     = 1,
-  L2     = 2,
-  L3     = 3,
-  S1     = 4,
-  lastel = 5
-} RC_config_functions_t;
-
 void RCconfig_RU(void);
 void RCconfig_L1(void);
 void RCconfig_macrlc(void);
diff --git a/openair2/ENB_APP/enb_paramdef.h b/openair2/ENB_APP/enb_paramdef.h
new file mode 100755
index 0000000000000000000000000000000000000000..439b70c364152b48e0152b06aeac34a84a767c27
--- /dev/null
+++ b/openair2/ENB_APP/enb_paramdef.h
@@ -0,0 +1,652 @@
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.0  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+/*! \file openair2/ENB_APP/enb_paramdef.f
+ * \brief definition of configuration parameters for all eNodeB modules 
+ * \author Francois TABURET
+ * \date 2017
+ * \version 0.1
+ * \company NOKIA BellLabs France
+ * \email: francois.taburet@nokia-bell-labs.com
+ * \note
+ * \warning
+ */
+
+#include "common/config/config_paramdesc.h"
+
+
+
+
+
+
+
+
+
+#define ENB_CONFIG_STRING_CC_NODE_FUNCTION                              "node_function"
+#define ENB_CONFIG_STRING_CC_NODE_TIMING                                "node_timing"   
+#define ENB_CONFIG_STRING_CC_NODE_SYNCH_REF                             "node_synch_ref"   
+
+
+// OTG config per ENB-UE DL
+#define ENB_CONF_STRING_OTG_CONFIG                         "otg_config"
+#define ENB_CONF_STRING_OTG_UE_ID                          "ue_id"
+#define ENB_CONF_STRING_OTG_APP_TYPE                       "app_type"
+#define ENB_CONF_STRING_OTG_BG_TRAFFIC                     "bg_traffic"
+
+// per eNB configuration
+#define ENB_CONFIG_STRING_LOG_CONFIG                       "log_config"
+#define ENB_CONFIG_STRING_GLOBAL_LOG_LEVEL                 "global_log_level"
+#define ENB_CONFIG_STRING_GLOBAL_LOG_VERBOSITY             "global_log_verbosity"
+#define ENB_CONFIG_STRING_HW_LOG_LEVEL                     "hw_log_level"
+#define ENB_CONFIG_STRING_HW_LOG_VERBOSITY                 "hw_log_verbosity"
+#define ENB_CONFIG_STRING_PHY_LOG_LEVEL                    "phy_log_level"
+#define ENB_CONFIG_STRING_PHY_LOG_VERBOSITY                "phy_log_verbosity"
+#define ENB_CONFIG_STRING_MAC_LOG_LEVEL                    "mac_log_level"
+#define ENB_CONFIG_STRING_MAC_LOG_VERBOSITY                "mac_log_verbosity"
+#define ENB_CONFIG_STRING_RLC_LOG_LEVEL                    "rlc_log_level"
+#define ENB_CONFIG_STRING_RLC_LOG_VERBOSITY                "rlc_log_verbosity"
+#define ENB_CONFIG_STRING_PDCP_LOG_LEVEL                   "pdcp_log_level"
+#define ENB_CONFIG_STRING_PDCP_LOG_VERBOSITY               "pdcp_log_verbosity"
+#define ENB_CONFIG_STRING_RRC_LOG_LEVEL                    "rrc_log_level"
+#define ENB_CONFIG_STRING_RRC_LOG_VERBOSITY                "rrc_log_verbosity"
+#define ENB_CONFIG_STRING_GTPU_LOG_LEVEL                   "gtpu_log_level"
+#define ENB_CONFIG_STRING_GTPU_LOG_VERBOSITY               "gtpu_log_verbosity"
+#define ENB_CONFIG_STRING_UDP_LOG_LEVEL                    "udp_log_level"
+#define ENB_CONFIG_STRING_UDP_LOG_VERBOSITY                "udp_log_verbosity"
+#define ENB_CONFIG_STRING_OSA_LOG_LEVEL                    "osa_log_level"
+#define ENB_CONFIG_STRING_OSA_LOG_VERBOSITY                "osa_log_verbosity"
+
+
+
+
+#define KHz (1000UL)
+#define MHz (1000 * KHz)
+
+typedef struct eutra_band_s {
+  int16_t             band;
+  uint32_t            ul_min;
+  uint32_t            ul_max;
+  uint32_t            dl_min;
+  uint32_t            dl_max;
+  lte_frame_type_t    frame_type;
+} eutra_band_t;
+
+static const eutra_band_t eutra_bands[] = {
+  { 1, 1920    * MHz, 1980    * MHz, 2110    * MHz, 2170    * MHz, FDD},
+  { 2, 1850    * MHz, 1910    * MHz, 1930    * MHz, 1990    * MHz, FDD},
+  { 3, 1710    * MHz, 1785    * MHz, 1805    * MHz, 1880    * MHz, FDD},
+  { 4, 1710    * MHz, 1755    * MHz, 2110    * MHz, 2155    * MHz, FDD},
+  { 5,  824    * MHz,  849    * MHz,  869    * MHz,  894    * MHz, FDD},
+  { 6,  830    * MHz,  840    * MHz,  875    * MHz,  885    * MHz, FDD},
+  { 7, 2500    * MHz, 2570    * MHz, 2620    * MHz, 2690    * MHz, FDD},
+  { 8,  880    * MHz,  915    * MHz,  925    * MHz,  960    * MHz, FDD},
+  { 9, 1749900 * KHz, 1784900 * KHz, 1844900 * KHz, 1879900 * KHz, FDD},
+  {10, 1710    * MHz, 1770    * MHz, 2110    * MHz, 2170    * MHz, FDD},
+  {11, 1427900 * KHz, 1452900 * KHz, 1475900 * KHz, 1500900 * KHz, FDD},
+  {12,  698    * MHz,  716    * MHz,  728    * MHz,  746    * MHz, FDD},
+  {13,  777    * MHz,  787    * MHz,  746    * MHz,  756    * MHz, FDD},
+  {14,  788    * MHz,  798    * MHz,  758    * MHz,  768    * MHz, FDD},
+
+  {17,  704    * MHz,  716    * MHz,  734    * MHz,  746    * MHz, FDD},
+  {20,  832    * MHz,  862    * MHz,  791    * MHz,  821    * MHz, FDD},
+  {33, 1900    * MHz, 1920    * MHz, 1900    * MHz, 1920    * MHz, TDD},
+  {33, 1900    * MHz, 1920    * MHz, 1900    * MHz, 1920    * MHz, TDD},
+  {34, 2010    * MHz, 2025    * MHz, 2010    * MHz, 2025    * MHz, TDD},
+  {35, 1850    * MHz, 1910    * MHz, 1850    * MHz, 1910    * MHz, TDD},
+  {36, 1930    * MHz, 1990    * MHz, 1930    * MHz, 1990    * MHz, TDD},
+  {37, 1910    * MHz, 1930    * MHz, 1910    * MHz, 1930    * MHz, TDD},
+  {38, 2570    * MHz, 2620    * MHz, 2570    * MHz, 2630    * MHz, TDD},
+  {39, 1880    * MHz, 1920    * MHz, 1880    * MHz, 1920    * MHz, TDD},
+  {40, 2300    * MHz, 2400    * MHz, 2300    * MHz, 2400    * MHz, TDD},
+  {41, 2496    * MHz, 2690    * MHz, 2496    * MHz, 2690    * MHz, TDD},
+  {42, 3400    * MHz, 3600    * MHz, 3400    * MHz, 3600    * MHz, TDD},
+  {43, 3600    * MHz, 3800    * MHz, 3600    * MHz, 3800    * MHz, TDD},
+  {44, 703    * MHz, 803    * MHz, 703    * MHz, 803    * MHz, TDD},
+};
+
+
+
+
+
+
+#if defined(ENABLE_ITTI) && defined(ENABLE_USE_MME)
+extern int asn_debug;
+extern int asn1_xer_print;
+#endif
+
+#ifdef LIBCONFIG_LONG
+#define libconfig_int long
+#else
+#define libconfig_int int
+#endif
+
+typedef enum {
+  RU     = 0,
+  L1     = 1,
+  L2     = 2,
+  L3     = 3,
+  S1     = 4,
+  lastel = 5
+} RC_config_functions_t;
+
+
+#define CONFIG_STRING_ACTIVE_RUS                   "Active_RUs"
+#define CONFIG_STRING_RU_LIST                      "RUs"
+
+#define CONFIG_STRING_RU_CONFIG                   "ru_config"
+#define CONFIG_STRING_RU_LOCAL_IF_NAME            "local_if_name"
+#define CONFIG_STRING_RU_LOCAL_ADDRESS            "local_address"
+#define CONFIG_STRING_RU_REMOTE_ADDRESS           "remote_address"
+#define CONFIG_STRING_RU_LOCAL_PORTC              "local_portc"
+#define CONFIG_STRING_RU_REMOTE_PORTC             "remote_portc"
+#define CONFIG_STRING_RU_LOCAL_PORTD              "local_portd"
+#define CONFIG_STRING_RU_REMOTE_PORTD             "remote_portd"
+#define CONFIG_STRING_RU_LOCAL_RF                 "local_rf"
+#define CONFIG_STRING_RU_TRANSPORT_PREFERENCE     "tr_preference"
+#define CONFIG_STRING_RU_BAND_LIST                "bands"
+#define CONFIG_STRING_RU_ENB_LIST                 "eNB_instances"
+#define CONFIG_STRING_RU_NB_TX                    "nb_tx"
+#define CONFIG_STRING_RU_NB_RX                    "nb_rx"
+#define CONFIG_STRING_RU_ATT_TX                   "att_tx"
+#define CONFIG_STRING_RU_ATT_RX                   "att_rx"
+#define CONFIG_STRING_RU_MAX_RS_EPRE              "max_pdschReferenceSignalPower"
+#define CONFIG_STRING_RU_MAX_RXGAIN               "max_rxgain"
+#define CONFIG_STRING_RU_IF_COMPRESSION           "if_compression"
+
+
+#define RU_LOCAL_IF_NAME_IDX          0
+#define RU_LOCAL_ADDRESS_IDX          1
+#define RU_REMOTE_ADDRESS_IDX         2
+#define RU_LOCAL_PORTC_IDX            3
+#define RU_REMOTE_PORTC_IDX           4
+#define RU_LOCAL_PORTD_IDX            5
+#define RU_REMOTE_PORTD_IDX           6
+#define RU_TRANSPORT_PREFERENCE_IDX   7
+#define RU_LOCAL_RF_IDX               8
+#define RU_NB_TX_IDX                  9
+#define RU_NB_RX_IDX                  10
+#define RU_MAX_RS_EPRE_IDX            11
+#define RU_MAX_RXGAIN_IDX             12
+#define RU_BAND_LIST_IDX              13
+#define RU_ENB_LIST_IDX               14
+#define RU_ATT_TX_IDX                 15
+#define RU_ATT_RX_IDX                 16
+
+
+
+
+static int DEFBANDS[] = {7};
+static int DEFENBS[] = {0};
+#define RUPARAMS_DESC {                                                                                           \
+{CONFIG_STRING_RU_LOCAL_IF_NAME,         "",   NULL,   0,   strptr:NULL,   defstrval:"lo",	  TYPE_STRING,  0}, \
+{CONFIG_STRING_RU_LOCAL_ADDRESS,         "",   NULL,   0,   strptr:NULL, defstrval:"127.0.0.2",   TYPE_STRING,  0}, \
+{CONFIG_STRING_RU_REMOTE_ADDRESS,        "",   NULL,   0,   strptr:NULL, defstrval:"127.0.0.1",   TYPE_STRING,  0}, \
+{CONFIG_STRING_RU_LOCAL_PORTC,           "",   NULL,   0,   uptr:NULL,   defuintval:50000,	  TYPE_UINT,	0}, \
+{CONFIG_STRING_RU_REMOTE_PORTC,          "",   NULL,   0,   uptr:NULL,   defuintval:50000,	  TYPE_UINT,	0}, \
+{CONFIG_STRING_RU_LOCAL_PORTD,           "",   NULL,   0,   uptr:NULL,   defuintval:50001,	  TYPE_UINT,	0}, \
+{CONFIG_STRING_RU_REMOTE_PORTD,          "",   NULL,   0,   uptr:NULL,   defuintval:50001,	  TYPE_UINT,	0}, \
+{CONFIG_STRING_RU_TRANSPORT_PREFERENCE,  "",   NULL,   0,   strptr:NULL, defstrval:"udp_if4p5",   TYPE_STRING,  0}, \
+{CONFIG_STRING_RU_LOCAL_RF,              "",   NULL,   0,   strptr:NULL, defstrval:"yes",	  TYPE_STRING,  0}, \
+{CONFIG_STRING_RU_NB_TX,                 "",   NULL,   0,   uptr:NULL,   defuintval:1,  	  TYPE_UINT,	0}, \
+{CONFIG_STRING_RU_NB_RX,                 "",   NULL,   0,   uptr:NULL,   defuintval:1,  	  TYPE_UINT,	0}, \
+{CONFIG_STRING_RU_MAX_RS_EPRE,           "",   NULL,   0,   iptr:NULL,   defintval:-29, 	  TYPE_INT,	0}, \
+{CONFIG_STRING_RU_MAX_RXGAIN,            "",   NULL,   0,   iptr:NULL,   defintval:120, 	  TYPE_INT,	0}, \
+{CONFIG_STRING_RU_BAND_LIST,             "",   NULL,   0,   uptr:NULL,   defintarrayval:DEFBANDS, TYPE_INTARRAY,1}, \
+{CONFIG_STRING_RU_ENB_LIST,              "",   NULL,   0,   uptr:NULL,   defintarrayval:DEFENBS,  TYPE_INTARRAY,1}, \
+{CONFIG_STRING_RU_ATT_TX,                "",   NULL,   0,   uptr:NULL,   defintval:0,             TYPE_UINT,    0}, \
+{CONFIG_STRING_RU_ATT_RX,                "",   NULL,   0,   uptr:NULL,   defintval:0,             TYPE_UINT,    0}  \
+}
+
+
+#define ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE              "none"
+#define ENB_CONFIG_STRING_ASN1_VERBOSITY_ANNOYING          "annoying"
+#define ENB_CONFIG_STRING_ASN1_VERBOSITY_INFO              "info"
+ 
+#define ENB_ASN1_VERBOSITY_IDX                     0
+#define ENB_ACTIVE_ENBS_IDX                        1
+
+#define ENB_CONFIG_STRING_ASN1_VERBOSITY           "Asn1_verbosity"
+#define ENB_CONFIG_STRING_ACTIVE_ENBS              "Active_eNBs"
+
+#define ENBSPARAMS_DESC {                                                                                             \
+{ENB_CONFIG_STRING_ASN1_VERBOSITY,"",   "",   0,   uptr:NULL,   defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,   TYPE_STRING,      0},   \
+{ENB_CONFIG_STRING_ACTIVE_ENBS,   "",   "",   0,   uptr:NULL,   defstrval:NULL,                                    TYPE_STRINGLIST,  0}    \
+}
+
+
+
+/*
+{ENB_CONFIG_STRING_COMPONENT_CARRIERS,"",   "",   0,   uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0},           \
+{ENB_CONFIG_STRING_CC_NODE_FUNCTION,"",   "",   0,   uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0},           \
+{ENB_CONFIG_STRING_CC_NODE_TIMING,"",   "",   0,   uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0},           \
+{ENB_CONFIG_STRING_CC_NODE_SYNCH_REF,"",   "",   0,   uptr:NULL,defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,TYPE_STRING,0},           \
+*/
+
+#define ENB_ENB_ID_IDX                  0
+#define ENB_CELL_TYPE_IDX               1
+#define ENB_ENB_NAME_IDX                2
+#define ENB_TRACKING_AREA_CODE_IDX      3
+#define ENB_MOBILE_COUNTRY_CODE_IDX     4
+#define ENB_MOBILE_NETWORK_CODE_IDX     5
+#define ENB_TRANSPORT_S_PREFERENCE_IDX  6
+#define ENB_LOCAL_S_IF_NAME_IDX         7
+#define ENB_LOCAL_S_ADDRESS_IDX         8
+#define ENB_REMOTE_S_ADDRESS_IDX        9
+#define ENB_LOCAL_S_PORTC_IDX           10
+#define ENB_REMOTE_S_PORTC_IDX          11
+#define ENB_LOCAL_S_PORTD_IDX           12
+#define ENB_REMOTE_S_PORTD_IDX          13
+
+
+
+
+#define ENB_CONFIG_STRING_ENB_LIST                      "eNBs"
+
+#define ENB_CONFIG_STRING_ENB_ID                        "eNB_ID"
+#define ENB_CONFIG_STRING_CELL_TYPE                     "cell_type"
+#define ENB_CONFIG_STRING_ENB_NAME                      "eNB_name"
+#define ENB_CONFIG_STRING_TRACKING_AREA_CODE            "tracking_area_code"
+#define ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE           "mobile_country_code"
+#define ENB_CONFIG_STRING_MOBILE_NETWORK_CODE           "mobile_network_code"
+#define ENB_CONFIG_STRING_TRANSPORT_S_PREFERENCE        "tr_s_preference"
+#define ENB_CONFIG_STRING_LOCAL_S_IF_NAME               "local_s_if_name"
+#define ENB_CONFIG_STRING_LOCAL_S_ADDRESS               "local_s_address"
+#define ENB_CONFIG_STRING_REMOTE_S_ADDRESS              "remote_s_address"
+#define ENB_CONFIG_STRING_LOCAL_S_PORTC                 "local_s_portc"
+#define ENB_CONFIG_STRING_REMOTE_S_PORTC                "remote_s_portc"
+#define ENB_CONFIG_STRING_LOCAL_S_PORTD                 "local_s_portd"
+#define ENB_CONFIG_STRING_REMOTE_S_PORTD                "remote_s_portd"
+
+#define ENBPARAMS_DESC {                                                                                                \
+{ENB_CONFIG_STRING_ENB_ID,                 "",   NULL,   0,   uptr:NULL,   defintval:0, 		TYPE_UINT,   0},  \
+{ENB_CONFIG_STRING_CELL_TYPE,              "",   NULL,   0,   strptr:NULL, defstrval:"CELL_MACRO_ENB",  TYPE_STRING, 0},  \
+{ENB_CONFIG_STRING_ENB_NAME,               "",   NULL,   0,   strptr:NULL, defstrval:"OAIeNodeB",	TYPE_STRING, 0},  \
+{ENB_CONFIG_STRING_TRACKING_AREA_CODE,     "",   NULL,   0,   strptr:NULL, defstrval:"0", 		TYPE_STRING, 0},  \
+{ENB_CONFIG_STRING_MOBILE_COUNTRY_CODE,    "",   NULL,   0,   strptr:NULL, defstrval:"0", 		TYPE_STRING, 0},  \
+{ENB_CONFIG_STRING_MOBILE_NETWORK_CODE,    "",   NULL,   0,   strptr:NULL, defstrval:"0",               TYPE_STRING, 0},  \
+{ENB_CONFIG_STRING_TRANSPORT_S_PREFERENCE, "",   NULL,   0,   strptr:NULL, defstrval:"local_mac", 	TYPE_STRING, 0},  \
+{ENB_CONFIG_STRING_LOCAL_S_IF_NAME,        "",   NULL,   0,   strptr:NULL, defstrval:"lo",		TYPE_STRING, 0},  \
+{ENB_CONFIG_STRING_LOCAL_S_ADDRESS,        "",   NULL,   0,   strptr:NULL, defstrval:"127.0.0.1",	TYPE_STRING, 0},  \
+{ENB_CONFIG_STRING_REMOTE_S_ADDRESS,       "",   NULL,   0,   strptr:NULL, defstrval:"127.0.0.2",	TYPE_STRING, 0},  \
+{ENB_CONFIG_STRING_LOCAL_S_PORTC,          "",   NULL,   0,   uptr:NULL,   defuintval:50000,		TYPE_UINT,   0}, \
+{ENB_CONFIG_STRING_REMOTE_S_PORTC,         "",   NULL,   0,   uptr:NULL,   defuintval:50000,		TYPE_UINT,   0}, \
+{ENB_CONFIG_STRING_LOCAL_S_PORTD,          "",   NULL,   0,   uptr:NULL,   defuintval:50001,		TYPE_UINT,   0}, \
+{ENB_CONFIG_STRING_REMOTE_S_PORTD,         "",   NULL,   0,   uptr:NULL,   defuintval:50001,		TYPE_UINT,   0}, \
+}
+
+
+		  
+
+		
+#define ENB_CONFIG_STRING_COMPONENT_CARRIERS                            "component_carriers"		 
+
+#define ENB_CONFIG_STRING_FRAME_TYPE                                    "frame_type"
+#define ENB_CONFIG_STRING_PBCH_REPETITION                               "pbch_repetition"
+#define ENB_CONFIG_STRING_TDD_CONFIG                                    "tdd_config"
+#define ENB_CONFIG_STRING_TDD_CONFIG_S                                  "tdd_config_s"
+#define ENB_CONFIG_STRING_PREFIX_TYPE                                   "prefix_type"
+#define ENB_CONFIG_STRING_EUTRA_BAND                                    "eutra_band"
+#define ENB_CONFIG_STRING_DOWNLINK_FREQUENCY                            "downlink_frequency"
+#define ENB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET                       "uplink_frequency_offset"
+#define ENB_CONFIG_STRING_NID_CELL                                      "Nid_cell"
+#define ENB_CONFIG_STRING_N_RB_DL                                       "N_RB_DL"
+#define ENB_CONFIG_STRING_CELL_MBSFN                                    "Nid_cell_mbsfn"
+#define ENB_CONFIG_STRING_NB_ANT_PORTS                                  "nb_antenna_ports"
+#define ENB_CONFIG_STRING_NB_ANT_TX                                     "nb_antennas_tx"
+#define ENB_CONFIG_STRING_NB_ANT_RX                                     "nb_antennas_rx"
+#define ENB_CONFIG_STRING_TX_GAIN                                       "tx_gain"
+#define ENB_CONFIG_STRING_RX_GAIN                                       "rx_gain"
+#define ENB_CONFIG_STRING_PRACH_ROOT                                    "prach_root"
+#define ENB_CONFIG_STRING_PRACH_CONFIG_INDEX                            "prach_config_index"
+#define ENB_CONFIG_STRING_PRACH_HIGH_SPEED                              "prach_high_speed"
+#define ENB_CONFIG_STRING_PRACH_ZERO_CORRELATION                        "prach_zero_correlation"
+#define ENB_CONFIG_STRING_PRACH_FREQ_OFFSET                             "prach_freq_offset"
+#define ENB_CONFIG_STRING_PUCCH_DELTA_SHIFT                             "pucch_delta_shift"
+#define ENB_CONFIG_STRING_PUCCH_NRB_CQI                                 "pucch_nRB_CQI"
+#define ENB_CONFIG_STRING_PUCCH_NCS_AN                                  "pucch_nCS_AN"
+//#if !defined(Rel10) && !defined(Rel14)
+#define ENB_CONFIG_STRING_PUCCH_N1_AN                                   "pucch_n1_AN"
+//#endif
+#define ENB_CONFIG_STRING_PDSCH_RS_EPRE                                 "pdsch_referenceSignalPower"
+#define ENB_CONFIG_STRING_PDSCH_PB                                      "pdsch_p_b"
+#define ENB_CONFIG_STRING_PUSCH_N_SB                                     "pusch_n_SB"
+#define ENB_CONFIG_STRING_PUSCH_HOPPINGMODE                             "pusch_hoppingMode"
+#define ENB_CONFIG_STRING_PUSCH_HOPPINGOFFSET                           "pusch_hoppingOffset"
+#define ENB_CONFIG_STRING_PUSCH_ENABLE64QAM                             "pusch_enable64QAM"
+#define ENB_CONFIG_STRING_PUSCH_GROUP_HOPPING_EN                        "pusch_groupHoppingEnabled"
+#define ENB_CONFIG_STRING_PUSCH_GROUP_ASSIGNMENT                        "pusch_groupAssignment"
+#define ENB_CONFIG_STRING_PUSCH_SEQUENCE_HOPPING_EN                     "pusch_sequenceHoppingEnabled"
+#define ENB_CONFIG_STRING_PUSCH_NDMRS1                                  "pusch_nDMRS1"
+#define ENB_CONFIG_STRING_PHICH_DURATION                                "phich_duration"
+#define ENB_CONFIG_STRING_PHICH_RESOURCE                                "phich_resource"
+#define ENB_CONFIG_STRING_SRS_ENABLE                                    "srs_enable"
+#define ENB_CONFIG_STRING_SRS_BANDWIDTH_CONFIG                          "srs_BandwidthConfig"
+#define ENB_CONFIG_STRING_SRS_SUBFRAME_CONFIG                           "srs_SubframeConfig"
+#define ENB_CONFIG_STRING_SRS_ACKNACKST_CONFIG                          "srs_ackNackST"
+#define ENB_CONFIG_STRING_SRS_MAXUPPTS                                  "srs_MaxUpPts"
+#define ENB_CONFIG_STRING_PUSCH_PO_NOMINAL                              "pusch_p0_Nominal"
+#define ENB_CONFIG_STRING_PUSCH_ALPHA                                   "pusch_alpha"
+#define ENB_CONFIG_STRING_PUCCH_PO_NOMINAL                              "pucch_p0_Nominal"
+#define ENB_CONFIG_STRING_MSG3_DELTA_PREAMBLE                           "msg3_delta_Preamble"
+#define ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT1                          "pucch_deltaF_Format1"
+#define ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT1b                         "pucch_deltaF_Format1b"
+#define ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2                          "pucch_deltaF_Format2"
+#define ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2A                         "pucch_deltaF_Format2a"
+#define ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2B                         "pucch_deltaF_Format2b"
+#define ENB_CONFIG_STRING_RACH_NUM_RA_PREAMBLES                         "rach_numberOfRA_Preambles"
+#define ENB_CONFIG_STRING_RACH_PREAMBLESGROUPACONFIG                    "rach_preamblesGroupAConfig"
+#define ENB_CONFIG_STRING_RACH_SIZEOFRA_PREAMBLESGROUPA                 "rach_sizeOfRA_PreamblesGroupA"
+#define ENB_CONFIG_STRING_RACH_MESSAGESIZEGROUPA                        "rach_messageSizeGroupA"
+#define ENB_CONFIG_STRING_RACH_MESSAGEPOWEROFFSETGROUPB                 "rach_messagePowerOffsetGroupB"
+#define ENB_CONFIG_STRING_RACH_POWERRAMPINGSTEP                         "rach_powerRampingStep"
+#define ENB_CONFIG_STRING_RACH_PREAMBLEINITIALRECEIVEDTARGETPOWER       "rach_preambleInitialReceivedTargetPower"
+#define ENB_CONFIG_STRING_RACH_PREAMBLETRANSMAX                         "rach_preambleTransMax"
+#define ENB_CONFIG_STRING_RACH_RARESPONSEWINDOWSIZE                     "rach_raResponseWindowSize"
+#define ENB_CONFIG_STRING_RACH_MACCONTENTIONRESOLUTIONTIMER             "rach_macContentionResolutionTimer"
+#define ENB_CONFIG_STRING_RACH_MAXHARQMSG3TX                            "rach_maxHARQ_Msg3Tx"
+#define ENB_CONFIG_STRING_PCCH_DEFAULT_PAGING_CYCLE                     "pcch_default_PagingCycle"
+#define ENB_CONFIG_STRING_PCCH_NB                                       "pcch_nB"
+#define ENB_CONFIG_STRING_BCCH_MODIFICATIONPERIODCOEFF                  "bcch_modificationPeriodCoeff"
+#define ENB_CONFIG_STRING_UETIMERS_T300                                 "ue_TimersAndConstants_t300"
+#define ENB_CONFIG_STRING_UETIMERS_T301                                 "ue_TimersAndConstants_t301"
+#define ENB_CONFIG_STRING_UETIMERS_T310                                 "ue_TimersAndConstants_t310"
+#define ENB_CONFIG_STRING_UETIMERS_T311                                 "ue_TimersAndConstants_t311"
+#define ENB_CONFIG_STRING_UETIMERS_N310                                 "ue_TimersAndConstants_n310"
+#define ENB_CONFIG_STRING_UETIMERS_N311                                 "ue_TimersAndConstants_n311"
+#define ENB_CONFIG_STRING_UE_TRANSMISSION_MODE                          "ue_TransmissionMode"
+		
+
+#define CCPARAMS_DESC {                                                                                                  \
+{ENB_CONFIG_STRING_FRAME_TYPE,                             "",   NULL,   0,   strptr:&frame_type,			      defstrval:"FDD",  	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_TDD_CONFIG,                             "",   NULL,   0,   iptr:&tdd_config, 			      defintval:3,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_TDD_CONFIG_S,                           "",   NULL,   0,   iptr:&tdd_config_s,			      defintval:0,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PREFIX_TYPE,                            "",   NULL,   0,   strptr:&prefix_type,			      defstrval:"NORMAL",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PBCH_REPETITION,                        "",   NULL,   0,   strptr:&pbch_repetition,  		      defstrval:"FALSE",	 TYPE_STRING,	 0}, \
+{ENB_CONFIG_STRING_EUTRA_BAND,                             "",   NULL,   0,   iptr:&eutra_band, 			      defintval:7,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_DOWNLINK_FREQUENCY,                     "",   NULL,   0,   i64ptr:(int64_t *)&downlink_frequency,	      defint64val:2680000000,	 TYPE_UINT64,  0}, \
+{ENB_CONFIG_STRING_UPLINK_FREQUENCY_OFFSET,                "",   NULL,   0,   iptr:&uplink_frequency_offset,		      defintval:-120000000,	 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_NID_CELL,                               "",   NULL,   0,   iptr:&Nid_cell,				      defintval:0,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_N_RB_DL,                                "",   NULL,   0,   iptr:&N_RB_DL,				      defintval:25,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_CELL_MBSFN,                             "",   NULL,   0,   iptr:&Nid_cell_mbsfn,			      defintval:0,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_NB_ANT_PORTS,                           "",   NULL,   0,   iptr:&nb_antenna_ports,			      defintval:1,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PRACH_ROOT,                             "",   NULL,   0,   iptr:&prach_root, 			      defintval:0,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PRACH_CONFIG_INDEX,                     "",   NULL,   0,   iptr:&prach_config_index, 		      defintval:0,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_PRACH_HIGH_SPEED,                       "",   NULL,   0,   strptr:&prach_high_speed, 		      defstrval:"DISABLE",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PRACH_ZERO_CORRELATION,                 "",   NULL,   0,   iptr:&prach_zero_correlation,		      defintval:1,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PRACH_FREQ_OFFSET,                      "",   NULL,   0,   iptr:&prach_freq_offset,  		      defintval:2,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PUCCH_DELTA_SHIFT,                      "",   NULL,   0,   iptr:&pucch_delta_shift,  		      defintval:1,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PUCCH_NRB_CQI,                          "",   NULL,   0,   iptr:&pucch_nRB_CQI,			      defintval:1,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PUCCH_NCS_AN,                           "",   NULL,   0,   iptr:&pucch_nCS_AN,			      defintval:0,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PUCCH_N1_AN,                            "",   NULL,   0,   iptr:&pucch_n1_AN,			      defintval:32,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PDSCH_RS_EPRE,                          "",   NULL,   0,   iptr:&pdsch_referenceSignalPower, 	      defintval:-29,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_PDSCH_PB,                               "",   NULL,   0,   iptr:&pdsch_p_b,  			      defintval:0,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_PUSCH_N_SB,                             "",   NULL,   0,   iptr:&pusch_n_SB, 			      defintval:1,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_PUSCH_HOPPINGMODE,                      "",   NULL,   0,   strptr:&pusch_hoppingMode,		      defstrval:"interSubFrame", TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PUSCH_HOPPINGOFFSET,                    "",   NULL,   0,   iptr:&pusch_hoppingOffset,		      defintval:0,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PUSCH_ENABLE64QAM,                      "",   NULL,   0,   strptr:&pusch_enable64QAM,		      defstrval:"DISABLE",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PUSCH_GROUP_HOPPING_EN,                 "",   NULL,   0,   strptr:&pusch_groupHoppingEnabled,	      defstrval:"ENABLE",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PUSCH_GROUP_ASSIGNMENT,                 "",   NULL,   0,   iptr:&pusch_groupAssignment,		      defintval:0,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_PUSCH_SEQUENCE_HOPPING_EN,              "",   NULL,   0,   strptr:&pusch_sequenceHoppingEnabled,	      defstrval:"DISABLE",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PUSCH_NDMRS1,                           "",   NULL,   0,   iptr:&pusch_nDMRS1,			      defintval:0,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PHICH_DURATION,                         "",   NULL,   0,   strptr:&phich_duration,			      defstrval:"NORMAL",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PHICH_RESOURCE,                         "",   NULL,   0,   strptr:&phich_resource,			      defstrval:"ONESIXTH",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_SRS_ENABLE,                             "",   NULL,   0,   strptr:&srs_enable,			      defstrval:"DISABLE",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_SRS_BANDWIDTH_CONFIG,                   "",   NULL,   0,   iptr:&srs_BandwidthConfig,		      defintval:0,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_SRS_SUBFRAME_CONFIG,                    "",   NULL,   0,   iptr:&srs_SubframeConfig, 		      defintval:0,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_SRS_ACKNACKST_CONFIG,                   "",   NULL,   0,   strptr:&srs_ackNackST,			      defstrval:"DISABLE",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_SRS_MAXUPPTS,                           "",   NULL,   0,   strptr:&srs_MaxUpPts,			      defstrval:"DISABLE",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PUSCH_PO_NOMINAL,                       "",   NULL,   0,   iptr:&pusch_p0_Nominal,			      defintval:-90,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_PUSCH_ALPHA,                            "",   NULL,   0,   strptr:&pusch_alpha,			      defstrval:"AL1",  	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PUCCH_PO_NOMINAL,                       "",   NULL,   0,   iptr:&pucch_p0_Nominal,			      defintval:-96,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_MSG3_DELTA_PREAMBLE,                    "",   NULL,   0,   iptr:&msg3_delta_Preamble,		      defintval:6,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT1,                   "",   NULL,   0,   strptr:&pucch_deltaF_Format1,		      defstrval:"DELTAF2",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT1b,                  "",   NULL,   0,   strptr:&pucch_deltaF_Format1b,		      defstrval:"deltaF3",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2,                   "",   NULL,   0,   strptr:&pucch_deltaF_Format2,		      defstrval:"deltaF0",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2A,                  "",   NULL,   0,   strptr:&pucch_deltaF_Format2a,		      defstrval:"deltaF0",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_PUCCH_DELTAF_FORMAT2B,                  "",   NULL,   0,   strptr:&pucch_deltaF_Format2b,		      defstrval:"deltaF0",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_RACH_NUM_RA_PREAMBLES,                  "",   NULL,   0,   iptr:&rach_numberOfRA_Preambles,  	      defintval:4,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_RACH_PREAMBLESGROUPACONFIG,             "",   NULL,   0,   strptr:&rach_preamblesGroupAConfig,	      defstrval:"DISABLE",	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_RACH_SIZEOFRA_PREAMBLESGROUPA,          "",   NULL,   0,   iptr:&rach_sizeOfRA_PreamblesGroupA,	      defintval:0,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_RACH_MESSAGESIZEGROUPA,                 "",   NULL,   0,   iptr:&rach_messageSizeGroupA,		      defintval:56,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_RACH_MESSAGEPOWEROFFSETGROUPB,          "",   NULL,   0,   strptr:&rach_messagePowerOffsetGroupB,	      defstrval:"minusinfinity", TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_RACH_POWERRAMPINGSTEP,                  "",   NULL,   0,   iptr:&rach_powerRampingStep,		      defintval:4,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_RACH_PREAMBLEINITIALRECEIVEDTARGETPOWER,"",   NULL,   0,   iptr:&rach_preambleInitialReceivedTargetPower,  defintval:-100,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_RACH_PREAMBLETRANSMAX,                  "",   NULL,   0,   iptr:&rach_preambleTransMax,		      defintval:10,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_RACH_RARESPONSEWINDOWSIZE,              "",   NULL,   0,   iptr:&rach_raResponseWindowSize,  	      defintval:10,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_RACH_MACCONTENTIONRESOLUTIONTIMER,      "",   NULL,   0,   iptr:&rach_macContentionResolutionTimer,        defintval:48,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_RACH_MAXHARQMSG3TX,                     "",   NULL,   0,   iptr:&rach_maxHARQ_Msg3Tx,		      defintval:4,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_PCCH_DEFAULT_PAGING_CYCLE,              "",   NULL,   0,   iptr:&pcch_defaultPagingCycle,		      defintval:128,		 TYPE_INT,     0}, \
+{ENB_CONFIG_STRING_PCCH_NB,                                "",   NULL,   0,   strptr:&pcch_nB,  			      defstrval:"oneT", 	 TYPE_STRING,  0}, \
+{ENB_CONFIG_STRING_BCCH_MODIFICATIONPERIODCOEFF,           "",   NULL,   0,   iptr:&bcch_modificationPeriodCoeff,	      defintval:2,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_UETIMERS_T300,                          "",   NULL,   0,   iptr:&ue_TimersAndConstants_t300, 	      defintval:1000,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_UETIMERS_T301,                          "",   NULL,   0,   iptr:&ue_TimersAndConstants_t301, 	      defintval:1000,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_UETIMERS_T310,                          "",   NULL,   0,   iptr:&ue_TimersAndConstants_t310, 	      defintval:1000,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_UETIMERS_T311,                          "",   NULL,   0,   iptr:&ue_TimersAndConstants_t311, 	      defintval:10000,  	 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_UETIMERS_N310,                          "",   NULL,   0,   iptr:&ue_TimersAndConstants_n310, 	      defintval:20,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_UETIMERS_N311,                          "",   NULL,   0,   iptr:&ue_TimersAndConstants_n311, 	      defintval:1,		 TYPE_UINT,    0}, \
+{ENB_CONFIG_STRING_UE_TRANSMISSION_MODE,                   "",   NULL,   0,   iptr:&ue_TransmissionMode,		      defintval:1,		 TYPE_UINT,    0}  \
+}
+
+
+
+#define ENB_CONFIG_STRING_SRB1                                          "srb1_parameters"
+
+#define ENB_CONFIG_STRING_SRB1_TIMER_POLL_RETRANSMIT                    "timer_poll_retransmit"
+#define ENB_CONFIG_STRING_SRB1_TIMER_REORDERING                         "timer_reordering"
+#define ENB_CONFIG_STRING_SRB1_TIMER_STATUS_PROHIBIT                    "timer_status_prohibit"
+#define ENB_CONFIG_STRING_SRB1_POLL_PDU                                 "poll_pdu"
+#define ENB_CONFIG_STRING_SRB1_POLL_BYTE                                "poll_byte"
+#define ENB_CONFIG_STRING_SRB1_MAX_RETX_THRESHOLD                       "max_retx_threshold"
+
+
+#define SRB1PARAMS_DESC {                                                                                                \
+{ENB_CONFIG_STRING_SRB1_TIMER_POLL_RETRANSMIT,   "",   NULL,   0,   iptr:&srb1_timer_poll_retransmit,	defintval:80,	  TYPE_UINT,0}, 	  \
+{ENB_CONFIG_STRING_SRB1_TIMER_REORDERING,        "",   NULL,   0,   iptr:&srb1_timer_reordering,	defintval:35,	  TYPE_UINT,0}, 	  \
+{ENB_CONFIG_STRING_SRB1_TIMER_STATUS_PROHIBIT,   "",   NULL,   0,   iptr:&srb1_timer_status_prohibit,	defintval:0,	  TYPE_UINT,0}, 	  \
+{ENB_CONFIG_STRING_SRB1_POLL_PDU,                "",   NULL,   0,   iptr:&srb1_poll_pdu,		defintval:4,	  TYPE_UINT,0}, 	  \
+{ENB_CONFIG_STRING_SRB1_POLL_BYTE,               "",   NULL,   0,   iptr:&srb1_poll_byte,		defintval:99999,  TYPE_UINT,0}, 	  \
+{ENB_CONFIG_STRING_SRB1_MAX_RETX_THRESHOLD,      "",   NULL,   0,   iptr:&srb1_max_retx_threshold,	defintval:4,	  TYPE_UINT,0}  	 \
+}
+
+
+#define ENB_CONFIG_STRING_MME_IP_ADDRESS                "mme_ip_address"
+
+
+#define ENB_MME_IPV4_ADDRESS_IDX          0
+#define ENB_MME_IPV6_ADDRESS_IDX          1
+#define ENB_MME_IP_ADDRESS_ACTIVE_IDX     2
+#define ENB_MME_IP_ADDRESS_PREFERENCE_IDX 3
+
+#define ENB_CONFIG_STRING_MME_IPV4_ADDRESS              "ipv4"
+#define ENB_CONFIG_STRING_MME_IPV6_ADDRESS              "ipv6"
+#define ENB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE         "active"
+#define ENB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE     "preference"
+
+#define S1PARAMS_DESC {  \
+{ENB_CONFIG_STRING_MME_IPV4_ADDRESS,               "",   NULL,   0,   uptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},    \
+{ENB_CONFIG_STRING_MME_IPV6_ADDRESS,               "",   NULL,   0,   uptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},    \
+{ENB_CONFIG_STRING_MME_IP_ADDRESS_ACTIVE,          "",   NULL,   0,   uptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},    \
+{ENB_CONFIG_STRING_MME_IP_ADDRESS_PREFERENCE,      "",   NULL,   0,   uptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},    \
+}
+
+
+
+#define ENB_CONFIG_STRING_SCTP_CONFIG                    "SCTP"
+
+#define ENB_CONFIG_STRING_SCTP_INSTREAMS                 "SCTP_INSTREAMS"
+#define ENB_CONFIG_STRING_SCTP_OUTSTREAMS                "SCTP_OUTSTREAMS"
+
+#define ENB_SCTP_INSTREAMS_IDX          0
+#define ENB_SCTP_OUTSTREAMS_IDX         1
+
+#define SCTPPARAMS_DESC {  \
+{ENB_CONFIG_STRING_SCTP_INSTREAMS,                 "",   NULL,   0,   strptr:NULL,   defstrval:ENB_CONFIG_STRING_SCTP_INSTREAMS,    TYPE_STRING,   0},   \
+{ENB_CONFIG_STRING_SCTP_OUTSTREAMS,                "",   NULL,   0,   strptr:NULL,   defstrval:ENB_CONFIG_STRING_SCTP_OUTSTREAMS,   TYPE_STRING,   0}    \
+}
+
+
+
+#define ENB_CONFIG_STRING_NETWORK_INTERFACES_CONFIG     "NETWORK_INTERFACES"
+
+#define ENB_INTERFACE_NAME_FOR_S1_MME_IDX          0
+#define ENB_IPV4_ADDRESS_FOR_S1_MME_IDX            1
+#define ENB_INTERFACE_NAME_FOR_S1U_IDX             2
+#define ENB_IPV4_ADDR_FOR_S1U_IDX                  3
+#define ENB_PORT_FOR_S1U_IDX                       4
+
+#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME "ENB_INTERFACE_NAME_FOR_S1_MME"
+#define ENB_CONFIG_STRING_ENB_IPV4_ADDRESS_FOR_S1_MME   "ENB_IPV4_ADDRESS_FOR_S1_MME"
+#define ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1U    "ENB_INTERFACE_NAME_FOR_S1U"
+#define ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U         "ENB_IPV4_ADDRESS_FOR_S1U"
+#define ENB_CONFIG_STRING_ENB_PORT_FOR_S1U              "ENB_PORT_FOR_S1U"
+
+#define NETPARAMS_DESC {  \
+{ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1_MME,  "",   NULL,   0,   strptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},	   \
+{ENB_CONFIG_STRING_ENB_IPV4_ADDRESS_FOR_S1_MME,    "",   NULL,   0,   strptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},	   \
+{ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1U,     "",   NULL,   0,   strptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},	   \
+{ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U,          "",   NULL,   0,   strptr:NULL,   defstrval:NULL,   TYPE_STRING,   0},	   \
+{ENB_CONFIG_STRING_ENB_PORT_FOR_S1U,               "",   NULL,   0,   uptr:NULL,     defintval:2152L,  TYPE_UINT,     0}	   \
+}   
+
+#define GTPUPARAMS_DESC { \
+{ENB_CONFIG_STRING_ENB_INTERFACE_NAME_FOR_S1U,      "",  NULL,    0,   strptr:&enb_interface_name_for_S1U,   defstrval:"lo",		TYPE_STRING,   0},	     \
+{ENB_CONFIG_STRING_ENB_IPV4_ADDR_FOR_S1U,           "",  NULL,    0,   strptr:&enb_ipv4_address_for_S1U,     defstrval:"127.0.0.1",	TYPE_STRING,   0},	     \
+{ENB_CONFIG_STRING_ENB_PORT_FOR_S1U,                "",  NULL,    0,   uptr:&enb_port_for_S1U,  	     defintval:2152,		TYPE_UINT,     0}	     \
+}
+
+
+
+
+
+#define ENB_CONFIG_STRING_NETWORK_CONTROLLER_CONFIG         "NETWORK_CONTROLLER"
+
+#define ENB_CONFIG_STRING_FLEXRAN_AGENT_INTERFACE_NAME      "FLEXRAN_AGENT_INTERFACE_NAME"
+#define ENB_CONFIG_STRING_FLEXRAN_AGENT_IPV4_ADDRESS        "FLEXRAN_AGENT_IPV4_ADDRESS"
+#define ENB_CONFIG_STRING_FLEXRAN_AGENT_PORT                "FLEXRAN_AGENT_PORT"
+#define ENB_CONFIG_STRING_FLEXRAN_AGENT_CACHE               "FLEXRAN_AGENT_CACHE"
+
+
+#define CONFIG_STRING_L1_LIST                              "L1s"
+#define CONFIG_STRING_L1_CONFIG                            "l1_config"
+
+#define L1_CC_IDX                                          0
+#define L1_TRANSPORT_N_PREFERENCE_IDX                      1
+#define L1_LOCAL_N_IF_NAME_IDX                             2
+#define L1_LOCAL_N_ADDRESS_IDX                             3
+#define L1_REMOTE_N_ADDRESS_IDX                            4
+#define L1_LOCAL_N_PORTC_IDX                               5
+#define L1_REMOTE_N_PORTC_IDX                              6
+#define L1_LOCAL_N_PORTD_IDX                               7
+#define L1_REMOTE_N_PORTD_IDX                              8
+
+
+#define CONFIG_STRING_L1_CC                                "num_cc"
+#define CONFIG_STRING_L1_LOCAL_N_IF_NAME                   "local_n_if_name"
+#define CONFIG_STRING_L1_LOCAL_N_ADDRESS                   "local_n_address"
+#define CONFIG_STRING_L1_REMOTE_N_ADDRESS                  "remote_n_address"
+#define CONFIG_STRING_L1_LOCAL_N_PORTC                     "local_n_portc"
+#define CONFIG_STRING_L1_REMOTE_N_PORTC                    "remote_n_portc"
+#define CONFIG_STRING_L1_LOCAL_N_PORTD                     "local_n_portd"
+#define CONFIG_STRING_L1_REMOTE_N_PORTD                    "remote_n_portd"
+#define CONFIG_STRING_L1_TRANSPORT_N_PREFERENCE            "tr_n_preference"
+
+#define L1PARAMS_DESC { \
+{CONFIG_STRING_L1_CC,                          "",   NULL,   0,   uptr:NULL,		    defintval:1,	       TYPE_UINT,     0},	    \
+{CONFIG_STRING_L1_TRANSPORT_N_PREFERENCE,      "",   NULL,   0,   strptr:NULL,  	    defstrval:"local_mac",     TYPE_STRING,   0},	    \
+{CONFIG_STRING_L1_LOCAL_N_IF_NAME,             "",   NULL,   0,   strptr:NULL,  	    defstrval:"lo",	       TYPE_STRING,   0},	    \
+{CONFIG_STRING_L1_LOCAL_N_ADDRESS,             "",   NULL,   0,   strptr:NULL,  	    defstrval:"127.0.0.1",     TYPE_STRING,   0},	    \
+{CONFIG_STRING_L1_REMOTE_N_ADDRESS,            "",   NULL,   0,   strptr:NULL,  	    defstrval:"127.0.0.2",     TYPE_STRING,   0},	    \
+{CONFIG_STRING_L1_LOCAL_N_PORTC,               "",   NULL,   0,   uptr:NULL,		    defintval:50030,	       TYPE_UINT,     0},	    \
+{CONFIG_STRING_L1_REMOTE_N_PORTC,              "",   NULL,   0,   uptr:NULL,		    defintval:50030,	       TYPE_UINT,     0},	    \
+{CONFIG_STRING_L1_LOCAL_N_PORTD,               "",   NULL,   0,   uptr:NULL,		    defintval:50031,	       TYPE_UINT,     0},	    \
+{CONFIG_STRING_L1_REMOTE_N_PORTD,              "",   NULL,   0,   uptr:NULL,		    defintval:50031,	       TYPE_UINT,     0},	    \
+}
+
+
+#define FLEXRANPARAMS_DESC { \
+{ENB_CONFIG_STRING_FLEXRAN_AGENT_INTERFACE_NAME,   "",   NULL,   0,   uptr:NULL,   defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,   TYPE_STRING,   0},	   \
+{ENB_CONFIG_STRING_FLEXRAN_AGENT_IPV4_ADDRESS,     "",   NULL,   0,   uptr:NULL,   defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,   TYPE_STRING,   0},	   \
+{ENB_CONFIG_STRING_FLEXRAN_AGENT_PORT,             "",   NULL,   0,   uptr:NULL,   defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,   TYPE_STRING,   0},	   \
+{ENB_CONFIG_STRING_FLEXRAN_AGENT_CACHE,            "",   NULL,   0,   uptr:NULL,   defstrval:ENB_CONFIG_STRING_ASN1_VERBOSITY_NONE,   TYPE_STRING,   0} 	   \
+}
+
+
+
+#define CONFIG_STRING_MACRLC_LIST                          "MACRLCs"
+#define CONFIG_STRING_MACRLC_CONFIG                        "macrlc_config"
+
+#define MACRLC_CC_IDX                                          0
+#define MACRLC_TRANSPORT_N_PREFERENCE_IDX                      1
+#define MACRLC_LOCAL_N_IF_NAME_IDX                             2
+#define MACRLC_LOCAL_N_ADDRESS_IDX                             3
+#define MACRLC_REMOTE_N_ADDRESS_IDX                            4
+#define MACRLC_LOCAL_N_PORTC_IDX                               5
+#define MACRLC_REMOTE_N_PORTC_IDX                              6
+#define MACRLC_LOCAL_N_PORTD_IDX                               7
+#define MACRLC_REMOTE_N_PORTD_IDX                              8
+#define MACRLC_TRANSPORT_S_PREFERENCE_IDX                      9
+#define MACRLC_LOCAL_S_IF_NAME_IDX                             10
+#define MACRLC_LOCAL_S_ADDRESS_IDX                             11
+#define MACRLC_REMOTE_S_ADDRESS_IDX                            12
+#define MACRLC_LOCAL_S_PORTC_IDX                               13
+#define MACRLC_REMOTE_S_PORTC_IDX                              14
+#define MACRLC_LOCAL_S_PORTD_IDX                               15
+#define MACRLC_REMOTE_S_PORTD_IDX                              16
+
+#define CONFIG_STRING_MACRLC_CC                            "num_cc"
+#define CONFIG_STRING_MACRLC_TRANSPORT_N_PREFERENCE        "tr_n_preference"
+#define CONFIG_STRING_MACRLC_LOCAL_N_IF_NAME               "local_n_if_name"
+#define CONFIG_STRING_MACRLC_LOCAL_N_ADDRESS               "local_n_address"
+#define CONFIG_STRING_MACRLC_REMOTE_N_ADDRESS              "remote_n_address"
+#define CONFIG_STRING_MACRLC_LOCAL_N_PORTC                 "local_n_portc"
+#define CONFIG_STRING_MACRLC_REMOTE_N_PORTC                "remote_n_portc"
+#define CONFIG_STRING_MACRLC_LOCAL_N_PORTD                 "local_n_portd"
+#define CONFIG_STRING_MACRLC_REMOTE_N_PORTD                "remote_n_portd"
+#define CONFIG_STRING_MACRLC_TRANSPORT_S_PREFERENCE        "tr_s_preference"
+#define CONFIG_STRING_MACRLC_LOCAL_S_IF_NAME               "local_s_if_name"
+#define CONFIG_STRING_MACRLC_LOCAL_S_ADDRESS               "local_s_address"
+#define CONFIG_STRING_MACRLC_REMOTE_S_ADDRESS              "remote_s_address"
+#define CONFIG_STRING_MACRLC_LOCAL_S_PORTC                 "local_s_portc"
+#define CONFIG_STRING_MACRLC_REMOTE_S_PORTC                "remote_s_portc"
+#define CONFIG_STRING_MACRLC_LOCAL_S_PORTD                 "local_s_portd"
+#define CONFIG_STRING_MACRLC_REMOTE_S_PORTD                "remote_s_portd"
+
+
+
+#define MACRLCPARAMS_DESC { \
+{CONFIG_STRING_MACRLC_CC,                          "",   NULL,   0,   uptr:NULL,		defintval:50011,	   TYPE_UINT,	  0},		\
+{CONFIG_STRING_MACRLC_TRANSPORT_N_PREFERENCE,      "",   NULL,   0,   strptr:NULL,		defstrval:"local_L1",	   TYPE_STRING,   0},		\
+{CONFIG_STRING_MACRLC_LOCAL_N_IF_NAME,             "",   NULL,   0,   strptr:NULL,		defstrval:"lo", 	   TYPE_STRING,   0},		\
+{CONFIG_STRING_MACRLC_LOCAL_N_ADDRESS,             "",   NULL,   0,   strptr:NULL,		defstrval:"127.0.0.1",     TYPE_STRING,   0},		\
+{CONFIG_STRING_MACRLC_REMOTE_N_ADDRESS,            "",   NULL,   0,   uptr:NULL,		defstrval:"127.0.0.2",     TYPE_STRING,   0},		\
+{CONFIG_STRING_MACRLC_LOCAL_N_PORTC,               "",   NULL,   0,   uptr:NULL,		defintval:50010,	   TYPE_UINT,	  0},		\
+{CONFIG_STRING_MACRLC_REMOTE_N_PORTC,              "",   NULL,   0,   uptr:NULL,		defintval:50010,	   TYPE_UINT,	  0},		\
+{CONFIG_STRING_MACRLC_LOCAL_N_PORTD,               "",   NULL,   0,   uptr:NULL,		defintval:50011,	   TYPE_UINT,	  0},		\
+{CONFIG_STRING_MACRLC_REMOTE_N_PORTD,              "",   NULL,   0,   uptr:NULL,		defintval:50011,	   TYPE_UINT,	  0},		\
+{CONFIG_STRING_MACRLC_TRANSPORT_S_PREFERENCE,      "",   NULL,   0,   strptr:NULL,		defstrval:"local_RRC",     TYPE_STRING,   0},		\
+{CONFIG_STRING_MACRLC_LOCAL_S_IF_NAME,             "",   NULL,   0,   strptr:NULL,		defstrval:"lo", 	   TYPE_STRING,   0},		\
+{CONFIG_STRING_MACRLC_LOCAL_S_ADDRESS,             "",   NULL,   0,   uptr:NULL,		defstrval:"127.0.0.1",     TYPE_STRING,   0},		\
+{CONFIG_STRING_MACRLC_REMOTE_S_ADDRESS,            "",   NULL,   0,   uptr:NULL,		defstrval:"127.0.0.2",     TYPE_STRING,   0},		\
+{CONFIG_STRING_MACRLC_LOCAL_S_PORTC,               "",   NULL,   0,   uptr:NULL,		defintval:50020,	   TYPE_UINT,	  0},		\
+{CONFIG_STRING_MACRLC_REMOTE_S_PORTC,              "",   NULL,   0,   uptr:NULL,		defintval:50020,	   TYPE_UINT,	  0},		\
+{CONFIG_STRING_MACRLC_LOCAL_S_PORTD,               "",   NULL,   0,   uptr:NULL,		defintval:50021,	   TYPE_UINT,	  0},		\
+{CONFIG_STRING_MACRLC_REMOTE_S_PORTD,              "",   NULL,   0,   uptr:NULL,		defintval:50021,	   TYPE_UINT,	  0},		\
+}