diff --git a/openair2/ENB_APP/enb_agent_handler.c b/openair2/ENB_APP/enb_agent_handler.c index 7b63227d7ee98cafcb3fb0b2f8aa359af12898ac..3e9752b539bec8a1c053f9ee814d53da8896e700 100644 --- a/openair2/ENB_APP/enb_agent_handler.c +++ b/openair2/ENB_APP/enb_agent_handler.c @@ -46,9 +46,10 @@ enb_agent_message_decoded_callback messages_callback[][3] = { {enb_agent_echo_reply, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_ECHO_REQUEST_MSG*/ {0, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_ECHO_REPLY_MSG*/ //Must add handler when receiving echo reply {enb_agent_mac_handle_stats, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REQUEST_MSG*/ - {0,0,0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REPLY_MSG*/ - {0,0,0}, /*PROTOCOK__PROGRAN_MESSAGE__MSG_SF_TRIGGER_MSG*/ - {0,0,0}, /*SR_INFO*/ + {0, 0, 0}, /*PROTOCOL__PROGRAN_MESSAGE__MSG_STATS_REPLY_MSG*/ + {0, 0, 0}, /*PROTOCOK__PROGRAN_MESSAGE__MSG_SF_TRIGGER_MSG*/ + {0, 0, 0}, /*SR_INFO*/ + {0, 0, 0}, /*DL_MAC_CONFIG*/ }; @@ -60,6 +61,7 @@ enb_agent_message_destruction_callback message_destruction_callback[] = { enb_agent_mac_destroy_stats_reply, enb_agent_mac_destroy_sf_trigger, enb_agent_mac_destroy_sr_info, + enb_agent_mac_destroy_dl_config, }; static const char *enb_agent_direction2String[] = { diff --git a/openair2/ENB_APP/enb_agent_mac.c b/openair2/ENB_APP/enb_agent_mac.c index 6e662673917da7b985e3060a6c318540aff0f4f8..157b83581d30bc9d4bdf0faf2eee1b50d51c83f7 100644 --- a/openair2/ENB_APP/enb_agent_mac.c +++ b/openair2/ENB_APP/enb_agent_mac.c @@ -45,6 +45,9 @@ /*Flags showing if a mac agent has already been registered*/ unsigned int mac_agent_registered[NUM_MAX_ENB]; +/*Array containing the Agent-MAC interfaces*/ +AGENT_MAC_xface *agent_mac_xface[NUM_MAX_ENB]; + int enb_agent_mac_handle_stats(mid_t mod_id, const void *params, Protocol__ProgranMessage **msg){ // TODO: Must deal with sanitization of input @@ -991,6 +994,43 @@ int enb_agent_mac_destroy_sf_trigger(Protocol__ProgranMessage *msg) { return -1; } +int enb_agent_mac_create_empty_dl_config(mid_t mod_id, Protocol__ProgranMessage **msg) { + + int xid = 0; + Protocol__PrpHeader *header; + if (prp_create_header(xid, PROTOCOL__PRP_TYPE__PRPT_DL_MAC_CONFIG, &header) != 0) + goto error; + + Protocol__PrpDlMacConfig *dl_mac_config_msg; + dl_mac_config_msg = malloc(sizeof(Protocol__PrpDlMacConfig)); + if (dl_mac_config_msg == NULL) { + goto error; + } + protocol__prp_dl_mac_config__init(dl_mac_config_msg); + + dl_mac_config_msg->header = header; + dl_mac_config_msg->has_sfn_sf = 1; + dl_mac_config_msg->sfn_sf = get_sfn_sf(mod_id); + + *msg = malloc(sizeof(Protocol__ProgranMessage)); + if(*msg == NULL) + goto error; + protocol__progran_message__init(*msg); + (*msg)->msg_case = PROTOCOL__PROGRAN_MESSAGE__MSG_DL_MAC_CONFIG_MSG; + (*msg)->msg_dir = PROTOCOL__PROGRAN_DIRECTION__INITIATING_MESSAGE; + (*msg)->dl_mac_config_msg = dl_mac_config_msg; + + return 0; + + error: + return -1; +} + +int enb_agent_mac_destroy_dl_config(Protocol__ProgranMessage *msg) { + //TODO: De-allocate the memory of the message + return -1; +} + /*********************************************** * eNB agent - technology mac API implementation ***********************************************/ @@ -1109,7 +1149,7 @@ void enb_agent_send_update_mac_stats(mid_t mod_id) { } int enb_agent_register_mac_xface(mid_t mod_id, AGENT_MAC_xface *xface) { - if (!mac_agent_registered[mod_id]) { + if (mac_agent_registered[mod_id]) { LOG_E(MAC, "MAC agent for eNB %d is already registered\n", mod_id); return -1; } @@ -1119,22 +1159,23 @@ int enb_agent_register_mac_xface(mid_t mod_id, AGENT_MAC_xface *xface) { xface->enb_agent_send_sf_trigger = enb_agent_send_sf_trigger; xface->enb_agent_send_update_mac_stats = enb_agent_send_update_mac_stats; + mac_agent_registered[mod_id] = 1; + agent_mac_xface[mod_id] = xface; return 0; } int enb_agent_unregister_mac_xface(mid_t mod_id, AGENT_MAC_xface *xface) { - if(mac_agent_registered[mod_id]) { - LOG_E(MAC, "MAC agent for eNB %d is already registered\n", mod_id); - return -1; - } - //xface->agent_ctxt = NULL; xface->enb_agent_send_sr_info = NULL; xface->enb_agent_send_sf_trigger = NULL; + xface->enb_agent_send_update_mac_stats = NULL; + mac_agent_registered[mod_id] = 0; + agent_mac_xface[mod_id] = NULL; + return 0; } diff --git a/openair2/ENB_APP/enb_agent_mac.h b/openair2/ENB_APP/enb_agent_mac.h index c30da76d3ee854909584c5ad114307e360049428..221d76e57fe22a43270bf6008e524000cfd1ed09 100644 --- a/openair2/ENB_APP/enb_agent_mac.h +++ b/openair2/ENB_APP/enb_agent_mac.h @@ -94,6 +94,10 @@ int enb_agent_mac_sf_trigger(mid_t mod_id, const void *params, Protocol__Progran int enb_agent_mac_destroy_sf_trigger(Protocol__ProgranMessage *msg); +int enb_agent_mac_create_empty_dl_config(mid_t mod_id, Protocol__ProgranMessage **msg); + +int enb_agent_mac_destroy_dl_config(Protocol__ProgranMessage *msg); + /********************************** * eNB agent - technology mac API