This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22387 ) Change subject: pcu: Introduce test TC_nacc_outbound_success ...................................................................... pcu: Introduce test TC_nacc_outbound_success Related: SYS#4909 Change-Id: I951db4af731e5a7c207f0f407dd78d166e2d3d26 --- M library/GSM_Types.ttcn M pcu/PCU_Tests.ttcn M pcu/gen_links.sh M pcu/osmo-pcu.cfg M pcu/regen_makefile.sh 5 files changed, 205 insertions(+), 3 deletions(-) Approvals: laforge: Looks good to me, approved Jenkins Builder: Verified diff --git a/library/GSM_Types.ttcn b/library/GSM_Types.ttcn index 6cc3c08..9710c26 100644 --- a/library/GSM_Types.ttcn +++ b/library/GSM_Types.ttcn @@ -415,6 +415,18 @@ type hexstring GsmBcdString with { variant "HEXORDER(low)" }; type GsmBcdString BcdMccMnc with { variant "FIELDLENGTH(6)" }; +/* Compute BcdMccMnc from integer values */ +function f_enc_BcdMccMnc(uint16_t mcc, uint16_t mnc, boolean mnc_3_digits) return BcdMccMnc { + var hexstring mcc_str, mnc_str; + mcc_str := str2hex(int2str(mcc)); + mnc_str := str2hex(int2str(mnc)); + if (mnc_3_digits == true) { + return mcc_str[0] & mcc_str[1] & mnc_str[2] & mcc_str[2] & mnc_str[0] & mnc_str[1]; + } else { + return mcc_str[0] & mcc_str[1] & mcc_str[2] & 'F'H & mnc_str[0] & mnc_str[1]; + } +} + /* 24.008 10.5.1.3 */ type record LocationAreaIdentification { BcdMccMnc mcc_mnc, diff --git a/pcu/PCU_Tests.ttcn b/pcu/PCU_Tests.ttcn index 7d569b1..1e542fa 100644 --- a/pcu/PCU_Tests.ttcn +++ b/pcu/PCU_Tests.ttcn @@ -56,6 +56,10 @@ import from StatsD_CodecPort_CtrlFunct all; import from StatsD_Checker all; +import from IPA_Emulation all; +import from Osmocom_CTRL_Adapter all; +import from Osmocom_CTRL_Functions all; + modulepar { charstring mp_pcu_sock_path := PCU_SOCK_DEFAULT; @@ -63,6 +67,9 @@ charstring mp_pcu_statsd_ip := "127.0.0.1"; integer mp_pcu_statsd_port := 8125; + + charstring mp_ctrl_neigh_ip := "127.0.0.1"; + integer mp_ctrl_neigh_port := 4248; } @@ -111,7 +118,7 @@ uint8_t high } -type component RAW_PCU_Test_CT extends bssgp_CT, MS_BTS_IFACE_CT, StatsD_ConnHdlr { +type component RAW_PCU_Test_CT extends bssgp_CT, MS_BTS_IFACE_CT, StatsD_ConnHdlr, CTRL_Adapter_CT { /* PCU interface abstraction component */ var RAW_PCUIF_CT vc_PCUIF; @@ -3566,6 +3573,184 @@ f_shutdown(__BFILE__, __LINE__, final := true); } +private function f_skip_dummy(integer max_num_iter) +runs on RAW_PCU_Test_CT return RlcmacDlBlock { + var RlcmacDlBlock dl_block; + var uint32_t sched_fn; + var integer i := 0; + while (true) { + f_rx_rlcmac_dl_block(dl_block, sched_fn); + if (not match(dl_block, tr_RLCMAC_DUMMY_CTRL())) { + break; + } + if (i > max_num_iter) { + setverdict(fail, "Rx unexpected DL block: ", dl_block); + f_shutdown(__BFILE__, __LINE__); + } + i := i + 1; + } + return dl_block; +} + +/* Handle groups of PKT NEIGHBOUR CELL DATA packets */ +private function f_handle_pkt_neighbor_cell_data(inout GprsMS ms, octetstring exp_si) +runs on RAW_PCU_Test_CT { + var RlcmacDlBlock dl_block; + var uint32_t sched_fn; + var integer i := 0; + var uint5_t exp_container_idx := 0; + var integer si_offset := 0; + var integer len; + var octetstring exp_si_chunk; + var GlobalTfi gtfi := { is_dl_tfi := false, tfi := ms.ul_tbf.tfi }; + + dl_block := f_skip_dummy(50); + + while (true) { + var template RlcmacDlCtrlMsg exp_msg; exp_msg := + tr_RlcMacDlCtrl_PKT_NEIGH_CELL_DATA(gtfi, exp_container_idx); + + /* Make sure last Dl block is a Pkt Neighbour Cell Data */ + if (not match(dl_block, tr_RLCMAC_DL_CTRL(?, exp_msg))) { + setverdict(fail, "Rx unexpected DL block: ", dl_block, " vs exp ", tr_RLCMAC_DL_CTRL(?, exp_msg)); + f_shutdown(__BFILE__, __LINE__); + } + var PacketNeighbourCellData neigh_data := dl_block.ctrl.payload.u.neighbour_cell_data; + var PacketNeighbourCellDataContainer cont := neigh_data.container_list[0]; + + if (cont.cd_length == 31) { /* continues on next message */ + len := lengthof(cont.container_data); + exp_si_chunk := substr(exp_si, si_offset, len); + if (cont.container_data != exp_si_chunk) { + setverdict(fail, "Rx unexpected SI chunk at offset ", si_offset, ": ", + cont.container_data, " vs exp ", exp_si_chunk); + f_shutdown(__BFILE__, __LINE__); + } + si_offset := si_offset + len; + } else if (cont.cd_length == 0) { + /* we are done */ + if (si_offset != lengthof(exp_si)) { + setverdict(fail, "Rx unexpectd SI length ", si_offset, + " vs exp ", lengthof(exp_si)); + f_shutdown(__BFILE__, __LINE__); + } + break; + } else { /* data length, last message */ + len := cont.cd_length; + exp_si_chunk := substr(exp_si, si_offset, len); + if (cont.container_data != exp_si_chunk) { + setverdict(fail, "Rx unexpected SI chunk at offset ", si_offset, ": ", + cont.container_data, " vs exp ", exp_si_chunk); + f_shutdown(__BFILE__, __LINE__); + return; + } + si_offset := si_offset + len; + /* we are done */ + if (si_offset != lengthof(exp_si)) { + setverdict(fail, "Rx unexpectd SI length ", si_offset, + " vs exp ", lengthof(exp_si)); + f_shutdown(__BFILE__, __LINE__); + } + break; + } + + exp_container_idx := exp_container_idx + 1; + f_rx_rlcmac_dl_block(dl_block, sched_fn); + } + return; +} + +/* Verify PCU handles outbound Network Assisted Cell Change Cell Change (NACC, TS 44.060 sec 8.8). */ +testcase TC_nacc_outbound_success() runs on RAW_PCU_Test_CT { + var RlcmacDlBlock dl_block; + var PollFnCtx pollctx; + var uint32_t sched_fn; + var GprsMS ms; + var template (value) RlcmacUlCtrlMsg cell_chf_notif; + var PCUIF_info_ind info_ind := valueof(ts_PCUIF_INFO_default); + var MultislotCap_GPRS mscap_gprs := { + gprsmultislotclass := '00011'B, + gprsextendeddynalloccap := '0'B + }; + var MSRadioAccessCapabilityV ms_racap := { valueof(ts_RaCapRec('0001'B /* E-GSM */, mscap_gprs, omit)) }; + var GsmArfcn req_arfcn := 862; + var uint6_t req_bsic := 43; + var BssgpCellId src := valueof(ts_BssgpCellId(ts_RAI(ts_LAI(f_enc_BcdMccMnc(info_ind.mcc, info_ind.mnc, info_ind.mnc_3_digits == 1), /* '262F42'H */ + info_ind.lac), + info_ind.rac), + info_ind.cell_id)); + var BssgpCellId dst := valueof(ts_BssgpCellId(ts_RAI(ts_LAI('023F43'H, /* Decided by test itself (emulating BSC) */ + 423), + 2), + 5)); + var template RIM_Routing_Address src_addr := t_RIM_Routing_Address_cid(src); + var template RIM_Routing_Address dst_addr := t_RIM_Routing_Address_cid(dst); + var octetstring si1 := '198fb100000000000000000000000000007900002b'O; + var octetstring si3 := '1b753000f110236ec9033c2747407900003c0b2b2b'O; + var octetstring si13 := '009000185a6fc9e08410ab2b2b2b2b2b2b2b2b2b2b'O; + var octetstring si := si1 & si3 & si13; + var template RAN_Information_RIM_Container res_cont; + res_cont := ts_RAN_Information_RIM_Container(ts_RIM_Application_Identity(RIM_APP_ID_NACC), + ts_RIM_Sequence_Number(2), + ts_RIM_PDU_Indications(false, RIM_PDU_TYPE_SING_REP), + ts_RIM_Protocol_Version_Number(1), + tsu_ApplContainer_or_ApplErrContainer_NACC(tsu_ApplContainer_NACC(dst, false, 3, si)), + omit); + + /* Initialize osmo-bsc emulation neighbor resolution CTRL port */ + f_ipa_ctrl_start_server(mp_ctrl_neigh_ip, mp_ctrl_neigh_port); + + /* Initialize NS/BSSGP side */ + f_init_bssgp(); + /* Initialize GPRS MS side */ + f_init_gprs_ms(); + ms := g_ms[0]; /* We only use first MS in this test */ + + /* Initialize the PCU interface abstraction */ + f_init_raw(testcasename(), info_ind); + + /* Establish BSSGP connection to the PCU */ + f_bssgp_establish(); + f_bssgp_client_llgmm_assign(TLLI_UNUSED, ms.tlli); + + /* Send PACKET RESOURCE REQUEST */ + pollctx := f_ms_establish_ul_tbf_2phase_access(ms, ts_RlcMacUlCtrl_PKT_RES_REQ(ms.tlli, ms_racap)); + /* Pkt Uplink Assignment above sets poll+rrbp requesting PACKET CONTROL ACK */ + f_ms_tx_ul_block(ms, ts_RLCMAC_CTRL_ACK(ms.tlli), pollctx.fn, nr := pollctx.tstrxbts); + + /* Start NACC from MS side */ + cell_chf_notif := ts_RlcMacUlCtrl_PKT_CELL_CHG_NOTIF(ms.ul_tbf.tfi, req_arfcn, req_bsic); + f_ms_tx_ul_block(ms, ts_RLC_UL_CTRL_ACK(cell_chf_notif), 0, nr := f_ms_tx_TsTrxBtsNum(ms)); + + /* osmo-pcu should now ask for resolution: */ + f_ipa_ctrl_wait_link_up(); + var charstring ctrl_var := "neighbor_resolve_cgi_ps_from_lac_ci." & + int2str(info_ind.lac) & "." & + int2str(info_ind.cell_id) & "." & + int2str(req_arfcn) & "." & + int2str(req_bsic); + f_ctrl_exp_get(IPA_CTRL, ctrl_var, "023-43-423-2-5"); + + /* RIM procedure: */ + RIM.receive(tr_RAN_INFORMATION_REQUEST(tr_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, dst_addr), + tr_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, src_addr), + tr_RAN_Information_Request_RIM_Container)); + RIM.send(ts_PDU_BSSGP_RAN_INFORMATION(ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, src_addr), + ts_RIM_Routing_Information(RIM_ADDR_GERAN_CELL_ID, dst_addr), + res_cont)); + + /* Announce SI back to MS, continue NACC procedure */ + f_handle_pkt_neighbor_cell_data(ms, si); + + /* Obtain a Downlink block and make sure it is a Pkt Cell Chg Continue */ + f_rx_rlcmac_dl_block(dl_block, sched_fn); + if (not match(dl_block, tr_RLCMAC_DL_CTRL(?, tr_RlcMacDlCtrl_PKT_CELL_CHG_CONTINUE))) { + setverdict(fail, "Rx unexpected DL block: ", dl_block); + } + + f_shutdown(__BFILE__, __LINE__, final := true); +} + control { execute( TC_pcuif_suspend() ); execute( TC_pcuif_suspend_active_tbf() ); @@ -3639,6 +3824,7 @@ execute( TC_multiplex_dl_gprs_egprs() ); execute( TC_pcuif_info_ind_subsequent() ); + execute( TC_nacc_outbound_success() ); } } diff --git a/pcu/gen_links.sh b/pcu/gen_links.sh index 2e581d9..98a9ff3 100755 --- a/pcu/gen_links.sh +++ b/pcu/gen_links.sh @@ -55,6 +55,9 @@ FILES+="BSSGP_Emulation.ttcnpp Osmocom_Gb_Types.ttcn " FILES+="LLC_Templates.ttcn L3_Templates.ttcn L3_Common.ttcn " FILES+="PCUIF_Types.ttcn PCUIF_CodecPort.ttcn RAW_NS.ttcnpp " +# IPA_Emulation + dependencies +FILES+="IPA_Types.ttcn IPA_Emulation.ttcnpp IPA_CodecPort.ttcn IPA_CodecPort_CtrlFunct.ttcn IPA_CodecPort_CtrlFunctDef.cc " +FILES+="Osmocom_CTRL_Types.ttcn Osmocom_CTRL_Functions.ttcn Osmocom_CTRL_Adapter.ttcn " gen_links $DIR $FILES ignore_pp_results diff --git a/pcu/osmo-pcu.cfg b/pcu/osmo-pcu.cfg index 12dc577..892dd79 100644 --- a/pcu/osmo-pcu.cfg +++ b/pcu/osmo-pcu.cfg @@ -30,3 +30,4 @@ alpha 0 gamma 0 pcu-socket /tmp/pcu_bts + neighbor resolution 127.0.0.1 diff --git a/pcu/regen_makefile.sh b/pcu/regen_makefile.sh index ca51452..8bb0598 100755 --- a/pcu/regen_makefile.sh +++ b/pcu/regen_makefile.sh @@ -1,7 +1,7 @@ #!/bin/sh -FILES="*.ttcn *.ttcnpp BSSGP_EncDec.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc UD_PT.cc RLCMAC_EncDec.cc LLC_EncDec.cc TELNETasp_PT.cc Native_FunctionDefs.cc StatsD_CodecPort_CtrlFunctdef.cc" +FILES="*.ttcn *.ttcnpp BSSGP_EncDec.cc IPL4asp_PT.cc IPL4asp_discovery.cc TCCConversion.cc TCCInterface.cc UD_PT.cc RLCMAC_EncDec.cc LLC_EncDec.cc TELNETasp_PT.cc IPA_CodecPort_CtrlFunctDef.cc Native_FunctionDefs.cc StatsD_CodecPort_CtrlFunctdef.cc" -export CPPFLAGS_TTCN3="-DBSSGP_EM_L3" +export CPPFLAGS_TTCN3="-DIPA_EMULATION_CTRL -DBSSGP_EM_L3" ../regen-makefile.sh PCU_Tests.ttcn $FILES -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/22387 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: osmo-ttcn3-hacks Gerrit-Branch: master Gerrit-Change-Id: I951db4af731e5a7c207f0f407dd78d166e2d3d26 Gerrit-Change-Number: 22387 Gerrit-PatchSet: 5 Gerrit-Owner: pespin <pespin at sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: laforge <laforge at osmocom.org> Gerrit-MessageType: merged -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210130/b67260d1/attachment.htm>