mirror of https://github.com/PentHertz/srsLTE.git
mac_nr: add interface to set C-RNTI and contention ID from RRC
used during contention-based/free RA
This commit is contained in:
parent
cd68e604b0
commit
f5c945dc2f
|
@ -60,6 +60,12 @@ public:
|
||||||
virtual void setup_lcid(const srslte::logical_channel_config_t& config) = 0;
|
virtual void setup_lcid(const srslte::logical_channel_config_t& config) = 0;
|
||||||
virtual void set_config(const srslte::bsr_cfg_t& bsr_cfg) = 0;
|
virtual void set_config(const srslte::bsr_cfg_t& bsr_cfg) = 0;
|
||||||
virtual void set_config(const srslte::sr_cfg_t& sr_cfg) = 0;
|
virtual void set_config(const srslte::sr_cfg_t& sr_cfg) = 0;
|
||||||
|
|
||||||
|
// RRC informs MAC about the (randomly) selected ID used for contention-based RA
|
||||||
|
virtual void set_contention_id(const uint64_t ue_identity) = 0;
|
||||||
|
|
||||||
|
// RRC informs MAC about new UE identity for contention-free RA
|
||||||
|
virtual bool set_crnti(const uint16_t crnti) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class phy_interface_mac_nr
|
class phy_interface_mac_nr
|
||||||
|
|
|
@ -58,10 +58,12 @@ public:
|
||||||
|
|
||||||
void get_metrics(mac_metrics_t* metrics);
|
void get_metrics(mac_metrics_t* metrics);
|
||||||
|
|
||||||
/******** Interface for RRC (RRC -> MAC) ****************/
|
/// Interface for RRC (RRC -> MAC)
|
||||||
void setup_lcid(const srslte::logical_channel_config_t& config);
|
void setup_lcid(const srslte::logical_channel_config_t& config);
|
||||||
void set_config(const srslte::bsr_cfg_t& bsr_cfg);
|
void set_config(const srslte::bsr_cfg_t& bsr_cfg);
|
||||||
void set_config(const srslte::sr_cfg_t& sr_cfg);
|
void set_config(const srslte::sr_cfg_t& sr_cfg);
|
||||||
|
void set_contention_id(const uint64_t ue_identity);
|
||||||
|
bool set_crnti(const uint16_t crnti);
|
||||||
|
|
||||||
/// stack interface
|
/// stack interface
|
||||||
void process_pdus();
|
void process_pdus();
|
||||||
|
@ -76,6 +78,7 @@ private:
|
||||||
|
|
||||||
bool has_crnti();
|
bool has_crnti();
|
||||||
uint16_t get_crnti();
|
uint16_t get_crnti();
|
||||||
|
bool is_valid_crnti(const uint16_t crnti);
|
||||||
|
|
||||||
/// Interaction with rest of the stack
|
/// Interaction with rest of the stack
|
||||||
phy_interface_mac_nr* phy = nullptr;
|
phy_interface_mac_nr* phy = nullptr;
|
||||||
|
@ -89,7 +92,8 @@ private:
|
||||||
|
|
||||||
bool started = false;
|
bool started = false;
|
||||||
|
|
||||||
uint16_t crnti = 0xdead;
|
uint16_t crnti = 0xdead;
|
||||||
|
uint64_t contention_id = 0;
|
||||||
|
|
||||||
static constexpr uint32_t MIN_RLC_PDU_LEN =
|
static constexpr uint32_t MIN_RLC_PDU_LEN =
|
||||||
5; ///< minimum bytes that need to be available in a MAC PDU for attempting to add another RLC SDU
|
5; ///< minimum bytes that need to be available in a MAC PDU for attempting to add another RLC SDU
|
||||||
|
|
|
@ -258,6 +258,29 @@ void mac_nr::set_config(const srslte::sr_cfg_t& sr_cfg)
|
||||||
logger.warning("Not Scheduling Request Config yet");
|
logger.warning("Not Scheduling Request Config yet");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mac_nr::set_contention_id(uint64_t ue_identity)
|
||||||
|
{
|
||||||
|
contention_id = ue_identity;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mac_nr::set_crnti(const uint16_t crnti_)
|
||||||
|
{
|
||||||
|
if (is_valid_crnti(crnti_)) {
|
||||||
|
logger.info("Setting C-RNTI to 0x%X", crnti_);
|
||||||
|
crnti = crnti_;
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
logger.warning("Failed to set C-RNTI, 0x%X is not valid.", crnti_);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mac_nr::is_valid_crnti(const uint16_t crnti)
|
||||||
|
{
|
||||||
|
// TS 38.321 15.3.0 Table 7.1-1
|
||||||
|
return (crnti >= 0x0001 && crnti <= 0xFFEF);
|
||||||
|
}
|
||||||
|
|
||||||
void mac_nr::get_metrics(mac_metrics_t m[SRSLTE_MAX_CARRIERS]) {}
|
void mac_nr::get_metrics(mac_metrics_t m[SRSLTE_MAX_CARRIERS]) {}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue