pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/35884?usp=email )
Change subject: epdg: Introduce test TC_ho_lte_to_wifi ......................................................................
epdg: Introduce test TC_ho_lte_to_wifi
This test emulates a UE doing handover to ePDG, when it may create extra dedicated bearers.
Change-Id: Ibdfeda1fa5d7016b1952d64b306cd501cb33f61b --- M epdg/EPDG_Tests.ttcn M library/GTPv2_Templates.ttcn 2 files changed, 137 insertions(+), 21 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/84/35884/1
diff --git a/epdg/EPDG_Tests.ttcn b/epdg/EPDG_Tests.ttcn index e5cdafd..14bb060 100644 --- a/epdg/EPDG_Tests.ttcn +++ b/epdg/EPDG_Tests.ttcn @@ -488,6 +488,47 @@ } }
+/* Expect CreateBearerResponse */ +private altstep as_GTP2C_CreateBearer_success() runs on EPDG_ConnHdlr { + var PDU_GTPCv2 rx_msg; + + [] GTP2.receive(tr_GTP2C_CreateBearerResp(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_CreateBearer_success(uint4_t dedicated_bearer_id := 6) runs on EPDG_ConnHdlr { + + var template (value) FullyQualifiedTEID fteid_u_ie := ts_GTP2C_FTEID(FTEID_IF_S2bU_ePDG_GTPU, g_pars.bearer.teid_local, dedicated_bearer_id, + f_inet_addr(mp_s2b_local_ip), omit); + var template (value) FullyQualifiedTEID_List teid_list := { fteid_u_ie }; + + var template (value) FullyQualifiedPDN_ConnectionSetID pgw_fq_csid := ts_GTP2C_FQCSID_IPv4(f_inet_addr(mp_s2b_local_ip), int2oct(dedicated_bearer_id, 2)); + var template (value) FullyQualifiedPDN_ConnectionSetID_List csid_list := { pgw_fq_csid }; + + var template (value) BearerContextGrouped_List bcg_list := { + ts_GTP2C_BcGrouped({ + ePS_Bearer_ID := ts_GTP2C_EpsBearerId(dedicated_bearer_id), + cause := omit, + ePS_Bearer_TFT := omit, + fullyQualifiedTEID := teid_list, + bearerLevel_QoS := ts_GTP2C_BearerQos('09'O, 0,0,0,0), + chargingID := ts_GTP2C_ChargingID(f_rnd_octstring(4)), + bearerFlags := omit, + transactionIdentifier := omit, + protocolConfigOptions := omit, + rAN_NASCause := omit, + additionalProtocolConfigOptions := omit, + extendedProtocolConfigOptions := omit + }) + }; + GTP2.send(ts_GTP2C_CreateBearerReq(g_pars.teic_remote, omit, g_pars.bearer.ebi, + dedicated_bearer_id, bcg_list, csid_list)); + as_GTP2C_CreateBearer_success(); +} + /* Expect DeleteBearerResponse */ private altstep as_GTP2C_DeleteBearer_success() runs on EPDG_ConnHdlr { var PDU_GTPCv2 rx_msg; @@ -618,6 +659,23 @@ setverdict(pass); }
+private function f_TC_ho_lte_to_wifi(charstring id) runs on EPDG_ConnHdlr { + f_initial_attach(); + /* Whenever UE comes from 3GPP, PGW may activate a dedicated S2b bearer + * and notify ePDG with a Create Bearer Request */ + f_GTP2C_CreateBearer_success(); + f_GSUP_PurgeMS_success(); +} + +testcase TC_ho_lte_to_wifi() 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_lte_to_wifi), pars); + vc_conn.done; + setverdict(pass); +} + private function f_TC_ho_wifi_to_lte(charstring id) runs on EPDG_ConnHdlr { f_initial_attach(); /* Whenever UE goes back to 3GPP, PGW will notify ePDG with a Delete Bearer Request @@ -636,6 +694,7 @@
control { execute ( TC_authinfo_normal() ); + execute ( TC_ho_lte_to_wifi() ); execute ( TC_ho_wifi_to_lte() ); }
diff --git a/library/GTPv2_Templates.ttcn b/library/GTPv2_Templates.ttcn index afe0138..9f242ee 100644 --- a/library/GTPv2_Templates.ttcn +++ b/library/GTPv2_Templates.ttcn @@ -671,6 +671,13 @@ pTI_Value := pti, additionalOctets := omit } +private function f_ts_GTP2C_ProcTransId_omit(template (omit) integer pti) +return template (omit) ProcedureTransactionID { + if (istemplatekind(pti, "omit")) { + return omit; + } + return ts_GTP2C_ProcTransId(pti); +} template (present) ProcedureTransactionID tr_GTP2C_ProcTransId(template (present) integer pti) := { elementIdentifier := '64'O, @@ -725,7 +732,35 @@ additionalOctets := * }
- +/* 8.62 Fully qualified PDN Connection Set Identifier (FQ-CSID) */ +template (value) NodeID ts_GTP2C_FQCSID_NodeID_IPv4(template (value) OCT4 addr) := { + globalUnicastIPv4 := addr +} +template (value) FullyQualifiedPDN_ConnectionSetID +ts_GTP2C_FQCSID(template (value) integer nRofCSIDs, + template (value) integer nodeIDType, + template (value) NodeID nodeID, + template (value) PDN_CSID_List pDN_CSID_List, + template (value) uint4_t instance := 0) := { + elementIdentifier := '84'O, + lengthIndicator := 0, /* overwritten */ + instance := int2bit(valueof(instance), 4), + spare := '0000'B, + nRofCSIDs := nRofCSIDs, + nodeIDType := nodeIDType, + nodeID := nodeID, + pDN_CSID_List := pDN_CSID_List, + additionalOctets := omit +} +template (value) FullyQualifiedPDN_ConnectionSetID +ts_GTP2C_FQCSID_IPv4(template (value) OCT4 addr, + template (value) OCT2 csid, + template (value) uint4_t instance := 0) := +ts_GTP2C_FQCSID(nRofCSIDs := 1, + nodeIDType := 0, + nodeID := ts_GTP2C_FQCSID_NodeID_IPv4(addr), + pDN_CSID_List := {csid}, + instance := instance);
template (value) PDU_GTPCv2 ts_PDU_GTP2C(template (omit) OCT4 teid, template (value) OCT3 seq, @@ -1068,33 +1103,19 @@
template (value) PDU_GTPCv2 ts_GTP2C_CreateBearerReq(template (value) OCT4 d_teid, - template (value) integer proc_trans_id, + template (omit) integer proc_trans_id, template (value) uint4_t linked_id, template (value) uint4_t bearer_id, - template (omit) FullyQualifiedTEID_List teid_list, + template (value) BearerContextGrouped_List bearer_ctx_list, + template (omit) FullyQualifiedPDN_ConnectionSetID_List csid := omit, template (value) Bearer_QoS qos := ts_GTP2C_BearerQos('09'O, 0,0,0,0)) := ts_PDU_GTP2C(d_teid, '000000'O, '5F'O, { createBearerRequest := { - procedureTransactionID := ts_GTP2C_ProcTransId(proc_trans_id), + procedureTransactionID := f_ts_GTP2C_ProcTransId_omit(proc_trans_id), linkedEPS_BearerID := ts_GTP2C_EpsBearerId(linked_id), protocolConfigOptions := omit, - bearerContextGrouped := { - ts_GTP2C_BcGrouped({ - ePS_Bearer_ID := ts_GTP2C_EpsBearerId(bearer_id), - cause := omit, - ePS_Bearer_TFT := omit, - fullyQualifiedTEID := teid_list, - bearerLevel_QoS := qos, - chargingID := omit, - bearerFlags := omit, - transactionIdentifier := omit, - protocolConfigOptions := omit, - rAN_NASCause := omit, - additionalProtocolConfigOptions := omit, - extendedProtocolConfigOptions := omit - }) - }, - csid := omit, + bearerContextGrouped := bearer_ctx_list, + csid := csid, changeReportingAction := omit, cSG_InformationReportingAction := omit, heNBInformationReporting := omit, @@ -1105,6 +1126,30 @@ nBIFOMContainer := omit, privateExtension := omit }}); +template (present) PDU_GTPCv2 +tr_GTP2C_CreateBearerResp(template (present) OCT4 d_teid, + template (present) OCT3 seq := ?, + template (present) GTP2C_Cause cause := ? + ) := +tr_PDU_GTP2C(d_teid, seq, { + createBearerResponse := { + cause := tr_GTP2C_Cause(cause), + bearerContextGrouped := *, + recovery := *, + csid := *, + protocolConfigOptions := *, + uE_TimeZone := *, + uLI := *, + trustedWLANAccessNetworkIdentifier := *, + overloadControlInformationGrouped := *, + presenceReportingAreaInformation := *, + iP_Addr := *, + wLANLocationTimestamp := *, + portNumber := *, + nBIFOMContainer := *, + extendedProtocolConfigOptions := *, + privateExtension:= * + }});
template (present) PDU_GTPCv2 tr_GTP2C_ModifyBearerReq(template (present) OCT4 d_teid := ?,