From 0efde02161c7865aeae2c30a4e988f6bec9c89f8 Mon Sep 17 00:00:00 2001 From: Robert Schmidt <robert.schmidt@eurecom.fr> Date: Fri, 26 Oct 2018 13:36:39 +0200 Subject: [PATCH] Sanitize link_manager interface, correct in FlexRAN/PROTO_AGENT This commit cleans up the link_manager interface: * don't provide peer_addr/port in create_link_manager() (for TCP/SCTP it is not needed, so in the UDP case in needs to be set explicitly) * Make FlexRAN connect again (correct hardcoded address) * Fix FlexRAN: retain the manager pointer * Fix FlexRAN: store receive_queue pointer * the link_manager's sender thread passes the correct peer_addr/port for the UDP case --- openair2/ENB_APP/flexran_agent_async.c | 22 ++++++------------- .../LAYER2/PROTO_AGENT/proto_agent_async.c | 12 +++++----- .../LAYER2/PROTO_AGENT/proto_agent_async.h | 2 -- openair2/UTIL/ASYNC_IF/link_manager.c | 10 ++------- openair2/UTIL/ASYNC_IF/link_manager.h | 10 +++------ openair2/UTIL/ASYNC_IF/socket_link.c | 2 -- 6 files changed, 17 insertions(+), 41 deletions(-) diff --git a/openair2/ENB_APP/flexran_agent_async.c b/openair2/ENB_APP/flexran_agent_async.c index 12d9bf7e2a..34d2f5b1e8 100644 --- a/openair2/ENB_APP/flexran_agent_async.c +++ b/openair2/ENB_APP/flexran_agent_async.c @@ -67,26 +67,18 @@ flexran_agent_async_channel_t * flexran_agent_async_channel_info(mid_t mod_id, c } // not using the circular buffer: affects the PDCP split //channel->receive_queue = new_message_queue(500); - channel->send_queue = new_message_queue(); + channel->receive_queue = new_message_queue(); if (channel->receive_queue == NULL) { LOG_E(FLEXRAN_AGENT, "could not create send_queue\n"); goto error; } - /* - * create a link manager - */ - - // PDCP split interface ASYNC_IF link manager is using more arguments - -// channel->manager = create_link_manager(channel->send_queue, channel->receive_queue, channel->link); - - // Hardcoded fix: TODO: Fix this - uint8_t type = 1; - char *peer_addr = strdup("127.0.0.1"); - uint32_t port = 10000; - create_link_manager(channel->send_queue, channel->receive_queue, channel->link, type, peer_addr, port); - if (channel->manager == NULL) goto error; + /* create a link manager */ + channel->manager = create_link_manager(channel->send_queue, channel->receive_queue, channel->link); + if (channel->manager == NULL) { + LOG_E(FLEXRAN_AGENT, "could not create link_manager\n"); + goto error; + } return channel; diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_async.c b/openair2/LAYER2/PROTO_AGENT/proto_agent_async.c index 080491e5ee..660c21e75e 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent_async.c +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_async.c @@ -44,9 +44,6 @@ proto_agent_async_channel_info(mod_id_t mod_id, const char *bind_ip, uint16_t bi if (channel == NULL) goto error; - channel->peer_port = peer_port; - channel->peer_addr = peer_ip; - channel->enb_id = mod_id; channel->link = new_link_udp_server(bind_ip, bind_port); @@ -59,10 +56,11 @@ proto_agent_async_channel_info(mod_id_t mod_id, const char *bind_ip, uint16_t bi channel->manager = create_link_manager(channel->send_queue, channel->receive_queue, - channel->link, - CHANNEL_UDP, - channel->peer_addr, - channel->peer_port); + channel->link); + /* manually set remote IP&port for UDP server remote end */ + channel->manager->peer_port = peer_port; + channel->manager->peer_addr = peer_ip; + if (channel->manager == NULL) goto error; return channel; diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_async.h b/openair2/LAYER2/PROTO_AGENT/proto_agent_async.h index 780f004681..7658e1d98f 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent_async.h +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_async.h @@ -41,8 +41,6 @@ typedef struct proto_agent_async_channel_s { mod_id_t enb_id; - const char *peer_addr; - int peer_port; socket_link_t *link; message_queue_t *send_queue; message_queue_t *receive_queue; diff --git a/openair2/UTIL/ASYNC_IF/link_manager.c b/openair2/UTIL/ASYNC_IF/link_manager.c index f355e79dd9..973f155422 100644 --- a/openair2/UTIL/ASYNC_IF/link_manager.c +++ b/openair2/UTIL/ASYNC_IF/link_manager.c @@ -47,7 +47,7 @@ static void *link_manager_sender_thread(void *_manager) while (manager->run) { while (message_get(manager->send_queue, &data, &size, &priority) == 0) { - link_send_packet(manager->socket_link, data, size, manager->peer_addr, manager->port); + link_send_packet(manager->socket_link, data, size, manager->peer_addr, manager->peer_port); free(data); } // if (message_get(manager->send_queue, &data, &size, &priority)) @@ -95,10 +95,7 @@ error: link_manager_t *create_link_manager( message_queue_t *send_queue, message_queue_t *receive_queue, - socket_link_t *link, - uint16_t type, - const char *peer_addr, - int port ) + socket_link_t *link) { link_manager_t *ret = NULL; pthread_attr_t attr; @@ -113,9 +110,6 @@ link_manager_t *create_link_manager( ret->send_queue = send_queue; ret->receive_queue = receive_queue; ret->socket_link = link; - ret->type = type; - ret->peer_addr = peer_addr; - ret->port = port; ret->run = 1; if (pthread_attr_init(&attr)) diff --git a/openair2/UTIL/ASYNC_IF/link_manager.h b/openair2/UTIL/ASYNC_IF/link_manager.h index f749119de6..4148392eec 100644 --- a/openair2/UTIL/ASYNC_IF/link_manager.h +++ b/openair2/UTIL/ASYNC_IF/link_manager.h @@ -45,9 +45,8 @@ typedef struct { message_queue_t *send_queue; message_queue_t *receive_queue; socket_link_t *socket_link; - uint16_t type; - const char *peer_addr; - int port; + const char *peer_addr; /* for UDP server remote IP */ + int peer_port; /* for UDP server remote address */ pthread_t sender; pthread_t receiver; volatile int run; @@ -56,10 +55,7 @@ typedef struct { link_manager_t *create_link_manager( message_queue_t *send_queue, message_queue_t *receive_queue, - socket_link_t *link, - uint16_t type, - const char *peer_addr, - int port); + socket_link_t *link); void destroy_link_manager(link_manager_t *); diff --git a/openair2/UTIL/ASYNC_IF/socket_link.c b/openair2/UTIL/ASYNC_IF/socket_link.c index 7bd5d4eea9..280ef5c31a 100644 --- a/openair2/UTIL/ASYNC_IF/socket_link.c +++ b/openair2/UTIL/ASYNC_IF/socket_link.c @@ -205,7 +205,6 @@ socket_link_t *new_link_udp_server(const char *bind_addr, int bind_port) goto error; } ret->socket_fd = socket_server; - ret->peer_port = 0; return ret; error: @@ -251,7 +250,6 @@ socket_link_t *new_link_udp_client(const char *server, int port){ getsockname(s, (struct sockaddr *)&si_other, &slen); ret->socket_fd = s; - ret->peer_port = port; //ntohs(si_other.sin_port); return ret; error: -- GitLab