mirror of https://github.com/PentHertz/srsLTE.git
-adding temp crnti removal for NR carrier attach
This commit is contained in:
parent
1c44546c0b
commit
bc4388a78c
|
@ -27,6 +27,8 @@ public:
|
||||||
virtual uint16_t reserve_rnti(uint32_t enb_cc_idx) = 0;
|
virtual uint16_t reserve_rnti(uint32_t enb_cc_idx) = 0;
|
||||||
|
|
||||||
virtual int ue_cfg(uint16_t rnti, const sched_nr_interface::ue_cfg_t& ue_cfg) = 0;
|
virtual int ue_cfg(uint16_t rnti, const sched_nr_interface::ue_cfg_t& ue_cfg) = 0;
|
||||||
|
|
||||||
|
virtual int remove_ue(uint16_t rnti) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
// NR interface is identical to EUTRA interface
|
// NR interface is identical to EUTRA interface
|
||||||
|
|
|
@ -54,6 +54,7 @@ public:
|
||||||
uint16_t reserve_rnti(uint32_t enb_cc_idx) override;
|
uint16_t reserve_rnti(uint32_t enb_cc_idx) override;
|
||||||
int read_pdu_bcch_bch(uint8_t* payload);
|
int read_pdu_bcch_bch(uint8_t* payload);
|
||||||
int ue_cfg(uint16_t rnti, const sched_nr_interface::ue_cfg_t& ue_cfg) override;
|
int ue_cfg(uint16_t rnti, const sched_nr_interface::ue_cfg_t& ue_cfg) override;
|
||||||
|
int remove_ue(uint16_t rnti) override;
|
||||||
|
|
||||||
// MAC interface for RLC
|
// MAC interface for RLC
|
||||||
// TODO:
|
// TODO:
|
||||||
|
@ -71,7 +72,6 @@ public:
|
||||||
private:
|
private:
|
||||||
uint16_t add_ue_(uint32_t enb_cc_idx);
|
uint16_t add_ue_(uint32_t enb_cc_idx);
|
||||||
uint16_t alloc_ue(uint32_t enb_cc_idx);
|
uint16_t alloc_ue(uint32_t enb_cc_idx);
|
||||||
int remove_ue(uint16_t rnti);
|
|
||||||
|
|
||||||
// internal misc helpers
|
// internal misc helpers
|
||||||
bool is_rnti_valid_unsafe(uint16_t rnti);
|
bool is_rnti_valid_unsafe(uint16_t rnti);
|
||||||
|
|
|
@ -63,6 +63,7 @@ public:
|
||||||
|
|
||||||
rrc_nr_cfg_t update_default_cfg(const rrc_nr_cfg_t& rrc_cfg);
|
rrc_nr_cfg_t update_default_cfg(const rrc_nr_cfg_t& rrc_cfg);
|
||||||
int add_user(uint16_t rnti);
|
int add_user(uint16_t rnti);
|
||||||
|
void rem_user(uint16_t rnti);
|
||||||
int update_user(uint16_t new_rnti, uint16_t old_rnti);
|
int update_user(uint16_t new_rnti, uint16_t old_rnti);
|
||||||
void config_phy();
|
void config_phy();
|
||||||
void config_mac();
|
void config_mac();
|
||||||
|
|
|
@ -169,6 +169,7 @@ void mac_nr::rach_detected(const rach_info_t& rach_info)
|
||||||
rar_info.prach_slot = slot_point{NUMEROLOGY_IDX, rach_info.slot_index};
|
rar_info.prach_slot = slot_point{NUMEROLOGY_IDX, rach_info.slot_index};
|
||||||
// TODO: fill remaining fields as required
|
// TODO: fill remaining fields as required
|
||||||
sched.dl_rach_info(enb_cc_idx, rar_info);
|
sched.dl_rach_info(enb_cc_idx, rar_info);
|
||||||
|
rrc->add_user(rnti);
|
||||||
|
|
||||||
logger.info("RACH: slot=%d, cc=%d, preamble=%d, offset=%d, temp_crnti=0x%x",
|
logger.info("RACH: slot=%d, cc=%d, preamble=%d, offset=%d, temp_crnti=0x%x",
|
||||||
rach_info.slot_index,
|
rach_info.slot_index,
|
||||||
|
|
|
@ -158,6 +158,24 @@ int rrc_nr::add_user(uint16_t rnti)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void rrc_nr::rem_user(uint16_t rnti)
|
||||||
|
{
|
||||||
|
auto user_it = users.find(rnti);
|
||||||
|
if (user_it != users.end()) {
|
||||||
|
printf("Disconnecting rnti=0x%x.\n", rnti);
|
||||||
|
logger.info("Disconnecting rnti=0x%x.", rnti);
|
||||||
|
/* First remove MAC and GTPU to stop processing DL/UL traffic for this user
|
||||||
|
*/
|
||||||
|
mac->remove_ue(rnti); // MAC handles PHY
|
||||||
|
rlc->rem_user(rnti);
|
||||||
|
pdcp->rem_user(rnti);
|
||||||
|
users.erase(rnti);
|
||||||
|
logger.info("Removed user rnti=0x%x", rnti);
|
||||||
|
} else {
|
||||||
|
logger.error("Removing user rnti=0x%x (does not exist)", rnti);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Function called by MAC after the reception of a C-RNTI CE indicating that the UE still has a
|
/* Function called by MAC after the reception of a C-RNTI CE indicating that the UE still has a
|
||||||
* valid RNTI.
|
* valid RNTI.
|
||||||
*/
|
*/
|
||||||
|
@ -166,8 +184,7 @@ int rrc_nr::update_user(uint16_t new_rnti, uint16_t old_rnti)
|
||||||
// Remove new_rnti
|
// Remove new_rnti
|
||||||
auto new_ue_it = users.find(new_rnti);
|
auto new_ue_it = users.find(new_rnti);
|
||||||
if (new_ue_it != users.end()) {
|
if (new_ue_it != users.end()) {
|
||||||
// TODO: cleanup new user?
|
task_sched.defer_task([this, new_rnti]() { rem_user(new_rnti); });
|
||||||
return SRSRAN_ERROR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send Reconfiguration to old_rnti if is RRC_CONNECT or RRC Release if already released here
|
// Send Reconfiguration to old_rnti if is RRC_CONNECT or RRC Release if already released here
|
||||||
|
|
|
@ -43,6 +43,8 @@ public:
|
||||||
|
|
||||||
int ue_cfg(uint16_t rnti, const sched_nr_interface::ue_cfg_t& ue_cfg) override { return SRSRAN_SUCCESS; }
|
int ue_cfg(uint16_t rnti, const sched_nr_interface::ue_cfg_t& ue_cfg) override { return SRSRAN_SUCCESS; }
|
||||||
|
|
||||||
|
int remove_ue(uint16_t rnti) override { return SRSRAN_SUCCESS; }
|
||||||
|
|
||||||
srsenb::sched_interface::cell_cfg_t cellcfgobj;
|
srsenb::sched_interface::cell_cfg_t cellcfgobj;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue