Commit e47fc835 authored by Lionel Gauthier's avatar Lionel Gauthier

Warning disabled SRB config list in RRC reconfiguration complete() when...

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
parent 974fd7ed
...@@ -401,20 +401,25 @@ int nas_message_encode( ...@@ -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 { ...@@ -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 */
......
...@@ -549,7 +549,7 @@ inline void sctp_eNB_read_from_socket(struct sctp_cnx_list_elm_s *sctp_cnx) ...@@ -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.
*/ */
......
...@@ -2909,7 +2909,7 @@ void phy_procedures_eNB_RX(unsigned char last_slot,PHY_VARS_eNB *phy_vars_eNB,ui ...@@ -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 ...@@ -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 { ...@@ -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
...@@ -43,9 +43,9 @@ void rlc_am_init(rlc_am_entity_t *rlc_pP, frame_t frameP) ...@@ -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) ...@@ -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,7 +186,8 @@ void rlc_am_configure(rlc_am_entity_t *rlc_pP, ...@@ -133,7 +186,8 @@ void rlc_am_configure(rlc_am_entity_t *rlc_pP,
uint32_t t_status_prohibitP) uint32_t t_status_prohibitP)
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
{ {
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", 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, frameP,
(rlc_pP->is_enb) ? "eNB" : "UE", (rlc_pP->is_enb) ? "eNB" : "UE",
rlc_pP->enb_module_id, rlc_pP->enb_module_id,
...@@ -146,14 +200,41 @@ void rlc_am_configure(rlc_am_entity_t *rlc_pP, ...@@ -146,14 +200,41 @@ void rlc_am_configure(rlc_am_entity_t *rlc_pP,
t_reorderingP, t_reorderingP,
t_status_prohibitP); t_status_prohibitP);
rlc_pP->max_retx_threshold = max_retx_thresholdP; rlc_pP->max_retx_threshold = max_retx_thresholdP;
rlc_pP->poll_pdu = poll_pduP; rlc_pP->poll_pdu = poll_pduP;
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_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",
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_am_init_timer_poll_retransmit(rlc_pP, t_poll_retransmitP);
rlc_am_init_timer_reordering (rlc_pP, t_reorderingP);
rlc_am_init_timer_status_prohibit(rlc_pP, t_status_prohibitP);
rlc_pP->configured = TRUE;
}
rlc_am_init_timer_poll_retransmit(rlc_pP, t_poll_retransmitP);
rlc_am_init_timer_reordering (rlc_pP, t_reorderingP);
rlc_am_init_timer_status_prohibit(rlc_pP, t_status_prohibitP);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void rlc_am_set_debug_infos(rlc_am_entity_t *rlc_pP, void rlc_am_set_debug_infos(rlc_am_entity_t *rlc_pP,
......
...@@ -458,8 +458,16 @@ rb_free_rlc_union (void *rlcu_pP) ...@@ -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);
} }
} }
......
...@@ -2280,7 +2280,7 @@ void rrc_eNB_process_RRCConnectionReconfigurationComplete( ...@@ -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( ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment