nr,gnb,mac: fix const-correctness of some methods of class srsran::mac_sch_pdu_nr

This commit is contained in:
Francisco 2021-11-01 17:06:14 +00:00 committed by Francisco Paisana
parent 885e1bcc60
commit 4286ab81d9
2 changed files with 42 additions and 29 deletions

View File

@ -57,17 +57,18 @@ public:
mac_sch_subpdu_nr(mac_sch_pdu_nr* parent_) : parent(parent_), logger(&srslog::fetch_basic_logger("MAC-NR")){}; mac_sch_subpdu_nr(mac_sch_pdu_nr* parent_) : parent(parent_), logger(&srslog::fetch_basic_logger("MAC-NR")){};
nr_lcid_sch_t get_type(); nr_lcid_sch_t get_type();
bool is_sdu(); bool is_sdu() const;
bool is_valid_lcid(); bool is_valid_lcid();
bool is_var_len_ce(uint32_t lcid); bool is_var_len_ce(uint32_t lcid);
bool is_ul_ccch(); bool is_ul_ccch();
int32_t read_subheader(const uint8_t* ptr); int32_t read_subheader(const uint8_t* ptr);
uint32_t get_total_length(); uint32_t get_total_length() const;
uint32_t get_sdu_length(); uint32_t get_sdu_length() const;
uint32_t get_lcid(); uint32_t get_lcid() const;
uint8_t* get_sdu(); uint8_t* get_sdu();
uint16_t get_c_rnti(); const uint8_t* get_sdu() const;
uint16_t get_c_rnti() const;
// both return the reported values as per TS 38.321, mapping to dB according to TS 38.133 Sec 10.1.17 not done here // both return the reported values as per TS 38.321, mapping to dB according to TS 38.133 Sec 10.1.17 not done here
uint8_t get_phr(); uint8_t get_phr();
@ -78,13 +79,13 @@ public:
uint8_t lcg_id; uint8_t lcg_id;
uint8_t buffer_size; uint8_t buffer_size;
}; };
lcg_bsr_t get_sbsr(); lcg_bsr_t get_sbsr() const;
static const uint8_t max_num_lcg_lbsr = 8; static const uint8_t max_num_lcg_lbsr = 8;
struct lbsr_t { struct lbsr_t {
uint8_t bitmap; // the first octet of LBSR and Long Trunc BSR uint8_t bitmap; // the first octet of LBSR and Long Trunc BSR
std::vector<lcg_bsr_t> list; // one entry for each reported LCG std::vector<lcg_bsr_t> list; // one entry for each reported LCG
}; };
lbsr_t get_lbsr(); lbsr_t get_lbsr() const;
// TA // TA
struct ta_t { struct ta_t {
@ -171,6 +172,7 @@ private:
} }
/// Returns the SDU pointer. /// Returns the SDU pointer.
const uint8_t* ptr() const { return sdu; }
uint8_t* ptr() { return sdu; } uint8_t* ptr() { return sdu; }
}; };
@ -187,7 +189,8 @@ public:
void pack(); void pack();
int unpack(const uint8_t* payload, const uint32_t& len); int unpack(const uint8_t* payload, const uint32_t& len);
uint32_t get_num_subpdus(); uint32_t get_num_subpdus();
const mac_sch_subpdu_nr& get_subpdu(const uint32_t& index); const mac_sch_subpdu_nr& get_subpdu(const uint32_t& index) const;
mac_sch_subpdu_nr& get_subpdu(uint32_t index);
bool is_ulsch(); bool is_ulsch();
int init_tx(byte_buffer_t* buffer_, uint32_t pdu_len_, bool is_ulsch_ = false); int init_tx(byte_buffer_t* buffer_, uint32_t pdu_len_, bool is_ulsch_ = false);

View File

@ -23,7 +23,7 @@ mac_sch_subpdu_nr::nr_lcid_sch_t mac_sch_subpdu_nr::get_type()
return CCCH; return CCCH;
} }
bool mac_sch_subpdu_nr::is_sdu() bool mac_sch_subpdu_nr::is_sdu() const
{ {
return (lcid <= 32); return (lcid <= 32);
} }
@ -191,17 +191,17 @@ uint32_t mac_sch_subpdu_nr::write_subpdu(const uint8_t* start_)
return ptr - start_; return ptr - start_;
} }
uint32_t mac_sch_subpdu_nr::get_total_length() uint32_t mac_sch_subpdu_nr::get_total_length() const
{ {
return (header_length + sdu_length); return (header_length + sdu_length);
} }
uint32_t mac_sch_subpdu_nr::get_sdu_length() uint32_t mac_sch_subpdu_nr::get_sdu_length() const
{ {
return sdu_length; return sdu_length;
} }
uint32_t mac_sch_subpdu_nr::get_lcid() uint32_t mac_sch_subpdu_nr::get_lcid() const
{ {
return lcid; return lcid;
} }
@ -211,10 +211,15 @@ uint8_t* mac_sch_subpdu_nr::get_sdu()
return sdu.ptr(); return sdu.ptr();
} }
uint16_t mac_sch_subpdu_nr::get_c_rnti() const uint8_t* mac_sch_subpdu_nr::get_sdu() const
{
return sdu.ptr();
}
uint16_t mac_sch_subpdu_nr::get_c_rnti() const
{ {
if (parent->is_ulsch() && lcid == CRNTI) { if (parent->is_ulsch() && lcid == CRNTI) {
uint8_t* ptr = sdu.ptr(); const uint8_t* ptr = sdu.ptr();
return le16toh((uint16_t)ptr[0] << 8 | ptr[1]); return le16toh((uint16_t)ptr[0] << 8 | ptr[1]);
} }
return 0; return 0;
@ -249,24 +254,24 @@ mac_sch_subpdu_nr::ta_t mac_sch_subpdu_nr::get_ta()
return ta; return ta;
} }
mac_sch_subpdu_nr::lcg_bsr_t mac_sch_subpdu_nr::get_sbsr() mac_sch_subpdu_nr::lcg_bsr_t mac_sch_subpdu_nr::get_sbsr() const
{ {
lcg_bsr_t sbsr = {}; lcg_bsr_t sbsr = {};
if (parent->is_ulsch() && (lcid == SHORT_BSR || lcid == SHORT_TRUNC_BSR)) { if (parent->is_ulsch() && (lcid == SHORT_BSR || lcid == SHORT_TRUNC_BSR)) {
uint8_t* ptr = sdu.ptr(); const uint8_t* ptr = sdu.ptr();
sbsr.lcg_id = (ptr[0] & 0xe0) >> 5; sbsr.lcg_id = (ptr[0] & 0xe0) >> 5;
sbsr.buffer_size = ptr[0] & 0x1f; sbsr.buffer_size = ptr[0] & 0x1f;
} }
return sbsr; return sbsr;
} }
mac_sch_subpdu_nr::lbsr_t mac_sch_subpdu_nr::get_lbsr() mac_sch_subpdu_nr::lbsr_t mac_sch_subpdu_nr::get_lbsr() const
{ {
lbsr_t lbsr = {}; lbsr_t lbsr = {};
lbsr.list.reserve(mac_sch_subpdu_nr::max_num_lcg_lbsr); lbsr.list.reserve(mac_sch_subpdu_nr::max_num_lcg_lbsr);
if (parent->is_ulsch() && (lcid == LONG_BSR || lcid == LONG_TRUNC_BSR)) { if (parent->is_ulsch() && (lcid == LONG_BSR || lcid == LONG_TRUNC_BSR)) {
uint8_t* ptr = sdu.ptr(); const uint8_t* ptr = sdu.ptr();
lbsr.bitmap = *ptr; // read LCG bitmap lbsr.bitmap = *ptr; // read LCG bitmap
ptr++; // skip LCG bitmap ptr++; // skip LCG bitmap
@ -444,7 +449,12 @@ uint32_t mac_sch_pdu_nr::get_num_subpdus()
return subpdus.size(); return subpdus.size();
} }
const mac_sch_subpdu_nr& mac_sch_pdu_nr::get_subpdu(const uint32_t& index) const mac_sch_subpdu_nr& mac_sch_pdu_nr::get_subpdu(const uint32_t& index) const
{
return subpdus.at(index);
}
mac_sch_subpdu_nr& mac_sch_pdu_nr::get_subpdu(uint32_t index)
{ {
return subpdus.at(index); return subpdus.at(index);
} }
@ -551,11 +561,11 @@ uint32_t mac_sch_pdu_nr::add_sudpdu(mac_sch_subpdu_nr& subpdu)
return SRSRAN_SUCCESS; return SRSRAN_SUCCESS;
} }
void mac_sch_pdu_nr::to_string(fmt::memory_buffer& buffer) void mac_sch_pdu_nr::to_string(fmt::memory_buffer& fmtbuffer)
{ {
fmt::format_to(buffer, "{}", is_ulsch() ? "UL" : "DL"); fmt::format_to(fmtbuffer, "{}", is_ulsch() ? "UL" : "DL");
for (auto& subpdu : subpdus) { for (auto& subpdu : subpdus) {
subpdu.to_string(buffer); subpdu.to_string(fmtbuffer);
} }
} }