diff --git a/gbproxy/GBProxy_Tests.ttcn b/gbproxy/GBProxy_Tests.ttcn index bf777cc87..63427dfc3 100644 --- a/gbproxy/GBProxy_Tests.ttcn +++ b/gbproxy/GBProxy_Tests.ttcn @@ -861,6 +861,31 @@ testcase TC_resume() runs on test_CT f_cleanup(); } +private function f_TC_flush_ll(charstring id) runs on BSSGP_ConnHdlr { + var BssgpBvci bvci := g_pars.pcu[0].cfg.bvc[0].bvci; + var integer i; + for (i := 0; i < 10; i := i+1) { + /* TODO: Test ACK, correctly set old and new bvci and nsei + * Actually move the tlli to a different BVC and check that the tlli is now moved to the new BVC (e.g. through paging) */ + var template (value) PDU_BSSGP pdu_tx := ts_BSSGP_FLUSH_LL(g_pars.tlli, bvci, omit, omit); + /* we cannot use pdu_tx as there are some subtle differences in the length field :/ */ + var template (present) PDU_BSSGP pdu_rx := tr_BSSGP_FLUSH_LL(g_pars.tlli, bvci, omit, omit); + + f_sgsn2pcu(pdu_tx, pdu_rx); + } + setverdict(pass); +} +testcase TC_flush_ll() runs on test_CT +{ + var BSSGP_ConnHdlr vc_conn; + f_init(); + + vc_conn := f_start_handler(refers(f_TC_flush_ll), testcasename(), g_pcu, g_sgsn, 6); + vc_conn.done; + /* TODO: start multiple handlers (UEs) on various cells on same and other NSEs */ + + f_cleanup(); +} control { execute( TC_BVC_bringup() ); @@ -871,6 +896,7 @@ control { execute( TC_radio_status() ); execute( TC_suspend() ); execute( TC_resume() ); + execute( TC_flush_ll() ); } diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn index da17e1a1b..27a3cab74 100644 --- a/library/Osmocom_Gb_Types.ttcn +++ b/library/Osmocom_Gb_Types.ttcn @@ -777,6 +777,24 @@ octetstring sdu) := { unstructured_value := f_oct_or_wc(bvci, 2) } + template (value) NSEI_BSSGP ts_BSSGP_NSEI(template (value) Nsei nsei) := { + iEI:= '3E'O, + ext := '1'B, + lengthIndicator := { + length1 := 2 + }, + nSEI := f_oct_or_wc(nsei, 2) + } + + template NSEI_BSSGP tr_BSSGP_NSEI(template Nsei nsei) := { + iEI:= '3E'O, + ext := '1'B, + lengthIndicator := { + length1 := 2 + }, + nSEI := f_oct_or_wc(nsei, 2) + } + template (value) TLLI_BSSGP ts_BSSGP_TLLI(template (value) GprsTlli tlli) := { iEI := '1F'O, ext := '1'B, @@ -1683,6 +1701,48 @@ octetstring sdu) := { } } + /* 10.4.1 */ + template (value) PDU_BSSGP ts_BSSGP_FLUSH_LL(GprsTlli tlli, template (value) BssgpBvci bvci_old, + template (omit) BssgpBvci bvci_new, + template (omit) Nsei nsei) := { + pDU_BSSGP_FLUSH_LL := { + bssgpPduType := '2B'O, + tLLI := ts_BSSGP_TLLI(tlli), + bVCI_old := t_BSSGP_BVCI(bvci_old), + bVCI_new := omit, + nSEI := omit + } + } + template PDU_BSSGP tr_BSSGP_FLUSH_LL(template GprsTlli tlli, template BssgpBvci bvci_old, + template (omit) BssgpBvci bvci_new, + template (omit) Nsei nsei) := { + pDU_BSSGP_FLUSH_LL := { + bssgpPduType := '2B'O, + tLLI := tr_BSSGP_TLLI(tlli), + bVCI_old := t_BSSGP_BVCI(bvci_old), + bVCI_new := t_BSSGP_BVCI(bvci_new), + nSEI := ? + } + } + + /* 10.4.2 */ +/* template (value) PDU_BSSGP ts_BSSGP_FLUSH_LL_ACK(GprsTlli tlli, RoutingAreaIdentification ra_id) + := { + pDU_BSSGP_FLUSH_LL_ACK := { + bssgpPduType := '0F'O, + tLLI := ts_BSSGP_TLLI(tlli), + routeing_Area := ts_BSSGP_RA_ID(ra_id) + } + } + template PDU_BSSGP tr_BSSGP_FLUSH_LL_ACK(template GprsTlli tlli, + RoutingAreaIdentification ra_id) := { + pDU_BSSGP_FLUSH_LL_ACK := { + bssgpPduType := '0F'O, + tLLI := tr_BSSGP_TLLI(tlli), + routeing_Area := ts_BSSGP_RA_ID(ra_id) + } + } +*/ /* 10.2.3 */ template (value) PDU_BSSGP ts_BSSGP_RA_CAP(GprsTlli tlli, template (omit) MSRadioAccessCapabilityV_BSSGP racap := omit) := {