@ -1021,6 +1021,7 @@ void rrc_nr::ue::handle_security_mode_complete(const asn1::rrc_nr::security_mode
parent - > logger . info ( " SecurityModeComplete transaction ID: %d " , msg . rrc_transaction_id ) ;
parent - > logger . info ( " SecurityModeComplete transaction ID: %d " , msg . rrc_transaction_id ) ;
parent - > pdcp - > enable_encryption ( rnti , srb_to_lcid ( srsran : : nr_srb : : srb1 ) ) ;
parent - > pdcp - > enable_encryption ( rnti , srb_to_lcid ( srsran : : nr_srb : : srb1 ) ) ;
send_rrc_reconfiguration ( ) ;
// Note: Skip UE capabilities
// Note: Skip UE capabilities
// Send RRCReconfiguration if necessary
// Send RRCReconfiguration if necessary
@ -1040,7 +1041,10 @@ void rrc_nr::ue::send_rrc_reconfiguration()
ies . radio_bearer_cfg_present =
ies . radio_bearer_cfg_present =
compute_diff_radio_bearer_cfg ( parent - > cfg , radio_bearer_cfg , next_radio_bearer_cfg , ies . radio_bearer_cfg ) ;
compute_diff_radio_bearer_cfg ( parent - > cfg , radio_bearer_cfg , next_radio_bearer_cfg , ies . radio_bearer_cfg ) ;
ies . non_crit_ext_present = true ;
// If no bearer to add/mod/remove, do not include master_cell_group
// Set ies.non_crit_ext_present only if master_cell_group_present = true or
if ( ies . radio_bearer_cfg_present ) {
ies . non_crit_ext . master_cell_group_present = true ;
ies . non_crit_ext . master_cell_group_present = true ;
// Fill masterCellGroup
// Fill masterCellGroup
@ -1062,16 +1066,6 @@ void rrc_nr::ue::send_rrc_reconfiguration()
logger . debug ( " Containerized MasterCellGroup: %s " , js . to_string ( ) . c_str ( ) ) ;
logger . debug ( " Containerized MasterCellGroup: %s " , js . to_string ( ) . c_str ( ) ) ;
}
}
// Pass stored NAS PDUs
ies . non_crit_ext . ded_nas_msg_list_present = true ;
ies . non_crit_ext . ded_nas_msg_list . resize ( nas_pdu_queue . size ( ) ) ;
for ( uint32_t i = 0 ; i < nas_pdu_queue . size ( ) ; + + i ) {
ies . non_crit_ext . ded_nas_msg_list [ i ] . resize ( nas_pdu_queue [ i ] - > size ( ) ) ;
memcpy ( ies . non_crit_ext . ded_nas_msg_list [ i ] . data ( ) , nas_pdu_queue [ i ] - > data ( ) , nas_pdu_queue [ i ] - > size ( ) ) ;
}
ies . non_crit_ext . ded_nas_msg_list_present = nas_pdu_queue . size ( ) > 0 ;
nas_pdu_queue . clear ( ) ;
// Update lower layers
// Update lower layers
if ( ies . radio_bearer_cfg_present ) {
if ( ies . radio_bearer_cfg_present ) {
// add PDCP bearers
// add PDCP bearers
@ -1083,6 +1077,20 @@ void rrc_nr::ue::send_rrc_reconfiguration()
// add MAC bearers
// add MAC bearers
update_mac ( master_cell_group , false ) ;
update_mac ( master_cell_group , false ) ;
}
}
}
if ( nas_pdu_queue . size ( ) > 0 ) {
// Pass stored NAS PDUs
ies . non_crit_ext . ded_nas_msg_list_present = true ;
ies . non_crit_ext . ded_nas_msg_list . resize ( nas_pdu_queue . size ( ) ) ;
for ( uint32_t i = 0 ; i < nas_pdu_queue . size ( ) ; + + i ) {
ies . non_crit_ext . ded_nas_msg_list [ i ] . resize ( nas_pdu_queue [ i ] - > size ( ) ) ;
memcpy ( ies . non_crit_ext . ded_nas_msg_list [ i ] . data ( ) , nas_pdu_queue [ i ] - > data ( ) , nas_pdu_queue [ i ] - > size ( ) ) ;
}
nas_pdu_queue . clear ( ) ;
}
ies . non_crit_ext_present = ies . non_crit_ext . master_cell_group_present or ies . non_crit_ext . ded_nas_msg_list_present ;
if ( send_dl_dcch ( srsran : : nr_srb : : srb1 , dl_dcch_msg ) ! = SRSRAN_SUCCESS ) {
if ( send_dl_dcch ( srsran : : nr_srb : : srb1 , dl_dcch_msg ) ! = SRSRAN_SUCCESS ) {
send_rrc_release ( ) ;
send_rrc_release ( ) ;