From 8c10eabf23b39ce65479954839878f1c89e7c3e3 Mon Sep 17 00:00:00 2001 From: Pedro Alvarez Date: Wed, 24 Jul 2019 16:40:30 +0100 Subject: [PATCH] Changed PDCP LTE to use unique_lock. --- lib/src/upper/pdcp_entity_lte.cc | 42 +++++++++++++++----------------- lib/test/upper/pdcp_nr_test.cc | 5 ++-- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/lib/src/upper/pdcp_entity_lte.cc b/lib/src/upper/pdcp_entity_lte.cc index ab732058c..4f13bd269 100644 --- a/lib/src/upper/pdcp_entity_lte.cc +++ b/lib/src/upper/pdcp_entity_lte.cc @@ -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 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 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(); } /**************************************************************************** diff --git a/lib/test/upper/pdcp_nr_test.cc b/lib/test/upper/pdcp_nr_test.cc index 31064a4a5..437b5d1e0 100644 --- a/lib/test/upper/pdcp_nr_test.cc +++ b/lib/test/upper/pdcp_nr_test.cc @@ -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; }