Changed PDCP LTE to use unique_lock.

This commit is contained in:
Pedro Alvarez 2019-07-24 16:40:30 +01:00 committed by Andre Puschmann
parent 3da0391fff
commit 8c10eabf23
2 changed files with 23 additions and 24 deletions

View File

@ -112,31 +112,31 @@ void pdcp_entity_lte::write_sdu(unique_byte_buffer_t sdu, bool blocking)
(do_integrity) ? "true" : "false",
(do_encryption) ? "true" : "false");
mutex.lock();
{
std::unique_lock<std::mutex> lock(mutex);
if (is_srb()) {
pdcp_pack_control_pdu(tx_count, sdu.get());
if (do_integrity) {
integrity_generate(sdu->msg, sdu->N_bytes - 4, tx_count, &sdu->msg[sdu->N_bytes - 4]);
if (is_srb()) {
pdcp_pack_control_pdu(tx_count, sdu.get());
if (do_integrity) {
integrity_generate(sdu->msg, sdu->N_bytes - 4, tx_count, &sdu->msg[sdu->N_bytes - 4]);
}
}
}
if (is_drb()) {
if (12 == cfg.sn_len) {
pdcp_pack_data_pdu_long_sn(tx_count, sdu.get());
} else {
pdcp_pack_data_pdu_short_sn(tx_count, sdu.get());
if (is_drb()) {
if (12 == cfg.sn_len) {
pdcp_pack_data_pdu_long_sn(tx_count, sdu.get());
} else {
pdcp_pack_data_pdu_short_sn(tx_count, sdu.get());
}
}
}
if (do_encryption) {
cipher_encrypt(
&sdu->msg[cfg.hdr_len_bytes], sdu->N_bytes - cfg.hdr_len_bytes, tx_count, &sdu->msg[cfg.hdr_len_bytes]);
log->info_hex(sdu->msg, sdu->N_bytes, "TX %s SDU (encrypted)", rrc->get_rb_name(lcid).c_str());
if (do_encryption) {
cipher_encrypt(
&sdu->msg[cfg.hdr_len_bytes], sdu->N_bytes - cfg.hdr_len_bytes, tx_count, &sdu->msg[cfg.hdr_len_bytes]);
log->info_hex(sdu->msg, sdu->N_bytes, "TX %s SDU (encrypted)", rrc->get_rb_name(lcid).c_str());
}
tx_count++;
}
tx_count++;
mutex.unlock();
rlc->write_sdu(lcid, std::move(sdu), blocking);
}
@ -157,8 +157,7 @@ void pdcp_entity_lte::write_pdu(unique_byte_buffer_t pdu)
return;
}
mutex.lock();
std::unique_lock<std::mutex> lock(mutex);
if (is_drb()) {
// Handle DRB messages
if (rlc->rb_is_um(lcid)) {
@ -192,7 +191,6 @@ void pdcp_entity_lte::write_pdu(unique_byte_buffer_t pdu)
}
exit:
rx_count++;
mutex.unlock();
}
/****************************************************************************

View File

@ -260,7 +260,7 @@ int test_tx_all(srslte::byte_buffer_pool* pool, srslte::log* log)
* RX Test: PDCP Entity with SN LEN = 12 and 18. Tested 4097 packets received without losses.
* PDCP entity configured with EIA2 and EEA2
*/
int test_rx_in_sequence(uint32_t n_packets, uint8_t pdcp_sn_len, srslte::byte_buffer_pool* pool, srslte::log* log)
int test_rx_in_sequence(uint64_t n_packets, uint8_t pdcp_sn_len, srslte::byte_buffer_pool* pool, srslte::log* log)
{
srslte::pdcp_entity_nr pdcp_tx;
srslte::pdcp_entity_nr pdcp_rx;
@ -296,7 +296,7 @@ int test_rx_in_sequence(uint32_t n_packets, uint8_t pdcp_sn_len, srslte::byte_bu
// Generate test message and
// decript and check matching SDUs
for (uint32_t i = 0; i < n_packets; ++i) {
for (uint64_t i = 0; i < n_packets; ++i) {
srslte::unique_byte_buffer_t sdu = allocate_unique_buffer(*pool);
srslte::unique_byte_buffer_t pdu = allocate_unique_buffer(*pool);
memcpy(sdu->msg, sdu_exp->msg, SDU1_LEN);
@ -326,6 +326,7 @@ int run_all_tests(srslte::byte_buffer_pool* pool)
TESTASSERT(test_tx_all(pool, &log) == 0);
TESTASSERT(test_rx_in_sequence(4097, srslte::PDCP_SN_LEN_12, pool, &log) == 0);
// TESTASSERT(test_rx_in_sequence(4294967297, srslte::PDCP_SN_LEN_12, pool, &log) == 0);
TESTASSERT(test_rx_in_sequence(262145, srslte::PDCP_SN_LEN_18, pool, &log) == 0);
return 0;
}