store last RRC Connection Reconfig with transaction identifier

master
Andre Puschmann 5 years ago
parent f999e256f9
commit 369592544c

@ -289,7 +289,7 @@ public:
srslte::timer_handler::unique_timer activity_timer; srslte::timer_handler::unique_timer activity_timer;
// cached for ease of context transfer // cached for ease of context transfer
asn1::rrc::rrc_conn_recfg_r8_ies_s last_rrc_conn_recfg; asn1::rrc::rrc_conn_recfg_s last_rrc_conn_recfg;
asn1::rrc::security_algorithm_cfg_s last_security_mode_cmd; asn1::rrc::security_algorithm_cfg_s last_security_mode_cmd;
asn1::rrc::establishment_cause_e establishment_cause; asn1::rrc::establishment_cause_e establishment_cause;

@ -1062,7 +1062,7 @@ void rrc::ue::set_activity_timeout(const activity_timeout_type_t type)
uint32_t deadline = deadline_s * 1e3 + deadline_ms; uint32_t deadline = deadline_s * 1e3 + deadline_ms;
activity_timer.set(deadline, [this](uint32_t tid) { activity_timer_expired(); }); activity_timer.set(deadline, [this](uint32_t tid) { activity_timer_expired(); });
parent->rrc_log->debug("Setting timer for %s for rnti=%x to %dms\n", to_string(type).c_str(), rnti, deadline); parent->rrc_log->debug("Setting timer for %s for rnti=0x%x to %dms\n", to_string(type).c_str(), rnti, deadline);
set_activity(); set_activity();
} }
@ -1819,7 +1819,7 @@ void rrc::ue::send_connection_reconf(srslte::unique_byte_buffer_t pdu)
if (mobility_handler != nullptr) { if (mobility_handler != nullptr) {
mobility_handler->fill_conn_recfg_msg(conn_reconf); mobility_handler->fill_conn_recfg_msg(conn_reconf);
} }
last_rrc_conn_recfg = *conn_reconf; last_rrc_conn_recfg = dl_dcch_msg.msg.c1().rrc_conn_recfg();
// Reuse same PDU // Reuse same PDU
pdu->clear(); pdu->clear();

@ -810,14 +810,19 @@ bool rrc::ue::rrc_mobility::start_ho_preparation(uint32_t target_eci,
empty_meascfg.compute_diff_meas_cfg(target_var_meas, &hoprep_r8.as_cfg.source_meas_cfg); empty_meascfg.compute_diff_meas_cfg(target_var_meas, &hoprep_r8.as_cfg.source_meas_cfg);
// - fill source RR Config // - fill source RR Config
hoprep_r8.as_cfg.source_rr_cfg.sps_cfg_present = false; // TODO: CHECK hoprep_r8.as_cfg.source_rr_cfg.sps_cfg_present = false; // TODO: CHECK
hoprep_r8.as_cfg.source_rr_cfg.mac_main_cfg_present = rrc_ue->last_rrc_conn_recfg.rr_cfg_ded.mac_main_cfg_present; hoprep_r8.as_cfg.source_rr_cfg.mac_main_cfg_present =
hoprep_r8.as_cfg.source_rr_cfg.mac_main_cfg = rrc_ue->last_rrc_conn_recfg.rr_cfg_ded.mac_main_cfg; rrc_ue->last_rrc_conn_recfg.crit_exts.c1().rrc_conn_recfg_r8().rr_cfg_ded.mac_main_cfg_present;
hoprep_r8.as_cfg.source_rr_cfg.phys_cfg_ded_present = rrc_ue->last_rrc_conn_recfg.rr_cfg_ded.phys_cfg_ded_present; hoprep_r8.as_cfg.source_rr_cfg.mac_main_cfg =
hoprep_r8.as_cfg.source_rr_cfg.phys_cfg_ded = rrc_ue->last_rrc_conn_recfg.rr_cfg_ded.phys_cfg_ded; rrc_ue->last_rrc_conn_recfg.crit_exts.c1().rrc_conn_recfg_r8().rr_cfg_ded.mac_main_cfg;
hoprep_r8.as_cfg.source_rr_cfg.phys_cfg_ded_present =
rrc_ue->last_rrc_conn_recfg.crit_exts.c1().rrc_conn_recfg_r8().rr_cfg_ded.phys_cfg_ded_present;
hoprep_r8.as_cfg.source_rr_cfg.phys_cfg_ded =
rrc_ue->last_rrc_conn_recfg.crit_exts.c1().rrc_conn_recfg_r8().rr_cfg_ded.phys_cfg_ded;
// Add SRB2 to the message // Add SRB2 to the message
hoprep_r8.as_cfg.source_rr_cfg.srb_to_add_mod_list_present = hoprep_r8.as_cfg.source_rr_cfg.srb_to_add_mod_list_present =
rrc_ue->last_rrc_conn_recfg.rr_cfg_ded.srb_to_add_mod_list_present; rrc_ue->last_rrc_conn_recfg.crit_exts.c1().rrc_conn_recfg_r8().rr_cfg_ded.srb_to_add_mod_list_present;
hoprep_r8.as_cfg.source_rr_cfg.srb_to_add_mod_list = rrc_ue->last_rrc_conn_recfg.rr_cfg_ded.srb_to_add_mod_list; hoprep_r8.as_cfg.source_rr_cfg.srb_to_add_mod_list =
rrc_ue->last_rrc_conn_recfg.crit_exts.c1().rrc_conn_recfg_r8().rr_cfg_ded.srb_to_add_mod_list;
// hoprep_r8.as_cfg.source_rr_cfg.srb_to_add_mod_list_present = true; // hoprep_r8.as_cfg.source_rr_cfg.srb_to_add_mod_list_present = true;
// asn1::rrc::srb_to_add_mod_list_l& srb_list = hoprep_r8.as_cfg.source_rr_cfg.srb_to_add_mod_list; // asn1::rrc::srb_to_add_mod_list_l& srb_list = hoprep_r8.as_cfg.source_rr_cfg.srb_to_add_mod_list;
// srb_list.resize(1); // srb_list.resize(1);
@ -835,8 +840,9 @@ bool rrc::ue::rrc_mobility::start_ho_preparation(uint32_t target_eci,
// am.dl_am_rlc.t_status_prohibit.value = asn1::rrc::t_status_prohibit_e::ms0; // am.dl_am_rlc.t_status_prohibit.value = asn1::rrc::t_status_prohibit_e::ms0;
// Get DRB1 configuration // Get DRB1 configuration
hoprep_r8.as_cfg.source_rr_cfg.drb_to_add_mod_list_present = hoprep_r8.as_cfg.source_rr_cfg.drb_to_add_mod_list_present =
rrc_ue->last_rrc_conn_recfg.rr_cfg_ded.drb_to_add_mod_list_present; rrc_ue->last_rrc_conn_recfg.crit_exts.c1().rrc_conn_recfg_r8().rr_cfg_ded.drb_to_add_mod_list_present;
hoprep_r8.as_cfg.source_rr_cfg.drb_to_add_mod_list = rrc_ue->last_rrc_conn_recfg.rr_cfg_ded.drb_to_add_mod_list; hoprep_r8.as_cfg.source_rr_cfg.drb_to_add_mod_list =
rrc_ue->last_rrc_conn_recfg.crit_exts.c1().rrc_conn_recfg_r8().rr_cfg_ded.drb_to_add_mod_list;
// hoprep_r8.as_cfg.source_rr_cfg.drb_to_add_mod_list_present = true; // hoprep_r8.as_cfg.source_rr_cfg.drb_to_add_mod_list_present = true;
// asn1::rrc::drb_to_add_mod_list_l& drb_list = hoprep_r8.as_cfg.source_rr_cfg.drb_to_add_mod_list; // asn1::rrc::drb_to_add_mod_list_l& drb_list = hoprep_r8.as_cfg.source_rr_cfg.drb_to_add_mod_list;
// drb_list.resize(1); // drb_list.resize(1);

@ -200,13 +200,10 @@ void rlc::write_sdu(uint16_t rnti, uint32_t lcid, srslte::unique_byte_buffer_t s
void rlc::discard_sdu(uint16_t rnti, uint32_t lcid, uint32_t discard_sn) void rlc::discard_sdu(uint16_t rnti, uint32_t lcid, uint32_t discard_sn)
{ {
uint32_t tx_queue;
pthread_rwlock_rdlock(&rwlock); pthread_rwlock_rdlock(&rwlock);
if (users.count(rnti)) { if (users.count(rnti)) {
users[rnti].rlc->discard_sdu(lcid, discard_sn); users[rnti].rlc->discard_sdu(lcid, discard_sn);
tx_queue = users[rnti].rlc->get_buffer_state(lcid); uint32_t tx_queue = users[rnti].rlc->get_buffer_state(lcid);
// In the eNodeB, there is no polling for buffer state from the scheduler, thus // In the eNodeB, there is no polling for buffer state from the scheduler, thus
// communicate buffer state every time a new SDU is discarded // communicate buffer state every time a new SDU is discarded

Loading…
Cancel
Save