From 4318072bb7d1e85d444879b51f6e80cdeb83e5ed Mon Sep 17 00:00:00 2001 From: Robert Schmidt <robert.schmidt@eurecom.fr> Date: Thu, 20 Sep 2018 12:54:20 +0200 Subject: [PATCH] PROTO_AGENT: don't send ACKs, formatting --- openair2/LAYER2/PROTO_AGENT/proto_agent.h | 4 +- .../LAYER2/PROTO_AGENT/proto_agent_common.c | 355 +++++++----------- .../LAYER2/PROTO_AGENT/proto_agent_common.h | 8 +- .../LAYER2/PROTO_AGENT/proto_agent_handler.c | 24 +- 4 files changed, 146 insertions(+), 245 deletions(-) diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent.h b/openair2/LAYER2/PROTO_AGENT/proto_agent.h index 45f5f1a6aa..8d86786651 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent.h +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent.h @@ -37,8 +37,10 @@ #ifndef PROTO_AGENT_H_ #define PROTO_AGENT_H_ -#include "proto_agent_common.h" #include "ENB_APP/enb_config.h" // for enb properties +/* avoid warnings */ +#undef NUM_MAX_ENB +#include "proto_agent_common.h" void * proto_agent_receive(void *args); diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c b/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c index 147af52a12..9fe4ce21ee 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_common.c @@ -28,7 +28,7 @@ *******************************************************************************/ /*! \file proto_agent_common.c - * \brief common primitives for all agents + * \brief common primitives for all agents * \author Navid Nikaein and Xenofon Foukas * \date 2016 * \version 0.1 @@ -38,8 +38,10 @@ #include <dlfcn.h> #include <time.h> -#include "proto_agent_common.h" #include "PHY/phy_extern.h" +/* avoid warnings */ +#undef NUM_MAX_ENB +#include "proto_agent_common.h" #include "common/utils/LOG/log.h" #include "RRC/LTE/rrc_extern.h" @@ -78,7 +80,8 @@ void read_dl_data_header(int *pdu_type, int *spare, int *seqno, uint32_t header) return; } -int f1u_serialize_message(Protocol__F1uMessage *msg, void **buf,int *size){ +int f1u_serialize_message(Protocol__F1uMessage *msg, void **buf,int *size) +{ *size = protocol__f1u_message__get_packed_size(msg); *buf = malloc(*size); @@ -90,12 +93,13 @@ int f1u_serialize_message(Protocol__F1uMessage *msg, void **buf,int *size){ return 0; error: - LOG_E(F1U, "an error occured\n"); + LOG_E(F1U, "an error occured\n"); return -1; } -int f1u_deserialize_message(void *data, int size, Protocol__F1uMessage **msg) { +int f1u_deserialize_message(void *data, int size, Protocol__F1uMessage **msg) +{ *msg = protocol__f1u_message__unpack(NULL, size, data); if (*msg == NULL) goto error; @@ -107,8 +111,8 @@ int f1u_deserialize_message(void *data, int size, Protocol__F1uMessage **msg) { return -1; } -int f1u_dl_data_create_header(uint32_t pdu_type, uint32_t f1u_sn, Protocol__DlDataHeader **header) { - +int f1u_dl_data_create_header(uint32_t pdu_type, uint32_t f1u_sn, Protocol__DlDataHeader **header) +{ *header = malloc(sizeof(Protocol__DlDataHeader)); if(*header == NULL) goto error; @@ -126,7 +130,6 @@ int f1u_dl_data_create_header(uint32_t pdu_type, uint32_t f1u_sn, Protocol__DlDa int f1u_dl_data(const void *params, Protocol__F1uMessage **msg) { - // Initialize the PDCP params dl_data_args *args = (dl_data_args *)params; @@ -163,7 +166,7 @@ int f1u_dl_data(const void *params, Protocol__F1uMessage **msg) dl_data->header = header; return 0; - + error: if(header != NULL) free(header); @@ -171,11 +174,10 @@ int f1u_dl_data(const void *params, Protocol__F1uMessage **msg) free(*msg); LOG_E(F1U, "%s: an error occured\n", __FUNCTION__); return -1; - } -int proto_agent_serialize_message(Protocol__FlexsplitMessage *msg, uint8_t **buf, int *size) { - +int proto_agent_serialize_message(Protocol__FlexsplitMessage *msg, uint8_t **buf, int *size) +{ *size = protocol__flexsplit_message__get_packed_size(msg); *buf = malloc(*size); @@ -187,36 +189,37 @@ int proto_agent_serialize_message(Protocol__FlexsplitMessage *msg, uint8_t **buf return 0; error: - LOG_E(MAC, "an error occured\n"); + LOG_E(MAC, "an error occured\n"); return -1; } /* We assume that the buffer size is equal to the message size. Should be chekced durint Tx/Rx */ -int proto_agent_deserialize_message(void *data, int size, Protocol__FlexsplitMessage **msg) { +int proto_agent_deserialize_message(void *data, int size, Protocol__FlexsplitMessage **msg) +{ *msg = protocol__flexsplit_message__unpack(NULL, size, data); if (*msg == NULL) - goto error; + goto error; return 0; - + error: LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; } -int fsp_create_header(xid_t xid, Protocol__FspType type, Protocol__FspHeader **header) { - +int fsp_create_header(xid_t xid, Protocol__FspType type, Protocol__FspHeader **header) +{ *header = malloc(sizeof(Protocol__FspHeader)); if(*header == NULL) goto error; - + protocol__fsp_header__init(*header); LOG_D(PROTO_AGENT, "Initialized the PROTOBUF message header\n"); (*header)->version = FLEXSPLIT_VERSION; LOG_D(PROTO_AGENT, "Set the vversion to FLEXSPLIT_VERSION\n"); - (*header)->has_version = 1; + (*header)->has_version = 1; (*header)->type = type; (*header)->has_type = 1; (*header)->xid = xid; @@ -242,15 +245,15 @@ int proto_agent_pdcp_data_req(mod_id_t mod_id, const void *params, Protocol__Fle // Initialize the PDCP params data_req_args *args = (data_req_args *)params; - + // Create the protobuf header Protocol__FspHeader *header; xid_t xid = mod_id; LOG_D(PROTO_AGENT, "creating the data_req message\n"); - + if (fsp_create_header(xid, PROTOCOL__FSP_TYPE__FSPT_RLC_DATA_REQ, &header) != 0) goto error; - + /* Begin constructing the messages. They are defined as follows: * 1) fspRlcPdu is storing the bytes of the packet * 2) Message fspRlcData is packing the packet + the context of the PDCP (separate message) @@ -261,19 +264,19 @@ int proto_agent_pdcp_data_req(mod_id_t mod_id, const void *params, Protocol__Fle pdu = malloc(sizeof(Protocol__FspRlcPdu)); rlc_data = malloc(sizeof(Protocol__FspRlcData)); data_req = malloc(sizeof(Protocol__FspRlcDataReq)); - + protocol__fsp_ctxt__init(ctxt); protocol__fsp_rlc_pdu__init(pdu); protocol__fsp_rlc_data__init(rlc_data); protocol__fsp_rlc_data_req__init(data_req); - + // Copy data to the RlcPdu structure pdu->fsp_pdu_data.data = malloc(args->sdu_size); pdu->fsp_pdu_data.len = args->sdu_size; - - memcpy(pdu->fsp_pdu_data.data, args->sdu_p, args->sdu_size); + + memcpy(pdu->fsp_pdu_data.data, args->sdu_p->data, args->sdu_size); pdu->has_fsp_pdu_data = 1; - + // Copy data to the ctxt structure ctxt->fsp_mod_id = args->ctxt->module_id; ctxt->fsp_enb_flag = args->ctxt->enb_flag; @@ -291,7 +294,7 @@ int proto_agent_pdcp_data_req(mod_id_t mod_id, const void *params, Protocol__Fle ctxt->has_fsp_subframe = 1; ctxt->has_fsp_enb_index = 1; - rlc_data->fsp_ctxt = ctxt; + rlc_data->fsp_ctxt = ctxt; rlc_data->fsp_srb_flag = args->srb_flag; rlc_data->fsp_mbms_flag = args->MBMS_flag; rlc_data->fsp_rb_id = args->rb_id; @@ -299,7 +302,7 @@ int proto_agent_pdcp_data_req(mod_id_t mod_id, const void *params, Protocol__Fle rlc_data->fsp_confirm = args->confirm; rlc_data->fsp_sdu_buffer_size = args->sdu_size; rlc_data->fsp_pdu = pdu; - + rlc_data->has_fsp_srb_flag = 1; rlc_data->has_fsp_mbms_flag = 1; rlc_data->has_fsp_rb_id = 1; @@ -307,28 +310,28 @@ int proto_agent_pdcp_data_req(mod_id_t mod_id, const void *params, Protocol__Fle rlc_data->has_fsp_confirm = 1; rlc_data->has_fsp_sdu_buffer_size = 1; - // Up to here, everything is a signle message that is packed inside another. The final data_req + // Up to here, everything is a signle message that is packed inside another. The final data_req // will be created later, after the setting of all variables - + data_req->header = header; data_req->enb_id = mod_id; data_req->has_enb_id = 1; data_req->pdcp_data = rlc_data; - + *msg = malloc(sizeof(Protocol__FlexsplitMessage)); if(*msg == NULL) goto error; - + protocol__flexsplit_message__init(*msg); - + (*msg)->msg_case = PROTOCOL__FLEXSPLIT_MESSAGE__MSG_DATA_REQ_MSG; (*msg)->msg_dir = PROTOCOL__FLEXSPLIT_DIRECTION__INITIATING_MESSAGE; //we will be waiting for the ACK (*msg)->has_msg_dir = 1; (*msg)->data_req_msg = data_req; - + return 0; - + error: if(header != NULL) free(header); @@ -342,13 +345,12 @@ int proto_agent_pdcp_data_req(mod_id_t mod_id, const void *params, Protocol__Fle free(*msg); LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; - } int proto_agent_destroy_pdcp_data_req(Protocol__FlexsplitMessage *msg) { if(msg->msg_case != PROTOCOL__FLEXSPLIT_MESSAGE__MSG_DATA_REQ_MSG) goto error; - + free(msg->data_req_msg->header); free(msg->data_req_msg->pdcp_data->fsp_pdu->fsp_pdu_data.data); free(msg->data_req_msg->pdcp_data->fsp_pdu); @@ -357,7 +359,7 @@ int proto_agent_destroy_pdcp_data_req(Protocol__FlexsplitMessage *msg) { free(msg->data_req_msg); free(msg); return 0; - + error: LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; @@ -377,39 +379,31 @@ int proto_agent_get_ack_result(mod_id_t mod_id, const void *params, Protocol__Fl } -int proto_agent_pdcp_data_req_ack(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg) +int proto_agent_pdcp_data_req_process(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg) { - Protocol__FspHeader *header; - xid_t xid; rlc_op_status_t result = 0; - - LOG_D(PROTO_AGENT, "creating the data_req_ack message\n"); - + Protocol__FlexsplitMessage *input = (Protocol__FlexsplitMessage *)params; Protocol__FspRlcDataReq *data_req = input->data_req_msg; - - xid = data_req->header->xid; + Protocol__FspCtxt *ctxt = NULL; Protocol__FspRlcData *rlc_data = NULL; - - + rlc_data = data_req->pdcp_data; - ctxt = rlc_data->fsp_ctxt; - - protocol_ctxt_t *ctxt_pP; - srb_flag_t srb_flagP = 0; - rb_id_t rb_idP = 0; - mui_t muiP = 0; - confirm_t confirmP = 0; - sdu_size_t pdcp_pdu_size = 0; - MBMS_flag_t flag_MBMS = 0; - mem_block_t *pdcp_pdu_p = NULL; - + + protocol_ctxt_t *ctxt_pP; + srb_flag_t srb_flagP = 0; + rb_id_t rb_idP = 0; + mui_t muiP = 0; + confirm_t confirmP = 0; + MBMS_flag_t flag_MBMS = 0; + sdu_size_t pdcp_pdu_size = 0; + mem_block_t *pdcp_pdu_p = NULL; // Create a new protocol context for handling the packet - ctxt_pP = malloc(sizeof(protocol_ctxt_t)); + if (!ctxt_pP) goto error; ctxt_pP->module_id = ctxt->fsp_mod_id; ctxt_pP->enb_flag = ctxt->fsp_enb_flag; ctxt_pP->instance = ctxt->fsp_instance; @@ -417,18 +411,17 @@ int proto_agent_pdcp_data_req_ack(mod_id_t mod_id, const void *params, Protocol_ ctxt_pP->frame = ctxt->fsp_frame; ctxt_pP->subframe = ctxt->fsp_subframe; ctxt_pP->eNB_index = ctxt->fsp_enb_index; - + srb_flagP = rlc_data->fsp_srb_flag; flag_MBMS = rlc_data->fsp_mbms_flag; rb_idP = rlc_data->fsp_rb_id; muiP = rlc_data->fsp_muip; confirmP = rlc_data->fsp_confirm; - pdcp_pdu_size = rlc_data->fsp_pdu->fsp_pdu_data.len; + pdcp_pdu_size = rlc_data->fsp_pdu->fsp_pdu_data.len; pdcp_pdu_p = get_free_mem_block(pdcp_pdu_size, __func__); - + if (!pdcp_pdu_p) goto error; memcpy(pdcp_pdu_p->data, rlc_data->fsp_pdu->fsp_pdu_data.data, pdcp_pdu_size); - result = rlc_data_req((const protocol_ctxt_t*) ctxt_pP ,(const srb_flag_t) srb_flagP ,(const MBMS_flag_t) flag_MBMS @@ -440,70 +433,31 @@ int proto_agent_pdcp_data_req_ack(mod_id_t mod_id, const void *params, Protocol_ #ifdef Rel14 ,NULL ,NULL - #endif + #endif ); - Protocol__FspRlcDataReqAck *ack = NULL; - - if (fsp_create_header(xid, PROTOCOL__FSP_TYPE__FSPT_RLC_DATA_REQ_ACK, &header) != 0) - goto error; + return result; - ack = malloc(sizeof(Protocol__FspRlcDataReqAck)); - protocol__fsp_rlc_data_req_ack__init(ack); - - ack->header = header; - ack->result = result; - ack->has_result = 1; - - *msg = malloc(sizeof(Protocol__FlexsplitMessage)); - if(*msg == NULL) - goto error; - - protocol__flexsplit_message__init(*msg); - (*msg)->msg_case = PROTOCOL__FLEXSPLIT_MESSAGE__MSG_DATA_REQ_ACK; - (*msg)->msg_dir = PROTOCOL__FLEXSPLIT_DIRECTION__SUCCESSFUL_OUTCOME; - (*msg)->has_msg_dir = 1; - (*msg)->data_req_ack = ack; - return 0; - error: - if (pdcp_pdu_p != NULL) + if (ctxt_pP) + free(ctxt_pP); + if (pdcp_pdu_p) free_mem_block(pdcp_pdu_p, __func__); - if(header != NULL) - free(header); - if(ack!=NULL) - free(ack); - if(*msg != NULL) - free(*msg); LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; } -int proto_agent_destroy_pdcp_data_req_ack(Protocol__FlexsplitMessage *msg) { - if(msg->msg_case != PROTOCOL__FLEXSPLIT_MESSAGE__MSG_DATA_REQ_ACK) - goto error; - - free(msg->data_req_ack->header); - free(msg->data_req_ack); - free(msg); - return 0; - - error: - LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); - return -1; -} - - -int proto_agent_destroy_pdcp_data_ind(Protocol__FlexsplitMessage *msg) { +int proto_agent_destroy_pdcp_data_ind(Protocol__FlexsplitMessage *msg) +{ if(msg->msg_case != PROTOCOL__FLEXSPLIT_MESSAGE__MSG_DATA_IND_MSG) goto error; - + free(msg->data_req_ack->header); free(msg->data_req_ack); free(msg); return 0; - + error: LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; @@ -518,15 +472,15 @@ int proto_agent_pdcp_data_ind(mod_id_t mod_id, const void *params, Protocol__Fle // Initialize the PDCP params data_req_args *args = (data_req_args *)params; - + // Create the protobuf header Protocol__FspHeader *header; xid_t xid = mod_id; LOG_D(PROTO_AGENT, "creating the data_ind message\n"); - + if (fsp_create_header(xid, PROTOCOL__FSP_TYPE__FSPT_PDCP_DATA_IND, &header) != 0) goto error; - + /* Begin constructing the messages. They are defined as follows: * 1) fspRlcPdu is storing the bytes of the packet * 2) Message fspRlcData is packing the packet + the context of the PDCP (separate message) @@ -537,19 +491,19 @@ int proto_agent_pdcp_data_ind(mod_id_t mod_id, const void *params, Protocol__Fle pdu = malloc(sizeof(Protocol__FspRlcPdu)); rlc_data = malloc(sizeof(Protocol__FspRlcData)); data_ind = malloc(sizeof(Protocol__FspPdcpDataInd)); - + protocol__fsp_ctxt__init(ctxt); protocol__fsp_rlc_pdu__init(pdu); protocol__fsp_rlc_data__init(rlc_data); protocol__fsp_pdcp_data_ind__init(data_ind); - + // Copy data to the RlcPdu structure pdu->fsp_pdu_data.data = malloc(args->sdu_size); pdu->fsp_pdu_data.len = args->sdu_size; - - memcpy(pdu->fsp_pdu_data.data, args->sdu_p, args->sdu_size); + + memcpy(pdu->fsp_pdu_data.data, args->sdu_p->data, args->sdu_size); pdu->has_fsp_pdu_data = 1; - + // Copy data to the ctxt structure ctxt->fsp_mod_id = args->ctxt->module_id; ctxt->fsp_enb_flag = args->ctxt->enb_flag; @@ -567,7 +521,7 @@ int proto_agent_pdcp_data_ind(mod_id_t mod_id, const void *params, Protocol__Fle ctxt->has_fsp_subframe = 1; ctxt->has_fsp_enb_index = 1; - rlc_data->fsp_ctxt = ctxt; + rlc_data->fsp_ctxt = ctxt; rlc_data->fsp_srb_flag = args->srb_flag; rlc_data->fsp_mbms_flag = args->MBMS_flag; rlc_data->fsp_rb_id = args->rb_id; @@ -579,20 +533,20 @@ int proto_agent_pdcp_data_ind(mod_id_t mod_id, const void *params, Protocol__Fle rlc_data->has_fsp_rb_id = 1; rlc_data->has_fsp_sdu_buffer_size = 1; - // Up to here, everything is a signle message that is packed inside another. The final data_req + // Up to here, everything is a signle message that is packed inside another. The final data_req // will be created later, after the setting of all variables - + data_ind->header = header; data_ind->enb_id = mod_id; data_ind->has_enb_id = 1; data_ind->rlc_data = rlc_data; - - + + *msg = malloc(sizeof(Protocol__FlexsplitMessage)); if(*msg == NULL) goto error; - + protocol__flexsplit_message__init(*msg); LOG_D(PROTO_AGENT,"setting the message case to %d\n", PROTOCOL__FLEXSPLIT_MESSAGE__MSG_DATA_IND_MSG); @@ -600,9 +554,9 @@ int proto_agent_pdcp_data_ind(mod_id_t mod_id, const void *params, Protocol__Fle (*msg)->msg_dir = PROTOCOL__FLEXSPLIT_DIRECTION__INITIATING_MESSAGE; //we will be waiting for the ACK (*msg)->has_msg_dir = 1; (*msg)->data_ind_msg = data_ind; //data_req; - + return 0; - + error: if(header != NULL) free(header); @@ -616,122 +570,71 @@ int proto_agent_pdcp_data_ind(mod_id_t mod_id, const void *params, Protocol__Fle free(*msg); LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; - } -int proto_agent_pdcp_data_ind_ack(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg) +int proto_agent_pdcp_data_ind_process(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg) { - Protocol__FspHeader *header; - Protocol__FspPdcpDataIndAck *ack = NULL; + boolean_t result = 0; - xid_t xid; - rlc_op_status_t result = 0; - - //printf("PROTO_AGENT: creating the data_ind_ack message\n"); - Protocol__FlexsplitMessage *input = (Protocol__FlexsplitMessage *)params; Protocol__FspPdcpDataInd *data_ind = input->data_ind_msg; - - xid = data_ind->header->xid; Protocol__FspCtxt *ctxt = NULL; Protocol__FspRlcData *rlc_data = NULL; - - + rlc_data = data_ind->rlc_data; - ctxt = rlc_data->fsp_ctxt; - - protocol_ctxt_t *ctxt_pP; - srb_flag_t srb_flagP = 0; - rb_id_t rb_idP = 0; - sdu_size_t pdcp_pdu_size = 0; - MBMS_flag_t flag_MBMS = 0; - mem_block_t *pdcp_pdu_p = NULL; - + + protocol_ctxt_t *ctxt_pP; + srb_flag_t srb_flagP = 0; + rb_id_t rb_idP = 0; + sdu_size_t pdcp_pdu_size = 0; + MBMS_flag_t flag_MBMS = 0; + mem_block_t *pdcp_pdu_p = NULL; // Create a new protocol context for handling the packet - ctxt_pP = malloc(sizeof(protocol_ctxt_t)); - //FIXME: - //ctxt_pP->module_id = ctxt->fsp_mod_id; - ctxt_pP->module_id = 0; + if (!ctxt_pP) goto error; + ctxt_pP->module_id = ctxt->fsp_mod_id; ctxt_pP->enb_flag = ctxt->fsp_enb_flag; ctxt_pP->instance = ctxt->fsp_instance; ctxt_pP->rnti = ctxt->fsp_rnti; ctxt_pP->frame = ctxt->fsp_frame; ctxt_pP->subframe = ctxt->fsp_subframe; ctxt_pP->eNB_index = ctxt->fsp_enb_index; - + srb_flagP = rlc_data->fsp_srb_flag; flag_MBMS = rlc_data->fsp_mbms_flag; rb_idP = rlc_data->fsp_rb_id; - pdcp_pdu_size = rlc_data->fsp_pdu->fsp_pdu_data.len; + pdcp_pdu_size = rlc_data->fsp_pdu->fsp_pdu_data.len; pdcp_pdu_p = get_free_mem_block(pdcp_pdu_size, __func__); - + if (!pdcp_pdu_p) goto error; + memcpy(pdcp_pdu_p->data, rlc_data->fsp_pdu->fsp_pdu_data.data, pdcp_pdu_size); - + // if (xid == 1) // pdcp_data_ind_wifi((const protocol_ctxt_t*) ctxt_pP, (const srb_flag_t) srb_flagP, (const MBMS_flag_t) flag_MBMS, (const rb_id_t) rb_idP, pdcp_pdu_size, pdcp_pdu_p); // else if (xid == 0) // FIXME: USE a preprocessed definition - pdcp_data_ind((const protocol_ctxt_t*) ctxt_pP, (const srb_flag_t) srb_flagP, (const MBMS_flag_t) flag_MBMS, (const rb_id_t) rb_idP, pdcp_pdu_size, pdcp_pdu_p); + result = pdcp_data_ind(ctxt_pP, + srb_flagP, + flag_MBMS, + rb_idP, + pdcp_pdu_size, + pdcp_pdu_p); - if (fsp_create_header(xid, PROTOCOL__FSP_TYPE__FSPT_PDCP_DATA_IND_ACK, &header) != 0) - goto error; + return result; - ack = malloc(sizeof(Protocol__FspPdcpDataIndAck)); - protocol__fsp_pdcp_data_ind_ack__init(ack); - - ack->header = header; - ack->result = result; - ack->has_result = 1; - - *msg = malloc(sizeof(Protocol__FlexsplitMessage)); - if(*msg == NULL) - goto error; - - protocol__flexsplit_message__init(*msg); - (*msg)->msg_case = PROTOCOL__FLEXSPLIT_MESSAGE__MSG_DATA_IND_ACK; - (*msg)->msg_dir = PROTOCOL__FLEXSPLIT_DIRECTION__SUCCESSFUL_OUTCOME; - (*msg)->has_msg_dir = 1; - // FIXME: the following was (*msg)->data_req_ack = ack; - // but this throws compiler warning. Probably we want the following instead - (*msg)->data_ind_ack = ack; - - return 0; - error: - if(header != NULL) - free(header); - if(ack!=NULL) - free(ack); - if(*msg != NULL) - free(*msg); - if (pdcp_pdu_p != NULL) + if (ctxt_pP) + free(ctxt_pP); + if (pdcp_pdu_p) free_mem_block(pdcp_pdu_p, __func__); - LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; - } - -int proto_agent_destroy_pdcp_data_ind_ack(Protocol__FlexsplitMessage *msg) { - if(msg->msg_case != PROTOCOL__FLEXSPLIT_MESSAGE__MSG_DATA_IND_ACK) - goto error; - - free(msg->data_req_ack->header); - free(msg->data_req_ack); - free(msg); - return 0; - - error: - LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); - return -1; -} - -int proto_agent_hello(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg) { - +int proto_agent_hello(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg) +{ Protocol__FspHeader *header; Protocol__FspHello *hello_msg = NULL; @@ -750,14 +653,14 @@ int proto_agent_hello(mod_id_t mod_id, const void *params, Protocol__FlexsplitMe *msg = malloc(sizeof(Protocol__FlexsplitMessage)); if(*msg == NULL) goto error; - + protocol__flexsplit_message__init(*msg); (*msg)->msg_case = PROTOCOL__FLEXSPLIT_MESSAGE__MSG_HELLO_MSG; (*msg)->msg_dir = PROTOCOL__FLEXSPLIT_DIRECTION__SUCCESSFUL_OUTCOME; (*msg)->has_msg_dir = 1; (*msg)->hello_msg = hello_msg; return 0; - + error: if(header != NULL) free(header); @@ -770,11 +673,11 @@ int proto_agent_hello(mod_id_t mod_id, const void *params, Protocol__FlexsplitMe } -int proto_agent_destroy_hello(Protocol__FlexsplitMessage *msg) { - +int proto_agent_destroy_hello(Protocol__FlexsplitMessage *msg) +{ if(msg->msg_case != PROTOCOL__FLEXSPLIT_MESSAGE__MSG_HELLO_MSG) goto error; - + free(msg->hello_msg->header); free(msg->hello_msg); free(msg); @@ -785,7 +688,8 @@ int proto_agent_destroy_hello(Protocol__FlexsplitMessage *msg) { return -1; } -int proto_agent_echo_request(mod_id_t mod_id, const void* params, Protocol__FlexsplitMessage **msg) { +int proto_agent_echo_request(mod_id_t mod_id, const void* params, Protocol__FlexsplitMessage **msg) +{ Protocol__FspHeader *header; Protocol__FspEchoRequest *echo_request_msg = NULL; @@ -793,7 +697,7 @@ int proto_agent_echo_request(mod_id_t mod_id, const void* params, Protocol__Flex if (fsp_create_header(xid, PROTOCOL__FSP_TYPE__FSPT_ECHO_REQUEST, &header) != 0) goto error; LOG_D(PROTO_AGENT, "creating the echo request message\n"); - + echo_request_msg = malloc(sizeof(Protocol__FspEchoRequest)); if(echo_request_msg == NULL) goto error; @@ -823,30 +727,29 @@ int proto_agent_echo_request(mod_id_t mod_id, const void* params, Protocol__Flex return -1; } -int proto_agent_destroy_echo_request(Protocol__FlexsplitMessage *msg) { +int proto_agent_destroy_echo_request(Protocol__FlexsplitMessage *msg) +{ if(msg->msg_case != PROTOCOL__FLEXSPLIT_MESSAGE__MSG_ECHO_REQUEST_MSG) goto error; - + free(msg->echo_request_msg->header); free(msg->echo_request_msg); free(msg); return 0; - + error: LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; } -int proto_agent_echo_reply(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg) { - +int proto_agent_echo_reply(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg) +{ xid_t xid; Protocol__FlexsplitMessage *input = (Protocol__FlexsplitMessage *)params; Protocol__FspEchoRequest *echo_req = input->echo_request_msg; Protocol__FspEchoReply *echo_reply_msg = NULL; xid = (echo_req->header)->xid; - - LOG_D(PROTO_AGENT, "creating the echo reply message\n"); Protocol__FspHeader *header; if (fsp_create_header(xid, PROTOCOL__FSP_TYPE__FSPT_ECHO_REPLY, &header) != 0) @@ -882,12 +785,12 @@ int proto_agent_echo_reply(mod_id_t mod_id, const void *params, Protocol__Flexsp int proto_agent_destroy_echo_reply(Protocol__FlexsplitMessage *msg) { if(msg->msg_case != PROTOCOL__FLEXSPLIT_MESSAGE__MSG_ECHO_REPLY_MSG) goto error; - + free(msg->echo_reply_msg->header); free(msg->echo_reply_msg); free(msg); return 0; - + error: LOG_E(MAC, "%s: an error occured\n", __FUNCTION__); return -1; diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_common.h b/openair2/LAYER2/PROTO_AGENT/proto_agent_common.h index d81561c14c..40b4bbd6d8 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent_common.h +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_common.h @@ -95,13 +95,11 @@ int proto_agent_echo_reply(mod_id_t mod_id, const void *params, Protocol__Flexsp int proto_agent_destroy_echo_reply(Protocol__FlexsplitMessage *msg); int proto_agent_pdcp_data_req(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg); -int proto_agent_pdcp_data_req_ack(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg); +int proto_agent_pdcp_data_req_process(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg); int proto_agent_destroy_pdcp_data_req(Protocol__FlexsplitMessage *msg); -int proto_agent_destroy_pdcp_data_req_ack(Protocol__FlexsplitMessage *msg); int proto_agent_pdcp_data_ind(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg); int proto_agent_destroy_pdcp_data_ind(Protocol__FlexsplitMessage *msg); -int proto_agent_pdcp_data_ind_ack(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg); -int proto_agent_destroy_pdcp_data_ind_ack(Protocol__FlexsplitMessage *msg); +int proto_agent_pdcp_data_ind_process(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg); int just_print(mod_id_t mod_id, const void *params, Protocol__FlexsplitMessage **msg); @@ -119,7 +117,7 @@ typedef struct _data_req_args data_req_args; typedef struct _dl_data_args dl_data_args; struct _data_req_args{ - protocol_ctxt_t* ctxt; + const protocol_ctxt_t* ctxt; srb_flag_t srb_flag; MBMS_flag_t MBMS_flag; rb_id_t rb_id; diff --git a/openair2/LAYER2/PROTO_AGENT/proto_agent_handler.c b/openair2/LAYER2/PROTO_AGENT/proto_agent_handler.c index 11d95bfc3d..04b7c2c401 100644 --- a/openair2/LAYER2/PROTO_AGENT/proto_agent_handler.c +++ b/openair2/LAYER2/PROTO_AGENT/proto_agent_handler.c @@ -40,13 +40,13 @@ #include "assertions.h" proto_agent_message_decoded_callback proto_agent_messages_callback[][3] = { - {proto_agent_hello, 0, 0}, - {proto_agent_echo_reply, 0, 0}, - {0, just_print, 0}, - {proto_agent_pdcp_data_req_ack, 0, 0}, - {0, proto_agent_get_ack_result, 0}, - {proto_agent_pdcp_data_ind_ack, 0, 0}, - {0, just_print, 0}, + {proto_agent_hello, 0, 0}, /* agent hello */ + {proto_agent_echo_reply, 0, 0}, /* echo */ + {0, just_print, 0}, /* just print */ + {proto_agent_pdcp_data_req_process, 0, 0}, /* PDCP data REQ */ + {0, proto_agent_get_ack_result, 0}, /* get ACK result */ + {proto_agent_pdcp_data_ind_process, 0, 0}, /* PDCP data IND */ + {0, just_print, 0}, /* just print */ }; proto_agent_message_destruction_callback proto_message_destruction_callback[] = { @@ -54,10 +54,9 @@ proto_agent_message_destruction_callback proto_message_destruction_callback[] = proto_agent_destroy_echo_request, proto_agent_destroy_echo_reply, proto_agent_destroy_pdcp_data_req, - proto_agent_destroy_pdcp_data_req_ack, + 0, proto_agent_destroy_pdcp_data_ind, - proto_agent_destroy_pdcp_data_ind_ack, - + 0, }; //static const char *proto_agent_direction2String[] = { @@ -129,9 +128,8 @@ uint8_t *proto_agent_pack_message(Protocol__FlexsplitMessage *msg, int *size) goto error; } - //TODO call proper destroy function - - err_code = ((*proto_message_destruction_callback[msg->msg_case-1])(msg)); + if (proto_message_destruction_callback[msg->msg_case-1]) + err_code = ((*proto_message_destruction_callback[msg->msg_case-1])(msg)); DevAssert(buffer !=NULL); -- GitLab