Commit b9c92931 authored by Xenofon Foukas's avatar Xenofon Foukas

Added support for multiple eNBs

parent 07d30b22
...@@ -59,13 +59,15 @@ void *receive_thread(void *args); ...@@ -59,13 +59,15 @@ void *receive_thread(void *args);
pthread_t new_thread(void *(*f)(void *), void *b); pthread_t new_thread(void *(*f)(void *), void *b);
Protocol__ProgranMessage *enb_agent_timeout(void* args); Protocol__ProgranMessage *enb_agent_timeout(void* args);
int agent_task_created = 0;
/* /*
* 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
* and can interact with other itti tasks * and can interact with other itti tasks
*/ */
void *enb_agent_task(void *args){ void *enb_agent_task(void *args){
enb_agent_instance_t *d = (enb_agent_instance_t *) args; //enb_agent_instance_t *d = (enb_agent_instance_t *) args;
Protocol__ProgranMessage *msg; Protocol__ProgranMessage *msg;
void *data; void *data;
int size; int size;
...@@ -76,7 +78,7 @@ void *enb_agent_task(void *args){ ...@@ -76,7 +78,7 @@ void *enb_agent_task(void *args){
const char *msg_name = NULL; const char *msg_name = NULL;
instance_t instance; instance_t instance;
int result; int result;
struct enb_agent_timer_element_s * elem = NULL;
itti_mark_task_ready(TASK_ENB_AGENT); itti_mark_task_ready(TASK_ENB_AGENT);
...@@ -100,7 +102,8 @@ void *enb_agent_task(void *args){ ...@@ -100,7 +102,8 @@ void *enb_agent_task(void *args){
msg = enb_agent_process_timeout(msg_p->ittiMsg.timer_has_expired.timer_id, msg_p->ittiMsg.timer_has_expired.arg); msg = enb_agent_process_timeout(msg_p->ittiMsg.timer_has_expired.timer_id, msg_p->ittiMsg.timer_has_expired.arg);
if (msg != NULL){ if (msg != NULL){
data=enb_agent_pack_message(msg,&size); data=enb_agent_pack_message(msg,&size);
if (enb_agent_msg_send(d->enb_id, ENB_AGENT_DEFAULT, data, size, priority)) { elem = get_timer_entry(msg_p->ittiMsg.timer_has_expired.timer_id);
if (enb_agent_msg_send(elem->agent_id, ENB_AGENT_DEFAULT, data, size, priority)) {
err_code = PROTOCOL__PROGRAN_ERR__MSG_ENQUEUING; err_code = PROTOCOL__PROGRAN_ERR__MSG_ENQUEUING;
goto error; goto error;
} }
...@@ -203,6 +206,7 @@ pthread_t new_thread(void *(*f)(void *), void *b) { ...@@ -203,6 +206,7 @@ pthread_t new_thread(void *(*f)(void *), void *b) {
return t; return t;
} }
int channel_container_init = 0;
int enb_agent_start(mid_t mod_id, const Enb_properties_array_t* enb_properties){ int enb_agent_start(mid_t mod_id, const Enb_properties_array_t* enb_properties){
int channel_id; int channel_id;
...@@ -240,8 +244,10 @@ int enb_agent_start(mid_t mod_id, const Enb_properties_array_t* enb_properties){ ...@@ -240,8 +244,10 @@ int enb_agent_start(mid_t mod_id, const Enb_properties_array_t* enb_properties){
/* /*
* Initialize the channel container * Initialize the channel container
*/ */
if (!channel_container_init) {
enb_agent_init_channel_container(); enb_agent_init_channel_container();
channel_container_init = 1;
}
/*Create the async channel info*/ /*Create the async channel info*/
enb_agent_instance_t *channel_info = enb_agent_async_channel_info(mod_id, in_ip, in_port); enb_agent_instance_t *channel_info = enb_agent_async_channel_info(mod_id, in_ip, in_port);
...@@ -294,11 +300,13 @@ int enb_agent_start(mid_t mod_id, const Enb_properties_array_t* enb_properties){ ...@@ -294,11 +300,13 @@ int enb_agent_start(mid_t mod_id, const Enb_properties_array_t* enb_properties){
/* /*
* 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 (itti_create_task (TASK_ENB_AGENT, enb_agent_task, (void *) &enb_agent[mod_id]) < 0) { if (itti_create_task (TASK_ENB_AGENT, enb_agent_task, (void *) &enb_agent[mod_id]) < 0) {
LOG_E(ENB_AGENT, "Create task for eNB Agent failed\n"); LOG_E(ENB_AGENT, "Create task for eNB Agent failed\n");
return -1; return -1;
} }
agent_task_created = 1;
}
LOG_I(ENB_AGENT,"client ends\n"); LOG_I(ENB_AGENT,"client ends\n");
return 0; return 0;
......
...@@ -2090,11 +2090,14 @@ int enb_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__Progr ...@@ -2090,11 +2090,14 @@ int enb_agent_enb_config_reply(mid_t mod_id, const void *params, Protocol__Progr
//struct enb_agent_map agent_map; //struct enb_agent_map agent_map;
enb_agent_timer_instance_t timer_instance; enb_agent_timer_instance_t timer_instance;
int agent_timer_init = 0;
err_code_t enb_agent_init_timer(void){ err_code_t enb_agent_init_timer(void){
LOG_I(ENB_AGENT, "init RB tree\n"); LOG_I(ENB_AGENT, "init RB tree\n");
if (!agent_timer_init) {
RB_INIT(&timer_instance.enb_agent_head); RB_INIT(&timer_instance.enb_agent_head);
agent_timer_init = 1;
}
/* /*
struct enb_agent_timer_element_s e; struct enb_agent_timer_element_s e;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment