diff --git a/executables/agent_if/conf_file.h b/executables/agent_if/conf_file.h
index 8ff2e0e6f06798e2bbc86e3807e761f8bbfa92f5..6a7bff29b1ffee4a50d70e48c17331b2c682bc5c 100644
--- a/executables/agent_if/conf_file.h
+++ b/executables/agent_if/conf_file.h
@@ -12,5 +12,9 @@ fr_args_t init_fr_args(int argc, char* argv[]);
 
 char* get_near_ric_ip(fr_args_t const*);
 
+char* get_conf_db_dir(fr_args_t const*);
+
+char* get_conf_db_name(fr_args_t const*);
+
 #endif
 
diff --git a/executables/agent_if/e2_agent_api.h b/executables/agent_if/e2_agent_api.h
index 355c29575aca289125d9af9c5233d8e80fd3f63e..6bb326b4ca6754bc7f7b54a043f717d1d9b5ffff 100644
--- a/executables/agent_if/e2_agent_api.h
+++ b/executables/agent_if/e2_agent_api.h
@@ -26,6 +26,8 @@
 
 #include "sm_io.h"
 #include "conf_file.h"
+#include "../../common/ngran_types.h"
+
 /*
 void init_agent_api(int mcc,
                     int mnc,
@@ -39,6 +41,8 @@ void init_agent_api(int mcc,
                     int mnc, 
                     int mnc_digit_len,
                     int nb_id,
+                    int cu_du_id,
+                    ngran_node_t ran_type,
                     sm_io_ag_t io,
                     fr_args_t const* args);
 
diff --git a/executables/agent_if/libe2_agent.a b/executables/agent_if/libe2_agent.a
index 090cb296e6068ad930af550f955c9843f5450313..3eb81d11be2804a00fb7e9064a95907b5bd25653 100644
Binary files a/executables/agent_if/libe2_agent.a and b/executables/agent_if/libe2_agent.a differ
diff --git a/executables/nr-softmodem.c b/executables/nr-softmodem.c
index 18656aa8013ac8062f3d621dca3f51081d6af669..e7e96dc0968856f26238227503987522d23882e7 100644
--- a/executables/nr-softmodem.c
+++ b/executables/nr-softmodem.c
@@ -1272,19 +1272,42 @@ int main( int argc, char **argv ) {
   const gNB_RRC_INST* rrc = RC.nrrrc[mod_id];
   assert(rrc != NULL && "rrc cannot be NULL");
 
-  const int mcc = rrc->configuration.mcc[0]; // 208;
-  const int mnc = rrc->configuration.mnc[0]; // 94;
-  const int mnc_digit_len = rrc->configuration.mnc_digit_length[0]; // 2;
-  const int nb_id = rrc->configuration.cell_identity; //42;
+  const int mcc = rrc->configuration.mcc[0];
+  const int mnc = rrc->configuration.mnc[0];
+  const int mnc_digit_len = rrc->configuration.mnc_digit_length[0];
+  const ngran_node_t node_type = rrc->node_type;
+  int nb_id = 0;
+  int cu_du_id = 0;
+  if (node_type == ngran_gNB) {
+    nb_id = rrc->configuration.cell_identity;
+  } else if (node_type == ngran_gNB_DU) {
+    cu_du_id = rrc->configuration.cell_identity;
+  } else if (node_type == ngran_gNB_CU) {
+    cu_du_id = rrc->node_id;
+  } else {
+    LOG_E(NR_RRC, "not supported ran type detect\n");
+  }
   sm_io_ag_t io = {.read = read_RAN, .write = write_RAN};
   printf("[E2 NODE]: mcc = %d mnc = %d mnc_digit = %d nd_id = %d \n", mcc, mnc, mnc_digit_len, nb_id);
 
+  // TODO: need to fix, parse the FlexRIC config in runtime
   int const agent_argc = 1;
   char** agent_argv = NULL;
   fr_args_t ric_args = init_fr_args(agent_argc, agent_argv);
-  strcpy(ric_args.conf_file, "/usr/local/flexric/flexric.conf");
-  strcpy(ric_args.libs_dir, "/usr/local/flexric/");
-  init_agent_api( mcc, mnc, mnc_digit_len, nb_id, io, &ric_args);
+  // TODO: integrate with oai config
+  char* conf_dir = getenv("FLEXRIC_CONF");
+  char* lib_dir = getenv("FLEXRIC_LIB_DIR");
+
+  if (conf_dir != NULL)
+    strcpy(ric_args.conf_file, conf_dir);
+  else
+    strcpy(ric_args.conf_file, "/usr/local/etc/flexric/flexric.conf");
+  if (lib_dir != NULL)
+    strcpy(ric_args.libs_dir, lib_dir);
+  else
+    strcpy(ric_args.libs_dir, "/usr/local/lib/flexric/");
+
+  init_agent_api( mcc, mnc, mnc_digit_len, nb_id, cu_du_id, node_type, io, &ric_args);
 //////////////////////////////////
 //////////////////////////////////
 
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 5e9cb203f6d30143bd215064775b2a46b5e87a63..d6951b9604d602cda858f8e6a03007e3f01056ca 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -1238,15 +1238,28 @@ int main ( int argc, char **argv )
     const int mnc = rrc->configuration.mnc[0]; // 94;
     const int mnc_digit_len = rrc->configuration.mnc_digit_length[0]; // 2;
     const int nb_id = rrc->configuration.cell_identity; //42;
+    // TODO: node_type = 0 // ngran_eNB
+    const int cu_du_id = 0;
     sm_io_ag_t io = {.read = read_RAN, .write = write_RAN};
     printf("[E2 NODE]: mcc = %d mnc = %d mnc_digit = %d nd_id = %d \n", mcc, mnc, mnc_digit_len, nb_id);
 
     int const agent_argc = 1;
     char** agent_argv = NULL;
     fr_args_t ric_args = init_fr_args(agent_argc, agent_argv);
-    strcpy(ric_args.conf_file, "/usr/local/flexric/flexric.conf");
-    strcpy(ric_args.libs_dir, "/usr/local/flexric/");
-    init_agent_api( mcc, mnc, mnc_digit_len, nb_id, io, &ric_args);
+    // TODO: integrate with oai config
+    char* conf_dir = getenv("FLEXRIC_CONF");
+    char* lib_dir = getenv("FLEXRIC_LIB_DIR");
+
+    if (conf_dir != NULL)
+      strcpy(ric_args.conf_file, conf_dir);
+    else
+      strcpy(ric_args.conf_file, "/usr/local/etc/flexric/flexric.conf");
+    if (lib_dir != NULL)
+      strcpy(ric_args.libs_dir, lib_dir);
+    else
+      strcpy(ric_args.libs_dir, "/usr/local/lib/flexric/");
+
+    init_agent_api( mcc, mnc, mnc_digit_len, nb_id, cu_du_id, 0, io, &ric_args);
 //////////////////////////////////
 //////////////////////////////////