From 391320b99245d8e71ab8af097f540e63659111ef Mon Sep 17 00:00:00 2001
From: Robert Schmidt <robert.schmidt@eurecom.fr>
Date: Wed, 24 Oct 2018 11:35:12 +0200
Subject: [PATCH] Simplify PDCP FlexRAN agent interface

---
 .../CONTROL_MODULES/PDCP/flexran_agent_pdcp.c | 35 +++++++++++--------
 .../CONTROL_MODULES/PDCP/flexran_agent_pdcp.h |  6 ++--
 openair2/ENB_APP/flexran_agent.c              |  3 +-
 openair2/ENB_APP/flexran_agent_extern.h       |  5 +--
 4 files changed, 27 insertions(+), 22 deletions(-)

diff --git a/openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.c b/openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.c
index b2723f7181..34f3f414cc 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.c
+++ b/openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.c
@@ -28,12 +28,6 @@
 
 #include "flexran_agent_pdcp.h"
 
-
-/*Trigger boolean for PDCP measurement*/
-bool triggered_pdcp = false;
-/*Flags showing if a pdcp agent has already been registered*/
-unsigned int pdcp_agent_registered[NUM_MAX_ENB];
-
 /*Array containing the Agent-PDCP interfaces*/
 AGENT_PDCP_xface *agent_pdcp_xface[NUM_MAX_ENB];
 
@@ -144,28 +138,41 @@ int flexran_agent_pdcp_stats_reply(mid_t mod_id,
 
 
 
-int flexran_agent_register_pdcp_xface(mid_t mod_id, AGENT_PDCP_xface *xface) {
-  if (pdcp_agent_registered[mod_id]) {
-    LOG_E(PDCP, "PDCP agent for eNB %d is already registered\n", mod_id);
+int flexran_agent_register_pdcp_xface(mid_t mod_id)
+{
+  if (agent_pdcp_xface[mod_id]) {
+    LOG_E(FLEXRAN_AGENT, "PDCP agent CM for eNB %d is already registered\n", mod_id);
+    return -1;
+  }
+  AGENT_PDCP_xface *xface = malloc(sizeof(AGENT_PDCP_xface));
+  if (!xface) {
+    LOG_E(FLEXRAN_AGENT, "could not allocate memory for PDCP agent xface %d\n", mod_id);
     return -1;
   }
 
   //xface->flexran_pdcp_stats_measurement = NULL;
 
-  pdcp_agent_registered[mod_id] = 1;
   agent_pdcp_xface[mod_id] = xface;
 
   return 0;
 }
 
-int flexran_agent_unregister_pdcp_xface(mid_t mod_id, AGENT_PDCP_xface *xface) {
-
+int flexran_agent_unregister_pdcp_xface(mid_t mod_id)
+{
+  if (!agent_pdcp_xface[mod_id]) {
+    LOG_E(FLEXRAN_AGENT, "PDCP agent CM for eNB %d is not registered\n", mod_id);
+    return -1;
+  }
   //xface->agent_ctxt = NULL;
   //xface->flexran_pdcp_stats_measurement = NULL;
 
-  
-  pdcp_agent_registered[mod_id] = 0;
+  free(agent_pdcp_xface[mod_id]);
   agent_pdcp_xface[mod_id] = NULL;
 
   return 0;
 }
+
+AGENT_PDCP_xface *flexran_agent_get_pdcp_xface(mid_t mod_id)
+{
+  return agent_pdcp_xface[mod_id];
+}
diff --git a/openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.h b/openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.h
index 83aac45406..be952326e8 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.h
+++ b/openair2/ENB_APP/CONTROL_MODULES/PDCP/flexran_agent_pdcp.h
@@ -39,6 +39,8 @@
 #include "flexran_agent_defs.h"
 #include "flexran_agent_pdcp_defs.h"
 #include "flexran_agent_ran_api.h"
+// for flexran_agent_get_pdcp_xface()
+#include "flexran_agent_extern.h"
 
 /**********************************
  * FlexRAN agent - technology PDCP API
@@ -56,9 +58,9 @@ void flexran_agent_pdcp_aggregate_stats(const mid_t mod_id,
 					Protocol__FlexPdcpStats *pdcp_aggr_stats);
 
 /*Register technology specific interface callbacks*/
-int flexran_agent_register_pdcp_xface(mid_t mod_id, AGENT_PDCP_xface *xface);
+int flexran_agent_register_pdcp_xface(mid_t mod_id);
 
 /*Unregister technology specific callbacks*/
-int flexran_agent_unregister_pdcp_xface(mid_t mod_id, AGENT_PDCP_xface*xface);
+int flexran_agent_unregister_pdcp_xface(mid_t mod_id);
 
 #endif
diff --git a/openair2/ENB_APP/flexran_agent.c b/openair2/ENB_APP/flexran_agent.c
index d7c7785e51..30f2e27895 100644
--- a/openair2/ENB_APP/flexran_agent.c
+++ b/openair2/ENB_APP/flexran_agent.c
@@ -236,8 +236,7 @@ int flexran_agent_start(mid_t mod_id)
 
   flexran_agent_register_rrc_xface(mod_id);
 
-  AGENT_PDCP_xface *pdcp_agent_xface = (AGENT_PDCP_xface *) malloc(sizeof(AGENT_PDCP_xface));
-  flexran_agent_register_pdcp_xface(mod_id, pdcp_agent_xface);
+  flexran_agent_register_pdcp_xface(mod_id);
 
   /* 
    * initilize a timer 
diff --git a/openair2/ENB_APP/flexran_agent_extern.h b/openair2/ENB_APP/flexran_agent_extern.h
index bc5b64a311..f80532be93 100644
--- a/openair2/ENB_APP/flexran_agent_extern.h
+++ b/openair2/ENB_APP/flexran_agent_extern.h
@@ -42,10 +42,7 @@ AGENT_MAC_xface *flexran_agent_get_mac_xface(mid_t mod_id);
 AGENT_RRC_xface *flexran_agent_get_rrc_xface(mid_t mod_id);
 
 /* Control module interface for the communication of the RRC Control Module with the agent */
-extern AGENT_PDCP_xface *agent_pdcp_xface[NUM_MAX_ENB];
-
-/* Flag indicating whether the VSFs for the RRC control module have been registered */
-extern unsigned int pdcp_agent_registered[NUM_MAX_ENB];
+AGENT_PDCP_xface *flexran_agent_get_pdcp_xface(mid_t mod_id);
 
 /* Requried to know which UEs had a harq updated over some subframe */
 extern int harq_pid_updated[NUM_MAX_UE][8];
-- 
GitLab