neels has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/27659 )


Change subject: bsc: add TC_emerg_call_and_lcs_loc_req
......................................................................

bsc: add TC_emerg_call_and_lcs_loc_req

An emergency call often comes with a Location Request. Make sure
osmo-bsc handles it well.

Related: SYS#5916
Change-Id: I95037374c45943cb14401bc48f16a39c2fcbe1f5
---
M bsc/BSC_Tests.ttcn
M library/BSSMAP_Templates.ttcn
2 files changed, 104 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks 
refs/changes/59/27659/1

diff --git a/bsc/BSC_Tests.ttcn b/bsc/BSC_Tests.ttcn
index 4683dc7..81615b0 100644
--- a/bsc/BSC_Tests.ttcn
+++ b/bsc/BSC_Tests.ttcn
@@ -10093,6 +10093,105 @@
        f_shutdown_helper();
 }

+private function f_tc_emerg_call_and_lcs_loc_req(charstring id) runs on 
MSC_ConnHdlr
+{
+       /* Make sure the CHAN RQD indicates an emergency call (0b101xxxxx). The 
difference is that osmo-bsc directly
+        * assigns a TCH lchan and establishing voice for the emergency call 
will use Mode Modify, not reassignment to
+        * another lchan. */
+       g_pars.ra := 'b7'O;
+       f_assignment_emerg_setup();
+
+       var PDU_BSSAP emerg_setup_data_ind_bssap;
+       timer T := 3.0;
+       T.start;
+       alt {
+       [] BSSAP.receive(tr_BSSAP_DTAP) -> value emerg_setup_data_ind_bssap {
+               var PDU_ML3_MS_NW verify_emerg_setup;
+               verify_emerg_setup := 
dec_PDU_ML3_MS_NW(emerg_setup_data_ind_bssap.pdu.dtap);
+               if (not isbound(verify_emerg_setup.msgs.cc.emergencySetup)) {
+                       setverdict(fail, "no emergency setup");
+               }
+               }
+       [] BSSAP.receive {
+               setverdict(fail, "unexpected BSSAP message!");
+               }
+       [] T.timeout {
+               setverdict(fail, "timeout waiting for EMERGENCY SETUP!");
+               }
+       }
+
+       /* Here would usually be a CC Call Proceeding from the MSC, but what 
does the BSC care about DTAP. */
+
+       /* Do a Location Request in-between the CC call setup */
+       f_bssap_le_register_imsi(g_pars.imsi, omit);
+       
BSSAP.send(valueof(ts_BSSMAP_Perform_Location_Request(ts_BSSMAP_Imsi(g_pars.imsi),
+                                       ts_CellId_CGI('262'H, '42'H, 23, 42))));
+       
BSSAP_LE.receive(tr_BSSMAP_LE_PerfLocReq(BSSMAP_LE_LOC_INFO_CURRENT_GEOGRAPHIC_LOC,
 ?, ?));
+       /* SMLC got the TA from the BSC, now responds with geo information 
data. */
+       BSSAP_LE.send(ts_BSSMAP_LE_PerfLocResp(gad_ell_point_unc_circle, omit));
+       BSSAP_LE.receive(BSSAP_LE_Conn_Prim:CONN_PRIM_DISC_IND);
+       
BSSAP.receive(tr_BSSMAP_Perform_Location_Response(tr_BSSMAP_IE_LocationEstimate(gad_ell_point_unc_circle)));
+
+       /* Go on with voice call assignment */
+       var template PDU_BSSAP exp_compl := f_gen_exp_compl();
+       var PDU_BSSAP ass_cmd := f_gen_ass_req();
+
+       /* Below speechOrDataIndicator and codecList are copied from an 
emergency call captured during tests.
+        * They seem a bit weird (AMR-WB, and the order differ between 
speechId_DataIndicator and the codecList), but
+        * seems a good idea to see how osmo-bsc reacts to this. */
+       ass_cmd.pdu.bssmap.assignmentRequest.channelType := {
+               elementIdentifier := '0B'O,     /* overwritten */
+               lengthIndicator := 0,           /* overwritten */
+               speechOrDataIndicator := '0001'B,       /* speech */
+               spare1_4 := '0000'B,
+               channelRateAndType := ChRate_TCHForH_Fpref,
+               speechId_DataIndicator := 'c2918105'O
+       };
+       ass_cmd.pdu.bssmap.assignmentRequest.codecList := 
valueof(ts_BSSMAP_IE_CodecList({
+               ts_CodecHR, ts_CodecAMR_WB, ts_CodecEFR, ts_CodecFR}));
+
+       f_rslem_dchan_queue_enable();
+
+       var ExpectCriteria mgcpcrit := {
+               connid := omit,
+               endpoint := omit,
+               transid := omit
+       };
+       f_create_mgcp_expect(mgcpcrit);
+
+       BSSAP.send(ass_cmd);
+
+       var AssignmentState st := valueof(ts_AssignmentStateInit);
+       st.voice_call := true;
+       st.is_assignment := false;
+       alt {
+       [] as_modify(st);
+       [] as_Media();
+       [st.modify_done] BSSAP.receive(exp_compl) {
+               setverdict(pass);
+               }
+       }
+
+       /* Voice call carries on ... */
+       f_sleep(2.0);
+
+       setverdict(pass);
+       f_perform_clear();
+}
+
+testcase TC_emerg_call_and_lcs_loc_req() runs on test_CT {
+       var MSC_ConnHdlr vc_conn;
+       var TestHdlrParams pars := f_gen_test_hdlr_pars();
+
+       f_init(1, true);
+       f_sleep(1.0);
+       f_vty_allow_emerg_msc(true);
+       f_vty_allow_emerg_bts(true, 0);
+       vc_conn := f_start_handler(refers(f_tc_emerg_call_and_lcs_loc_req), 
pars);
+       vc_conn.done;
+       f_shutdown_helper();
+}
+
 /* Attempt Complete Layer 3 without any MSC available (OS#4832) */
 private function f_tc_no_msc(charstring id) runs on MSC_ConnHdlr {
        f_MscConnHdlr_init(g_pars.media_nr, "127.0.0.2", "127.0.0.3", FR_AMR);
@@ -11466,6 +11565,7 @@
                execute( TC_lcs_loc_req_for_idle_ms_no_pag_resp() );
                execute( TC_cm_service_during_lcs_loc_req() );
                execute( TC_ho_during_lcs_loc_req() );
+               execute( TC_emerg_call_and_lcs_loc_req() );
        }

        execute( TC_no_msc() );
diff --git a/library/BSSMAP_Templates.ttcn b/library/BSSMAP_Templates.ttcn
index 376cea6..87099b6 100644
--- a/library/BSSMAP_Templates.ttcn
+++ b/library/BSSMAP_Templates.ttcn
@@ -599,6 +599,10 @@
        s0_7 :=  '00111111'B,
        s8_15 := '00000111'B    /* S6 - S7 and S11 – S15 are reserved and coded 
with zeroes */
 }
+template (value) BSSMAP_FIELD_CodecElement ts_CodecAMR_WB modifies 
ts_CodecBase := {
+       codecType := FR_AMR_WB,
+       s0_7 :=  '00000001'B
+}
 template BSSMAP_IE_SpeechCodecList ts_BSSMAP_IE_CodecList(template 
BSSMAP_FIELD_CodecElements elem) := {
        elementIdentifier := '7D'O,
        lengthIndicator := 0, /* overwritten */

--
To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/27659
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: I95037374c45943cb14401bc48f16a39c2fcbe1f5
Gerrit-Change-Number: 27659
Gerrit-PatchSet: 1
Gerrit-Owner: neels <[email protected]>
Gerrit-MessageType: newchange

Reply via email to