From 1314b8f6536c380e66799435eda7a365bda5c9fe Mon Sep 17 00:00:00 2001 From: Daniel Willmann Date: Wed, 4 Mar 2020 15:58:04 +0100 Subject: [PATCH] Implement override_lcid() function in ttcn3_sys_interface Fixes: TC_7_1_1_1 (#6) --- srsue/test/ttcn3/hdr/ttcn3_interfaces.h | 5 +++-- srsue/test/ttcn3/hdr/ttcn3_sys_interface.h | 16 +++++++++++++++- srsue/test/ttcn3/hdr/ttcn3_syssim.h | 21 ++++++++++++++++++++- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/srsue/test/ttcn3/hdr/ttcn3_interfaces.h b/srsue/test/ttcn3/hdr/ttcn3_interfaces.h index c817da660..0918ef5ca 100644 --- a/srsue/test/ttcn3/hdr/ttcn3_interfaces.h +++ b/srsue/test/ttcn3/hdr/ttcn3_interfaces.h @@ -68,8 +68,9 @@ public: const ttcn3_helpers::pdcp_count_map_t bearers) = 0; virtual void release_as_security(const ttcn3_helpers::timing_info_t timing) = 0; - virtual ttcn3_helpers::pdcp_count_map_t get_pdcp_count() = 0; - virtual uint32_t get_tti() = 0; + virtual ttcn3_helpers::pdcp_count_map_t get_pdcp_count() = 0; + virtual uint32_t get_tti() = 0; + virtual void set_forced_lcid(int lcid) = 0; }; class ss_srb_interface diff --git a/srsue/test/ttcn3/hdr/ttcn3_sys_interface.h b/srsue/test/ttcn3/hdr/ttcn3_sys_interface.h index bf5eaaf07..29b26f2a2 100644 --- a/srsue/test/ttcn3/hdr/ttcn3_sys_interface.h +++ b/srsue/test/ttcn3/hdr/ttcn3_sys_interface.h @@ -286,7 +286,21 @@ private: if (id.HasMember("Srb")) { const Value& config = (*itr)["Config"]; if (config.HasMember("AddOrReconfigure")) { - uint32_t lcid = id["Srb"].GetInt(); + uint32_t lcid = id["Srb"].GetInt(); + const Value& aor = config["AddOrReconfigure"]; + if (aor.HasMember("Mac") && aor["Mac"].HasMember("TestMode") && aor["Mac"]["TestMode"].HasMember("Info") && + aor["Mac"]["TestMode"]["Info"].HasMember("DiffLogChId")) { + uint32_t force_lcid = 0; + const Value& dlcid = aor["Mac"]["TestMode"]["Info"]["DiffLogChId"]; + assert(dlcid.HasMember("LogChId")); + force_lcid = dlcid["LogChId"].GetInt(); + log->info("TestMode: lcid overridden: %d\n", force_lcid); + syssim->set_forced_lcid(force_lcid); + } else { + // Unset override function to use different lcid + log->info("TestMode: lcid reset\n"); + syssim->set_forced_lcid(-1); + } if (lcid > 0) { pdcp_config_t pdcp_cfg = {.bearer_id = static_cast(lcid), .rb_type = PDCP_RB_IS_SRB, diff --git a/srsue/test/ttcn3/hdr/ttcn3_syssim.h b/srsue/test/ttcn3/hdr/ttcn3_syssim.h index 7c6a84fc3..bc6fc09b8 100644 --- a/srsue/test/ttcn3/hdr/ttcn3_syssim.h +++ b/srsue/test/ttcn3/hdr/ttcn3_syssim.h @@ -139,6 +139,8 @@ public: return SRSLTE_SUCCESS; } + void set_forced_lcid(int lcid) { force_lcid = lcid; } + int add_port_handler() { // UT port @@ -313,6 +315,8 @@ public: msg3_tti = -1; } + bool has_single_sdu = false; + // allocate SDUs while (buf_state > 0) { // there is pending SDU to allocate if (mac_msg_dl.new_subh()) { @@ -324,13 +328,27 @@ public: // update buffer state buf_state = rlc.get_buffer_state(lcid); + + if (mac_msg_dl.nof_subh() == 1) { + has_single_sdu = true; + } else { + has_single_sdu = false; + } } } // Assemble entire MAC PDU uint8_t* mac_pdu_ptr = mac_msg_dl.write_packet(&log); - if (mac_pdu_ptr != nullptr) { + if (force_lcid != -1 && lcid == 0) { + if (has_single_sdu) { + log.info("Patched lcid in mac header to: %d\n", force_lcid); + mac_pdu_ptr[0] = (mac_pdu_ptr[0] & 0xe0) | (force_lcid & 0x1f); + } else if (mac_msg_dl.nof_subh() > 1) { + log.warning( + "Not patching lcid to %d in mac header (nof_subh == %d)\n", force_lcid, mac_msg_dl.nof_subh()); + } + } log.info_hex(mac_pdu_ptr, mac_msg_dl.get_pdu_len(), "DL MAC PDU (%d B):\n", mac_msg_dl.get_pdu_len()); // Prepare MAC grant for CCCH @@ -1188,6 +1206,7 @@ private: uint32_t prach_preamble_index = 0; uint16_t dl_rnti = 0; uint16_t crnti = TTCN3_CRNTI; + int force_lcid = -1; srslte::timer_handler timers; bool last_dl_ndi[2 * FDD_HARQ_DELAY_MS] = {}; bool last_ul_ndi[2 * FDD_HARQ_DELAY_MS] = {};