From 21188359c3dcdb4db5c63d4c81a34ad0bec1aa2d Mon Sep 17 00:00:00 2001 From: Lionel Gauthier <lionel.gauthier@eurecom.fr> Date: Fri, 14 Mar 2014 09:47:43 +0000 Subject: [PATCH] for GTPV1U git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5166 818b1a75-f10b-46b9-bf7c-635c3b92a50f --- openair2/LAYER2/PDCP_v10.1.0/pdcp.c | 61 +++++++++++++----------- openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c | 43 +++++++++++++---- 2 files changed, 66 insertions(+), 38 deletions(-) diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index 5560f7827..cc03cf93d 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -212,11 +212,11 @@ boolean_t pdcp_data_req( memset(&pdu_header.mac_i[0],0,PDCP_CONTROL_PLANE_DATA_PDU_MAC_I_SIZE); if (pdcp_serialize_control_plane_data_pdu_with_SRB_sn_buffer((unsigned char*)pdcp_pdu_p->data, &pdu_header) == FALSE) { LOG_E(PDCP, "Cannot fill PDU buffer with relevant header fields!\n"); - if (enb_flagP == ENB_FLAG_NO) - stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req); - else - stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req); - return FALSE; + if (enb_flagP == ENB_FLAG_NO) + stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req); + else + stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req); + return FALSE; } } else { pdcp_user_plane_data_pdu_header_with_long_sn pdu_header; @@ -225,11 +225,11 @@ boolean_t pdcp_data_req( current_sn = pdu_header.sn ; if (pdcp_serialize_user_plane_data_pdu_with_long_sn_buffer((unsigned char*)pdcp_pdu_p->data, &pdu_header) == FALSE) { LOG_E(PDCP, "Cannot fill PDU buffer with relevant header fields!\n"); - if (enb_flagP == ENB_FLAG_NO) - stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req); - else - stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req); - return FALSE; + if (enb_flagP == ENB_FLAG_NO) + stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req); + else + stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req); + return FALSE; } } /* @@ -240,10 +240,10 @@ boolean_t pdcp_data_req( LOG_E(PDCP, "There must be a problem with PDCP initialization, ignoring this PDU...\n"); free_mem_block(pdcp_pdu_p); - if (enb_flagP == ENB_FLAG_NO) - stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req); - else - stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req); + if (enb_flagP == ENB_FLAG_NO) + stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_req); + else + stop_meas(&UE_pdcp_stats[ue_mod_idP].data_req); return FALSE; } @@ -441,11 +441,11 @@ boolean_t pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t if (sdu_buffer_sizeP < pdcp_header_len + pdcp_tailer_len ) { LOG_W(PDCP, "Incoming (from RLC) SDU is short of size (size:%d)! Ignoring...\n", sdu_buffer_sizeP); free_mem_block(sdu_buffer_pP); - if (enb_flagP) - stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind); - else - stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind); - return FALSE; + if (enb_flagP) + stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind); + else + stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind); + return FALSE; } /* @@ -499,10 +499,10 @@ boolean_t pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t free_mem_block(sdu_buffer_pP); // free_mem_block(new_sdu); if (enb_flagP) - stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind); - else - stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind); - return TRUE; + stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind); + else + stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind); + return TRUE; } payload_offset=PDCP_USER_PLANE_DATA_PDU_LONG_SN_HEADER_SIZE; #if defined(ENABLE_SECURITY) @@ -533,10 +533,10 @@ boolean_t pdcp_data_ind(module_id_t enb_mod_idP, module_id_t ue_mod_idP, frame_t sdu_buffer_sizeP - payload_offset ) == 0 ) { free_mem_block(sdu_buffer_pP); if (enb_flagP) - stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind); - else - stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind); - return TRUE; + stop_meas(&eNB_pdcp_stats[enb_mod_idP].data_ind); + else + stop_meas(&UE_pdcp_stats[ue_mod_idP].data_ind); + return TRUE; } } #else @@ -707,8 +707,11 @@ void pdcp_run (frame_t frameP, eNB_flag_t enb_flagP, module_id_t ue_mod_idP, mo pdcp_fifo_read_input_sdus_from_otg(frameP, enb_flagP, ue_mod_idP, enb_mod_idP); // IP/NAS -> PDCP traffic : TX, read the pkt from the upper layer buffer - pdcp_fifo_read_input_sdus(frameP, enb_flagP, ue_mod_idP, enb_mod_idP); - +#if defined(LINK_PDCP_TO_GTPV1U) + if (enb_flagP == ENB_FLAG_NO) { +#endif + pdcp_fifo_read_input_sdus(frameP, enb_flagP, ue_mod_idP, enb_mod_idP); + } // PDCP -> NAS/IP traffic: RX pdcp_fifo_flush_sdus(frameP, enb_flagP, enb_mod_idP, ue_mod_idP); diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c index 8364d100a..c7b663b6e 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c @@ -92,6 +92,10 @@ unsigned char pdcp_read_state_g = 0; extern Packet_OTG_List_t *otg_pdcp_buffer; +#if defined(LINK_PDCP_TO_GTPV1U) +# include "gtpv1u_eNB_defs.h" +#endif + pdcp_data_req_header_t pdcp_read_header_g; //----------------------------------------------------------------------------- @@ -102,7 +106,10 @@ int pdcp_fifo_flush_sdus(frame_t frameP, eNB_flag_t enb_flagP, module_id_t enb_m mem_block_t *sdu_p = list_get_head (&pdcp_sdu_list); int bytes_wrote = 0; int pdcp_nb_sdu_sent = 0; - uint8_t cont = 1; + uint8_t cont = 1; +#if defined(LINK_PDCP_TO_GTPV1U) + MessageDef *message_p = NULL; +#endif #if defined(NAS_NETLINK) && defined(LINUX) int ret = 0; @@ -110,22 +117,40 @@ int pdcp_fifo_flush_sdus(frame_t frameP, eNB_flag_t enb_flagP, module_id_t enb_m while (sdu_p && cont) { -#if defined(OAI_EMU) - //LGmcs_inst = ((pdcp_data_ind_header_t *)(sdu->data))->inst; - // asjust the instance id when passing sdu to IP - //((pdcp_data_ind_header_t *)(sdu->data))->inst = (((pdcp_data_ind_header_t *)(sdu->data))->inst >= NB_eNB_INST) ? - // ((pdcp_data_ind_header_t *)(sdu->data))->inst - NB_eNB_INST +oai_emulation.info.nb_enb_local - oai_emulation.info.first_ue_local :// UE - // ((pdcp_data_ind_header_t *)(sdu->data))->inst - oai_emulation.info.first_ue_local; // ENB -#else +#if ! defined(OAI_EMU) ((pdcp_data_ind_header_t *)(sdu_p->data))->inst = 0; #endif +#if defined(LINK_PDCP_TO_GTPV1U) + if (enb_flagP) { + LOG_I(PDCP,"Sending to GTPV1U\n"); + /*message_p = itti_alloc_new_message(TASK_PDCP_ENB, GTPV1U_TUNNEL_DATA_REQ); + GTPV1U_TUNNEL_DATA_REQ(message_p).buffer = &(((uint8_t *) sdu_p->data)[sizeof (pdcp_data_ind_header_t)]); + GTPV1U_TUNNEL_DATA_REQ(message_p).length = ((pdcp_data_ind_header_t *)(sdu_p->data))->data_size; + GTPV1U_TUNNEL_DATA_REQ(message_p).ue_module_id = ue_mod_idP; + GTPV1U_TUNNEL_DATA_REQ(message_p).rab_id; = ((pdcp_data_ind_header_t *)(sdu_p->data))->rb_id; + */ + gtpv1u_new_data_req( + enb_mod_idP, //gtpv1u_data_t *gtpv1u_data_p, + ue_mod_idP,//rb_id/NB_RB_MAX, TO DO UE ID + ((pdcp_data_ind_header_t *)(sdu_p->data))->rb_id, //was 0 default RAB ID + &(((uint8_t *) sdu_p->data)[sizeof (pdcp_data_ind_header_t)]), + ((pdcp_data_ind_header_t *)(sdu_p->data))->data_size); + + list_remove_head (&pdcp_sdu_list); + free_mem_block (sdu_p); + cont = 1; + pdcp_nb_sdu_sent += 1; + sdu_p = list_get_head (&pdcp_sdu_list); + LOG_I(OTG,"After GTPV1U\n"); + continue; // loop again + } +#endif /* defined(ENABLE_USE_MME) */ #ifdef PDCP_DEBUG LOG_I(PDCP, "PDCP->IP TTI %d INST %d: Preparing %d Bytes of data from rab %d to Nas_mesh\n", frameP, ((pdcp_data_ind_header_t *)(sdu_p->data))->inst, ((pdcp_data_ind_header_t *)(sdu_p->data))->data_size, ((pdcp_data_ind_header_t *)(sdu_p->data))->rb_id); #endif //PDCP_DEBUG - cont = 0; if (!pdcp_output_sdu_bytes_to_write) { -- GitLab