mirror of https://github.com/pvnis/srsRAN_4G.git
enb,mac,nr: add basic UE object skeleton
refactor that also adds a basic UE object to the NR MACmaster
parent
0217bf5332
commit
8d2e81ad6f
@ -0,0 +1,104 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* \section COPYRIGHT
|
||||||
|
*
|
||||||
|
* Copyright 2013-2021 Software Radio Systems Limited
|
||||||
|
*
|
||||||
|
* By using this file, you agree to the terms and conditions set
|
||||||
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
|
* the distribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRSENB_UE_NR_H
|
||||||
|
#define SRSENB_UE_NR_H
|
||||||
|
|
||||||
|
#include "srsenb/hdr/stack/mac/common/mac_metrics.h"
|
||||||
|
#include "srsran/common/block_queue.h"
|
||||||
|
#include "srsran/common/interfaces_common.h"
|
||||||
|
#include "srsran/interfaces/enb_rlc_interfaces.h"
|
||||||
|
#include "srsran/interfaces/sched_interface.h"
|
||||||
|
#include "srsran/mac/mac_sch_pdu_nr.h"
|
||||||
|
#include <mutex>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace srsenb {
|
||||||
|
|
||||||
|
class rrc_interface_mac_nr;
|
||||||
|
class rlc_interface_mac_nr;
|
||||||
|
class phy_interface_stack_nr;
|
||||||
|
|
||||||
|
class ue_nr : public srsran::read_pdu_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ue_nr(uint16_t rnti,
|
||||||
|
uint32_t enb_cc_idx,
|
||||||
|
sched_interface* sched_,
|
||||||
|
rrc_interface_mac_nr* rrc_,
|
||||||
|
rlc_interface_mac* rlc,
|
||||||
|
phy_interface_stack_nr* phy_,
|
||||||
|
srslog::basic_logger& logger);
|
||||||
|
|
||||||
|
virtual ~ue_nr();
|
||||||
|
void reset();
|
||||||
|
void ue_cfg(const sched_interface::ue_cfg_t& ue_cfg);
|
||||||
|
|
||||||
|
void set_tti(uint32_t tti);
|
||||||
|
uint16_t get_rnti() const { return rnti; }
|
||||||
|
void set_active(bool active) { active_state.store(active, std::memory_order_relaxed); }
|
||||||
|
bool is_active() const { return active_state.load(std::memory_order_relaxed); }
|
||||||
|
|
||||||
|
uint8_t* generate_pdu(uint32_t enb_cc_idx,
|
||||||
|
uint32_t harq_pid,
|
||||||
|
uint32_t tb_idx,
|
||||||
|
const sched_interface::dl_sched_pdu_t pdu[sched_interface::MAX_RLC_PDU_LIST],
|
||||||
|
uint32_t nof_pdu_elems,
|
||||||
|
uint32_t grant_size);
|
||||||
|
int process_pdu(srsran::unique_byte_buffer_t pdu);
|
||||||
|
|
||||||
|
std::mutex metrics_mutex = {};
|
||||||
|
void metrics_read(mac_ue_metrics_t* metrics_);
|
||||||
|
void metrics_rx(bool crc, uint32_t tbs);
|
||||||
|
void metrics_tx(bool crc, uint32_t tbs);
|
||||||
|
void metrics_phr(float phr);
|
||||||
|
void metrics_dl_ri(uint32_t dl_cqi);
|
||||||
|
void metrics_dl_pmi(uint32_t dl_cqi);
|
||||||
|
void metrics_dl_cqi(uint32_t dl_cqi);
|
||||||
|
void metrics_cnt();
|
||||||
|
|
||||||
|
uint32_t read_pdu(uint32_t lcid, uint8_t* payload, uint32_t requested_bytes) final;
|
||||||
|
|
||||||
|
private:
|
||||||
|
rlc_interface_mac* rlc = nullptr;
|
||||||
|
rrc_interface_mac_nr* rrc = nullptr;
|
||||||
|
phy_interface_stack_nr* phy = nullptr;
|
||||||
|
srslog::basic_logger& logger;
|
||||||
|
sched_interface* sched = nullptr;
|
||||||
|
|
||||||
|
uint64_t conres_id = 0;
|
||||||
|
uint16_t rnti = 0;
|
||||||
|
uint32_t last_tti = 0;
|
||||||
|
uint32_t nof_failures = 0;
|
||||||
|
|
||||||
|
std::atomic<bool> active_state{true};
|
||||||
|
|
||||||
|
uint32_t phr_counter = 0;
|
||||||
|
uint32_t dl_cqi_counter = 0;
|
||||||
|
uint32_t dl_ri_counter = 0;
|
||||||
|
uint32_t dl_pmi_counter = 0;
|
||||||
|
mac_ue_metrics_t ue_metrics = {};
|
||||||
|
|
||||||
|
// UE-specific buffer for MAC PDU packing, unpacking and handling
|
||||||
|
srsran::mac_sch_pdu_nr mac_pdu_dl, mac_pdu_ul;
|
||||||
|
std::vector<srsran::unique_byte_buffer_t> ue_tx_buffer;
|
||||||
|
srsran::block_queue<srsran::unique_byte_buffer_t>
|
||||||
|
ue_rx_pdu_queue; ///< currently only DCH PDUs supported (add BCH, PCH, etc)
|
||||||
|
srsran::unique_byte_buffer_t ue_rlc_buffer;
|
||||||
|
|
||||||
|
// Mutexes
|
||||||
|
std::mutex mutex;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace srsenb
|
||||||
|
|
||||||
|
#endif // SRSENB_UE_NR_H
|
@ -0,0 +1,45 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* \section COPYRIGHT
|
||||||
|
*
|
||||||
|
* Copyright 2013-2021 Software Radio Systems Limited
|
||||||
|
*
|
||||||
|
* By using this file, you agree to the terms and conditions set
|
||||||
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
|
* the distribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRSRAN_RRC_CONFIG_NR_H
|
||||||
|
#define SRSRAN_RRC_CONFIG_NR_H
|
||||||
|
|
||||||
|
#include "srsran/asn1/rrc_nr.h"
|
||||||
|
#include "srsue/hdr/phy/phy_common.h"
|
||||||
|
|
||||||
|
namespace srsenb {
|
||||||
|
|
||||||
|
// TODO: Make this common to NR and LTE
|
||||||
|
struct rrc_nr_cfg_sr_t {
|
||||||
|
uint32_t period;
|
||||||
|
// asn1::rrc::sched_request_cfg_c::setup_s_::dsr_trans_max_e_ dsr_max;
|
||||||
|
uint32_t nof_prb;
|
||||||
|
uint32_t sf_mapping[80];
|
||||||
|
uint32_t nof_subframes;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct rrc_nr_cfg_t {
|
||||||
|
asn1::rrc_nr::mib_s mib;
|
||||||
|
asn1::rrc_nr::sib1_s sib1;
|
||||||
|
asn1::rrc_nr::sys_info_ies_s::sib_type_and_info_item_c_ sibs[ASN1_RRC_NR_MAX_SIB];
|
||||||
|
uint32_t nof_sibs;
|
||||||
|
rrc_nr_cfg_sr_t sr_cfg;
|
||||||
|
rrc_cfg_cqi_t cqi_cfg;
|
||||||
|
srsran_cell_t cell;
|
||||||
|
|
||||||
|
std::string log_level;
|
||||||
|
uint32_t log_hex_limit;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace srsenb
|
||||||
|
|
||||||
|
#endif // SRSRAN_RRC_CONFIG_NR_H
|
@ -0,0 +1,186 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* \section COPYRIGHT
|
||||||
|
*
|
||||||
|
* Copyright 2013-2021 Software Radio Systems Limited
|
||||||
|
*
|
||||||
|
* By using this file, you agree to the terms and conditions set
|
||||||
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
|
* the distribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bitset>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "srsenb/hdr/stack/mac/nr/ue_nr.h"
|
||||||
|
#include "srsran/common/string_helpers.h"
|
||||||
|
#include "srsran/interfaces/gnb_interfaces.h"
|
||||||
|
|
||||||
|
namespace srsenb {
|
||||||
|
|
||||||
|
ue_nr::ue_nr(uint16_t rnti_,
|
||||||
|
uint32_t enb_cc_idx,
|
||||||
|
sched_interface* sched_,
|
||||||
|
rrc_interface_mac_nr* rrc_,
|
||||||
|
rlc_interface_mac* rlc_,
|
||||||
|
phy_interface_stack_nr* phy_,
|
||||||
|
srslog::basic_logger& logger_) :
|
||||||
|
rnti(rnti_), sched(sched_), rrc(rrc_), rlc(rlc_), phy(phy_), logger(logger_)
|
||||||
|
{}
|
||||||
|
|
||||||
|
ue_nr::~ue_nr() {}
|
||||||
|
|
||||||
|
void ue_nr::reset()
|
||||||
|
{
|
||||||
|
ue_metrics = {};
|
||||||
|
nof_failures = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ue_nr::ue_cfg(const sched_interface::ue_cfg_t& ue_cfg)
|
||||||
|
{
|
||||||
|
// nop
|
||||||
|
}
|
||||||
|
|
||||||
|
void ue_nr::set_tti(uint32_t tti)
|
||||||
|
{
|
||||||
|
last_tti = tti;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ue_nr::process_pdu(srsran::unique_byte_buffer_t pdu)
|
||||||
|
{
|
||||||
|
logger.info(pdu->msg, pdu->N_bytes, "Handling MAC PDU (%d B)", pdu->N_bytes);
|
||||||
|
|
||||||
|
mac_pdu_ul.init_rx(true);
|
||||||
|
if (mac_pdu_ul.unpack(pdu->msg, pdu->N_bytes) != SRSRAN_SUCCESS) {
|
||||||
|
return SRSRAN_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (logger.info.enabled()) {
|
||||||
|
fmt::memory_buffer str_buffer;
|
||||||
|
// mac_pdu_ul.to_string(str_buffer);
|
||||||
|
logger.info("0x%x %s", rnti, srsran::to_c_str(str_buffer));
|
||||||
|
}
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < mac_pdu_ul.get_num_subpdus(); ++i) {
|
||||||
|
srsran::mac_sch_subpdu_nr subpdu = mac_pdu_ul.get_subpdu(i);
|
||||||
|
logger.info("Handling subPDU %d/%d: lcid=%d, sdu_len=%d",
|
||||||
|
i,
|
||||||
|
mac_pdu_ul.get_num_subpdus(),
|
||||||
|
subpdu.get_lcid(),
|
||||||
|
subpdu.get_sdu_length());
|
||||||
|
|
||||||
|
rlc->write_pdu(rnti, subpdu.get_lcid(), subpdu.get_sdu(), subpdu.get_sdu_length());
|
||||||
|
}
|
||||||
|
return SRSRAN_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t ue_nr::read_pdu(uint32_t lcid, uint8_t* payload, uint32_t requested_bytes)
|
||||||
|
{
|
||||||
|
return rlc->read_pdu(rnti, lcid, payload, requested_bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t* ue_nr::generate_pdu(uint32_t enb_cc_idx,
|
||||||
|
uint32_t harq_pid,
|
||||||
|
uint32_t tb_idx,
|
||||||
|
const sched_interface::dl_sched_pdu_t pdu[sched_interface::MAX_RLC_PDU_LIST],
|
||||||
|
uint32_t nof_pdu_elems,
|
||||||
|
uint32_t grant_size)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(mutex);
|
||||||
|
uint8_t* ret = nullptr;
|
||||||
|
if (enb_cc_idx < SRSRAN_MAX_CARRIERS && harq_pid < SRSRAN_FDD_NOF_HARQ && tb_idx < SRSRAN_MAX_TB) {
|
||||||
|
srsran::byte_buffer_t* buffer = nullptr; // TODO: read from scheduler output
|
||||||
|
buffer->clear();
|
||||||
|
|
||||||
|
mac_pdu_dl.init_tx(buffer, grant_size);
|
||||||
|
|
||||||
|
// read RLC PDU
|
||||||
|
ue_rlc_buffer->clear();
|
||||||
|
int lcid = 4;
|
||||||
|
int pdu_len = rlc->read_pdu(rnti, lcid, ue_rlc_buffer->msg, grant_size - 2);
|
||||||
|
|
||||||
|
// Only create PDU if RLC has something to tx
|
||||||
|
if (pdu_len > 0) {
|
||||||
|
logger.info("Adding MAC PDU for RNTI=%d", rnti);
|
||||||
|
ue_rlc_buffer->N_bytes = pdu_len;
|
||||||
|
logger.info(ue_rlc_buffer->msg, ue_rlc_buffer->N_bytes, "Read %d B from RLC", ue_rlc_buffer->N_bytes);
|
||||||
|
|
||||||
|
// add to MAC PDU and pack
|
||||||
|
mac_pdu_dl.add_sdu(4, ue_rlc_buffer->msg, ue_rlc_buffer->N_bytes);
|
||||||
|
mac_pdu_dl.pack();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (logger.info.enabled()) {
|
||||||
|
fmt::memory_buffer str_buffer;
|
||||||
|
// mac_pdu_dl.to_string(str_buffer);
|
||||||
|
logger.info("0x%x %s", rnti, srsran::to_c_str(str_buffer));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger.error(
|
||||||
|
"Invalid parameters calling generate_pdu: cc_idx=%d, harq_pid=%d, tb_idx=%d", enb_cc_idx, harq_pid, tb_idx);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/******* METRICS interface ***************/
|
||||||
|
void ue_nr::metrics_read(mac_ue_metrics_t* metrics_)
|
||||||
|
{
|
||||||
|
uint32_t ul_buffer = sched->get_ul_buffer(rnti);
|
||||||
|
uint32_t dl_buffer = sched->get_dl_buffer(rnti);
|
||||||
|
|
||||||
|
std::lock_guard<std::mutex> lock(metrics_mutex);
|
||||||
|
ue_metrics.rnti = rnti;
|
||||||
|
ue_metrics.ul_buffer = ul_buffer;
|
||||||
|
ue_metrics.dl_buffer = dl_buffer;
|
||||||
|
|
||||||
|
// set PCell sector id
|
||||||
|
std::array<int, SRSRAN_MAX_CARRIERS> cc_list = sched->get_enb_ue_cc_map(rnti);
|
||||||
|
auto it = std::find(cc_list.begin(), cc_list.end(), 0);
|
||||||
|
ue_metrics.cc_idx = std::distance(cc_list.begin(), it);
|
||||||
|
|
||||||
|
*metrics_ = ue_metrics;
|
||||||
|
|
||||||
|
phr_counter = 0;
|
||||||
|
dl_cqi_counter = 0;
|
||||||
|
ue_metrics = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
void ue_nr::metrics_dl_cqi(uint32_t dl_cqi)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(metrics_mutex);
|
||||||
|
ue_metrics.dl_cqi = SRSRAN_VEC_CMA((float)dl_cqi, ue_metrics.dl_cqi, dl_cqi_counter);
|
||||||
|
dl_cqi_counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ue_nr::metrics_rx(bool crc, uint32_t tbs)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(metrics_mutex);
|
||||||
|
if (crc) {
|
||||||
|
ue_metrics.rx_brate += tbs * 8;
|
||||||
|
} else {
|
||||||
|
ue_metrics.rx_errors++;
|
||||||
|
}
|
||||||
|
ue_metrics.rx_pkts++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ue_nr::metrics_tx(bool crc, uint32_t tbs)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(metrics_mutex);
|
||||||
|
if (crc) {
|
||||||
|
ue_metrics.tx_brate += tbs * 8;
|
||||||
|
} else {
|
||||||
|
ue_metrics.tx_errors++;
|
||||||
|
}
|
||||||
|
ue_metrics.tx_pkts++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ue_nr::metrics_cnt()
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(metrics_mutex);
|
||||||
|
ue_metrics.nof_tti++;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace srsenb
|
@ -0,0 +1,64 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* \section COPYRIGHT
|
||||||
|
*
|
||||||
|
* Copyright 2013-2021 Software Radio Systems Limited
|
||||||
|
*
|
||||||
|
* By using this file, you agree to the terms and conditions set
|
||||||
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
|
* the distribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRSENB_DUMMY_CLASSES_COMMON_H
|
||||||
|
#define SRSENB_DUMMY_CLASSES_COMMON_H
|
||||||
|
|
||||||
|
#include "srsran/interfaces/enb_pdcp_interfaces.h"
|
||||||
|
#include "srsran/interfaces/enb_rlc_interfaces.h"
|
||||||
|
|
||||||
|
namespace srsenb {
|
||||||
|
|
||||||
|
class rlc_dummy : public rlc_interface_rrc
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void clear_buffer(uint16_t rnti) override {}
|
||||||
|
void add_user(uint16_t rnti) override {}
|
||||||
|
void rem_user(uint16_t rnti) override {}
|
||||||
|
void add_bearer(uint16_t rnti, uint32_t lcid, srsran::rlc_config_t cnfg) override {}
|
||||||
|
void add_bearer_mrb(uint16_t rnti, uint32_t lcid) override {}
|
||||||
|
void del_bearer(uint16_t rnti, uint32_t lcid) override {}
|
||||||
|
void write_sdu(uint16_t rnti, uint32_t lcid, srsran::unique_byte_buffer_t sdu) override { last_sdu = std::move(sdu); }
|
||||||
|
bool has_bearer(uint16_t rnti, uint32_t lcid) override { return false; }
|
||||||
|
bool suspend_bearer(uint16_t rnti, uint32_t lcid) override { return true; }
|
||||||
|
bool resume_bearer(uint16_t rnti, uint32_t lcid) override { return true; }
|
||||||
|
void reestablish(uint16_t rnti) override {}
|
||||||
|
|
||||||
|
srsran::unique_byte_buffer_t last_sdu;
|
||||||
|
};
|
||||||
|
|
||||||
|
class pdcp_dummy : public pdcp_interface_rrc, public pdcp_interface_gtpu
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void reset(uint16_t rnti) override {}
|
||||||
|
void add_user(uint16_t rnti) override {}
|
||||||
|
void rem_user(uint16_t rnti) override {}
|
||||||
|
void write_sdu(uint16_t rnti, uint32_t lcid, srsran::unique_byte_buffer_t sdu, int pdcp_sn) override {}
|
||||||
|
void add_bearer(uint16_t rnti, uint32_t lcid, srsran::pdcp_config_t cnfg) override {}
|
||||||
|
void del_bearer(uint16_t rnti, uint32_t lcid) override {}
|
||||||
|
void config_security(uint16_t rnti, uint32_t lcid, srsran::as_security_config_t sec_cfg_) override {}
|
||||||
|
void enable_integrity(uint16_t rnti, uint32_t lcid) override {}
|
||||||
|
void enable_encryption(uint16_t rnti, uint32_t lcid) override {}
|
||||||
|
bool get_bearer_state(uint16_t rnti, uint32_t lcid, srsran::pdcp_lte_state_t* state) override { return true; }
|
||||||
|
bool set_bearer_state(uint16_t rnti, uint32_t lcid, const srsran::pdcp_lte_state_t& state) override { return true; }
|
||||||
|
void reestablish(uint16_t rnti) override {}
|
||||||
|
void send_status_report(uint16_t rnti) override {}
|
||||||
|
void send_status_report(uint16_t rnti, uint32_t lcid) override {}
|
||||||
|
std::map<uint32_t, srsran::unique_byte_buffer_t> get_buffered_pdus(uint16_t rnti, uint32_t lcid) override
|
||||||
|
{
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace srsenb
|
||||||
|
|
||||||
|
#endif // SRSENB_DUMMY_CLASSES_COMMON_H
|
@ -0,0 +1,35 @@
|
|||||||
|
/**
|
||||||
|
*
|
||||||
|
* \section COPYRIGHT
|
||||||
|
*
|
||||||
|
* Copyright 2013-2021 Software Radio Systems Limited
|
||||||
|
*
|
||||||
|
* By using this file, you agree to the terms and conditions set
|
||||||
|
* forth in the LICENSE file which can be found at the top level of
|
||||||
|
* the distribution.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef SRSRAN_DUMMY_NR_CLASSES_H
|
||||||
|
#define SRSRAN_DUMMY_NR_CLASSES_H
|
||||||
|
|
||||||
|
#include "srsran/interfaces/gnb_interfaces.h"
|
||||||
|
|
||||||
|
namespace srsenb {
|
||||||
|
|
||||||
|
class mac_dummy : public mac_interface_rrc_nr
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int cell_cfg(srsenb::sched_interface::cell_cfg_t* cell_cfg_)
|
||||||
|
{
|
||||||
|
cellcfgobj = *cell_cfg_;
|
||||||
|
return SRSRAN_SUCCESS;
|
||||||
|
}
|
||||||
|
uint16_t reserve_rnti() { return 0x4601; }
|
||||||
|
|
||||||
|
srsenb::sched_interface::cell_cfg_t cellcfgobj;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace srsenb
|
||||||
|
|
||||||
|
#endif // SRSRAN_DUMMY_NR_CLASSES_H
|
@ -1,60 +0,0 @@
|
|||||||
/**
|
|
||||||
*
|
|
||||||
* \section COPYRIGHT
|
|
||||||
*
|
|
||||||
* Copyright 2013-2021 Software Radio Systems Limited
|
|
||||||
*
|
|
||||||
* By using this file, you agree to the terms and conditions set
|
|
||||||
* forth in the LICENSE file which can be found at the top level of
|
|
||||||
* the distribution.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef SRSRAN_DUMMY_NR_CLASSES_H
|
|
||||||
#define SRSRAN_DUMMY_NR_CLASSES_H
|
|
||||||
|
|
||||||
#include "srsran/interfaces/gnb_interfaces.h"
|
|
||||||
|
|
||||||
namespace srsenb {
|
|
||||||
|
|
||||||
class mac_dummy : public mac_interface_rrc_nr
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
int cell_cfg(srsenb::sched_interface::cell_cfg_t* cell_cfg_)
|
|
||||||
{
|
|
||||||
cellcfgobj = *cell_cfg_;
|
|
||||||
return SRSRAN_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
srsenb::sched_interface::cell_cfg_t cellcfgobj;
|
|
||||||
};
|
|
||||||
|
|
||||||
class rlc_dummy : public rlc_interface_rrc_nr
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void clear_buffer(uint16_t rnti) override {}
|
|
||||||
void add_user(uint16_t rnti) override {}
|
|
||||||
void rem_user(uint16_t rnti) override {}
|
|
||||||
void add_bearer(uint16_t rnti, uint32_t lcid, srsran::rlc_config_t cnfg) override {}
|
|
||||||
void add_bearer_mrb(uint16_t rnti, uint32_t lcid) override {}
|
|
||||||
void write_sdu(uint16_t rnti, uint32_t lcid, srsran::unique_byte_buffer_t sdu) override { last_sdu = std::move(sdu); }
|
|
||||||
|
|
||||||
srsran::unique_byte_buffer_t last_sdu;
|
|
||||||
};
|
|
||||||
|
|
||||||
class pdcp_dummy : public pdcp_interface_rrc_nr
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
void reset(uint16_t rnti) override {}
|
|
||||||
void add_user(uint16_t rnti) override {}
|
|
||||||
void rem_user(uint16_t rnti) override {}
|
|
||||||
void write_sdu(uint16_t rnti, uint32_t lcid, srsran::unique_byte_buffer_t sdu) override {}
|
|
||||||
void add_bearer(uint16_t rnti, uint32_t lcid, srsran::pdcp_config_t cnfg) override {}
|
|
||||||
void config_security(uint16_t rnti, uint32_t lcid, srsran::as_security_config_t sec_cfg) override {}
|
|
||||||
void enable_integrity(uint16_t rnti, uint32_t lcid) override {}
|
|
||||||
void enable_encryption(uint16_t rnti, uint32_t lcid) override {}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace srsenb
|
|
||||||
|
|
||||||
#endif // SRSRAN_DUMMY_NR_CLASSES_H
|
|
Loading…
Reference in New Issue