mirror of https://github.com/PentHertz/srsLTE.git
Starting to add PDCP NR state variables.
This commit is contained in:
parent
2449f901f0
commit
52f75c3cf2
|
@ -92,6 +92,11 @@ public:
|
||||||
// bool do_rohc;
|
// bool do_rohc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class srslte_nr_sn_len_t {
|
||||||
|
SN_12 = 12,
|
||||||
|
SN_18 = 18
|
||||||
|
};
|
||||||
|
|
||||||
class srslte_pdcp_config_nr_t
|
class srslte_pdcp_config_nr_t
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -99,7 +104,7 @@ public:
|
||||||
bool is_control_ = false,
|
bool is_control_ = false,
|
||||||
bool is_data_ = false,
|
bool is_data_ = false,
|
||||||
uint8_t direction_ = SECURITY_DIRECTION_UPLINK,
|
uint8_t direction_ = SECURITY_DIRECTION_UPLINK,
|
||||||
uint8_t sn_len_ = 12) :
|
srslte_nr_sn_len_t sn_len_ = srslte_nr_sn_len_t::SN_12) :
|
||||||
bearer_id(bearer_id_),
|
bearer_id(bearer_id_),
|
||||||
direction(direction_),
|
direction(direction_),
|
||||||
is_control(is_control_),
|
is_control(is_control_),
|
||||||
|
@ -112,10 +117,7 @@ public:
|
||||||
uint8_t direction;
|
uint8_t direction;
|
||||||
bool is_control;
|
bool is_control;
|
||||||
bool is_data;
|
bool is_data;
|
||||||
uint8_t sn_len;
|
srslte_nr_sn_len_t sn_len;
|
||||||
|
|
||||||
// TODO: Support the following configurations
|
|
||||||
// bool do_rohc;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class mac_interface_timers
|
class mac_interface_timers
|
||||||
|
|
|
@ -74,31 +74,22 @@ private:
|
||||||
|
|
||||||
srslte_pdcp_config_nr_t cfg;
|
srslte_pdcp_config_nr_t cfg;
|
||||||
|
|
||||||
uint32_t rx_count = 0;
|
uint16_t sn_len_bytes = 0;
|
||||||
uint32_t tx_count = 0;
|
|
||||||
|
|
||||||
uint32_t rx_hfn = 0;
|
// State variables: 3GPP TS 38.323 v15.2.0, section 7.1
|
||||||
uint32_t next_pdcp_rx_sn = 0;
|
uint32_t tx_next = 0;
|
||||||
uint32_t reordering_window = 0;
|
uint32_t rx_next = 0;
|
||||||
uint32_t last_submitted_pdcp_rx_sn = 0;
|
uint32_t rx_deliv = 0;
|
||||||
uint32_t maximum_pdcp_sn = 0;
|
uint32_t rx_reord = 0;
|
||||||
|
|
||||||
void handle_um_drb_pdu(const srslte::unique_byte_buffer_t& pdu);
|
// Constants: 3GPP TS 38.323 v15.2.0, section 7.2
|
||||||
void handle_am_drb_pdu(const srslte::unique_byte_buffer_t& pdu);
|
uint32_t window_size = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Pack/Unpack helper functions
|
* Pack/Unpack helper functions
|
||||||
* Ref: 3GPP TS 36.323 v10.1.0
|
* Ref: 3GPP TS 38.323 v15.2.0
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
void pdcp_pack_control_pdu(uint32_t sn, byte_buffer_t *sdu);
|
|
||||||
void pdcp_unpack_control_pdu(byte_buffer_t *sdu, uint32_t *sn);
|
|
||||||
|
|
||||||
void pdcp_pack_data_pdu_short_sn(uint32_t sn, byte_buffer_t *sdu);
|
|
||||||
void pdcp_unpack_data_pdu_short_sn(byte_buffer_t *sdu, uint32_t *sn);
|
|
||||||
void pdcp_pack_data_pdu_long_sn(uint32_t sn, byte_buffer_t *sdu);
|
|
||||||
void pdcp_unpack_data_pdu_long_sn(byte_buffer_t *sdu, uint32_t *sn);
|
|
||||||
|
|
||||||
} // namespace srslte
|
} // namespace srslte
|
||||||
#endif // SRSLTE_PDCP_ENTITY_NR_H
|
#endif // SRSLTE_PDCP_ENTITY_NR_H
|
||||||
|
|
|
@ -46,6 +46,7 @@ void pdcp_entity_nr::init(srsue::rlc_interface_pdcp* rlc_,
|
||||||
do_encryption = false;
|
do_encryption = false;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
sn_len_bytes = (int)cfg.sn_len % 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reestablishment procedure: 36.323 5.2
|
// Reestablishment procedure: 36.323 5.2
|
||||||
|
@ -68,8 +69,8 @@ void pdcp_entity_nr::reset()
|
||||||
void pdcp_entity_nr::write_sdu(unique_byte_buffer_t sdu, bool blocking)
|
void pdcp_entity_nr::write_sdu(unique_byte_buffer_t sdu, bool blocking)
|
||||||
{
|
{
|
||||||
log->info_hex(sdu->msg, sdu->N_bytes,
|
log->info_hex(sdu->msg, sdu->N_bytes,
|
||||||
"TX %s SDU, SN: %d, do_integrity = %s, do_encryption = %s",
|
"TX %s SDU, do_integrity = %s, do_encryption = %s",
|
||||||
rrc->get_rb_name(lcid).c_str(), tx_count,
|
rrc->get_rb_name(lcid).c_str(),
|
||||||
(do_integrity) ? "true" : "false", (do_encryption) ? "true" : "false");
|
(do_integrity) ? "true" : "false", (do_encryption) ? "true" : "false");
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
|
@ -86,6 +87,11 @@ void pdcp_entity_nr::write_pdu(unique_byte_buffer_t pdu)
|
||||||
(do_integrity) ? "true" : "false",
|
(do_integrity) ? "true" : "false",
|
||||||
(do_encryption) ? "true" : "false");
|
(do_encryption) ? "true" : "false");
|
||||||
|
|
||||||
|
// Sanity check
|
||||||
|
if (pdu->N_bytes <= sn_len_bytes) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue