Skip to content

Commit ec29b0c

Browse files
committed
Merge branch 'next' into agpl_next
2 parents eea87b1 + f8978a6 commit ec29b0c

File tree

17 files changed

+152
-68
lines changed

17 files changed

+152
-68
lines changed

lib/include/srsran/interfaces/mac_interface_types.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ struct rach_cfg_nr_t {
140140
uint32_t powerRampingStep;
141141
uint32_t ra_responseWindow;
142142
uint32_t ra_ContentionResolutionTimer;
143+
uint32_t nof_preambles;
143144

144145
rach_cfg_nr_t() { reset(); }
145146
void reset()
@@ -149,6 +150,7 @@ struct rach_cfg_nr_t {
149150
powerRampingStep = 0;
150151
preambleTransMax = 0;
151152
ra_responseWindow = 0;
153+
nof_preambles = 0;
152154
}
153155
};
154156

lib/src/asn1/rrc_nr_utils.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,10 @@ void make_mac_rach_cfg(const rach_cfg_common_s& asn1_type, rach_cfg_nr_t* rach_c
106106
rach_cfg_nr->PreambleReceivedTargetPower = asn1_type.rach_cfg_generic.preamb_rx_target_pwr;
107107
rach_cfg_nr->preambleTransMax = asn1_type.rach_cfg_generic.preamb_trans_max.to_number();
108108
rach_cfg_nr->ra_ContentionResolutionTimer = asn1_type.ra_contention_resolution_timer.to_number();
109+
110+
if (asn1_type.total_nof_ra_preambs_present) {
111+
rach_cfg_nr->nof_preambles = asn1_type.total_nof_ra_preambs;
112+
}
109113
};
110114

111115
int make_rlc_config_t(const rlc_cfg_c& asn1_type, uint8_t bearer_id, rlc_config_t* cfg_out)

lib/src/mac/mac_rar_pdu_nr.cc

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -290,22 +290,24 @@ bool mac_rar_pdu_nr::unpack(const uint8_t* payload, const uint32_t& len)
290290
bool ret = false;
291291
bool have_more_subpdus = false;
292292
uint32_t offset = 0;
293+
bool success = false;
293294

294295
remaining_len = len;
295296

296297
do {
297298
mac_rar_subpdu_nr rar_subpdu(this);
298-
ret = rar_subpdu.read_subpdu(payload + offset);
299+
success = rar_subpdu.read_subpdu(payload + offset);
299300
have_more_subpdus = rar_subpdu.has_more_subpdus();
300301
offset += rar_subpdu.get_total_length();
301302
remaining_len -= rar_subpdu.get_total_length();
302303

303304
// only append if subPDU could be read successfully
304-
if (ret == true) {
305+
if (success == true) {
305306
subpdus.push_back(rar_subpdu);
306307
}
308+
ret |= success;
307309
// continue reading as long as subPDUs can be extracted ok and we are not overrunning the PDU length
308-
} while (ret && have_more_subpdus && offset <= len);
310+
} while (success && have_more_subpdus && offset <= len);
309311

310312
return ret;
311313
}

srsue/hdr/stack/mac_nr/demux_nr.h

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,12 @@
2929

3030
namespace srsue {
3131

32+
class mac_nr_interface_demux
33+
{
34+
public:
35+
virtual bool received_contention_id(uint64_t id) = 0;
36+
};
37+
3238
/**
3339
* @brief Logical Channel Demultiplexing and MAC CE dissassemble according to TS 38.321
3440
*
@@ -45,25 +51,26 @@ class demux_nr : public demux_interface_harq_nr
4551
demux_nr(srslog::basic_logger& logger_);
4652
~demux_nr();
4753

48-
int32_t init(rlc_interface_mac* rlc_, phy_interface_mac_nr* phy_);
54+
int32_t init(rlc_interface_mac* rlc_, phy_interface_mac_nr* phy_, mac_nr_interface_demux* mac_);
4955

5056
void process_pdus(); /// Called by MAC to process received PDUs
5157

5258
// HARQ interface
53-
void push_bcch(srsran::unique_byte_buffer_t pdu);
54-
void push_pdu(srsran::unique_byte_buffer_t pdu, uint32_t tti);
55-
void push_pdu_temp_crnti(srsran::unique_byte_buffer_t pdu, uint32_t tti);
56-
uint64_t get_received_crueid();
59+
void push_bcch(srsran::unique_byte_buffer_t pdu);
60+
void push_pdu(srsran::unique_byte_buffer_t pdu, uint32_t tti);
61+
void push_pdu_temp_crnti(srsran::unique_byte_buffer_t pdu, uint32_t tti);
62+
bool get_uecrid_successful();
5763

5864
private:
5965
// internal helpers
6066
void handle_pdu(srsran::mac_sch_pdu_nr& pdu_buffer, srsran::unique_byte_buffer_t pdu);
6167

62-
srslog::basic_logger& logger;
63-
rlc_interface_mac* rlc = nullptr;
64-
phy_interface_mac_nr* phy = nullptr;
68+
srslog::basic_logger& logger;
69+
rlc_interface_mac* rlc = nullptr;
70+
phy_interface_mac_nr* phy = nullptr;
71+
mac_nr_interface_demux* mac = nullptr;
6572

66-
uint64_t received_crueid = 0;
73+
bool is_uecrid_successful = false;
6774

6875
///< currently only DCH & BCH PDUs supported (add PCH, etc)
6976
srsran::block_queue<srsran::unique_byte_buffer_t> pdu_queue;

srsue/hdr/stack/mac_nr/mac_nr.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ class mac_nr final : public mac_interface_phy_nr,
4848
public mac_interface_proc_ra_nr,
4949
public mac_interface_sr_nr,
5050
public mac_interface_mux_nr,
51-
public mac_interface_harq_nr
51+
public mac_interface_harq_nr,
52+
public mac_nr_interface_demux
5253
{
5354
public:
5455
mac_nr(srsran::ext_task_sched_handle task_sched_);
@@ -97,7 +98,6 @@ class mac_nr final : public mac_interface_phy_nr,
9798
void start_ra_procedure();
9899

99100
/// Interface for internal procedures (RA, MUX, HARQ)
100-
bool received_contention_id(uint64_t rx_contention_id);
101101
uint16_t get_crnti();
102102
uint16_t get_temp_crnti();
103103
uint16_t get_csrnti() { return SRSRAN_INVALID_RNTI; }; // SPS not supported
@@ -111,6 +111,9 @@ class mac_nr final : public mac_interface_phy_nr,
111111
srsran::mac_sch_subpdu_nr::lcg_bsr_t generate_sbsr();
112112
void set_padding_bytes(uint32_t nof_bytes);
113113

114+
/// Interface for DEMUX
115+
bool received_contention_id(uint64_t rx_contention_id);
116+
114117
void msg3_flush() { mux.msg3_flush(); }
115118
bool msg3_is_transmitted() { return mux.msg3_is_transmitted(); }
116119
void msg3_prepare() { mux.msg3_prepare(); }

srsue/hdr/stack/mac_nr/mac_nr_interfaces.h

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ class mac_interface_proc_ra_nr
3333
{
3434
public:
3535
// Functions for identity handling, e.g., contention id and c-rnti
36-
virtual uint16_t get_crnti() = 0;
37-
virtual bool set_crnti(uint16_t c_rnti) = 0;
36+
virtual uint16_t get_crnti() = 0;
37+
virtual bool set_crnti(uint16_t c_rnti) = 0;
3838
virtual void set_temp_crnti(uint16_t c_rnti) = 0;
3939
virtual void set_crnti_to_temp() = 0;
4040

@@ -90,9 +90,6 @@ class mac_interface_harq_nr
9090
// MAC also provides Temp C-RNTI (through RA proc)
9191
virtual uint16_t get_temp_crnti() = 0;
9292

93-
// HARQ can query MAC for current C-RNTI
94-
virtual bool received_contention_id(uint64_t rx_contention_id) = 0;
95-
9693
// MAC provides the Currently Scheduled RNTI (for SPS)
9794
virtual uint16_t get_csrnti() = 0;
9895
};
@@ -104,10 +101,10 @@ class demux_interface_harq_nr
104101
{
105102
public:
106103
/// Inform demux unit about a newly decoded TB.
107-
virtual void push_bcch(srsran::unique_byte_buffer_t pdu) = 0;
108-
virtual void push_pdu(srsran::unique_byte_buffer_t pdu, uint32_t tti) = 0;
109-
virtual void push_pdu_temp_crnti(srsran::unique_byte_buffer_t pdu, uint32_t tti) = 0;
110-
virtual uint64_t get_received_crueid() = 0;
104+
virtual void push_bcch(srsran::unique_byte_buffer_t pdu) = 0;
105+
virtual void push_pdu(srsran::unique_byte_buffer_t pdu, uint32_t tti) = 0;
106+
virtual void push_pdu_temp_crnti(srsran::unique_byte_buffer_t pdu, uint32_t tti) = 0;
107+
virtual bool get_uecrid_successful() = 0;
111108
};
112109

113110
} // namespace srsue

srsue/hdr/stack/mac_nr/mux_nr.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class mux_nr final : mux_base, public mux_interface_bsr_nr
4848
bool msg3_is_transmitted();
4949
bool msg3_is_pending();
5050
bool msg3_is_empty();
51+
srsran::unique_byte_buffer_t get_msg3(uint32_t max_pdu_len);
5152

5253
// MAC interface
5354
int setup_lcid(const srsran::logical_channel_config_t& config);
@@ -60,6 +61,7 @@ class mux_nr final : mux_base, public mux_interface_bsr_nr
6061

6162
private:
6263
// internal helper methods
64+
srsran::unique_byte_buffer_t pdu_get_nolock(uint32_t max_pdu_len);
6365

6466
// ctor configured members
6567
mac_interface_mux_nr& mac;

srsue/hdr/stack/mac_nr/proc_ra_nr.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class proc_ra_nr
3838
{
3939
public:
4040
proc_ra_nr(mac_interface_proc_ra_nr& mac_, srslog::basic_logger& logger_);
41-
~proc_ra_nr(){};
41+
~proc_ra_nr() { srsran_random_free(random_gen); };
4242

4343
void init(phy_interface_mac_nr* phy_h_, srsran::ext_task_sched_handle* task_sched_);
4444
void set_config(const srsran::rach_cfg_nr_t& rach_cfg_nr);
@@ -66,8 +66,10 @@ class proc_ra_nr
6666
16 * 10; ///< Limited from frame system number opportunity period in TS 38.211 tables 6.3.3.2-2, 6.3.3.2-3
6767
///< and 6.3.3.2-4
6868

69-
mac_interface_proc_ra_nr& mac;
70-
srslog::basic_logger& logger;
69+
mac_interface_proc_ra_nr& mac;
70+
srslog::basic_logger& logger;
71+
srsran_random_t random_gen;
72+
7173
phy_interface_mac_nr* phy = nullptr;
7274
srsran::ext_task_sched_handle* task_sched = nullptr;
7375
srsran::task_multiqueue::queue_handle task_queue;
@@ -120,7 +122,7 @@ class proc_ra_nr
120122
void ra_resource_selection();
121123
void ra_preamble_transmission();
122124
void ra_response_reception(const mac_interface_phy_nr::tb_action_dl_result_t& tb);
123-
void ra_contention_resolution(bool received_con_res_matches_ue_id);
125+
void ra_contention_resolution(bool is_successful, bool is_ul_grant);
124126
void ra_completion();
125127
void ra_error();
126128
};

srsue/hdr/stack/rrc_nr/rrc_nr.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ class rrc_nr final : public rrc_interface_phy_nr,
175175
bool running = false;
176176
srsran::block_queue<cmd_msg_t> cmd_q;
177177

178+
srsran_random_t random_gen;
179+
178180
// PHY config
179181
srsran::phy_cfg_nr_t phy_cfg = {};
180182

srsue/src/phy/nr/cc_worker.cc

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,11 @@ bool cc_worker::decode_pdsch_dl()
247247
mac_dl_grant.tti = dl_slot_cfg.idx;
248248
phy.stack->new_grant_dl(0, mac_dl_grant, &dl_action);
249249

250+
// check if RA-RNTI, if true reset HARQ buffers
251+
if (pdsch_cfg.grant.rnti_type == srsran_rnti_type_ra && dl_action.tb.softbuffer != nullptr) {
252+
srsran_softbuffer_rx_reset(dl_action.tb.softbuffer);
253+
}
254+
250255
// Abort if MAC says it doesn't need the TB
251256
if (not dl_action.tb.enabled) {
252257
// Force positive ACK

0 commit comments

Comments
 (0)