mirror of https://github.com/PentHertz/srsLTE.git
Starting to add boiler-plate code to support Discard at RLC.
This commit is contained in:
parent
7ccc7d1d20
commit
a77dd4e959
|
@ -287,7 +287,8 @@ public:
|
|||
/* PDCP calls RLC to push an RLC SDU. SDU gets placed into the RLC buffer and MAC pulls
|
||||
* RLC PDUs according to TB size. */
|
||||
virtual void write_sdu(uint32_t lcid, srslte::unique_byte_buffer_t sdu, bool blocking = true) = 0;
|
||||
virtual bool rb_is_um(uint32_t lcid) = 0;
|
||||
virtual void discard_sdu(uint32_t discard_sn) = 0;
|
||||
virtual bool rb_is_um(uint32_t lcid) = 0;
|
||||
};
|
||||
|
||||
//RLC interface for MAC
|
||||
|
|
|
@ -134,7 +134,7 @@ public:
|
|||
|
||||
private:
|
||||
pdcp_entity_nr* parent;
|
||||
uint32_t sn;
|
||||
uint32_t discard_sn;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -80,6 +80,7 @@ public:
|
|||
|
||||
// PDCP interface
|
||||
void write_sdu(unique_byte_buffer_t sdu, bool blocking = true);
|
||||
void discard_sdu(uint32_t pdcp_sn);
|
||||
|
||||
// MAC interface
|
||||
bool has_data();
|
||||
|
@ -106,7 +107,8 @@ private:
|
|||
void stop();
|
||||
|
||||
void write_sdu(unique_byte_buffer_t sdu, bool blocking);
|
||||
int read_pdu(uint8_t *payload, uint32_t nof_bytes);
|
||||
int read_pdu(uint8_t* payload, uint32_t nof_bytes);
|
||||
void discard_sdu(uint32_t discard_sn);
|
||||
|
||||
bool has_data();
|
||||
uint32_t get_buffer_state();
|
||||
|
|
|
@ -256,6 +256,7 @@ public:
|
|||
|
||||
// PDCP interface
|
||||
virtual void write_sdu(unique_byte_buffer_t sdu, bool blocking) = 0;
|
||||
virtual void discard_sdu(uint32_t discard_sn) = 0;
|
||||
|
||||
// MAC interface
|
||||
virtual bool has_data() = 0;
|
||||
|
|
|
@ -54,6 +54,7 @@ public:
|
|||
|
||||
// PDCP interface
|
||||
void write_sdu(unique_byte_buffer_t sdu, bool blocking);
|
||||
void discard_sdu(uint32_t discard_sn);
|
||||
|
||||
// MAC interface
|
||||
bool has_data();
|
||||
|
|
|
@ -54,6 +54,7 @@ public:
|
|||
|
||||
// PDCP interface
|
||||
void write_sdu(unique_byte_buffer_t sdu, bool blocking = true);
|
||||
void discard_sdu(uint32_t discard_sn);
|
||||
|
||||
// MAC interface
|
||||
bool has_data();
|
||||
|
@ -78,6 +79,7 @@ protected:
|
|||
void reestablish();
|
||||
void empty_queue();
|
||||
void write_sdu(unique_byte_buffer_t sdu);
|
||||
void discard_sdu(uint32_t discard_sn);
|
||||
void try_write_sdu(unique_byte_buffer_t sdu);
|
||||
void reset_metrics();
|
||||
bool has_data();
|
||||
|
|
|
@ -122,6 +122,11 @@ void rlc_am_lte::write_sdu(unique_byte_buffer_t sdu, bool blocking)
|
|||
tx.write_sdu(std::move(sdu), blocking);
|
||||
}
|
||||
|
||||
void rlc_am_lte::discard_sdu(uint32_t discard_sn)
|
||||
{
|
||||
tx.discard_sdu(discard_sn);
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* MAC interface
|
||||
***************************************************************************/
|
||||
|
@ -337,8 +342,8 @@ void rlc_am_lte::rlc_am_lte_tx::write_sdu(unique_byte_buffer_t sdu, bool blockin
|
|||
tx_sdu_queue.write(std::move(sdu));
|
||||
} else {
|
||||
// non-blocking write
|
||||
uint8_t* msg_ptr = sdu->msg;
|
||||
uint32_t nof_bytes = sdu->N_bytes;
|
||||
uint8_t* msg_ptr = sdu->msg;
|
||||
uint32_t nof_bytes = sdu->N_bytes;
|
||||
std::pair<bool, unique_byte_buffer_t> ret = tx_sdu_queue.try_write(std::move(sdu));
|
||||
if (ret.first) {
|
||||
log->info_hex(
|
||||
|
@ -358,6 +363,14 @@ void rlc_am_lte::rlc_am_lte_tx::write_sdu(unique_byte_buffer_t sdu, bool blockin
|
|||
}
|
||||
}
|
||||
|
||||
void rlc_am_lte::rlc_am_lte_tx::discard_sdu(uint32_t discard_sn)
|
||||
{
|
||||
if (!tx_enabled) {
|
||||
return;
|
||||
}
|
||||
log->warning("Discard SDU not implemented yet\n");
|
||||
}
|
||||
|
||||
int rlc_am_lte::rlc_am_lte_tx::read_pdu(uint8_t* payload, uint32_t nof_bytes)
|
||||
{
|
||||
pthread_mutex_lock(&mutex);
|
||||
|
|
|
@ -115,6 +115,14 @@ void rlc_tm::write_sdu(unique_byte_buffer_t sdu, bool blocking)
|
|||
}
|
||||
}
|
||||
|
||||
void rlc_tm::discard_sdu(uint32_t discard_sn)
|
||||
{
|
||||
if (!tx_enabled) {
|
||||
return;
|
||||
}
|
||||
log->warning("SDU discard not implemented on RLC TM\n");
|
||||
}
|
||||
|
||||
// MAC interface
|
||||
bool rlc_tm::has_data()
|
||||
{
|
||||
|
|
|
@ -104,6 +104,15 @@ void rlc_um_base::write_sdu(unique_byte_buffer_t sdu, bool blocking)
|
|||
}
|
||||
}
|
||||
|
||||
void rlc_um_base::discard_sdu(uint32_t discard_sn)
|
||||
{
|
||||
if (not tx_enabled || not tx) {
|
||||
log->debug("%s is currently deactivated. Ignoring SDU discard(SN %" PRIu32 ")\n", rb_name.c_str(), discard_sn);
|
||||
metrics.num_dropped_sdus++;
|
||||
return;
|
||||
}
|
||||
tx->discard_sdu(discard_sn);
|
||||
}
|
||||
/****************************************************************************
|
||||
* MAC interface
|
||||
***************************************************************************/
|
||||
|
|
|
@ -66,6 +66,7 @@ private:
|
|||
srsenb::rlc_interface_pdcp* rlc;
|
||||
// rlc_interface_pdcp
|
||||
void write_sdu(uint32_t lcid, srslte::unique_byte_buffer_t sdu, bool blocking);
|
||||
void discard_sdu(uint32_t discard_sn);
|
||||
bool rb_is_um(uint32_t lcid);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue