From 2d55691173b534a04a7a8625fa4d9de46c166fe7 Mon Sep 17 00:00:00 2001 From: Francisco Paisana Date: Tue, 18 Aug 2020 11:27:33 +0100 Subject: [PATCH] extended rrc mobility test to check security configuration of pdcp bearers --- srsenb/test/upper/rrc_mobility_test.cc | 30 ++++++++++++++++++++------ srsenb/test/upper/test_helpers.h | 23 ++++++++++++-------- 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/srsenb/test/upper/rrc_mobility_test.cc b/srsenb/test/upper/rrc_mobility_test.cc index 58b2049ac..f12e2717d 100644 --- a/srsenb/test/upper/rrc_mobility_test.cc +++ b/srsenb/test/upper/rrc_mobility_test.cc @@ -459,8 +459,9 @@ int test_s1ap_tenb_mobility(mobility_test_params test_params) tester.cfg.cell_list[0].cell_id = 0x02; tester.cfg.cell_list[0].pci = 2; TESTASSERT(tester.setup_rrc() == SRSLTE_SUCCESS); + security_cfg_handler sec_cfg{tester.cfg}; - /* Receive S1AP Handover Request */ + /* TeNB receives S1AP Handover Request */ asn1::s1ap::ho_request_s ho_req; ho_req.protocol_ies.erab_to_be_setup_list_ho_req.value.resize(1); auto& erab = ho_req.protocol_ies.erab_to_be_setup_list_ho_req.value[0].value.erab_to_be_setup_item_ho_req(); @@ -488,6 +489,21 @@ int test_s1ap_tenb_mobility(mobility_test_params test_params) TESTASSERT(mac_ue.supported_cc_list[0].active); TESTASSERT(mac_ue.supported_cc_list[0].enb_cc_idx == 0); TESTASSERT(mac_ue.ue_bearers[rb_id_t::RB_ID_SRB0].direction == sched_interface::ue_bearer_cfg_t::BOTH); + // Check Security Configuration + TESTASSERT(tester.pdcp.bearers.count(0x46)); + TESTASSERT(tester.pdcp.bearers[0x46].count(rb_id_t::RB_ID_SRB1) and + tester.pdcp.bearers[0x46].count(rb_id_t::RB_ID_SRB2)); + TESTASSERT(tester.pdcp.bearers[0x46][rb_id_t::RB_ID_SRB1].enable_encryption); + TESTASSERT(tester.pdcp.bearers[0x46][rb_id_t::RB_ID_SRB1].enable_integrity); + sec_cfg.set_security_capabilities(ho_req.protocol_ies.ue_security_cap.value); + sec_cfg.set_security_key(ho_req.protocol_ies.security_context.value.next_hop_param); + sec_cfg.regenerate_keys_handover(tester.cfg.cell_list[0].pci, tester.cfg.cell_list[0].dl_earfcn); + srslte::as_security_config_t as_sec_cfg = sec_cfg.get_as_sec_cfg(); + TESTASSERT(tester.pdcp.bearers[0x46][rb_id_t::RB_ID_SRB1].sec_cfg.k_rrc_int == as_sec_cfg.k_rrc_int); + TESTASSERT(tester.pdcp.bearers[0x46][rb_id_t::RB_ID_SRB1].sec_cfg.k_rrc_enc == as_sec_cfg.k_rrc_enc); + TESTASSERT(tester.pdcp.bearers[0x46][rb_id_t::RB_ID_SRB1].sec_cfg.k_up_int == as_sec_cfg.k_up_int); + TESTASSERT(tester.pdcp.bearers[0x46][rb_id_t::RB_ID_SRB1].sec_cfg.cipher_algo == as_sec_cfg.cipher_algo); + TESTASSERT(tester.pdcp.bearers[0x46][rb_id_t::RB_ID_SRB1].sec_cfg.integ_algo == as_sec_cfg.integ_algo); ho_cmd_s ho_cmd; asn1::cbit_ref bref{pdu->msg, pdu->N_bytes}; @@ -509,12 +525,12 @@ int test_s1ap_tenb_mobility(mobility_test_params test_params) bearers[0].value.bearers_subject_to_status_transfer_item().ul_coun_tvalue.pdcp_sn = 120; bearers[0].value.bearers_subject_to_status_transfer_item().ul_coun_tvalue.hfn = 4; tester.rrc.set_erab_status(0x46, bearers); - TESTASSERT(tester.pdcp.last_state.rnti == 0x46); - TESTASSERT(tester.pdcp.last_state.lcid == 3); - TESTASSERT(tester.pdcp.last_state.state.next_pdcp_tx_sn == 100); - TESTASSERT(tester.pdcp.last_state.state.tx_hfn == 3); - TESTASSERT(tester.pdcp.last_state.state.next_pdcp_rx_sn == 120); - TESTASSERT(tester.pdcp.last_state.state.rx_hfn == 4); + TESTASSERT(tester.pdcp.bearers.count(0x46)); + TESTASSERT(tester.pdcp.bearers[0x46].count(3)); + TESTASSERT(tester.pdcp.bearers[0x46][3].state.next_pdcp_tx_sn == 100); + TESTASSERT(tester.pdcp.bearers[0x46][3].state.tx_hfn == 3); + TESTASSERT(tester.pdcp.bearers[0x46][3].state.next_pdcp_rx_sn == 120); + TESTASSERT(tester.pdcp.bearers[0x46][3].state.rx_hfn == 4); // user PRACHs and sends C-RNTI CE sched_interface::ue_cfg_t ue_cfg{}; diff --git a/srsenb/test/upper/test_helpers.h b/srsenb/test/upper/test_helpers.h index e81d35e0d..9b73c3d7d 100644 --- a/srsenb/test/upper/test_helpers.h +++ b/srsenb/test/upper/test_helpers.h @@ -115,12 +115,13 @@ public: uint32_t lcid; srslte::unique_byte_buffer_t sdu; } last_sdu; - struct last_bearer_state { - uint16_t rnti; - uint32_t lcid; - srslte::pdcp_lte_state_t state; - } last_state; - std::map > drb_states; + struct lcid_cfg_t { + bool enable_integrity = false; + bool enable_encryption = false; + srslte::pdcp_lte_state_t state{}; + srslte::as_security_config_t sec_cfg{}; + }; + std::map > bearers; void write_sdu(uint16_t rnti, uint32_t lcid, srslte::unique_byte_buffer_t sdu) override { @@ -130,11 +131,15 @@ public: } bool set_bearer_state(uint16_t rnti, uint32_t lcid, const srslte::pdcp_lte_state_t& state) override { - last_state.rnti = rnti; - last_state.lcid = lcid; - last_state.state = state; + bearers[rnti][lcid].state = state; return true; } + void enable_integrity(uint16_t rnti, uint32_t lcid) override { bearers[rnti][lcid].enable_integrity = true; } + void enable_encryption(uint16_t rnti, uint32_t lcid) override { bearers[rnti][lcid].enable_encryption = true; } + void config_security(uint16_t rnti, uint32_t lcid, srslte::as_security_config_t sec_cfg_) override + { + bearers[rnti][lcid].sec_cfg = sec_cfg_; + } }; class rlc_mobility_dummy : public rlc_dummy