pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/34895?usp=email )
Change subject: epdg: Test Handover from Wifi back to LTE ...................................................................... epdg: Test Handover from Wifi back to LTE The Handover is informed to the EPDG by the PGW, who sends a DeleteBearerRequest when receiving an attach from the 3GPP network once the phone has jumped there. Related: OS#6046 Change-Id: I299faf28fa51dbc5d2de6c72a39a01eca67a5775 --- M epdg/EPDG_Tests.ttcn M library/GTPv2_Templates.ttcn 2 files changed, 83 insertions(+), 19 deletions(-) git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/95/34895/1 diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn index e7c8633..83b42fa 100644 --- a/epdg/EPDG_Tests.ttcn +++ b/epdg/EPDG_Tests.ttcn @@ -112,20 +112,27 @@ }; +type record BearerConfig { + /* EPS Bearer ID */ + uint4_t ebi optional, + /* TEI (Data) local side */ + OCT4 teid_local optional, + /* TEI (Data) remote side */ + OCT4 teid_remote optional +}; + type record EPDG_ConnHdlrPars { hexstring imsi, charstring apn, charstring ue_ip, - /* TEI (Data) local side */ - OCT4 teid, /* TEI (Control) local side */ - OCT4 teic, - /* TEI (Data) remote side */ - OCT4 teid_remote optional, + OCT4 teic_local, /* TEI (Control) remote side */ OCT4 teic_remote optional, + BearerConfig bearer optional, + AuthVector vec optional }; @@ -146,10 +153,13 @@ imsi := f_gen_imsi(imsi_suffix), apn := "internet", ue_ip := "192.168.123.50", - teid := '00000000'O, - teic := '00000000'O, - teid_remote := omit, + teic_local := '00000000'O, teic_remote := omit, + bearer := { + ebi := omit, + teid_local := omit, + teid_remote := omit + }, vec := f_gen_auth_vec_3g() }; return pars; @@ -391,31 +401,34 @@ /* Diameter SWx SAR + SAA. */ private altstep as_GTP2C_CreateSession_success() runs on EPDG_ConnHdlr { var PDU_GTPCv2 rx_msg; + var BearerContextIEs rx_bctx_ies; var template (value) FullyQualifiedTEID fteid_c_ie, fteid_u_ie; var template (value) PDN_AddressAllocation paa; - var uint4_t bid; var template (value) BearerContextIEs bctx_ies; [] GTP2.receive(tr_GTP2C_CreateSessionReq(g_pars.imsi)) -> value rx_msg { - /* TODO: parse TEIC and TEID and store it in g_pars.remote_tei{c,d} */ - bid := rx_msg.gtpcv2_pdu.createSessionRequest.bearerContextGrouped[0].bearerContextIEs.ePS_Bearer_ID.ePS_Bearer_ID_Value; + /* Parse TEIC and Bearer EBI and TEID and store it in g_pars */ + g_pars.teic_remote := rx_msg.gtpcv2_pdu.createSessionRequest.fullyQualifiedTEID[0].tEID_GRE_Key; + rx_bctx_ies := rx_msg.gtpcv2_pdu.createSessionRequest.bearerContextGrouped[0].bearerContextIEs; + g_pars.bearer.ebi := rx_bctx_ies.ePS_Bearer_ID.ePS_Bearer_ID_Value; + g_pars.bearer.teid_remote := rx_bctx_ies.fullyQualifiedTEID[0].tEID_GRE_Key; /* allocate + register TEID-C on local side */ - g_pars.teic := f_gtp2_allocate_teid(); - g_pars.teid := g_pars.teic; + g_pars.teic_local := f_gtp2_allocate_teid(); + g_pars.bearer.teid_local := g_pars.teic_local; /* Upon rx of CreateSession, emulate PGW asking the AAA server. */ f_S6b_AA_success(); - fteid_c_ie := ts_GTP2C_FTEID(FTEID_IF_S2b_ePDG_GTPC, g_pars.teic, 0, + fteid_c_ie := ts_GTP2C_FTEID(FTEID_IF_S2b_ePDG_GTPC, g_pars.teic_local, 0, f_inet_addr(mp_s2b_local_ip), omit); - fteid_u_ie := ts_GTP2C_FTEID(FTEID_IF_S2bU_ePDG_GTPU, g_pars.teid, 2, + fteid_u_ie := ts_GTP2C_FTEID(FTEID_IF_S2bU_ePDG_GTPU, g_pars.bearer.teid_local, 2, f_inet_addr(mp_s2b_local_ip), omit); paa := ts_GTP2C_PdnAddrAlloc_v4(f_inet_addr(g_pars.ue_ip)); - bctx_ies := ts_GTP2C_BcContextIE(bid := bid, + bctx_ies := ts_GTP2C_BcContextIE(ebi := g_pars.bearer.ebi, teid_list := { fteid_u_ie }, qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0), - charging_id := ts_GTP2C_ChargingID(g_pars.teic)); + charging_id := ts_GTP2C_ChargingID(g_pars.teic_local)); GTP2.send(ts_GTP2C_CreateSessionResp({ fteid_c_ie }, paa, { ts_GTP2C_BcGrouped(bctx_ies) } )); setverdict(pass); } @@ -428,6 +441,26 @@ as_GTP2C_CreateSession_success(); } +/* Expect DeleteBearerResponse */ +private altstep as_GTP2C_DeleteBearer_success() runs on EPDG_ConnHdlr { + var PDU_GTPCv2 rx_msg; + var template (value) FullyQualifiedTEID fteid_c_ie, fteid_u_ie; + var template (value) PDN_AddressAllocation paa; + + [] GTP2.receive(tr_GTP2C_DeleteBearerResp(g_pars.teic_local)) -> value rx_msg { + setverdict(pass); + } + [] GTP2.receive(PDU_GTPCv2:?) -> value rx_msg { + Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail, log2str("Unexpected GTP2C msg rx: ", rx_msg)); + } +} +private function f_GTP2C_DeleteBearer_success() runs on EPDG_ConnHdlr { + var integer proc_trans_id := 3; + /* f_gtp2_register_udmsg('63'O); TODO: is this needed? */ + GTP2.send(ts_GTP2C_DeleteBearerReq(g_pars.teic_remote, proc_trans_id, g_pars.bearer.ebi, Access_changed_from_Non_3GPP_to_3GPP)); + as_GTP2C_DeleteBearer_success(); +} + /* GSUP AuthInfo Req + Resp, triggers SWx MAR + MAA. */ private function f_GSUP_AI_success() runs on EPDG_ConnHdlr { var GSUP_PDU rx_gsup; @@ -495,8 +528,25 @@ setverdict(pass); } +private function f_TC_ho_wifi_to_lte(charstring id) runs on EPDG_ConnHdlr { + f_TC_authinfo_normal(id); + /* Whenever UE goes back to 3GPP, PGW will notify us with a Delete Brearer Request + * cause="Access changed from non-3gpp to 3gpp" */ + f_GTP2C_DeleteBearer_success(); +} + +testcase TC_ho_wifi_to_lte() runs on MTC_CT { + var EPDG_ConnHdlrPars pars := f_init_pars(); + var EPDG_ConnHdlr vc_conn; + f_init(); + vc_conn := f_start_handler(refers(f_TC_ho_wifi_to_lte), pars); + vc_conn.done; + setverdict(pass); +} + control { execute ( TC_authinfo_normal() ); + execute ( TC_ho_wifi_to_lte() ); } } diff --git a/library/GTPv2_Templates.ttcn b/library/GTPv2_Templates.ttcn index e1e71f0..6ea06a2 100644 --- a/library/GTPv2_Templates.ttcn +++ b/library/GTPv2_Templates.ttcn @@ -506,11 +506,11 @@ /* 8.28 */ template (value) BearerContextIEs -ts_GTP2C_BcContextIE(template (value) uint4_t bid, +ts_GTP2C_BcContextIE(template (value) uint4_t ebi, template (omit) FullyQualifiedTEID_List teid_list := omit, template (omit) Bearer_QoS qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0), template (omit) ChargingID charging_id := omit) := { - ePS_Bearer_ID := ts_GTP2C_EpsBearerId(bid), + ePS_Bearer_ID := ts_GTP2C_EpsBearerId(ebi), cause := ts_GTP2C_Cause(Request_accepted, '0'B), ePS_Bearer_TFT := omit, fullyQualifiedTEID := teid_list, -- To view, visit https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/34895?usp=email 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: I299faf28fa51dbc5d2de6c72a39a01eca67a5775 Gerrit-Change-Number: 34895 Gerrit-PatchSet: 1 Gerrit-Owner: pespin <pes...@sysmocom.de> Gerrit-MessageType: newchange