From 219b5bc92f25bca7203ac42bc3203381170cb50b Mon Sep 17 00:00:00 2001
From: Robert Schmidt <robert.schmidt@eurecom.fr>
Date: Mon, 12 Feb 2018 15:11:19 +0100
Subject: [PATCH] make FlexRAN Agent activation configurable

---
 openair2/ENB_APP/enb_config.c         |  7 ++-----
 openair2/ENB_APP/enb_paramdef.h       | 13 ++++++++-----
 openair2/ENB_APP/flexran_agent.c      |  6 ++++++
 openair2/ENB_APP/flexran_agent_defs.h |  1 +
 4 files changed, 17 insertions(+), 10 deletions(-)

diff --git a/openair2/ENB_APP/enb_config.c b/openair2/ENB_APP/enb_config.c
index 1bf2807e81..a30dc28c94 100644
--- a/openair2/ENB_APP/enb_config.c
+++ b/openair2/ENB_APP/enb_config.c
@@ -119,19 +119,16 @@ void RCconfig_flexran()
     AssertFatal(RC.flexran[i] != NULL,
                 "can't ALLOCATE %zu Bytes for flexran agent info (iteration %d/%d)\n",
                 sizeof(flexran_agent_info_t), i + 1, RC.nb_L1_inst);
+    /* if config says "yes", enable Agent, in all other cases it's like "no" */
+    RC.flexran[i]->enabled          = strcmp(*(flexranParams[FLEXRAN_ENABLED].strptr), "yes") == 0;
     RC.flexran[i]->interface_name   = strdup(*(flexranParams[FLEXRAN_INTERFACE_NAME_IDX].strptr));
     //inet_ntop(AF_INET, &(enb_properties->properties[mod_id]->flexran_agent_ipv4_address), in_ip, INET_ADDRSTRLEN);
-    //strcpy(in_ip, DEFAULT_FLEXRAN_AGENT_IPv4_ADDRESS );
     RC.flexran[i]->remote_ipv4_addr = strdup(*(flexranParams[FLEXRAN_IPV4_ADDRESS_IDX].strptr));
-    // DEFAULT_FLEXRAN_AGENT_PORT
     RC.flexran[i]->remote_port      = *(flexranParams[FLEXRAN_PORT_IDX].uptr);
-    // DEFAULT_FLEXRAN_AGENT_CACHE
     RC.flexran[i]->cache_name       = strdup(*(flexranParams[FLEXRAN_CACHE_IDX].strptr));
     RC.flexran[i]->node_ctrl_state  = strcmp(*(flexranParams[FLEXRAN_AWAIT_RECONF_IDX].strptr), "yes") == 0 ? ENB_WAIT : ENB_NORMAL_OPERATION;
     RC.flexran[i]->enb_id           = i;
   }
-
-  /* TODO: show FlexRAN config now? */
 }
 
 void RCconfig_L1(void) {
diff --git a/openair2/ENB_APP/enb_paramdef.h b/openair2/ENB_APP/enb_paramdef.h
index 0203380314..2d65e09b58 100755
--- a/openair2/ENB_APP/enb_paramdef.h
+++ b/openair2/ENB_APP/enb_paramdef.h
@@ -613,19 +613,22 @@ static int DEFENBS[] = {0};
 /*----------------------------------------------------------------------------------------------------------------------------------------------------*/
 #define CONFIG_STRING_NETWORK_CONTROLLER_CONFIG         "NETWORK_CONTROLLER"
 
+#define CONFIG_STRING_FLEXRAN_ENABLED             "FLEXRAN_ENABLED"
 #define CONFIG_STRING_FLEXRAN_INTERFACE_NAME      "FLEXRAN_INTERFACE_NAME"
 #define CONFIG_STRING_FLEXRAN_IPV4_ADDRESS        "FLEXRAN_IPV4_ADDRESS"
 #define CONFIG_STRING_FLEXRAN_PORT                "FLEXRAN_PORT"
 #define CONFIG_STRING_FLEXRAN_CACHE               "FLEXRAN_CACHE"
 #define CONFIG_STRING_FLEXRAN_AWAIT_RECONF        "FLEXRAN_AWAIT_RECONF"
 
-#define FLEXRAN_INTERFACE_NAME_IDX                    0
-#define FLEXRAN_IPV4_ADDRESS_IDX                      1
-#define FLEXRAN_PORT_IDX                              2
-#define FLEXRAN_CACHE_IDX                             3
-#define FLEXRAN_AWAIT_RECONF_IDX                      4
+#define FLEXRAN_ENABLED                               0
+#define FLEXRAN_INTERFACE_NAME_IDX                    1
+#define FLEXRAN_IPV4_ADDRESS_IDX                      2
+#define FLEXRAN_PORT_IDX                              3
+#define FLEXRAN_CACHE_IDX                             4
+#define FLEXRAN_AWAIT_RECONF_IDX                      5
 
 #define FLEXRANPARAMS_DESC { \
+{CONFIG_STRING_FLEXRAN_ENABLED,                NULL,   0,   strptr:NULL,   defstrval:"no",                    TYPE_STRING,   0},           \
 {CONFIG_STRING_FLEXRAN_INTERFACE_NAME,         NULL,   0,   strptr:NULL,   defstrval:"lo",                    TYPE_STRING,   0},           \
 {CONFIG_STRING_FLEXRAN_IPV4_ADDRESS,           NULL,   0,   strptr:NULL,   defstrval:"127.0.0.1",             TYPE_STRING,   0},           \
 {CONFIG_STRING_FLEXRAN_PORT,                   NULL,   0,   uptr:NULL,     defintval:2210,                    TYPE_UINT,     0},           \
diff --git a/openair2/ENB_APP/flexran_agent.c b/openair2/ENB_APP/flexran_agent.c
index d32f3e660f..bd46ecc49d 100644
--- a/openair2/ENB_APP/flexran_agent.c
+++ b/openair2/ENB_APP/flexran_agent.c
@@ -184,6 +184,12 @@ int flexran_agent_start(mid_t mod_id)
   int channel_id;
   char *in_ip = flexran->remote_ipv4_addr;
   uint16_t in_port = flexran->remote_port;
+
+  /* if this agent is disabled, return and don't do anything */
+  if (!flexran->enabled) {
+    LOG_I(FLEXRAN_AGENT, "FlexRAN Agent for eNB %d is DISABLED\n", mod_id);
+    return 100;
+  }
   
   flexran->enb_id = mod_id;
   /* assume for the moment the monolithic case, i.e. agent can provide
diff --git a/openair2/ENB_APP/flexran_agent_defs.h b/openair2/ENB_APP/flexran_agent_defs.h
index fd22b01e61..6364bc6281 100644
--- a/openair2/ENB_APP/flexran_agent_defs.h
+++ b/openair2/ENB_APP/flexran_agent_defs.h
@@ -153,6 +153,7 @@ typedef enum {
 
 typedef struct {
   /* general info */ 
+  int      enabled;
   char    *interface_name;
   char    *remote_ipv4_addr;
   uint16_t remote_port;
-- 
GitLab