pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40895?usp=email )
Change subject: 5gc: Test UE requested PDU Session Modification procedure
......................................................................
5gc: Test UE requested PDU Session Modification procedure
Change-Id: Id9ac0f0e431c4a82dfab8675c93bf3c3f05442a7
---
M 5gc/C5G_Tests.ttcn
M 5gc/ConnHdlr.ttcn
M 5gc/expected-results.xml
M deps/Makefile
M library/NGAP_Functions.ttcn
M library/NG_NAS_Osmo_Templates.ttcn
M library/ngap/NGAP_EncDec.cc
M library/ngap/NGAP_Types.ttcn
8 files changed, 340 insertions(+), 6 deletions(-)
Approvals:
Jenkins Builder: Verified
fixeria: Looks good to me, approved
diff --git a/5gc/C5G_Tests.ttcn b/5gc/C5G_Tests.ttcn
index ae8260c..fdad2d2 100644
--- a/5gc/C5G_Tests.ttcn
+++ b/5gc/C5G_Tests.ttcn
@@ -88,7 +88,7 @@
ran_gtpu_teid := ran_gtpu_teid,
cn_gtpu_ip := omit,
cn_gtpu_teid := omit,
- qfi := omit,
+ qos_rules := omit,
ue_ip := omit
};
@@ -361,6 +361,24 @@
vc_conn.done;
}
+private function f_TC_pdu_sess_modification() runs on ConnHdlr {
+ f_register();
+ f_pdu_sess_establish(false);
+ f_sleep(1.0);
+ f_pdu_sess_modify();
+ f_pdu_sess_release();
+ f_deregister();
+}
+testcase TC_pdu_sess_modification() 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_pdu_sess_modification), pars);
+ vc_conn.done;
+}
+
private function f_TC_register_ping4() runs on ConnHdlr {
f_register();
f_pdu_sess_establish();
@@ -404,9 +422,21 @@
execute( TC_periodic_registration_updating() );
execute( TC_ue_context_release_no_pdu_session() );
execute( TC_ue_context_release_with_pdu_session() );
+ execute( TC_pdu_sess_modification() );
execute( TC_ng_register_ping4() );
execute( TC_ng_register_ping4_256() );
}
+/* TODO:
+ * - Emergency call (PDU Sess Establish "Request Type"="Emergency
Request")
+ * - Handover from/to EPS vs 5GC
+ * - Handover from/to 3GPP vs non-3GPP (PDU Sess Establish "Request
Type"="Existing PDU Session" and RAT Type change)
+ * - PDU Session Type IPv6
+ * - PDU Session Type IPv4v6
+ * - VoLTE:
+ * -- " If the UE requested P-CSCF discovery then the message shall also include the
P-CSCF IP address(es) as determined by the SMF and as described in clause 5.16.3.4 of TS
23.50"
+ * - Fill in PCO during PDU Sess Establish Req.
+ * - "If the PDU Session being established was requested to be an always-on PDU
Session, the SMF shall indicate whether the request is accepted by including an Always-on
PDU Session Granted indication in the PDU Session Establishment Accept message"
+ */
}
diff --git a/5gc/ConnHdlr.ttcn b/5gc/ConnHdlr.ttcn
index ebac2ae..b626cd0 100644
--- a/5gc/ConnHdlr.ttcn
+++ b/5gc/ConnHdlr.ttcn
@@ -72,7 +72,7 @@
OCT4 ran_gtpu_teid,
charstring cn_gtpu_ip optional,
OCT4 cn_gtpu_teid optional,
- OCT1 qfi optional,
+ QoS_RuleList qos_rules optional,
charstring ue_ip optional
};
@@ -376,7 +376,7 @@
NGAP.receive(cr_NG_DL_NAS_TRANSPORT) -> value rx_nas;
inner_nas :=
f_dec_NG_NAS_DL_Message_Payload_Container(rx_nas.dl_Nas_Transport.payloadContainerType.container,
rx_nas.dl_Nas_Transport.payload.payload);
- g_pars.ue_pars.sess_pars.qfi :=
inner_nas.pdu_Session_Establishment_Accept.authorizedQoSRules.listofQoSRules[0].identifier;
+ g_pars.ue_pars.sess_pars.qos_rules :=
inner_nas.pdu_Session_Establishment_Accept.authorizedQoSRules.listofQoSRules;
g_pars.ue_pars.sess_pars.ue_ip :=
f_inet_ntoa(inner_nas.pdu_Session_Establishment_Accept.pduAddress.adressInfo);
log("5GC assigned CN GTPU Address: ", g_pars.ue_pars.sess_pars.cn_gtpu_ip,
" TEID: ", g_pars.ue_pars.sess_pars.cn_gtpu_teid);
log("5GC assigned UE IP address: ", g_pars.ue_pars.sess_pars.ue_ip);
@@ -386,6 +386,139 @@
}
}
+private function
f_pdu_handle_session_resource_modify_item_qos_flow_list(QosFlowAddOrModifyRequestList
qos_flow_req_li) runs on ConnHdlr return QosFlowAddOrModifyResponseList
+{
+ var QosFlowAddOrModifyResponseList qos_flow_resp_li;
+ for (var integer i := 0; i < lengthof(qos_flow_req_li); i := i + 1) {
+ var QosFlowAddOrModifyRequestItem qos_flow_req_it := qos_flow_req_li[i];
+ var QosFlowAddOrModifyResponseItem qos_flow_resp_it :=
valueof(m_qosFlowAddOrModifyResponseItem(qos_flow_req_it.qosFlowIdentifier));
+ qos_flow_resp_li[i] := qos_flow_resp_it;
+ }
+ return qos_flow_resp_li;
+}
+
+/* Handle a PDUSessionResourceModifyRequestTransfer contained inside NGAP
PDUSessionResourceModifyRequest and return a Result for PDUSessionResourceModifyResponse
*/
+private function
f_pdu_handle_session_resource_modify_item(PDUSessionResourceModifyItemModReq req) runs on
ConnHdlr return PDUSessionResourceModifyItemModRes
+{
+ var PDUSessionResourceModifyItemModRes resp;
+ var NGAP_IEs.PDUSessionResourceModifyRequestTransfer mod_req_transf;
+ var NGAP_IEs.PDUSessionResourceModifyResponseTransfer mod_resp_transf;
+ var octetstring mod_resp_transf_enc;
+ var template (omit) QosFlowAddOrModifyResponseList qos_flow_resp_li := omit;
+
+ mod_req_transf :=
dec_NGAP_PDUSessionResourceModifyRequestTransfer(req.pDUSessionResourceModifyRequestTransfer);
+
+ for (var integer i := 0; i < lengthof(mod_req_transf.protocolIEs); i := i + 1) {
+ select(mod_req_transf.protocolIEs[i].id) {
+ case (id_QosFlowAddOrModifyRequestList) {
+ var QosFlowAddOrModifyRequestList qos_flow_req_li :=
mod_req_transf.protocolIEs[i].value_.qosFlowAddOrModifyRequestList;
+ qos_flow_resp_li :=
f_pdu_handle_session_resource_modify_item_qos_flow_list(qos_flow_req_li);
+ }
+ case (id_UL_NGU_UP_TNLModifyList) {
+ // TODO: assign the fields below, see how it's done in
f_pdu_handle_session_resource_setup_item()
+ // g_pars.ue_pars.sess_pars.cn_gtpu_ip := ;
+ // g_pars.ue_pars.sess_pars.cn_gtpu_teid := ;
+ // TODO: Update IP+TEID in usperlane osmo-uecups if any of them changed.
+ }
+ }
+ }
+
+ /* Prepare Response for it: */
+ mod_resp_transf :=
valueof(m_pDUSessionResourceModifyResponseTransfer(p_qosFlowAddOrModifyResponseList :=
qos_flow_resp_li));
+ mod_resp_transf_enc :=
enc_NGAP_PDUSessionResourceModifyResponseTransfer(mod_resp_transf);
+ resp := valueof(m_pDUSessionResourceModifyItemModRes(req.pDUSessionID,
mod_resp_transf_enc));
+ return resp;
+}
+
+private function
f_pdu_handle_session_resource_modify_list(PDUSessionResourceModifyListModReq li_cmd) runs
on ConnHdlr return PDUSessionResourceModifyListModRes
+{
+ var PDUSessionResourceModifyListModRes li_resp;
+ for (var integer i := 0; i < lengthof(li_cmd); i := i + 1) {
+ var PDUSessionResourceModifyItemModRes it_resp;
+ it_resp := f_pdu_handle_session_resource_modify_item(li_cmd[i]);
+ li_resp[i] := it_resp;
+ }
+ return li_resp;
+}
+
+private altstep as_ngap_handle_PDUSessionResourceModifyRequest() runs on ConnHdlr {
+ var NGAP_PDU rx_ngap;
+ var template (present) NGAP_PDU exp_ngap :=
+ mw_ngap_initMsg(mw_n2_PDUSessionResourceModify(g_pars.ue_pars.amf_id,
+ g_pars.ue_pars.ran_id,
+ ?));
+
+ [] NGAP.receive(exp_ngap) -> value rx_ngap {
+ var PDUSessionResourceModifyRequest mod_req :=
rx_ngap.initiatingMessage.value_.PDUSessionResourceModifyRequest;
+ var PDUSessionResourceModifyListModRes resources;
+
+ for (var integer i := 0; i < lengthof(mod_req.protocolIEs); i := i + 1) {
+ if (mod_req.protocolIEs[i].id != id_PDUSessionResourceModifyListModReq) {
+ continue;
+ }
+ var PDUSessionResourceModifyListModReq li :=
mod_req.protocolIEs[i].value_.pDUSessionResourceModifyListModReq;
+ resources := f_pdu_handle_session_resource_modify_list(li);
+ }
+ NGAP.send(m_ngap_succMsg(m_n2_PDUSessionResourceModifyResponse(g_pars.ue_pars.amf_id,
+ g_pars.ue_pars.ran_id,
+ resources)));
+ }
+}
+
+/* 3GPP TS 24.501 8.3.7 PDU session modification request,
+ * 3GPP TS 23.502 4.3.3.2 UE requested PDU Session Modification */
+function f_pdu_sess_modify() runs on ConnHdlr {
+ var template (value) NG_NAS_UL_Message_Type nas_ul_msg;
+ var NAS_PDU nas_pdu;
+ var NG_NAS_DL_Message_Type rx_nas, inner_nas;
+ var ProcedureTransactionIdentifier pti := f_next_pti();
+ var OCT1 pdu_sess_id := int2oct(g_pars.ue_pars.sess_pars.id, 1);
+
+ var template (value) QoS_RuleU qos_rule_u := cs_QoS_RuleU_Create(
+ g_pars.ue_pars.sess_pars.qos_rules[0].u.creat.flowIdentifier,
+ '09'O,
+ {cs_PacketFilter_MediaUDP('0110'B, 60350)},
+ '0'B,
+ g_pars.ue_pars.sess_pars.qos_rules[0].u.creat.spare,
+ '1'B
+ );
+ var template (value) QoS_RuleList qos_rules := {
+ cs_QoS_Rule(g_pars.ue_pars.sess_pars.qos_rules[0].identifier,
+ qos_rule_u)
+ };
+
+ /* 3GPP TS 24.501 Table 8.3.7.1. */
+ nas_ul_msg := cs_NG_PDU_SESSION_MODIFICATION_REQUEST(cs_NG_PDU_SessionIdV(pdu_sess_id),
pti,
+ p_IntegrityProtMaxDataRate := cs_IntegrityProtMaxDataRateTV('FF'O,
'FF'O),
+ p_QoS_Rules := cs_QoS_Rules(qos_rules, p_IEI := '7A'O));
+ nas_pdu := enc_NG_NAS_UL_Message_Type(valueof(nas_ul_msg));
+ nas_ul_msg :=
cs_NG_UL_NAS_TRANSPORT(cs_PayloadContainerType(tsc_PayloadContainerESMMsg),
+ cs_PayloadContainerLV(nas_pdu),
+ p_PDU_SessionId := cs_NG_PDU_SessionIdTV(pdu_sess_id),
+ p_RequestType := cs_NG_Request_TypeTV('001'B),
+ p_DNN := cs_DNN_TLV(f_enc_dns_hostname(g_pars.ue_pars.apn)));
+ NGAP.send(nas_ul_msg);
+ as_ngap_handle_PDUSessionResourceModifyRequest();
+
+ /* 5G-NAS PDU Session Modify Request: This DL NAS arrives contained in NGAP
PDUSessionModifyRequest handled above: */
+ NGAP.receive(cr_NG_DL_NAS_TRANSPORT) -> value rx_nas;
+ inner_nas :=
f_dec_NG_NAS_DL_Message_Payload_Container(rx_nas.dl_Nas_Transport.payloadContainerType.container,
+ rx_nas.dl_Nas_Transport.payload.payload);
+ if (not match(inner_nas,
cr_NG_PDU_SESSION_MODIFICATION_COMMAND(cs_NG_PDU_SessionIdV(pdu_sess_id),
+ pti))) {
+ Misc_Helpers.f_shutdown(__BFILE__, __LINE__, fail,
+ log2str("Unexpected decoded NAS Payload Container ", inner_nas));
+ }
+
+ nas_ul_msg :=
cs_NG_PDU_SESSION_MODIFICATION_COMPLETE(cs_NG_PDU_SessionIdV(pdu_sess_id),
+ pti);
+ nas_pdu := enc_NG_NAS_UL_Message_Type(valueof(nas_ul_msg));
+ nas_ul_msg :=
cs_NG_UL_NAS_TRANSPORT(cs_PayloadContainerType(tsc_PayloadContainerESMMsg),
+ cs_PayloadContainerLV(nas_pdu),
+ p_PDU_SessionId := cs_NG_PDU_SessionIdTV(pdu_sess_id));
+ NGAP.send(nas_ul_msg);
+}
+
function f_register() runs on ConnHdlr {
var template (value) NGAP_PDU tx_pdu;
var template (value) NG_NAS_UL_Message_Type nas_ul_msg;
@@ -599,7 +732,7 @@
log2str("Unexpected decoded NAS Payload Container ", inner_nas));
}
- g_pars.ue_pars.sess_pars.qfi := omit;
+ g_pars.ue_pars.sess_pars.qos_rules := omit;
g_pars.ue_pars.sess_pars.ue_ip := omit;
nas_ul_msg := cs_NG_PDU_SESSION_RELEASE_COMPLETE(cs_NG_PDU_SessionIdV(pdu_sess_id),
pti,
@@ -621,7 +754,7 @@
var template (value) UECUPS_GtpExtHdr_PduSessContainer pdu_sess_cont;
pdu_sess_cont :=
ts_UECUPS_GtpExtHdr_PduSessContainer(UECUPS_GtpExtHdr_PduSessContainer_Type_ul_pdu_sess_info,
- oct2int(g_pars.ue_pars.sess_pars.qfi));
+ oct2int(g_pars.ue_pars.sess_pars.qos_rules[0].identifier));
gtp_ext_hdr := ts_UECUPS_GtpExtHdr(pdu_session_container := pdu_sess_cont);
uecups_create := ts_UECUPS_CreateTun(
diff --git a/5gc/expected-results.xml b/5gc/expected-results.xml
index 99ded9c..852a77d 100644
--- a/5gc/expected-results.xml
+++ b/5gc/expected-results.xml
@@ -7,6 +7,7 @@
<testcase classname='C5G_Tests'
name='TC_periodic_registration_updating' time='MASKED'/>
<testcase classname='C5G_Tests'
name='TC_ue_context_release_no_pdu_session' time='MASKED'/>
<testcase classname='C5G_Tests'
name='TC_ue_context_release_with_pdu_session' time='MASKED'/>
+ <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'/>
</testsuite>
diff --git a/deps/Makefile b/deps/Makefile
index 4dba0a1..1e5ead2 100644
--- a/deps/Makefile
+++ b/deps/Makefile
@@ -72,7 +72,7 @@
# Use tag names from 'git describe --tags' or commit hashes. This way we get
# exact commits of deps when doing regression testing.
-nas_commit= ab43cccb96db6067ffba1c763b47cb25cd61b780
+nas_commit= 60a69a44cc6bbb32d96aecc4e355128ac5f95a5e
titan.Libraries.TCCUsefulFunctions_commit= R.35.B-6-gb3687da
titan.ProtocolEmulations.M3UA_commit= b58f92046e48a7b1ed531e243a2319ebca53bf4c
titan.ProtocolEmulations.SCCP_commit= 750a3e836831e58eae59d4757ef5d0c759f9ca5d
diff --git a/library/NGAP_Functions.ttcn b/library/NGAP_Functions.ttcn
index 3b19d90..d7b8893 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_PDUSessionResourceModify) {
+ return
im.value_.pDUSessionResourceModifyRequest.protocolIEs[0].value_.aMF_UE_NGAP_ID;
+ }
case (id_PDUSessionResourceRelease) {
return
im.value_.pDUSessionResourceReleaseCommand.protocolIEs[0].value_.aMF_UE_NGAP_ID;
}
@@ -77,6 +80,9 @@
case (id_UEContextRelease) {
return
im.value_.uEContextReleaseCommand.protocolIEs[0].value_.uE_NGAP_IDs.uE_NGAP_ID_pair.rAN_UE_NGAP_ID;
}
+ case (id_PDUSessionResourceModify) {
+ return
im.value_.pDUSessionResourceModifyRequest.protocolIEs[1].value_.RAN_UE_NGAP_ID;
+ }
case (id_PDUSessionResourceRelease) {
return
im.value_.pDUSessionResourceReleaseCommand.protocolIEs[1].value_.rAN_UE_NGAP_ID;
}
@@ -151,6 +157,19 @@
}
return omit;
}
+ case (id_PDUSessionResourceModify) {
+ var PDUSessionResourceModifyRequest msg := im.value_.pDUSessionResourceModifyRequest;
+ for (i := 0; i < lengthof(msg.protocolIEs); i := i+1) {
+ if (msg.protocolIEs[i].id == id_PDUSessionResourceModifyListModReq) {
+ var PDUSessionResourceModifyListModReq req_li :=
msg.protocolIEs[i].value_.pDUSessionResourceModifyListModReq;
+ for (j := 0; j < lengthof(req_li); j := j+1) {
+ return req_li[j].nAS_PDU;
+ /* FIXME: we should be returning req_li[j].pDUSessionResourceModifyRequestTransfer
too... */
+ }
+ }
+ }
+ return omit;
+ }
case (id_PDUSessionResourceRelease) {
var PDUSessionResourceReleaseCommand msg :=
im.value_.PDUSessionResourceReleaseCommand;
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 4f8e8cc..423a05e 100644
--- a/library/NG_NAS_Osmo_Templates.ttcn
+++ b/library/NG_NAS_Osmo_Templates.ttcn
@@ -151,6 +151,14 @@
maxDataRateUL := maxDataRateUL,
maxDataRateDL := maxDataRateD
};
+template (value) IntegrityProtMaxDataRate
+cs_IntegrityProtMaxDataRateTV(template (value) O1_Type maxDataRateUL,
+ template (value) O1_Type maxDataRateD) :=
+{
+ iei := '13'O,
+ maxDataRateUL := maxDataRateUL,
+ maxDataRateDL := maxDataRateD
+};
/* 24.501 cl. 9.11.4.11 */
template (value) PDU_SessionType
@@ -656,6 +664,103 @@
}
}
+template (value) NG_NAS_UL_Message_Type
+cs_NG_PDU_SESSION_MODIFICATION_REQUEST(template (value) NG_PDU_SessionId
p_PDU_SessionId,
+ template (value) ProcedureTransactionIdentifier p_PTI,
+ template (omit) NG_UE_SM_Cap p_NG_UE_SM_Cap := omit,
+ template (omit) GMM_GSM_Cause p_Cause := omit,
+ template (omit) MaxNumPacketFilters p_MaxNumPacketFilters := omit,
+ template (omit) AlwaysOnPDUSessionReq p_AlwaysOnPDUSessionReq := omit,
+ template (omit) IntegrityProtMaxDataRate p_IntegrityProtMaxDataRate := omit,
+ template (omit) QoS_Rules p_QoS_Rules := omit,
+ template (omit) QoSFlowDescr p_QoSFlowDescr := omit,
+ template (omit) MappedEPSBearerContexts p_MappedEPSBearerContexts := omit,
+ template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit,
+ template (omit) PortManagementInfoContainer p_PortManagementInfoContainer :=
omit,
+ template (omit) IPHeaderCompressionConfig p_IPHeaderCompConfig := omit,
+ template (omit) EthernetHeaderCompressConfig p_EthernetHeaderCompConfig :=
omit,
+ template (omit) RequestedMBSContainer p_RequestedMBS := omit,
+ template (omit) ServiceLvlAAContainer p_ServiceLvlAA := omit) := {
+ pdu_Session_Modification_Request := {
+ protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V
1 */
+ pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V
1 */
+ procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V
1 */
+ messageType := tsc_MT_NG_PDUSessionModificationRequest, /* cl. 9.7
M V 1 */
+ smCapability := p_NG_UE_SM_Cap, /* cl. 9.11.4.1 O
TLV 3-15 IEI=28 */
+ gsmCause := p_Cause, /* cl. 9.11.4.2 O
TV 2 IEI=59 */
+ maxNumPacketFilters := p_MaxNumPacketFilters, /* c. 9.11.4.9 O
TV 3 IEI=55 */
+ alwaysOnPDUSessionReq := p_AlwaysOnPDUSessionReq, /* c. 9.11.4.4 O
TV 1 IEI=B */
+ integrityProtMaxDataRate := p_IntegrityProtMaxDataRate, /* c. 9.11.4.7 O
TV 2 IEI=13 */
+ requestedQoSRules := p_QoS_Rules, /* cl. 9.11.4.13 O
TLV-E 7-65538 IEI=7A */
+ requestedQoSFlowDescr := p_QoSFlowDescr, /* cl. 9.11.4.12 O
TLV-E 5-65538 IEI=79 */
+ mappedEPSbearerContexts := p_MappedEPSBearerContexts, /* cl. 9.11.4.8 O
TLV-E 7-65538 IEI=7F Dec18 */
+ extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O
TLV-E 4-65538 IEI=0x7B */
+ portManagementInfoContainer := p_PortManagementInfoContainer, /* cl. 9.11.4.27 O
TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */
+ ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O
TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */
+ ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O
TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */
+ requestedMBS := p_RequestedMBS, /* cl. 9.11.4.30 O
TLV-E 8-65538 IEI=70 Sep22 @sic R5s221179 Baseline Moving sic@ */
+ serviceLvlAA := p_ServiceLvlAA /* cl. 9.11.2.10 O
TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */
+ }
+} // End of template m_NG_PDU_SESSION_MODIFICATION_REQUEST
+
+/* 24.501 cl. 8.3.9 */
+template (present) NG_NAS_DL_Message_Type
+cr_NG_PDU_SESSION_MODIFICATION_COMMAND(template (present) NG_PDU_SessionId
p_PDU_SessionId,
+ template (present) ProcedureTransactionIdentifier p_PTI,
+ template GMM_GSM_Cause p_Cause := *,
+ template Session_AMBR p_Session_AMBR := *,
+ template GPRS_Timer p_RQTimer := *,
+ template AlwaysOnPDUSessionInd p_AlwaysOnPDUSessionInd := *,
+ template QoS_Rules p_QoS_Rules := *,
+ template QoSFlowDescr p_QoSFlowDescr := *,
+ template MappedEPSBearerContexts p_MappedEPSBearerContexts := *,
+ template ExtdProtocolConfigOptions p_ExtdPCO := *,
+ template ATSSSContainer p_ATSSSContainer := *,
+ template IPHeaderCompressionConfig p_IPHeaderCompConfig := *,
+ template PortManagementInfoContainer p_PortManagementInfoContainer := *,
+ template ServingPLMNRateControl p_ServingPLMNRateCtrl := *,
+ template EthernetHeaderCompressConfig p_EthernetHeaderCompConfig := *,
+ template ReceivedMBSContainer p_ReceivedMBS := *,
+ template ServiceLvlAAContainer p_ServiceLvlAA := *) := {
+ pdu_Session_Modification_Command := {
+ protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V
1 */
+ pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V
1 */
+ procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V
1 */
+ messageType := tsc_MT_NG_PDUSessionModificationCommand, /* cl. 9.7
M V 1 */
+ gsmCause := p_Cause, /* cl. 9.11.4.2 O
TV 2 IEI=59 */
+ sessionAMBR := p_Session_AMBR, /* cl. 9.11.4.14 O
TLV 8 IEI=2A */
+ rqTimerValue := p_RQTimer, /* cl. 9.11.2.3 O
TV 2 IEI=56 */
+ alwaysOnPDUSessionInd := p_AlwaysOnPDUSessionInd, /* c. 9.11.4.3 O
TV 1 IEI=8 */
+ authorizedQoSRules := p_QoS_Rules, /* cl. 9.11.4.13 O
TLV-E 7-65538 IEI=7A */
+ mappedEPSContexts := p_MappedEPSBearerContexts, /* cl. 9.11.4.8 O
TLV-E 7-65538 IEI=7F */
+ authorizedQoSFlowDescr := p_QoSFlowDescr, /* cl. 9.11.4.12 O
TLV-E 6-65538 IEI=79 */
+ extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O
TLV-E 4-65538 IEI=0x7B */
+ atsssContainer := p_ATSSSContainer, /* cl. 9.11.4.22 O
TLV-E 3-65538 IEI=77 Sep20 @sic R5s201387 Baseline Moving sic@ */
+ ipHeaderCompressionConfig := p_IPHeaderCompConfig, /* cl. 9.11.4.24 O
TLV 5-257 IEI=66 Sep20 @sic R5s201387 Baseline Moving sic@ */
+ portManagementInfoContainer := p_PortManagementInfoContainer, /* cl. 9.11.4.27 O
TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */
+ servingPLMNRateControl := p_ServingPLMNRateCtrl, /* cl. 9.11.4.20 O
TLV 4 IEI=18 Sep20 @sic R5s201387 Baseline Moving sic@ */
+ ethernetHeaderCompressConfig := p_EthernetHeaderCompConfig, /* cl. 9.11.4.28 O
TLV 3 IEI=1F Sep20 @sic R5s201387 Baseline Moving sic@ */
+ receivedMBS := p_ReceivedMBS, /* cl. 9.11.4.30 O
TLV-E 8-65538 IEI=71 Sep22 @sic R5s221179 Baseline Moving sic@ */
+ serviceLvlAA := p_ServiceLvlAA /* cl. 9.11.2.10 O
TLV-E 6-n IEI=72 Sep22 @sic R5s221179 Baseline Moving sic@ */
+ }
+}
+
+/* 24.501 cl. 8.3.10 */
+template (value) NG_NAS_UL_Message_Type
+cs_NG_PDU_SESSION_MODIFICATION_COMPLETE(template (value) NG_PDU_SessionId
p_PDU_SessionId,
+ template (value) ProcedureTransactionIdentifier p_PTI := '00'O,
+ template (omit) ExtdProtocolConfigOptions p_ExtdPCO := omit,
+ template (omit) PortManagementInfoContainer p_PortManagementInfoContainer := omit)
:= {
+ pdu_Session_Modification_Complete := {
+ protocolDiscriminator := tsc_EPD_GSM, /* cl. 9.2 M V
1 */
+ pduSessionId := p_PDU_SessionId, /* cl. 9.4 M V
1 */
+ procedureTransactionIdentifier := p_PTI, /* cl. 9.6 M V
1 */
+ messageType := tsc_MT_NG_PDUSessionModificationComplete, /* cl. 9.7
M V 1 */
+ extdProtocolConfigurationOptions := p_ExtdPCO, /* cl. 9.11.4.6 O
TLV-E 4-65538 IEI=0x7B */
+ portManagementInfoContainer := p_PortManagementInfoContainer /* cl. 9.11.4.27 O
TLV-E 8-65538 IEI=7C Sep20 @sic R5s201387 Baseline Moving sic@ */
+ }
+}
+
/* 24.501 cl. 8.3.12 */
template (value) NG_NAS_UL_Message_Type
cs_NG_PDU_SESSION_RELEASE_REQUEST(template (value) NG_PDU_SessionId p_PDU_SessionId,
diff --git a/library/ngap/NGAP_EncDec.cc b/library/ngap/NGAP_EncDec.cc
index ccdfe83..b81591d 100644
--- a/library/ngap/NGAP_EncDec.cc
+++ b/library/ngap/NGAP_EncDec.cc
@@ -69,4 +69,44 @@
return ret;
}
+OCTETSTRING enc__NGAP__PDUSessionResourceModifyRequestTransfer(const
NGAP__IEs::PDUSessionResourceModifyRequestTransfer &p)
+{
+ TTCN_Buffer TTCN_buf;
+ TTCN_buf.clear();
+ p.encode(NGAP__IEs::PDUSessionResourceModifyRequestTransfer_descr_, TTCN_buf,
+ TTCN_EncDec::CT_PER, PER_ALIGNED);
+ return OCTETSTRING(TTCN_buf.get_len(), TTCN_buf.get_data());
+}
+
+NGAP__IEs::PDUSessionResourceModifyRequestTransfer
dec__NGAP__PDUSessionResourceModifyRequestTransfer(const OCTETSTRING &stream)
+{
+ NGAP__IEs::PDUSessionResourceModifyRequestTransfer ret;
+ TTCN_Buffer TTCN_buf;
+ TTCN_buf.clear();
+ TTCN_buf.put_os(stream);
+ ret.decode(NGAP__IEs::PDUSessionResourceModifyRequestTransfer_descr_, TTCN_buf,
+ TTCN_EncDec::CT_PER, PER_ALIGNED);
+ return ret;
+}
+
+OCTETSTRING enc__NGAP__PDUSessionResourceModifyResponseTransfer(const
NGAP__IEs::PDUSessionResourceModifyResponseTransfer &p)
+{
+ TTCN_Buffer TTCN_buf;
+ TTCN_buf.clear();
+ p.encode(NGAP__IEs::PDUSessionResourceModifyResponseTransfer_descr_, TTCN_buf,
+ TTCN_EncDec::CT_PER, PER_ALIGNED);
+ return OCTETSTRING(TTCN_buf.get_len(), TTCN_buf.get_data());
+}
+
+NGAP__IEs::PDUSessionResourceModifyResponseTransfer
dec__NGAP__PDUSessionResourceModifyResponseTransfer(const OCTETSTRING &stream)
+{
+ NGAP__IEs::PDUSessionResourceModifyResponseTransfer ret;
+ TTCN_Buffer TTCN_buf;
+ TTCN_buf.clear();
+ TTCN_buf.put_os(stream);
+ ret.decode(NGAP__IEs::PDUSessionResourceModifyResponseTransfer_descr_, TTCN_buf,
+ TTCN_EncDec::CT_PER, PER_ALIGNED);
+ return ret;
+}
+
}
diff --git a/library/ngap/NGAP_Types.ttcn b/library/ngap/NGAP_Types.ttcn
index dfa6586..96ccea9 100644
--- a/library/ngap/NGAP_Types.ttcn
+++ b/library/ngap/NGAP_Types.ttcn
@@ -11,4 +11,10 @@
external function
enc_NGAP_PDUSessionResourceSetupResponseTransfer(NGAP_IEs.PDUSessionResourceSetupResponseTransfer
p) return octetstring;
external function dec_NGAP_PDUSessionResourceSetupResponseTransfer(in octetstring pdu)
return NGAP_IEs.PDUSessionResourceSetupResponseTransfer;
+
+ external function
enc_NGAP_PDUSessionResourceModifyRequestTransfer(NGAP_IEs.PDUSessionResourceModifyRequestTransfer
p) return octetstring;
+ external function dec_NGAP_PDUSessionResourceModifyRequestTransfer(in octetstring pdu)
return NGAP_IEs.PDUSessionResourceModifyRequestTransfer;
+
+ external function
enc_NGAP_PDUSessionResourceModifyResponseTransfer(NGAP_IEs.PDUSessionResourceModifyResponseTransfer
p) return octetstring;
+ external function dec_NGAP_PDUSessionResourceModifyResponseTransfer(in octetstring pdu)
return NGAP_IEs.PDUSessionResourceModifyResponseTransfer;
}
--
To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/40895?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Id9ac0f0e431c4a82dfab8675c93bf3c3f05442a7
Gerrit-Change-Number: 40895
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>