pespin has uploaded this change for review.
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.
To view, visit change 41747. To unsubscribe, or for help writing mail filters, visit settings.