define FlexRAN data in RAN context and use it
- defines RCconfig data structures - adds method to read data - use it in source files
This commit is contained in:
@@ -40,6 +40,9 @@
|
|||||||
#include "PHY/impl_defs_top.h"
|
#include "PHY/impl_defs_top.h"
|
||||||
#include "PHY/impl_defs_lte.h"
|
#include "PHY/impl_defs_lte.h"
|
||||||
#include "RRC/LITE/defs.h"
|
#include "RRC/LITE/defs.h"
|
||||||
|
#ifdef FLEXRAN_AGENT_SB_IF
|
||||||
|
#include "flexran_agent_defs.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "gtpv1u.h"
|
#include "gtpv1u.h"
|
||||||
#include "NwGtpv1u.h"
|
#include "NwGtpv1u.h"
|
||||||
@@ -64,6 +67,10 @@ typedef struct {
|
|||||||
int *nb_L1_CC;
|
int *nb_L1_CC;
|
||||||
/// Number of RU instances in this node
|
/// Number of RU instances in this node
|
||||||
int nb_RU;
|
int nb_RU;
|
||||||
|
#ifdef FLEXRAN_AGENT_SB_IF
|
||||||
|
/// FlexRAN context variables
|
||||||
|
flexran_agent_info_t **flexran;
|
||||||
|
#endif
|
||||||
/// eNB context variables
|
/// eNB context variables
|
||||||
struct PHY_VARS_eNB_s ***eNB;
|
struct PHY_VARS_eNB_s ***eNB;
|
||||||
/// RRC context variables
|
/// RRC context variables
|
||||||
|
|||||||
@@ -869,7 +869,7 @@ int load_dl_scheduler_function(mid_t mod_id, const char *function_name) {
|
|||||||
char lib_name[120];
|
char lib_name[120];
|
||||||
char target[512];
|
char target[512];
|
||||||
snprintf(lib_name, sizeof(lib_name), "/%s.so", function_name);
|
snprintf(lib_name, sizeof(lib_name), "/%s.so", function_name);
|
||||||
strcpy(target, local_cache);
|
strcpy(target, RC.flexran[mod_id]->cache_name);
|
||||||
strcat(target, lib_name);
|
strcat(target, lib_name);
|
||||||
|
|
||||||
LOG_I(FLEXRAN_AGENT, "Opening pushed code: %s\n", target);
|
LOG_I(FLEXRAN_AGENT, "Opening pushed code: %s\n", target);
|
||||||
|
|||||||
@@ -343,8 +343,8 @@ void *eNB_app_task(void *args_p)
|
|||||||
enb_app_start_phy_rrc(enb_id_start, enb_id_end);
|
enb_app_start_phy_rrc(enb_id_start, enb_id_end);
|
||||||
|
|
||||||
#ifdef FLEXRAN_AGENT_SB_IF
|
#ifdef FLEXRAN_AGENT_SB_IF
|
||||||
for (enb_i = 0; enb_i <1; enb_i ++){ // To be handled for all of current eNB
|
for (uint32_t enb_i = 0; enb_i <1; enb_i ++){ // To be handled for all of current eNB
|
||||||
flexran_set_enb_vars(enb_i, RAN_LTE_OAI);
|
flexran_set_RC_vars(enb_i, RAN_LTE_OAI);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -237,6 +237,44 @@ void RCconfig_RU(void) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef FLEXRAN_AGENT_SB_IF
|
||||||
|
void RCconfig_flexran()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
paramdef_t flexranParams[] = FLEXRANPARAMS_DESC;
|
||||||
|
config_get(flexranParams, sizeof(flexranParams)/sizeof(paramdef_t), CONFIG_STRING_NETWORK_CONTROLLER_CONFIG);
|
||||||
|
|
||||||
|
if (!RC.flexran) {
|
||||||
|
RC.flexran = calloc(RC.nb_L1_inst, sizeof(flexran_agent_info_t*));
|
||||||
|
AssertFatal(RC.flexran != NULL,
|
||||||
|
"can't ALLOCATE %zu Bytes for %d flexran agent info with size %zu\n",
|
||||||
|
RC.nb_L1_inst * sizeof(flexran_agent_info_t*),
|
||||||
|
RC.nb_L1_inst, sizeof(flexran_agent_info_t*));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* For all agent instance, fill in the same controller configuration. */
|
||||||
|
for (i = 0; i < RC.nb_L1_inst; i++) {
|
||||||
|
RC.flexran[i] = calloc(1, sizeof(flexran_agent_info_t));
|
||||||
|
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);
|
||||||
|
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]->await_reconf = strcmp(*(flexranParams[FLEXRAN_AWAIT_RECONF_IDX].strptr), "yes") == 0;
|
||||||
|
RC.flexran[i]->enb_id = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TODO: show FlexRAN config now? */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void RCconfig_L1() {
|
void RCconfig_L1() {
|
||||||
int i,j;
|
int i,j;
|
||||||
paramdef_t L1_Params[] = L1PARAMS_DESC;
|
paramdef_t L1_Params[] = L1PARAMS_DESC;
|
||||||
@@ -451,10 +489,6 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
char* flexran_agent_interface_name = NULL;
|
|
||||||
char* flexran_agent_ipv4_address = NULL;
|
|
||||||
int32_t flexran_agent_port = 0;
|
|
||||||
char* flexran_agent_cache = NULL;
|
|
||||||
int32_t otg_ue_id = 0;
|
int32_t otg_ue_id = 0;
|
||||||
char* otg_app_type = NULL;
|
char* otg_app_type = NULL;
|
||||||
char* otg_bg_traffic = NULL;
|
char* otg_bg_traffic = NULL;
|
||||||
@@ -2028,35 +2062,6 @@ int RCconfig_RRC(MessageDef *msg_p, uint32_t i, eNB_RRC_INST *rrc) {
|
|||||||
rrc->srb1_poll_byte = PollByte_kBinfinity;
|
rrc->srb1_poll_byte = PollByte_kBinfinity;
|
||||||
rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t8;
|
rrc->srb1_max_retx_threshold = UL_AM_RLC__maxRetxThreshold_t8;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
// Network Controller
|
|
||||||
subsetting = config_setting_get_member (setting_enb, ENB_CONFIG_STRING_NETWORK_CONTROLLER_CONFIG);
|
|
||||||
|
|
||||||
if (subsetting != NULL) {
|
|
||||||
if ( (
|
|
||||||
config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_INTERFACE_NAME,
|
|
||||||
(const char **)&flexran_agent_interface_name)
|
|
||||||
&& config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_IPV4_ADDRESS,
|
|
||||||
(const char **)&flexran_agent_ipv4_address)
|
|
||||||
&& config_setting_lookup_int(subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_PORT,
|
|
||||||
&flexran_agent_port)
|
|
||||||
&& config_setting_lookup_string( subsetting, ENB_CONFIG_STRING_FLEXRAN_AGENT_CACHE,
|
|
||||||
(const char **)&flexran_agent_cache)
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_interface_name = strdup(flexran_agent_interface_name);
|
|
||||||
cidr = flexran_agent_ipv4_address;
|
|
||||||
address = strtok(cidr, "/");
|
|
||||||
//enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_ipv4_address = strdup(address);
|
|
||||||
if (address) {
|
|
||||||
IPV4_STR_ADDR_TO_INT_NWBO (address, enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_ipv4_address, "BAD IP ADDRESS FORMAT FOR eNB Agent !\n" );
|
|
||||||
}
|
|
||||||
|
|
||||||
enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_port = flexran_agent_port;
|
|
||||||
enb_properties_loc.properties[enb_properties_loc_index]->flexran_agent_cache = strdup(flexran_agent_cache);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// OTG _CONFIG
|
// OTG _CONFIG
|
||||||
|
|||||||
@@ -94,6 +94,9 @@ typedef struct ru_config_s {
|
|||||||
} ru_config_t;
|
} ru_config_t;
|
||||||
|
|
||||||
extern void RCconfig_RU(void);
|
extern void RCconfig_RU(void);
|
||||||
|
#ifdef FLEXRAN_AGENT_SB_IF
|
||||||
|
extern void RCconfig_flexran(void);
|
||||||
|
#endif
|
||||||
extern void RCconfig_L1(void);
|
extern void RCconfig_L1(void);
|
||||||
extern void RCconfig_macrlc(void);
|
extern void RCconfig_macrlc(void);
|
||||||
extern int RCconfig_gtpu(void );
|
extern int RCconfig_gtpu(void );
|
||||||
|
|||||||
@@ -627,7 +627,7 @@ static int DEFENBS[] = {0};
|
|||||||
|
|
||||||
#define FLEXRANPARAMS_DESC { \
|
#define FLEXRANPARAMS_DESC { \
|
||||||
{CONFIG_STRING_FLEXRAN_INTERFACE_NAME, NULL, 0, strptr:NULL, defstrval:"lo", 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/30", 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}, \
|
{CONFIG_STRING_FLEXRAN_PORT, NULL, 0, uptr:NULL, defintval:2210, TYPE_UINT, 0}, \
|
||||||
{CONFIG_STRING_FLEXRAN_CACHE, NULL, 0, strptr:NULL, defstrval:"/mnt/oai_agent_cache", TYPE_STRING, 0}, \
|
{CONFIG_STRING_FLEXRAN_CACHE, NULL, 0, strptr:NULL, defstrval:"/mnt/oai_agent_cache", TYPE_STRING, 0}, \
|
||||||
{CONFIG_STRING_FLEXRAN_AWAIT_RECONF, NULL, 0, strptr:NULL, defstrval:"no", TYPE_STRING, 0} \
|
{CONFIG_STRING_FLEXRAN_AWAIT_RECONF, NULL, 0, strptr:NULL, defstrval:"no", TYPE_STRING, 0} \
|
||||||
|
|||||||
@@ -30,15 +30,6 @@
|
|||||||
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
|
|
||||||
|
|
||||||
//#define TEST_TIMER
|
|
||||||
|
|
||||||
flexran_agent_instance_t flexran_agent[NUM_MAX_ENB];
|
|
||||||
|
|
||||||
char in_ip[40];
|
|
||||||
static uint16_t in_port;
|
|
||||||
char local_cache[40];
|
|
||||||
|
|
||||||
void *send_thread(void *args);
|
void *send_thread(void *args);
|
||||||
void *receive_thread(void *args);
|
void *receive_thread(void *args);
|
||||||
pthread_t new_thread(void *(*f)(void *), void *b);
|
pthread_t new_thread(void *(*f)(void *), void *b);
|
||||||
@@ -52,7 +43,7 @@ int agent_task_created = 0;
|
|||||||
*/
|
*/
|
||||||
void *flexran_agent_task(void *args){
|
void *flexran_agent_task(void *args){
|
||||||
|
|
||||||
//flexran_agent_instance_t *d = (flexran_agent_instance_t *) args;
|
//flexran_agent_info_t *d = (flexran_agent_info_t *) args;
|
||||||
Protocol__FlexranMessage *msg;
|
Protocol__FlexranMessage *msg;
|
||||||
void *data;
|
void *data;
|
||||||
int size;
|
int size;
|
||||||
@@ -113,7 +104,7 @@ void *flexran_agent_task(void *args){
|
|||||||
|
|
||||||
void *receive_thread(void *args) {
|
void *receive_thread(void *args) {
|
||||||
|
|
||||||
flexran_agent_instance_t *d = args;
|
flexran_agent_info_t *d = args;
|
||||||
void *data;
|
void *data;
|
||||||
int size;
|
int size;
|
||||||
int priority;
|
int priority;
|
||||||
@@ -186,46 +177,19 @@ pthread_t new_thread(void *(*f)(void *), void *b) {
|
|||||||
return t;
|
return t;
|
||||||
}
|
}
|
||||||
|
|
||||||
void flexran_agent_reconfigure(mid_t mod_id){
|
|
||||||
Enb_properties_array_t *enb_properties = enb_config_get();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* check the configuration
|
|
||||||
*/
|
|
||||||
if (enb_properties->properties[mod_id]->flexran_agent_cache != NULL) {
|
|
||||||
strncpy(local_cache, enb_properties->properties[mod_id]->flexran_agent_cache, sizeof(local_cache));
|
|
||||||
local_cache[sizeof(local_cache) - 1] = 0;
|
|
||||||
} else {
|
|
||||||
strcpy(local_cache, DEFAULT_FLEXRAN_AGENT_CACHE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enb_properties->properties[mod_id]->flexran_agent_ipv4_address != 0) {
|
|
||||||
inet_ntop(AF_INET, &(enb_properties->properties[mod_id]->flexran_agent_ipv4_address), in_ip, INET_ADDRSTRLEN);
|
|
||||||
} else {
|
|
||||||
strcpy(in_ip, DEFAULT_FLEXRAN_AGENT_IPv4_ADDRESS );
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enb_properties->properties[mod_id]->flexran_agent_port != 0 ) {
|
|
||||||
in_port = enb_properties->properties[mod_id]->flexran_agent_port;
|
|
||||||
} else {
|
|
||||||
in_port = DEFAULT_FLEXRAN_AGENT_PORT ;
|
|
||||||
}
|
|
||||||
LOG_I(FLEXRAN_AGENT,"starting enb agent client for module id %d on ipv4 %s, port %d\n",
|
|
||||||
flexran_agent[mod_id].enb_id,
|
|
||||||
in_ip,
|
|
||||||
in_port);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
int channel_container_init = 0;
|
int channel_container_init = 0;
|
||||||
int flexran_agent_start(mid_t mod_id)
|
int flexran_agent_start(mid_t mod_id)
|
||||||
{
|
{
|
||||||
int channel_id;
|
int channel_id;
|
||||||
|
char *in_ip = RC.flexran[mod_id]->remote_ipv4_addr;
|
||||||
|
uint16_t in_port = RC.flexran[mod_id]->remote_port;
|
||||||
|
|
||||||
flexran_set_enb_vars(mod_id, RAN_LTE_OAI);
|
RC.flexran[mod_id]->enb_id = mod_id;
|
||||||
flexran_agent[mod_id].enb_id = mod_id;
|
/* assume for the moment the monolithic case, i.e. agent can provide
|
||||||
|
* information for all layers */
|
||||||
flexran_agent_reconfigure(mod_id);
|
RC.flexran[mod_id]->capability_mask = FLEXRAN_CAP_LOL1 | FLEXRAN_CAP_HIL1
|
||||||
|
| FLEXRAN_CAP_LOL2 | FLEXRAN_CAP_HIL2
|
||||||
|
| FLEXRAN_CAP_PDCP | FLEXRAN_CAP_RRC;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Initialize the channel container
|
* Initialize the channel container
|
||||||
@@ -264,7 +228,7 @@ int flexran_agent_start(mid_t mod_id)
|
|||||||
/*Initialize the continuous stats update mechanism*/
|
/*Initialize the continuous stats update mechanism*/
|
||||||
flexran_agent_init_cont_stats_update(mod_id);
|
flexran_agent_init_cont_stats_update(mod_id);
|
||||||
|
|
||||||
new_thread(receive_thread, &flexran_agent[mod_id]);
|
new_thread(receive_thread, RC.flexran[mod_id]);
|
||||||
|
|
||||||
/*Initialize and register the mac xface. Must be modified later
|
/*Initialize and register the mac xface. Must be modified later
|
||||||
*for more flexibility in agent management */
|
*for more flexibility in agent management */
|
||||||
@@ -293,7 +257,7 @@ int flexran_agent_start(mid_t mod_id)
|
|||||||
* start the enb agent task for tx and interaction with the underlying network function
|
* start the enb agent task for tx and interaction with the underlying network function
|
||||||
*/
|
*/
|
||||||
if (!agent_task_created) {
|
if (!agent_task_created) {
|
||||||
if (itti_create_task (TASK_FLEXRAN_AGENT, flexran_agent_task, (void *) &flexran_agent[mod_id]) < 0) {
|
if (itti_create_task (TASK_FLEXRAN_AGENT, flexran_agent_task, (void *) RC.flexran[mod_id]) < 0) {
|
||||||
LOG_E(FLEXRAN_AGENT, "Create task for FlexRAN Agent failed\n");
|
LOG_E(FLEXRAN_AGENT, "Create task for FlexRAN Agent failed\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,6 @@
|
|||||||
/* Initiation and termination of the eNodeB agent */
|
/* Initiation and termination of the eNodeB agent */
|
||||||
int flexran_agent_start(mid_t mod_id);
|
int flexran_agent_start(mid_t mod_id);
|
||||||
int flexran_agent_stop(mid_t mod_id);
|
int flexran_agent_stop(mid_t mod_id);
|
||||||
void flexran_agent_reconfigure(mid_t mod_id);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* enb agent task mainly wakes up the tx thread for periodic and oneshot messages to the controller
|
* enb agent task mainly wakes up the tx thread for periodic and oneshot messages to the controller
|
||||||
|
|||||||
@@ -391,7 +391,7 @@ int flexran_agent_control_delegation(mid_t mod_id, const void *params, Protocol_
|
|||||||
char lib_name[120];
|
char lib_name[120];
|
||||||
char target[512];
|
char target[512];
|
||||||
snprintf(lib_name, sizeof(lib_name), "/%s.so", control_delegation_msg->name);
|
snprintf(lib_name, sizeof(lib_name), "/%s.so", control_delegation_msg->name);
|
||||||
strcpy(target, local_cache);
|
strcpy(target, RC.flexran[mod_id]->cache_name);
|
||||||
strcat(target, lib_name);
|
strcat(target, lib_name);
|
||||||
|
|
||||||
FILE *f;
|
FILE *f;
|
||||||
@@ -1075,7 +1075,7 @@ int flexran_agent_rrc_measurement(mid_t mod_id, const void *params, Protocol__Fl
|
|||||||
|
|
||||||
struct rrc_eNB_ue_context_s *ue_context_p = NULL;
|
struct rrc_eNB_ue_context_s *ue_context_p = NULL;
|
||||||
|
|
||||||
RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(eNB_rrc_inst[mod_id].rrc_ue_head)){
|
RB_FOREACH(ue_context_p, rrc_ue_tree_s, &(RC.rrc[mod_id]->rrc_ue_head)){
|
||||||
|
|
||||||
|
|
||||||
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, mod_id, ENB_FLAG_YES, ue_context_p->ue_context.rnti, flexran_get_current_frame(mod_id), flexran_get_current_subframe (mod_id), mod_id);
|
PROTOCOL_CTXT_SET_BY_MODULE_ID(&ctxt, mod_id, ENB_FLAG_YES, ue_context_p->ue_context.rnti, flexran_get_current_frame(mod_id), flexran_get_current_subframe (mod_id), mod_id);
|
||||||
|
|||||||
@@ -138,11 +138,24 @@ typedef enum {
|
|||||||
FLEXRAN_AGENT_TIMER_STATE_MAX,
|
FLEXRAN_AGENT_TIMER_STATE_MAX,
|
||||||
} flexran_agent_timer_state_t;
|
} flexran_agent_timer_state_t;
|
||||||
|
|
||||||
|
#define FLEXRAN_CAP_LOL1 0x1
|
||||||
|
#define FLEXRAN_CAP_HIL1 0x2
|
||||||
|
#define FLEXRAN_CAP_LOL2 0x4 // is: MAC
|
||||||
|
#define FLEXRAN_CAP_HIL2 0x8 // is: RLC
|
||||||
|
#define FLEXRAN_CAP_PDCP 0x16
|
||||||
|
#define FLEXRAN_CAP_RRC 0x32
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/* general info */
|
/* general info */
|
||||||
|
char *interface_name;
|
||||||
|
char *remote_ipv4_addr;
|
||||||
|
uint16_t remote_port;
|
||||||
|
char *cache_name;
|
||||||
|
uint8_t await_reconf;
|
||||||
|
|
||||||
|
int enb_id;
|
||||||
|
uint8_t capability_mask;
|
||||||
|
|
||||||
/* stats */
|
/* stats */
|
||||||
|
|
||||||
uint32_t total_rx_msg;
|
uint32_t total_rx_msg;
|
||||||
@@ -200,10 +213,4 @@ typedef struct stats_request_config_s{
|
|||||||
report_config_t *config;
|
report_config_t *config;
|
||||||
} stats_request_config_t;
|
} stats_request_config_t;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
mid_t enb_id;
|
|
||||||
flexran_agent_info_t agent_info;
|
|
||||||
|
|
||||||
} flexran_agent_instance_t;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -34,11 +34,7 @@
|
|||||||
#include "flexran_agent_mac_defs.h"
|
#include "flexran_agent_mac_defs.h"
|
||||||
#include "flexran_agent_rrc_defs.h"
|
#include "flexran_agent_rrc_defs.h"
|
||||||
#include "flexran_agent_pdcp_defs.h"
|
#include "flexran_agent_pdcp_defs.h"
|
||||||
|
#include "common/ran_context.h"
|
||||||
//extern msg_context_t shared_ctxt[NUM_MAX_ENB][FLEXRAN_AGENT_MAX];
|
|
||||||
|
|
||||||
/* full path of the local cache for storing VSFs */
|
|
||||||
extern char local_cache[40];
|
|
||||||
|
|
||||||
/* Control module interface for the communication of the MAC Control Module with the agent */
|
/* Control module interface for the communication of the MAC Control Module with the agent */
|
||||||
extern AGENT_MAC_xface *agent_mac_xface[NUM_MAX_ENB];
|
extern AGENT_MAC_xface *agent_mac_xface[NUM_MAX_ENB];
|
||||||
|
|||||||
Reference in New Issue
Block a user