Warning disabled SRB config list in RRC reconfiguration complete() when calling pdcp and rlc config asn1 req

git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5326 818b1a75-f10b-46b9-bf7c-635c3b92a50f
This commit is contained in:
Lionel Gauthier
2014-05-16 15:09:38 +00:00
parent 974fd7ed18
commit e47fc8354e
8 changed files with 124 additions and 24 deletions
@@ -401,20 +401,25 @@ int nas_message_encode(
if (emm_security_context) { if (emm_security_context) {
#ifdef NAS_MME #ifdef NAS_MME
/* TS 124.301, section 4.4.3.1
* The NAS sequence number part of the NAS COUNT shall be
* exchanged between the UE and the MME as part of the
* NAS signalling. After each new or retransmitted outbound
* security protected NAS message, the sender shall increase
* the NAS COUNT number by one. Specifically, on the sender
* side, the NAS sequence number shall be increased by one,
* and if the result is zero (due to wrap around), the NAS
* overflow counter shall also be incremented by one (see
* subclause 4.4.3.5).
*/
emm_security_context->dl_count.seq_num += 1; emm_security_context->dl_count.seq_num += 1;
if ( ! emm_security_context->dl_count.seq_num) { if ( ! emm_security_context->dl_count.seq_num) {
emm_security_context->dl_count.overflow += 1; emm_security_context->dl_count.overflow += 1;
if ( ! emm_security_context->dl_count.overflow) {
// TODO
}
} }
#else #else
emm_security_context->ul_count.seq_num += 1; emm_security_context->ul_count.seq_num += 1;
if ( ! emm_security_context->ul_count.seq_num) { if ( ! emm_security_context->ul_count.seq_num) {
emm_security_context->ul_count.overflow += 1; emm_security_context->ul_count.overflow += 1;
if ( ! emm_security_context->ul_count.overflow) {
// TODO
}
} }
#endif #endif
} }
@@ -114,8 +114,8 @@ typedef struct {
int ksi; /* NAS key set identifier */ int ksi; /* NAS key set identifier */
int eea; /* Replayed EPS encryption algorithms */ int eea; /* Replayed EPS encryption algorithms */
int eia; /* Replayed EPS integrity algorithms */ int eia; /* Replayed EPS integrity algorithms */
int selected_eea; /* Replayed EPS encryption algorithms */ int selected_eea; /* Selected EPS encryption algorithms */
int selected_eia; /* Replayed EPS integrity algorithms */ int selected_eia; /* Selected EPS integrity algorithms */
int notify_failure; /* Indicates whether the security mode control int notify_failure; /* Indicates whether the security mode control
* procedure failure shall be notified to the * procedure failure shall be notified to the
* ongoing EMM procedure */ * ongoing EMM procedure */
+1 -1
View File
@@ -549,7 +549,7 @@ inline void sctp_eNB_read_from_socket(struct sctp_cnx_list_elm_s *sctp_cnx)
} else { } else {
sctp_cnx->nb_messages++; sctp_cnx->nb_messages++;
if (sinfo.sinfo_ppid != sctp_cnx->ppid) { if (ntohl(sinfo.sinfo_ppid) != sctp_cnx->ppid) {
/* Mismatch in Payload Protocol Identifier, /* Mismatch in Payload Protocol Identifier,
* may be we received unsollicited traffic from stack other than S1AP. * may be we received unsollicited traffic from stack other than S1AP.
*/ */
+2 -2
View File
@@ -2909,7 +2909,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui
#endif #endif
stop_meas(&phy_vars_eNB->ulsch_decoding_stats); stop_meas(&phy_vars_eNB->ulsch_decoding_stats);
#ifdef DEBUG_PHY_PROC //#ifdef DEBUG_PHY_PROC
LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n", LOG_I(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d RNTI %x RX power (%d,%d) N0 (%d,%d) dB ACK (%d,%d), decoding iter %d\n",
phy_vars_eNB->Mod_id,harq_pid, phy_vars_eNB->Mod_id,harq_pid,
frame,last_slot>>1, frame,last_slot>>1,
@@ -2921,7 +2921,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui
phy_vars_eNB->ulsch_eNB[i]->o_ACK[0], phy_vars_eNB->ulsch_eNB[i]->o_ACK[0],
phy_vars_eNB->ulsch_eNB[i]->o_ACK[1], phy_vars_eNB->ulsch_eNB[i]->o_ACK[1],
ret); ret);
#endif //DEBUG_PHY_PROC //#endif //DEBUG_PHY_PROC
/* /*
if ((two_ues_connected==1) && (phy_vars_eNB->cooperation_flag==2)) { if ((two_ues_connected==1) && (phy_vars_eNB->cooperation_flag==2)) {
for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++) { for (j=0;j<phy_vars_eNB->lte_frame_parms.nb_antennas_rx;j++) {
@@ -187,8 +187,8 @@ typedef struct rlc_am_entity_s {
// note occupancy of other buffers is deducted from nb elements in lists // note occupancy of other buffers is deducted from nb elements in lists
rlc_buffer_occupancy_t buffer_occupancy_retransmission_buffer; /*!< \brief Number of PDUs. */ rlc_buffer_occupancy_t buffer_occupancy_retransmission_buffer; /*!< \brief Number of PDUs. */
//boolean_t allocation; /*!< \brief Boolean for rlc_am_entity_t struct allocation. */
boolean_t initialized; /*!< \brief Boolean for rlc_am_entity_t struct initialization. */ boolean_t initialized; /*!< \brief Boolean for rlc_am_entity_t struct initialization. */
boolean_t configured; /*!< \brief Boolean for rlc_am_entity_t struct configuration. */
} rlc_am_entity_t; } rlc_am_entity_t;
/** @} */ /** @} */
# endif # endif
+83 -2
View File
@@ -43,9 +43,9 @@ void rlc_am_init(rlc_am_entity_t *rlc_pP, frame_t frameP)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
{ {
if (rlc_pP->initialized == TRUE) { if (rlc_pP->initialized == TRUE) {
LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] ALREADY DONE, DOING NOTHING\n", frameP); LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] INITIALIZATION ALREADY DONE, DOING NOTHING\n", frameP);
} else { } else {
LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] STATE VARIABLES, BUFFERS, LISTS\n", frameP); LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][INIT] INITIALIZATION: STATE VARIABLES, BUFFERS, LISTS\n", frameP);
memset(rlc_pP, 0, sizeof(rlc_am_entity_t)); memset(rlc_pP, 0, sizeof(rlc_am_entity_t));
list2_init(&rlc_pP->receiver_buffer, "RX BUFFER"); list2_init(&rlc_pP->receiver_buffer, "RX BUFFER");
@@ -76,9 +76,62 @@ void rlc_am_init(rlc_am_entity_t *rlc_pP, frame_t frameP)
rlc_pP->last_frame_status_indication = 123456; // any value > 1 rlc_pP->last_frame_status_indication = 123456; // any value > 1
rlc_pP->first_retrans_pdu_sn = -1; rlc_pP->first_retrans_pdu_sn = -1;
rlc_pP->initialized = TRUE; rlc_pP->initialized = TRUE;
} }
} }
//-----------------------------------------------------------------------------
void rlc_am_reestablish(rlc_am_entity_t *rlc_pP, frame_t frameP)
//-----------------------------------------------------------------------------
{
/*
* RLC re-establishment is performed upon request by RRC, and the function
* is applicable for AM, UM and TM RLC entities.
* When RRC indicates that an RLC entity should be re-established, the RLC entity shall:
* - if it is an AM RLC entity:
* - when possible, reassemble RLC SDUs from any byte segments of AMD PDUs with SN < VR(MR) in the
* receiving side, remove RLC headers when doing so and deliver all reassembled RLC SDUs to upper layer in
* ascending order of the RLC SN, if not delivered before;
* - discard the remaining AMD PDUs and byte segments of AMD PDUs in the receiving side;
* - discard all RLC SDUs and AMD PDUs in the transmitting side;
* - discard all RLC control PDUs.
* - stop and reset all timers;
* - reset all state variables to their initial values.
*/
LOG_D(RLC, "[FRAME %5u][RLC_AM][MOD XX][RB XX][REESTABLISH] RE-INIT STATE VARIABLES, BUFFERS, LISTS\n", frameP);
#warning TODO when possible reassemble RLC SDUs from any byte segments of AMD PDUs with SN inf VR(MR)
list2_free(&rlc_pP->receiver_buffer);
list_free(&rlc_pP->pdus_to_mac_layer);
list_free(&rlc_pP->control_pdu_list);
list_free(&rlc_pP->segmentation_pdu_list);
// TX state variables
rlc_pP->vt_a = 0;
rlc_pP->vt_ms = rlc_pP->vt_a + RLC_AM_WINDOW_SIZE;
rlc_pP->vt_s = 0;
rlc_pP->poll_sn = 0;
// TX counters
rlc_pP->c_pdu_without_poll = 0;
rlc_pP->c_byte_without_poll = 0;
// RX state variables
rlc_pP->vr_r = 0;
rlc_pP->vr_mr = rlc_pP->vr_r + RLC_AM_WINDOW_SIZE;
rlc_pP->vr_x = 0;
rlc_pP->vr_ms = 0;
rlc_pP->vr_h = 0;
rlc_pP->last_frame_status_indication = 123456; // any value > 1
rlc_pP->first_retrans_pdu_sn = -1;
rlc_pP->initialized = TRUE;
}
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void rlc_am_cleanup(rlc_am_entity_t *rlc_pP) void rlc_am_cleanup(rlc_am_entity_t *rlc_pP)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -133,6 +186,29 @@ void rlc_am_configure(rlc_am_entity_t *rlc_pP,
uint32_t t_status_prohibitP) uint32_t t_status_prohibitP)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
{ {
if (rlc_pP->configured == TRUE) {
LOG_I(RLC, "[FRAME %5u][%s][RLC_AM][MOD %u/%u][RB %u][RECONFIGURE] max_retx_threshold %d poll_pdu %d poll_byte %d t_poll_retransmit %d t_reordering %d t_status_prohibit %d\n",
frameP,
(rlc_pP->is_enb) ? "eNB" : "UE",
rlc_pP->enb_module_id,
rlc_pP->ue_module_id,
rlc_pP->rb_id,
max_retx_thresholdP,
poll_pduP,
poll_byteP,
t_poll_retransmitP,
t_reorderingP,
t_status_prohibitP);
rlc_pP->max_retx_threshold = max_retx_thresholdP;
rlc_pP->poll_pdu = poll_pduP;
rlc_pP->poll_byte = poll_byteP;
rlc_pP->protocol_state = RLC_DATA_TRANSFER_READY_STATE;
rlc_pP->t_poll_retransmit.time_out = t_poll_retransmitP;
rlc_pP->t_reordering.time_out = t_reorderingP;
rlc_pP->t_status_prohibit.time_out = t_status_prohibitP;
} else {
LOG_I(RLC, "[FRAME %5u][%s][RLC_AM][MOD %u/%u][RB %u][CONFIGURE] max_retx_threshold %d poll_pdu %d poll_byte %d t_poll_retransmit %d t_reordering %d t_status_prohibit %d\n", LOG_I(RLC, "[FRAME %5u][%s][RLC_AM][MOD %u/%u][RB %u][CONFIGURE] max_retx_threshold %d poll_pdu %d poll_byte %d t_poll_retransmit %d t_reordering %d t_status_prohibit %d\n",
frameP, frameP,
(rlc_pP->is_enb) ? "eNB" : "UE", (rlc_pP->is_enb) ? "eNB" : "UE",
@@ -151,9 +227,14 @@ void rlc_am_configure(rlc_am_entity_t *rlc_pP,
rlc_pP->poll_byte = poll_byteP; rlc_pP->poll_byte = poll_byteP;
rlc_pP->protocol_state = RLC_DATA_TRANSFER_READY_STATE; rlc_pP->protocol_state = RLC_DATA_TRANSFER_READY_STATE;
rlc_am_init_timer_poll_retransmit(rlc_pP, t_poll_retransmitP); rlc_am_init_timer_poll_retransmit(rlc_pP, t_poll_retransmitP);
rlc_am_init_timer_reordering (rlc_pP, t_reorderingP); rlc_am_init_timer_reordering (rlc_pP, t_reorderingP);
rlc_am_init_timer_status_prohibit(rlc_pP, t_status_prohibitP); rlc_am_init_timer_status_prohibit(rlc_pP, t_status_prohibitP);
rlc_pP->configured = TRUE;
}
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void rlc_am_set_debug_infos(rlc_am_entity_t *rlc_pP, void rlc_am_set_debug_infos(rlc_am_entity_t *rlc_pP,
+8
View File
@@ -458,8 +458,16 @@ rb_free_rlc_union (void *rlcu_pP)
rlc_tm_cleanup(&rlcu_p->rlc.tm); rlc_tm_cleanup(&rlcu_p->rlc.tm);
break; break;
default: default:
LOG_W(RLC,
"%s %p unknown RLC type\n",
__FUNCTION__,
rlcu_pP);
break; break;
} }
LOG_D(RLC,
"%s %p \n",
__FUNCTION__,
rlcu_pP);
free(rlcu_p); free(rlcu_p);
} }
} }
+8 -2
View File
@@ -2280,7 +2280,7 @@ void rrc_eNB_process_RRCConnectionReconfigurationComplete(
#endif #endif
// Refresh SRBs/DRBs // Refresh SRBs/DRBs
rrc_pdcp_config_asn1_req(enb_mod_idP, ue_mod_idP, frameP, ENB_FLAG_YES, rrc_pdcp_config_asn1_req(enb_mod_idP, ue_mod_idP, frameP, ENB_FLAG_YES,
SRB_configList, NULL, //LG-RK 14/05/2014 SRB_configList,
DRB_configList, (DRB_ToReleaseList_t *) NULL, DRB_configList, (DRB_ToReleaseList_t *) NULL,
/*eNB_rrc_inst[enb_mod_idP].ciphering_algorithm[ue_mod_idP] | /*eNB_rrc_inst[enb_mod_idP].ciphering_algorithm[ue_mod_idP] |
(eNB_rrc_inst[enb_mod_idP].integrity_algorithm[ue_mod_idP] << 4), (eNB_rrc_inst[enb_mod_idP].integrity_algorithm[ue_mod_idP] << 4),
@@ -2294,7 +2294,13 @@ void rrc_eNB_process_RRCConnectionReconfigurationComplete(
#endif #endif
); );
// Refresh SRBs/DRBs // Refresh SRBs/DRBs
rrc_rlc_config_asn1_req(enb_mod_idP, ue_mod_idP, frameP, 1, SRB_configList, DRB_configList, (DRB_ToReleaseList_t *) NULL rrc_rlc_config_asn1_req(enb_mod_idP,
ue_mod_idP,
frameP,
1,
NULL, //LG-RK 14/05/2014 SRB_configList,
DRB_configList,
(DRB_ToReleaseList_t *) NULL
#ifdef Rel10 #ifdef Rel10
, (PMCH_InfoList_r9_t *) NULL , (PMCH_InfoList_r9_t *) NULL
#endif #endif