diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c index 00e86dc2b754e31a58810e47f1072df7a3ae220a..0ced904b73cfa30a4239d72f963e9fb8a7ba0b5e 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.c +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.c @@ -90,7 +90,7 @@ BOOL pdcp_data_req(module_id_t module_id, u32_t frame, u8_t eNB_flag, rb_id_t rb #ifdef PDCP_UNIT_TEST pdcp_t* pdcp = test_pdcp_entity; #else - pdcp_t* pdcp = &pdcp_array[module_id][rb_id%NB_RB_MAX]; + pdcp_t* pdcp = &pdcp_array[module_id][rb_id]; #endif u8 i; u8 pdcp_header_len=0, pdcp_tailer_len=0; @@ -282,7 +282,7 @@ BOOL pdcp_data_ind(module_id_t module_id, u32_t frame, u8_t eNB_flag, rb_id_t rb pdcp_t* pdcp = pdcp_test_entity; list_t* sdu_list = test_list; #else - pdcp_t* pdcp = &pdcp_array[module_id][rb_id%NB_RB_MAX]; + pdcp_t* pdcp = &pdcp_array[module_id][rb_id]; list_t* sdu_list = &pdcp_sdu_list; #endif mem_block_t *new_sdu = NULL; @@ -562,7 +562,7 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t module_id, u32_t frame, u8_t eNB_flag srb_id = srb2add_list->list.array[cnt]->srb_Identity; lc_id = srb_id; rb_id = (index * NB_RB_MAX) + srb_id; - if (pdcp_array[module_id][lc_id].instanciated_instance == module_id + 1) + if (pdcp_array[module_id][rb_id].instanciated_instance == module_id + 1) action = ACTION_MODIFY; else action = ACTION_ADD; @@ -619,7 +619,7 @@ BOOL rrc_pdcp_config_asn1_req (module_id_t module_id, u32_t frame, u8_t eNB_flag lc_id = -1; } rb_id = (index * NB_RB_MAX) + lc_id; - if (pdcp_array[module_id][lc_id].instanciated_instance == module_id + 1) + if (pdcp_array[module_id][rb_id].instanciated_instance == module_id + 1) action = ACTION_MODIFY; else action = ACTION_ADD; @@ -767,30 +767,30 @@ BOOL pdcp_config_req_asn1 (module_id_t module_id, u32 frame, u8_t eNB_flag, u16 u8 *kUPenc){ switch (action) { case ACTION_ADD: - pdcp_array[module_id][lc_id].instanciated_instance = module_id + 1; - pdcp_array[module_id][lc_id].is_ue = (eNB_flag == 0) ? 1 : 0; - pdcp_array[module_id][lc_id].lcid = lc_id; - pdcp_array[module_id][lc_id].header_compression_profile=header_compression_profile; - pdcp_array[module_id][lc_id].status_report = rb_report; + pdcp_array[module_id][rb_id].instanciated_instance = module_id + 1; + pdcp_array[module_id][rb_id].is_ue = (eNB_flag == 0) ? 1 : 0; + pdcp_array[module_id][rb_id].lcid = lc_id; + pdcp_array[module_id][rb_id].header_compression_profile=header_compression_profile; + pdcp_array[module_id][rb_id].status_report = rb_report; if (rb_sn == PDCP_Config__rlc_UM__pdcp_SN_Size_len7bits) - pdcp_array[module_id][lc_id].seq_num_size = 7; + pdcp_array[module_id][rb_id].seq_num_size = 7; else if (rb_sn == PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits) - pdcp_array[module_id][lc_id].seq_num_size=12; + pdcp_array[module_id][rb_id].seq_num_size=12; else - pdcp_array[module_id][lc_id].seq_num_size=5; + pdcp_array[module_id][rb_id].seq_num_size=5; - pdcp_array[module_id][lc_id].rlc_mode = rlc_mode; - pdcp_array[module_id][lc_id].next_pdcp_tx_sn = 0; - pdcp_array[module_id][lc_id].next_pdcp_rx_sn = 0; - pdcp_array[module_id][lc_id].tx_hfn = 0; - pdcp_array[module_id][lc_id].rx_hfn = 0; - pdcp_array[module_id][lc_id].last_submitted_pdcp_rx_sn = 4095; - pdcp_array[module_id][lc_id].first_missing_pdu = -1; + pdcp_array[module_id][rb_id].rlc_mode = rlc_mode; + pdcp_array[module_id][rb_id].next_pdcp_tx_sn = 0; + pdcp_array[module_id][rb_id].next_pdcp_rx_sn = 0; + pdcp_array[module_id][rb_id].tx_hfn = 0; + pdcp_array[module_id][rb_id].rx_hfn = 0; + pdcp_array[module_id][rb_id].last_submitted_pdcp_rx_sn = 4095; + pdcp_array[module_id][rb_id].first_missing_pdu = -1; LOG_I(PDCP,"[%s %d] Config request : Action ADD for %s %d: Frame %d LCID %d (rb id %d) configured with SN size %d bits and RLC %s\n", (eNB_flag) ? "eNB" : "UE", module_id, (eNB_flag) ? "UE" : "eNB", index, - frame, lc_id, rb_id, pdcp_array[module_id][lc_id].seq_num_size, + frame, lc_id, rb_id, pdcp_array[module_id][rb_id].seq_num_size, (rlc_mode == 1) ? "AM" : (rlc_mode == 2) ? "TM" : "UM"); /* Setup security */ @@ -802,9 +802,9 @@ BOOL pdcp_config_req_asn1 (module_id_t module_id, u32 frame, u8_t eNB_flag, u16 break; case ACTION_MODIFY: - pdcp_array[module_id][lc_id].header_compression_profile=header_compression_profile; - pdcp_array[module_id][lc_id].status_report = rb_report; - pdcp_array[module_id][lc_id].rlc_mode = rlc_mode; + pdcp_array[module_id][rb_id].header_compression_profile=header_compression_profile; + pdcp_array[module_id][rb_id].status_report = rb_report; + pdcp_array[module_id][rb_id].rlc_mode = rlc_mode; /* Setup security */ if (security_mode != 0xff) { @@ -812,11 +812,11 @@ BOOL pdcp_config_req_asn1 (module_id_t module_id, u32 frame, u8_t eNB_flag, u16 } if (rb_sn == PDCP_Config__rlc_UM__pdcp_SN_Size_len7bits) - pdcp_array[module_id][lc_id].seq_num_size = 7; + pdcp_array[module_id][rb_id].seq_num_size = 7; else if (rb_sn == PDCP_Config__rlc_UM__pdcp_SN_Size_len12bits) - pdcp_array[module_id][lc_id].seq_num_size=12; + pdcp_array[module_id][rb_id].seq_num_size=12; else - pdcp_array[module_id][lc_id].seq_num_size=5; + pdcp_array[module_id][rb_id].seq_num_size=5; LOG_I(PDCP,"[%s %d] Config request : Action MODIFY for %s %d: Frame %d LCID %d RB id %d configured with SN size %d and RLC %s \n", (eNB_flag) ? "eNB" : "UE", module_id, @@ -826,33 +826,33 @@ BOOL pdcp_config_req_asn1 (module_id_t module_id, u32 frame, u8_t eNB_flag, u16 break; case ACTION_REMOVE: - pdcp_array[module_id][lc_id].instanciated_instance = 0; - pdcp_array[module_id][lc_id].lcid= 0; - pdcp_array[module_id][lc_id].header_compression_profile=0x0; - pdcp_array[module_id][lc_id].cipheringAlgorithm=0xff; - pdcp_array[module_id][lc_id].integrityProtAlgorithm=0xff; - pdcp_array[module_id][lc_id].status_report = 0; - pdcp_array[module_id][lc_id].rlc_mode = RLC_NONE; - pdcp_array[module_id][lc_id].next_pdcp_tx_sn = 0; - pdcp_array[module_id][lc_id].next_pdcp_rx_sn = 0; - pdcp_array[module_id][lc_id].tx_hfn = 0; - pdcp_array[module_id][lc_id].rx_hfn = 0; - pdcp_array[module_id][lc_id].last_submitted_pdcp_rx_sn = 4095; - pdcp_array[module_id][lc_id].seq_num_size = 0; - pdcp_array[module_id][lc_id].first_missing_pdu = -1; - pdcp_array[module_id][lc_id].security_activated = 0; + pdcp_array[module_id][rb_id].instanciated_instance = 0; + pdcp_array[module_id][rb_id].lcid= 0; + pdcp_array[module_id][rb_id].header_compression_profile=0x0; + pdcp_array[module_id][rb_id].cipheringAlgorithm=0xff; + pdcp_array[module_id][rb_id].integrityProtAlgorithm=0xff; + pdcp_array[module_id][rb_id].status_report = 0; + pdcp_array[module_id][rb_id].rlc_mode = RLC_NONE; + pdcp_array[module_id][rb_id].next_pdcp_tx_sn = 0; + pdcp_array[module_id][rb_id].next_pdcp_rx_sn = 0; + pdcp_array[module_id][rb_id].tx_hfn = 0; + pdcp_array[module_id][rb_id].rx_hfn = 0; + pdcp_array[module_id][rb_id].last_submitted_pdcp_rx_sn = 4095; + pdcp_array[module_id][rb_id].seq_num_size = 0; + pdcp_array[module_id][rb_id].first_missing_pdu = -1; + pdcp_array[module_id][rb_id].security_activated = 0; LOG_I(PDCP,"[%s %d] Config request : ACTION_REMOVE: Frame %d LCID %d RBID %d configured\n", (eNB_flag) ? "eNB" : "UE", module_id, frame, lc_id, rb_id); /* Security keys */ - if (pdcp_array[module_id][lc_id].kUPenc != NULL) { - free(pdcp_array[module_id][lc_id].kUPenc); + if (pdcp_array[module_id][rb_id].kUPenc != NULL) { + free(pdcp_array[module_id][rb_id].kUPenc); } - if (pdcp_array[module_id][lc_id].kRRCint != NULL) { - free(pdcp_array[module_id][lc_id].kRRCint); + if (pdcp_array[module_id][rb_id].kRRCint != NULL) { + free(pdcp_array[module_id][rb_id].kRRCint); } - if (pdcp_array[module_id][lc_id].kRRCenc != NULL) { - free(pdcp_array[module_id][lc_id].kRRCenc); + if (pdcp_array[module_id][rb_id].kRRCenc != NULL) { + free(pdcp_array[module_id][rb_id].kRRCenc); } @@ -880,19 +880,19 @@ void pdcp_config_set_security(module_id_t module_id, u32 frame, u8 eNB_flag, rb_ u16 lc_id, u8 security_mode, u8 *kRRCenc, u8 *kRRCint, u8 *kUPenc) { if ((security_mode >= 0) && (security_mode <= 0x77)) { - pdcp_array[module_id][lc_id].cipheringAlgorithm = security_mode & 0x0f; - pdcp_array[module_id][lc_id].integrityProtAlgorithm = (security_mode>>4) & 0xf; + pdcp_array[module_id][rb_id].cipheringAlgorithm = security_mode & 0x0f; + pdcp_array[module_id][rb_id].integrityProtAlgorithm = (security_mode>>4) & 0xf; LOG_D(PDCP,"[%s %d][RB %02d] Set security mode : ACTION_SET_SECURITY_MODE: " "Frame %d cipheringAlgorithm %d integrityProtAlgorithm %d\n", (eNB_flag) ? "eNB" : "UE", module_id, rb_id, frame, - pdcp_array[module_id][lc_id].cipheringAlgorithm, - pdcp_array[module_id][lc_id].integrityProtAlgorithm); - pdcp_array[module_id][lc_id].kRRCenc = kRRCenc; - pdcp_array[module_id][lc_id].kRRCint = kRRCint; - pdcp_array[module_id][lc_id].kUPenc = kUPenc; + pdcp_array[module_id][rb_id].cipheringAlgorithm, + pdcp_array[module_id][rb_id].integrityProtAlgorithm); + pdcp_array[module_id][rb_id].kRRCenc = kRRCenc; + pdcp_array[module_id][rb_id].kRRCint = kRRCint; + pdcp_array[module_id][rb_id].kUPenc = kUPenc; /* Activate security */ - pdcp_array[module_id][lc_id].security_activated = 1; + pdcp_array[module_id][rb_id].security_activated = 1; } else { LOG_D(PDCP,"[%s %d] bad security mode %d", security_mode); } @@ -905,20 +905,20 @@ void rrc_pdcp_config_req (module_id_t module_id, u32 frame, u8_t eNB_flag, u32 */ switch (action) { case ACTION_ADD: - pdcp_array[module_id][rb_id%NB_RB_MAX].instanciated_instance = module_id + 1; + pdcp_array[module_id][rb_id].instanciated_instance = module_id + 1; - pdcp_array[module_id][rb_id%NB_RB_MAX].next_pdcp_tx_sn = 0; - pdcp_array[module_id][rb_id%NB_RB_MAX].next_pdcp_rx_sn = 0; - pdcp_array[module_id][rb_id%NB_RB_MAX].tx_hfn = 0; - pdcp_array[module_id][rb_id%NB_RB_MAX].rx_hfn = 0; + pdcp_array[module_id][rb_id].next_pdcp_tx_sn = 0; + pdcp_array[module_id][rb_id].next_pdcp_rx_sn = 0; + pdcp_array[module_id][rb_id].tx_hfn = 0; + pdcp_array[module_id][rb_id].rx_hfn = 0; /* SN of the last PDCP SDU delivered to upper layers */ - pdcp_array[module_id][rb_id%NB_RB_MAX].last_submitted_pdcp_rx_sn = 4095; + pdcp_array[module_id][rb_id].last_submitted_pdcp_rx_sn = 4095; if ( (rb_id % NB_RB_MAX) < DTCH) // SRB - pdcp_array[module_id][rb_id%NB_RB_MAX].seq_num_size = 5; + pdcp_array[module_id][rb_id].seq_num_size = 5; else // DRB - pdcp_array[module_id][rb_id%NB_RB_MAX].seq_num_size = 12; - pdcp_array[module_id][rb_id%NB_RB_MAX].first_missing_pdu = -1; + pdcp_array[module_id][rb_id].seq_num_size = 12; + pdcp_array[module_id][rb_id].first_missing_pdu = -1; LOG_D(PDCP,"[%s %d] Config request : Action ADD: Frame %d radio bearer id %d configured\n", (eNB_flag) ? "eNB" : "UE", module_id, frame, rb_id); LOG_D(PDCP, "[MSC_NEW][FRAME %05d][PDCP][MOD %02d][RB %02d]\n", frame, module_id,rb_id); @@ -926,14 +926,14 @@ void rrc_pdcp_config_req (module_id_t module_id, u32 frame, u8_t eNB_flag, u32 case ACTION_MODIFY: break; case ACTION_REMOVE: - pdcp_array[module_id][rb_id%NB_RB_MAX].instanciated_instance = 0; - pdcp_array[module_id][rb_id%NB_RB_MAX].next_pdcp_tx_sn = 0; - pdcp_array[module_id][rb_id%NB_RB_MAX].next_pdcp_rx_sn = 0; - pdcp_array[module_id][rb_id%NB_RB_MAX].tx_hfn = 0; - pdcp_array[module_id][rb_id%NB_RB_MAX].rx_hfn = 0; - pdcp_array[module_id][rb_id%NB_RB_MAX].last_submitted_pdcp_rx_sn = 4095; - pdcp_array[module_id][rb_id%NB_RB_MAX].seq_num_size = 0; - pdcp_array[module_id][rb_id%NB_RB_MAX].first_missing_pdu = -1; + pdcp_array[module_id][rb_id].instanciated_instance = 0; + pdcp_array[module_id][rb_id].next_pdcp_tx_sn = 0; + pdcp_array[module_id][rb_id].next_pdcp_rx_sn = 0; + pdcp_array[module_id][rb_id].tx_hfn = 0; + pdcp_array[module_id][rb_id].rx_hfn = 0; + pdcp_array[module_id][rb_id].last_submitted_pdcp_rx_sn = 4095; + pdcp_array[module_id][rb_id].seq_num_size = 0; + pdcp_array[module_id][rb_id].first_missing_pdu = -1; pdcp_array[module_id][rb_id].security_activated = 0; LOG_D(PDCP,"[%s %d] Config request : ACTION_REMOVE: Frame %d radio bearer id %d configured\n", (eNB_flag) ? "eNB" : "UE", module_id, frame, rb_id); @@ -941,12 +941,12 @@ void rrc_pdcp_config_req (module_id_t module_id, u32 frame, u8_t eNB_flag, u32 break; case ACTION_SET_SECURITY_MODE: if ((security_mode >= 0 ) && (security_mode <=0x77)) { - pdcp_array[module_id][rb_id%NB_RB_MAX].cipheringAlgorithm= security_mode & 0x0f; - pdcp_array[module_id][rb_id%NB_RB_MAX].integrityProtAlgorithm = (security_mode>>4) & 0xf; + pdcp_array[module_id][rb_id].cipheringAlgorithm= security_mode & 0x0f; + pdcp_array[module_id][rb_id].integrityProtAlgorithm = (security_mode>>4) & 0xf; LOG_D(PDCP,"[%s %d] Set security mode : ACTION_SET_SECURITY_MODE: Frame %d cipheringAlgorithm %d integrityProtAlgorithm %d\n", (eNB_flag) ? "eNB" : "UE", module_id, frame, - pdcp_array[module_id][rb_id%NB_RB_MAX].cipheringAlgorithm, - pdcp_array[module_id][rb_id%NB_RB_MAX].integrityProtAlgorithm ); + pdcp_array[module_id][rb_id].cipheringAlgorithm, + pdcp_array[module_id][rb_id].integrityProtAlgorithm ); }else LOG_D(PDCP,"[%s %d] bad security mode %d", security_mode); break; diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h index acede3b5ce6912cd5973dd27c08c36333749aa0e..13be1f28aa55d5dd43e12b43de2681a842a2489c 100755 --- a/openair2/LAYER2/PDCP_v10.1.0/pdcp.h +++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp.h @@ -387,7 +387,7 @@ typedef struct pdcp_missing_pdu_info_t { #define PDCP_MAX_SN_12BIT 4095 // 2^12-1 protected_pdcp(signed int pdcp_2_nas_irq;) -protected_pdcp(pdcp_t pdcp_array[MAX_MODULES][NB_RB_MAX];) +protected_pdcp(pdcp_t pdcp_array[MAX_MODULES][MAX_MODULES*NB_RB_MAX];) public_pdcp(pdcp_mbms_t pdcp_mbms_array[MAX_MODULES][16*29];) // MAX_SERVICEx MAX_SESSION protected_pdcp(sdu_size_t pdcp_output_sdu_bytes_to_write;) protected_pdcp(sdu_size_t pdcp_output_header_bytes_to_write;)