mirror of https://github.com/PentHertz/srsLTE.git
Update S1AP RNTI context when doing Reestablishment (#1582)
This commit is contained in:
parent
1253740da3
commit
382811e10e
|
@ -474,6 +474,7 @@ public:
|
|||
|
||||
virtual void write_pdu(uint16_t rnti, srslte::unique_byte_buffer_t pdu) = 0;
|
||||
virtual bool user_exists(uint16_t rnti) = 0;
|
||||
virtual void user_mod(uint16_t old_rnti, uint16_t new_rnti) = 0;
|
||||
virtual bool user_release(uint16_t rnti, asn1::s1ap::cause_radio_network_e cause_radio) = 0;
|
||||
virtual void ue_ctxt_setup_complete(uint16_t rnti, const asn1::s1ap::init_context_setup_resp_s& res) = 0;
|
||||
virtual void ue_erab_setup_complete(uint16_t rnti, const asn1::s1ap::erab_setup_resp_s& res) = 0;
|
||||
|
|
|
@ -71,6 +71,7 @@ public:
|
|||
uint8_t mmec) override;
|
||||
void write_pdu(uint16_t rnti, srslte::unique_byte_buffer_t pdu) override;
|
||||
bool user_exists(uint16_t rnti) override;
|
||||
void user_mod(uint16_t old_rnti, uint16_t new_rnti) override;
|
||||
bool user_release(uint16_t rnti, asn1::s1ap::cause_radio_network_e cause_radio) override;
|
||||
void ue_ctxt_setup_complete(uint16_t rnti, const asn1::s1ap::init_context_setup_resp_s& res) override;
|
||||
void ue_erab_setup_complete(uint16_t rnti, const asn1::s1ap::erab_setup_resp_s& res) override;
|
||||
|
|
|
@ -346,8 +346,9 @@ void rrc::ue::handle_rrc_con_reest_req(rrc_conn_reest_request_s* msg)
|
|||
ue_security_cfg = parent->users[old_rnti]->ue_security_cfg;
|
||||
ue_security_cfg.regenerate_keys_handover(pcell_cfg->cell_cfg.pci, pcell_cfg->cell_cfg.dl_earfcn);
|
||||
|
||||
// Modify GTP-U tunnel
|
||||
// Modify GTP-U tunnel and S1AP context
|
||||
parent->gtpu->mod_bearer_rnti(old_rnti, rnti);
|
||||
parent->s1ap->user_mod(old_rnti, rnti);
|
||||
|
||||
// Get PDCP entity state (required when using RLC AM)
|
||||
for (const auto& erab_pair : parent->users[old_rnti]->bearer_list.get_erabs()) {
|
||||
|
|
|
@ -367,6 +367,20 @@ bool s1ap::user_exists(uint16_t rnti)
|
|||
return users.find_ue_rnti(rnti) != nullptr;
|
||||
}
|
||||
|
||||
void s1ap::user_mod(uint16_t old_rnti, uint16_t new_rnti)
|
||||
{
|
||||
s1ap_log->info("Modifying user context. Old rnti: 0x%x, new rnti: 0x%x\n", old_rnti, new_rnti);
|
||||
if (not user_exists(old_rnti)) {
|
||||
s1ap_log->error("Old rnti does not exist, aborting.\n");
|
||||
return;
|
||||
}
|
||||
if (user_exists(new_rnti)) {
|
||||
s1ap_log->error("New rnti already exists, aborting.\n");
|
||||
return;
|
||||
}
|
||||
users.find_ue_rnti(old_rnti)->ctxt.rnti = new_rnti;
|
||||
}
|
||||
|
||||
void s1ap::ue_ctxt_setup_complete(uint16_t rnti, const asn1::s1ap::init_context_setup_resp_s& res)
|
||||
{
|
||||
ue* u = users.find_ue_rnti(rnti);
|
||||
|
|
|
@ -104,6 +104,7 @@ public:
|
|||
}
|
||||
}
|
||||
}
|
||||
void user_mod(uint16_t old_rnti, uint16_t new_rnti) override {}
|
||||
};
|
||||
|
||||
class pdcp_mobility_dummy : public pdcp_dummy
|
||||
|
|
Loading…
Reference in New Issue