pespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/41747?usp=email )
Change subject: 5gc: Test UE Triggered Service Request ......................................................................
5gc: Test UE Triggered Service Request
Change-Id: I65cf7844d11be55d9d5c8e31fd87a3c72e6a607b --- M 5gc/C5G_Tests.ttcn M 5gc/ConnHdlr.ttcn M 5gc/expected-results.xml M library/NGAP_Functions.ttcn M library/NG_NAS_Osmo_Templates.ttcn M library/NG_NAS_Osmo_Types.ttcn 6 files changed, 345 insertions(+), 13 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/47/41747/1
diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn index 699d998..4076a09 100644 --- a/5gc/C5G_Tests.ttcn +++ b/5gc/C5G_Tests.ttcn @@ -413,6 +413,93 @@ } }
+/* 3GPP TS 23.502 4.2.3.2 UE Triggered Service Request. + * UE signals the active session as active, and it has UL data for it */ +private function f_TC_ue_service_request_cm_idle_ul_data() runs on ConnHdlr { + var PDU_SessionStatus pdu_session_status; + + f_register(); + f_pdu_sess_establish(false); + pdu_session_status := f_PDU_SessionStatus(); + f_service_request_cm_idle(ul_data_status := pdu_session_status, + pdu_sess_status := pdu_session_status); + + as_ngap_handle_PDUSessionResourceSetupReq(); + + NGAP.receive(cr_NG_SERVICE_ACCEPT(p_PDU_SessionStatus := cr_PDU_SessionStatus('00000010'B, '00000000'B))); + + f_deregister(); +} +testcase TC_ue_service_request_cm_idle_ul_data() runs on MTC_CT { + f_init(); + f_ngap_setup(0); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0); + var ConnHdlr vc_conn; + vc_conn := f_start_handler_with_pars(refers(f_TC_ue_service_request_cm_idle_ul_data), pars); + vc_conn.done; +} + +/* 3GPP TS 23.502 4.2.3.2 UE Triggered Service Request. + * UE signals that the active session is now inactive. AMF sends a PFCP Session Delete to SMF. */ +private function f_TC_ue_service_request_cm_idle_inact_sess() runs on ConnHdlr { + f_register(); + f_pdu_sess_establish(false); + f_service_request_cm_idle(pdu_sess_status := cs_PDU_SessionStatus('00000000'B, '00000000'B)); + NGAP.receive(cr_NG_SERVICE_ACCEPT(p_PDU_SessionStatus := cr_PDU_SessionStatus('00000000'B, '00000000'B))); + f_deregister(); +} +testcase TC_ue_service_request_cm_idle_inact_sess() runs on MTC_CT { + f_init(); + f_ngap_setup(0); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0); + var ConnHdlr vc_conn; + vc_conn := f_start_handler_with_pars(refers(f_TC_ue_service_request_cm_idle_inact_sess), pars); + vc_conn.done; +} + +/* 3GPP TS 23.502 4.2.3.2 UE Triggered Service Request. + * UE signals that a session unknown to netowrk is active: */ +private function f_TC_ue_service_request_cm_idle_unknown_sess_active() runs on ConnHdlr { + f_register(); + /* TODO: calculate bitmask based on PDU Session Id obtained during PDU Session Establish procedure */ + f_service_request_cm_idle(pdu_sess_status := cs_PDU_SessionStatus('00000010'B, '00000000'B)); + NGAP.receive(cr_NG_SERVICE_ACCEPT(p_PDU_SessionStatus := cr_PDU_SessionStatus('00000000'B, '00000000'B))); + f_deregister(); +} +testcase TC_ue_service_request_cm_idle_unknown_sess_active() runs on MTC_CT { + f_init(); + f_ngap_setup(0); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0); + var ConnHdlr vc_conn; + vc_conn := f_start_handler_with_pars(refers(f_TC_ue_service_request_cm_idle_unknown_sess_active), pars); + vc_conn.done; +} + +/* 3GPP TS 23.502 4.2.3.2 UE Triggered Service Request. While in CM-CONNECTED state. */ +private function f_TC_ue_service_request_cm_connected() runs on ConnHdlr { + var PDU_SessionStatus pdu_session_status; + + f_register(); + f_pdu_sess_establish(false); + pdu_session_status := f_PDU_SessionStatus(); + f_service_request_cm_connected(ul_data_status := cs_PDU_SessionStatus('00000000'B, '00000000'B), + pdu_sess_status := pdu_session_status); + NGAP.receive(cr_NG_SERVICE_ACCEPT(p_PDU_SessionStatus := cr_PDU_SessionStatus('00000010'B, '00000000'B))); + f_deregister(); +} +testcase TC_ue_service_request_cm_connected() runs on MTC_CT { + f_init(); + f_ngap_setup(0); + + var ConnHdlrPars pars := f_init_pars(ue_idx := 0); + var ConnHdlr vc_conn; + vc_conn := f_start_handler_with_pars(refers(f_TC_ue_service_request_cm_connected), pars); + vc_conn.done; +} +
control { execute( TC_ng_setup() ); @@ -429,13 +516,17 @@ } execute( TC_ng_register_ping4() ); execute( TC_ng_register_ping4_256() ); + + execute( TC_ue_service_request_cm_idle_ul_data() ); + execute( TC_ue_service_request_cm_idle_inact_sess() ); + execute( TC_ue_service_request_cm_idle_unknown_sess_active() ); + execute( TC_ue_service_request_cm_connected() ); }
/* TODO: * - 3GPP TS 23.502 4.2.2.2.3 Registration with AMF re-allocation * - 3GPP TS 23.502 4.2.2.2.4 Registration with Onboarding SNPN * - 3GPP TS 23.502 4.2.2.3.3 Network-initiated Deregistration - * - 3GPP TS 23.502 4.2.3.2 UE Triggered Service Request * - 3GPP TS 23.502 4.2.3.3 Network Triggered Service Request * - 3GPP TS 23.502 4.2.4.3 UE Configuration Update procedure for transparent UE Policy delivery * - 3GPP TS 23.502 4.2.5.2 UE Reachability Notification Request procedure diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn index 3e51545..840a9df 100644 --- a/5gc/ConnHdlr.ttcn +++ b/5gc/ConnHdlr.ttcn @@ -182,6 +182,22 @@ return g_pars.ue_pars.pti; }
+/* 3GPP TS 24.501 9.11.3.44 PDU session status */ +function f_PDU_SessionStatus() runs on ConnHdlr return PDU_SessionStatus +{ + var template (value) PDU_SessionStatus st; + var BIT1 sess_id1_active; + + if (ispresent(g_pars.ue_pars.sess_pars.cn_gtpu_teid)) { + sess_id1_active := '1'B; + } else { + sess_id1_active := '0'B; + } + + st := cs_PDU_SessionStatus('000000'B & sess_id1_active & '0'B, '00000000'B); + return valueof(st); +} + /* 3GPP TS 24.501 5.4.1.3.2, 3GPP TS 33.501 6.1.3.2 */ private altstep as_ngap_handle_auth(boolean allow_resync := true) runs on ConnHdlr { var NG_NAS_DL_Message_Type rx_nas; @@ -281,18 +297,13 @@ } }
-/* Handle a PDUSessionResourceSetupRequestTransfer contained inside NGAP InitialContextSetupRequest and return a Result for InitialContextSetupResponse */ -private function f_pdu_handle_session_resource_setup_item(PDUSessionResourceSetupItemCxtReq req) runs on ConnHdlr return PDUSessionResourceSetupItemCxtRes -{ - var PDUSessionResourceSetupItemCxtRes resp; - var octetstring setup_trans_enc; - var NGAP_IEs.PDUSessionResourceSetupRequestTransfer setup_req_transf; - var NGAP_IEs.PDUSessionResourceSetupResponseTransfer setup_resp_transf; +/* Handle a PDUSessionResourceSetupRequestTransfer and return a Result */ +private function f_pdu_handle_PDUSessionResourceSetupRequestTransfer(NGAP_IEs.PDUSessionResourceSetupRequestTransfer setup_req_transf) +runs on ConnHdlr return NGAP_IEs.PDUSessionResourceSetupResponseTransfer { var template (value) UPTransportLayerInformation utla; var template (value) QosFlowPerTNLInformation qos; + var NGAP_IEs.PDUSessionResourceSetupResponseTransfer setup_resp_transf;
- /* Parse PDUSessionResourceSetupRequestTransfer contained inside InitialContextSetupRequest's PDUSessionResourceSetup Item: */ - setup_req_transf := dec_NGAP_PDUSessionResourceSetupRequestTransfer(req.pDUSessionResourceSetupRequestTransfer); for (var integer i := 0; i < lengthof(setup_req_transf.protocolIEs); i := i + 1) { if (setup_req_transf.protocolIEs[i].id == id_UL_NGU_UP_TNLInformation) { var UPTransportLayerInformation utli := setup_req_transf.protocolIEs[i].value_.uPTransportLayerInformation; @@ -307,17 +318,33 @@ p_gtp_teid := g_pars.ue_pars.sess_pars.ran_gtpu_teid)); qos := m_qosFlowPerTNLInformation(utla, { m_associatedQosFlowItem(1) }); setup_resp_transf := valueof(m_pDUSessionResourceSetupResponseTransfer(qos)); + + return setup_resp_transf; +} + +/* Handle a PDUSessionResourceSetupRequestTransfer contained inside NGAP InitialContextSetupRequest and return a Result for InitialContextSetupResponse */ +private function f_pdu_handle_session_resource_setup_item_ctx(PDUSessionResourceSetupItemCxtReq req) runs on ConnHdlr return PDUSessionResourceSetupItemCxtRes +{ + var PDUSessionResourceSetupItemCxtRes resp; + var octetstring setup_trans_enc; + var NGAP_IEs.PDUSessionResourceSetupRequestTransfer setup_req_transf; + var NGAP_IEs.PDUSessionResourceSetupResponseTransfer setup_resp_transf; + + /* Parse PDUSessionResourceSetupRequestTransfer contained inside InitialContextSetupRequest's PDUSessionResourceSetup Item: */ + setup_req_transf := dec_NGAP_PDUSessionResourceSetupRequestTransfer(req.pDUSessionResourceSetupRequestTransfer); + setup_resp_transf := f_pdu_handle_PDUSessionResourceSetupRequestTransfer(setup_req_transf); + setup_trans_enc := enc_NGAP_PDUSessionResourceSetupResponseTransfer(setup_resp_transf) resp := valueof(m_pDUSessionResourceSetupItemCxtRes(req.pDUSessionID, setup_trans_enc)); return resp; }
-private function f_pdu_handle_session_resource_setup_list(PDUSessionResourceSetupListCxtReq li_req) runs on ConnHdlr return PDUSessionResourceSetupListCxtRes +private function f_pdu_handle_session_resource_setup_list_ctx(PDUSessionResourceSetupListCxtReq li_req) runs on ConnHdlr return PDUSessionResourceSetupListCxtRes { var PDUSessionResourceSetupListCxtRes li_resp; for (var integer i := 0; i < lengthof(li_req); i := i + 1) { var PDUSessionResourceSetupItemCxtRes it_resp; - it_resp := f_pdu_handle_session_resource_setup_item(li_req[i]); + it_resp := f_pdu_handle_session_resource_setup_item_ctx(li_req[i]); if (i == 0) { /* min 1 item in list doesn't allow previously allocating an empty list */ li_resp := { it_resp }; } else { @@ -347,7 +374,7 @@ continue; } var PDUSessionResourceSetupListCxtReq li := ctx_setup_req.protocolIEs[i].value_.pDUSessionResourceSetupListCxtReq; - resources := f_pdu_handle_session_resource_setup_list(li); + resources := f_pdu_handle_session_resource_setup_list_ctx(li); } NGAP.send(m_ngap_succMsg(m_n2_InitialContextSetupResponse(g_pars.ue_pars.amf_id, g_pars.ue_pars.ran_id, @@ -355,6 +382,64 @@ } }
+/* Handle a PDUSessionResourceSetupRequestTransfer contained inside NGAP InitialContextSetupRequest and return a Result for InitialContextSetupResponse */ +private function f_pdu_handle_session_resource_setup_item_su(PDUSessionResourceSetupItemSUReq req) runs on ConnHdlr return PDUSessionResourceSetupItemSURes +{ + var PDUSessionResourceSetupItemSURes resp; + var octetstring setup_trans_enc; + var NGAP_IEs.PDUSessionResourceSetupRequestTransfer setup_req_transf; + var NGAP_IEs.PDUSessionResourceSetupResponseTransfer setup_resp_transf; + + /* Parse PDUSessionResourceSetupRequestTransfer contained inside InitialContextSetupRequest's PDUSessionResourceSetup Item: */ + setup_req_transf := dec_NGAP_PDUSessionResourceSetupRequestTransfer(req.pDUSessionResourceSetupRequestTransfer); + setup_resp_transf := f_pdu_handle_PDUSessionResourceSetupRequestTransfer(setup_req_transf); + + setup_trans_enc := enc_NGAP_PDUSessionResourceSetupResponseTransfer(setup_resp_transf) + resp := valueof(m_pDUSessionResourceSetupItemSURes(req.pDUSessionID, setup_trans_enc)); + return resp; +} + +private function f_pdu_handle_session_resource_setup_list_su(PDUSessionResourceSetupListSUReq li_req) runs on ConnHdlr return PDUSessionResourceSetupListSURes +{ + var PDUSessionResourceSetupListSURes li_resp; + for (var integer i := 0; i < lengthof(li_req); i := i + 1) { + var PDUSessionResourceSetupItemSURes it_resp; + it_resp := f_pdu_handle_session_resource_setup_item_su(li_req[i]); + if (i == 0) { /* min 1 item in list doesn't allow previously allocating an empty list */ + li_resp := { it_resp }; + } else { + li_resp := li_resp & { it_resp }; + } + } + return li_resp; +} + +/* 3GPP TS 38.413 9.2.1.1 PDU SESSION RESOURCE SETUP REQUEST */ +altstep as_ngap_handle_PDUSessionResourceSetupReq() runs on ConnHdlr { + var NGAP_PDU rx_ngap; + var template (present) NGAP_PDU exp_ngap := + mw_ngap_initMsg(f_mw_n2_PDUSessionResourceSetupRequest(g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id, + p_nAS_PDU := ?, + p_pDUSessionResourceSetupListSUReq := ?)); + + [] NGAP.receive(exp_ngap) -> value rx_ngap { + var PDUSessionResourceSetupRequest pdu := rx_ngap.initiatingMessage.value_.pDUSessionResourceSetupRequest; + var PDUSessionResourceSetupListSURes resources; + + for (var integer i := 0; i < lengthof(pdu.protocolIEs); i := i + 1) { + if (pdu.protocolIEs[i].id != id_PDUSessionResourceSetupListSUReq) { + continue; + } + var PDUSessionResourceSetupListSUReq li := pdu.protocolIEs[i].value_.pDUSessionResourceSetupListSUReq; + resources := f_pdu_handle_session_resource_setup_list_su(li); + } + NGAP.send(m_ngap_succMsg(m_n2_PDUSessionResourceSetupResponse(g_pars.ue_pars.amf_id, + g_pars.ue_pars.ran_id, + resources))); + } +} + /* 3GPP TS 23.502 4.3.2.2 UE Requested PDU Session Establishment */ function f_pdu_sess_establish(boolean configure_userplane := true) runs on ConnHdlr { var template (value) NG_NAS_UL_Message_Type nas_ul_msg; @@ -594,6 +679,66 @@ as_ngap_handle_configuration_update(); }
+ +/* 3GPP TS 24.501 5.6.1 Service request procedure + * 3GPP TS 23.502 4.2.3.2 UE Triggered Service Request */ +function f_service_request_cm_connected(template (omit) ULDataStatus ul_data_status := omit, + template (omit) PDU_SessionStatus pdu_sess_status := omit) runs on ConnHdlr { + var template (value) NGAP_PDU tx_pdu; + var template (value) NG_NAS_UL_Message_Type nas_ul_msg; + var NAS_PDU nas_pdu; + var NG_NAS_DL_Message_Type rx_nas; + + nas_ul_msg := cs_NG_SERVICE_REQUEST(c_ServiceType_signalling, + g_pars.kset_id, + cs_NG_MobileIdentity_STMSI(omit, g_pars.ue_pars.guti), + p_ULDataStatus := ul_data_status, + p_PDU_SessionStatus := pdu_sess_status); + nas_pdu := enc_NG_NAS_UL_Message_Type(valueof(nas_ul_msg)); + NGAP.send(nas_ul_msg); +} + +/* 3GPP TS 24.501 5.6.1 Service request procedure + * 3GPP TS 23.502 4.2.3.2 UE Triggered Service Request */ +function f_service_request_cm_idle(template (omit) ULDataStatus ul_data_status := omit, + template (omit) PDU_SessionStatus pdu_sess_status := omit) runs on ConnHdlr { + var template (value) NGAP_PDU tx_pdu; + var template (value) NG_NAS_UL_Message_Type nas_ul_msg; + var NAS_PDU nas_pdu; + + nas_ul_msg := cs_NG_SERVICE_REQUEST(c_ServiceType_signalling, + g_pars.kset_id, + cs_NG_MobileIdentity_STMSI(omit, g_pars.ue_pars.guti), + p_ULDataStatus := ul_data_status, + p_PDU_SessionStatus := pdu_sess_status); + nas_pdu := enc_NG_NAS_UL_Message_Type(valueof(nas_ul_msg)); + nas_ul_msg := cs_NG_SERVICE_REQUEST(c_ServiceType_signalling, + g_pars.kset_id, + cs_NG_MobileIdentity_STMSI(omit, g_pars.ue_pars.guti), + p_Msg := cs_ReplayedNASMessageContainerTLV(nas_pdu)); + + //TODO: add a function to send a NAS_UL_MSG and receive the encoded one. + var BIT4 sec_hdr_t := '0001'B; + var integer tx_count := 0; + nas_pdu := enc_NG_NAS_UL_Message_Type(valueof(nas_ul_msg)); + var OCT4 mac := f_NG_NAS_mac_calc(NG_NAS_ALG_IP_NIA1, f_kdf_ng_nas_int(g_keys.kamf, NG_NAS_ALG_IP_NIA1), + tx_count, + bit2int(tsc_NG_RegResult_3GPP), + false, '00'O & nas_pdu); + var NG_NAS_UL_Message_Type nas_out; + nas_out := valueof(cs_NG_SECURITY_PROTECTED_NAS_MESSAGE(tsc_EPD_GMM, + sec_hdr_t, + mac, + int2oct(tx_count, 1), + nas_pdu)); + nas_pdu := enc_NG_NAS_UL_Message_Type(valueof(nas_out)); + tx_pdu := m_ngap_initMsg(m_n2_initialUeMessage(g_pars.ue_pars.ran_id, + nas_pdu, /* Service request */ + f_ULI(), + mo_Signalling)); + NGAP.send(tx_pdu); +} + /* 3GPP TS 24.501 5.5.2.2 UE-initiated de-registration procedure, * 3GPP TS 23.502 4.2.2.3.2 UE-initiated Deregistration */ function f_deregister() runs on ConnHdlr { diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml index 852a77d..e0f7c35 100644 --- a/5gc/expected-results.xml +++ b/5gc/expected-results.xml @@ -10,4 +10,8 @@ <testcase classname='C5G_Tests' name='TC_pdu_sess_modification' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_ng_register_ping4' time='MASKED'/> <testcase classname='C5G_Tests' name='TC_ng_register_ping4_256' time='MASKED'/> + <testcase classname='C5G_Tests' name='TC_ue_service_request_cm_idle_ul_data' time='MASKED'/> + <testcase classname='C5G_Tests' name='TC_ue_service_request_cm_idle_inact_sess' time='MASKED'/> + <testcase classname='C5G_Tests' name='TC_ue_service_request_cm_idle_unknown_sess_active' time='MASKED'/> + <testcase classname='C5G_Tests' name='TC_ue_service_request_cm_connected' time='MASKED'/> </testsuite> diff --git a/library/NGAP_Functions.ttcn b/library/NGAP_Functions.ttcn index d7b8893..c096214 100644 --- a/library/NGAP_Functions.ttcn +++ b/library/NGAP_Functions.ttcn @@ -31,6 +31,9 @@ case (id_UEContextRelease) { return im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_NGAP_IDs.uE_NGAP_ID_pair.aMF_UE_NGAP_ID; } + case (id_PDUSessionResourceSetup) { + return im.value_.pDUSessionResourceSetupRequest.protocolIEs[0].value_.aMF_UE_NGAP_ID; + } case (id_PDUSessionResourceModify) { return im.value_.pDUSessionResourceModifyRequest.protocolIEs[0].value_.aMF_UE_NGAP_ID; } @@ -80,6 +83,9 @@ case (id_UEContextRelease) { return im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_NGAP_IDs.uE_NGAP_ID_pair.rAN_UE_NGAP_ID; } + case (id_PDUSessionResourceSetup) { + return im.value_.pDUSessionResourceSetupRequest.protocolIEs[1].value_.RAN_UE_NGAP_ID; + } case (id_PDUSessionResourceModify) { return im.value_.pDUSessionResourceModifyRequest.protocolIEs[1].value_.RAN_UE_NGAP_ID; } @@ -157,6 +163,15 @@ } return omit; } + case (id_PDUSessionResourceSetup) { + var PDUSessionResourceSetupRequest msg := im.value_.pDUSessionResourceSetupRequest; + for (i := 0; i < lengthof(msg.protocolIEs); i := i+1) { + if (msg.protocolIEs[i].id == id_NAS_PDU) { + return msg.protocolIEs[i].value_.NAS_PDU; + } + } + return omit; + } case (id_PDUSessionResourceModify) { var PDUSessionResourceModifyRequest msg := im.value_.pDUSessionResourceModifyRequest; for (i := 0; i < lengthof(msg.protocolIEs); i := i+1) { diff --git a/library/NG_NAS_Osmo_Templates.ttcn b/library/NG_NAS_Osmo_Templates.ttcn index 423a05e..393ae69 100644 --- a/library/NG_NAS_Osmo_Templates.ttcn +++ b/library/NG_NAS_Osmo_Templates.ttcn @@ -18,6 +18,8 @@ import from NG_NAS_Templates all; import from NG_NAS_MsgContainers all;
+import from NG_NAS_Osmo_Types all; + /* 24.501 cl. 9.11.3.54 */ template (value) NG_UE_SecurityCapability cs_NG_UE_SecurityCapabilityTLV(template (value) O1_Type ngeaCap := 'f0'O, @@ -133,6 +135,18 @@ sessionId := p_Id };
+/* 24.501 cl. 9.11.3.44 */ +template (value) PDU_SessionStatus +cs_PDU_SessionStatus(template (value) B8_Type p_Psi0_7 := '00000000'B, + template (value) B8_Type p_Psi8_15 := '00000000'B):= +{ + iei := '50'O, + iel := '02'O, + psi0_7 := p_Psi0_7, + psi8_15 := p_Psi8_15, + spare := omit +}; + /* 24.501 cl. 9.11.3.47 */ template (value) NG_Request_Type cs_NG_Request_TypeTV(B3_Type p_RequestValue) := { @@ -441,6 +455,60 @@ } };
+/* 24.501 cl. 8.2.16 Service request */ +template (value) NG_NAS_UL_Message_Type +cs_NG_SERVICE_REQUEST(template (value) B4_Type p_ServiceType := c_ServiceType_signalling, + template (value) NAS_KeySetIdentifier p_KSI, + template (value) NG_MobileIdentity p_S_TMSI, + template (omit) ULDataStatus p_ULDataStatus := omit, + template (omit) PDU_SessionStatus p_PDU_SessionStatus := omit, + template (omit) AllowedPDU_SessionStatus p_AllowedPDU_SessionStatus := omit, + template (omit) NASMessageContainer p_Msg := omit, + template (omit) UE_RequestType p_UeRequestType := omit, + template (omit) NG_PagingRestriction p_PagingRestrict := omit) := { + service_Request := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_ServiceRequest, /* cl. 9.7 M V 1 */ + serviceType := p_ServiceType, /* cl. 9.11.3.50 M V 1/2 */ + ngKSI := p_KSI, /* cl. 9.11.3.32 M V 1/2 */ + s_TMSI := p_S_TMSI, /* cl. 9.11.3.4 M LV 6 */ + ulDataStatus := p_ULDataStatus, /* cl. 9.11.2.57 O TLV 4-34 IEI=40 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + allowedPDUSessionStatus := p_AllowedPDU_SessionStatus, /* cl. 9.11.3.13 O TLV 4-34 IEI=25 */ + nasMsg := p_Msg, /* cl. 9.11.3.33 O TLV-E 4-n IEI=71 Dec18 */ + ueRequestType := p_UeRequestType, /* cl. 9.11.3.76 O TLV 3 IEI=29 Sep22 @sic R5s221179 Baseline Moving sic@ */ + pagingRestrict := p_PagingRestrict /* cl. 9.11.3.77 O TLV 3-35 IEI=28 Sep22 @sic R5s221179 Baseline Moving sic@ */ + } +} + +/* 24.501 cl. 8.2.17 Service accept */ +template NG_NAS_DL_Message_Type +cr_NG_SERVICE_ACCEPT(template PDU_SessionStatus p_PDU_SessionStatus := *, + template PDU_SessionReactivationResult p_PDU_SessionReactivationResult := *, + template PDU_SessionReactivationError p_PDU_SessionReactivationError := *, + template EAP_Message p_EAP := *, + template GPRS_Timer2 p_T3448 := *, + template NG_AddReqResult p_AddRequestResult := *, + template NG_TrackingAreaIdList p_ForbidTAIList_Roaming := *, + template NG_TrackingAreaIdList p_ForbidTAIList_RegProvService := *) := { + service_Accept := { + protocolDiscriminator := tsc_EPD_GMM, /* cl. 9.2 M V 1 */ + spareHalfOctet := tsc_SpareHalfOctet, /* cl. 9.3 M V 1/2 */ + securityHeaderType := tsc_SHT_NoSecurityProtection, + messageType := tsc_MT_NG_ServiceAccept, /* cl. 9.7 M V 1 */ + pduSessionStatus := p_PDU_SessionStatus, /* cl. 9.11.2.44 O TLV 4-34 IEI=50 */ + pduSessionReactivationResult := p_PDU_SessionReactivationResult, /* cl. 9.11.3.42 O TLV 4-32 IEI=26 */ + pduSessionReactResultError := p_PDU_SessionReactivationError, /* cl. 9.11.3.43 O TLV-E 5-515 IEI=7E */ + eapMessage := p_EAP, /* cl. 9.11.2.2 O TLV-E 7-1503 IEI=78*/ + t3448 := p_T3448, /* cl. 9.11.2.4 O TLV 3 IEI=6B Sep20 @sic R5s201387 Baseline Moving sic@ */ + ngAddRequestResult := p_AddRequestResult, /* cl. 9.11.3.81 O TLV 3 IEI=34 Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_Roaming := p_ForbidTAIList_Roaming, /* cl. 9.11.3.9 O TLV 9-114 IEI=1D Sep22 @sic R5s221179 Baseline Moving sic@ */ + forbidTAIList_RegProvService := p_ForbidTAIList_RegProvService /* cl. 9.11.3.9 O TLV 9-114 IEI=1E Sep22 @sic R5s221179 Baseline Moving sic@ */ + } +} + /* 24.501 cl. 8.2.19 */ template (present) NG_NAS_DL_Message_Type cr_NG_CONFIGURATION_UPDATE_COMMAND(template ConfigUpdateInd p_ConfigUpdateInd := *, diff --git a/library/NG_NAS_Osmo_Types.ttcn b/library/NG_NAS_Osmo_Types.ttcn index c152ad6..a1a5263 100644 --- a/library/NG_NAS_Osmo_Types.ttcn +++ b/library/NG_NAS_Osmo_Types.ttcn @@ -39,6 +39,15 @@
const NAS_CauseValue_Type c_5GSM_Cause_RegularDeactivation := '00100100'B;
+/* 3GPP TS 24.501 9.11.3.50 Service type */ +const BIT4 c_ServiceType_signalling := '0000'B; +const BIT4 c_ServiceType_data := '0001'B; +const BIT4 c_ServiceType_mobile_terminated_services := '0010'B; +const BIT4 c_ServiceType_emergency_services := '0011'B; +const BIT4 c_ServiceType_emergency_services_fallback := '0100'B; +const BIT4 c_ServiceType_high_priority_access := '0101'B; +const BIT4 c_ServiceType_elevated_signalling := '0110'B; +
/* This is a subset of the msgs in NG_NAS_DL_Message_Type. The subset is formed * by Session Management messages, see 3GPP TS 24.501 clause 6 and clause 8.3.