From 8de3d7436ea1e24e4d61b8ea8176ddf4fea5044a Mon Sep 17 00:00:00 2001 From: Francisco Paisana Date: Mon, 16 May 2022 16:08:22 +0100 Subject: [PATCH] fix paging opportunity calculation in RRC and add respective unit test --- srsenb/hdr/stack/rrc/rrc_paging.h | 2 +- srsenb/test/rrc/CMakeLists.txt | 4 +++ srsenb/test/rrc/rrc_paging_test.cc | 48 ++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 srsenb/test/rrc/rrc_paging_test.cc diff --git a/srsenb/hdr/stack/rrc/rrc_paging.h b/srsenb/hdr/stack/rrc/rrc_paging.h index 97797fa0d..9e7d438d5 100644 --- a/srsenb/hdr/stack/rrc/rrc_paging.h +++ b/srsenb/hdr/stack/rrc/rrc_paging.h @@ -32,7 +32,7 @@ public: T(default_paging_cycle_), Nb(static_cast((float)T * nb_)), N(std::min(T, Nb)), - Ns(std::max(1U, Nb)), + Ns(std::max(1U, static_cast(nb_))), logger(srslog::fetch_basic_logger("RRC")) { for (subframe_info& sf_obj : sf_pending_pcch) { diff --git a/srsenb/test/rrc/CMakeLists.txt b/srsenb/test/rrc/CMakeLists.txt index fb6694fd4..96ed1d211 100644 --- a/srsenb/test/rrc/CMakeLists.txt +++ b/srsenb/test/rrc/CMakeLists.txt @@ -18,6 +18,10 @@ target_link_libraries(erab_setup_test test_helpers ${LIBCONFIGPP_LIBRARIES} ${AT add_executable(rrc_mobility_test rrc_mobility_test.cc) target_link_libraries(rrc_mobility_test srsran_asn1 test_helpers ${ATOMIC_LIBS}) +add_executable(rrc_paging_test rrc_paging_test.cc) +target_link_libraries(rrc_paging_test srsran_asn1 test_helpers) + add_test(rrc_mobility_test rrc_mobility_test -i ${CMAKE_CURRENT_SOURCE_DIR}/../..) add_test(erab_setup_test erab_setup_test -i ${CMAKE_CURRENT_SOURCE_DIR}/../..) add_test(rrc_meascfg_test rrc_meascfg_test -i ${CMAKE_CURRENT_SOURCE_DIR}/../..) +add_test(rrc_paging_test rrc_paging_test) diff --git a/srsenb/test/rrc/rrc_paging_test.cc b/srsenb/test/rrc/rrc_paging_test.cc new file mode 100644 index 000000000..c1d55bbfa --- /dev/null +++ b/srsenb/test/rrc/rrc_paging_test.cc @@ -0,0 +1,48 @@ +/** + * + * \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 "srsenb/hdr/stack/rrc/rrc_paging.h" +#include "srsran/common/test_common.h" + +using namespace srsenb; + +void test_paging() +{ + unsigned paging_cycle = 32; + float nb = 1; + paging_manager pcch_manager{paging_cycle, nb}; + + unsigned ue_id = 4780; + unsigned mmec = 10; + uint8_t m_tmsi[] = {0x64, 0x04, 0x00, 0x02}; + + pcch_manager.add_tmsi_paging(ue_id, mmec, m_tmsi); + + // \remark: See TS 36.304, section 7.1. + unsigned N = std::min(paging_cycle, (unsigned)std::round(nb * paging_cycle)); + unsigned Ns = std::max(1, (int)nb); + unsigned i_s = (ue_id / N) % Ns; + TESTASSERT_EQ(0, i_s); + tti_point t{0}; + for (unsigned count = 0; count < 1024 * 10; ++count, ++t) { + if (pcch_manager.pending_pcch_bytes(t) > 0) { + fmt::print("[{}]\n", t); + TESTASSERT_EQ((paging_cycle / N) * (ue_id % N), (t.sfn() % paging_cycle)); + TESTASSERT_EQ(9, t.sf_idx()); // PO when i_s == 0. + } + } +} + +int main() +{ + test_paging(); +} \ No newline at end of file