diff --git a/ttcn/AtsNGAP/NGAP_TCFunctions.ttcn b/ttcn/AtsNGAP/NGAP_TCFunctions.ttcn index 850d6e619683b8c2e83321fbef37f5281487494d..f1b9c4b0b0e268426d53fe432f2ebfe665e51056 100644 --- a/ttcn/AtsNGAP/NGAP_TCFunctions.ttcn +++ b/ttcn/AtsNGAP/NGAP_TCFunctions.ttcn @@ -958,12 +958,12 @@ module NGAP_TCFunctions { // Body f_send_NGAP_PDU( m_ngap_initMsg( - m_n2_InitialContextSetupRequest + f_m_n2_InitialContextSetupRequest ( -, -, - m_gUAMI, - { + p_gUAMI := m_gUAMI, + p_pDUSessionResourceSetupListCxtReq := { { PX_PDU_SESSION_ID, omit, @@ -999,13 +999,12 @@ module NGAP_TCFunctions { } }, - { + p_allowedNSSAI := { m_allowedNSSAI_Item( m_s_NSSAI('00'O, '000000'O) ) }, - m_uESecurityCapabilities, - - + p_uESecurityCapabilities := m_uESecurityCapabilities ) )); @@ -1051,18 +1050,17 @@ module NGAP_TCFunctions { // Body f_send_NGAP_PDU( m_ngap_initMsg( - m_n2_InitialContextSetupRequest_noPDUSessionResourceSetupListCxtReq + f_m_n2_InitialContextSetupRequest ( -, -, - m_gUAMI, - { + p_gUAMI := m_gUAMI, + p_allowedNSSAI := { m_allowedNSSAI_Item( m_s_NSSAI('00'O, '000000'O) ) }, - m_uESecurityCapabilities, - - + p_uESecurityCapabilities := m_uESecurityCapabilities ))); @@ -1100,12 +1098,12 @@ module NGAP_TCFunctions { // Body f_send_NGAP_PDU( m_ngap_initMsg( - m_n2_InitialContextSetupRequest_optional_TraceActivation + f_m_n2_InitialContextSetupRequest ( -, -, - m_gUAMI, - { + p_gUAMI := m_gUAMI, + p_pDUSessionResourceSetupListCxtReq := { { PX_PDU_SESSION_ID, omit, @@ -1141,14 +1139,13 @@ module NGAP_TCFunctions { } }, - { + p_allowedNSSAI := { m_allowedNSSAI_Item( m_s_NSSAI('00'O, '000000'O) ) }, - m_uESecurityCapabilities, - -, - m_traceActivation( + p_uESecurityCapabilities := m_uESecurityCapabilities, + p_traceActivation := m_traceActivation( '0000000000000001'O,//in template (value) NGRANTraceID p_nGRANTraceID, '00000000'B,//in template (value) InterfacesToTrace p_interfacesToTrace, m_traceDepth(minimum), @@ -1199,12 +1196,12 @@ module NGAP_TCFunctions { // Body f_send_NGAP_PDU( m_ngap_initMsg( - m_n2_InitialContextSetupRequest_optional_MobilityRestriction + f_m_n2_InitialContextSetupRequest ( -, -, - m_gUAMI, - { + p_gUAMI := m_gUAMI, + p_pDUSessionResourceSetupListCxtReq := { { PX_PDU_SESSION_ID, omit, @@ -1240,14 +1237,13 @@ module NGAP_TCFunctions { } }, - { + p_allowedNSSAI := { m_allowedNSSAI_Item( m_s_NSSAI('00'O, '000000'O) ) }, - m_uESecurityCapabilities, - -, - m_mobilityRestrictionList( + p_uESecurityCapabilities := m_uESecurityCapabilities, + p_mobilityRestrictionList := m_mobilityRestrictionList( PX_PLMN_IDENTITY ) ))); @@ -1294,12 +1290,12 @@ module NGAP_TCFunctions { // Body f_send_NGAP_PDU( m_ngap_initMsg( - m_n2_InitialContextSetupRequest_differentOptionals + f_m_n2_InitialContextSetupRequest ( -, -, - m_gUAMI, - { + p_gUAMI := m_gUAMI, + p_pDUSessionResourceSetupListCxtReq := { { PX_PDU_SESSION_ID, omit, @@ -1335,22 +1331,21 @@ module NGAP_TCFunctions { } }, - { + p_allowedNSSAI := { m_allowedNSSAI_Item( m_s_NSSAI('00'O, '000000'O) ) }, - m_uESecurityCapabilities, - -, - ''O, // UERadioCapability p_uERadioCapability, - -, // IndexToRFSP p_indexToRFSP := 1, - -, - ''O, // FIXME FSCOM NAS_PDU field shall be bit2oct(enc(???)) , - - m_emergencyFallbackIndicator(emergency_fallback_requested), // EmergencyFallbackIndicator p_emergencyFallbackIndicator, - m_rRCInactiveTransitionReportRequest, // RRCInactiveTransitionReportRequest p_rRCInactiveTransitionReportRequest, - m_redirectionVoiceFallback, // RedirectionVoiceFallback p_redirectionVoiceFallback, - m_locationReportingRequestType( + p_uESecurityCapabilities := m_uESecurityCapabilities, + p_uERadioCapability := ''O, // UERadioCapability p_uERadioCapability, + p_indexToRFSP := -, // IndexToRFSP p_indexToRFSP := 1, + p_maskedIMEISV := -, + p_nasPdu := ''O, // FIXME FSCOM NAS_PDU field shall be bit2oct(enc(???)) , + + p_emergencyFallbackIndicator := m_emergencyFallbackIndicator(emergency_fallback_requested), // EmergencyFallbackIndicator p_emergencyFallbackIndicator, + p_rRCInactiveTransitionReportRequest := m_rRCInactiveTransitionReportRequest, // RRCInactiveTransitionReportRequest p_rRCInactiveTransitionReportRequest, + p_redirectionVoiceFallback := m_redirectionVoiceFallback, // RedirectionVoiceFallback p_redirectionVoiceFallback, + p_locationReportingRequestType := m_locationReportingRequestType( direct, cell, { @@ -1368,16 +1363,14 @@ module NGAP_TCFunctions { -, - ), // LocationReportingRequestType p_locationReportingRequestType, - m_sRVCCOperationPossible, // SRVCCOperationPossible p_sRVCCOperationPossible, - m_iAB_Authorized, // IAB_Authorized p_iAB_Authorized, - m_enhanced_CoverageRestriction, // Enhanced_CoverageRestriction p_enhanced_CoverageRestriction, - -, // Extended_ConnectedTime p_extended_ConnectedTime := PX_EXTENDED_CONNECTED_TIME, - m_uE_DifferentiationInfo, // UE_DifferentiationInfo p_uE_DifferentiationInfo, - m_nRUESidelinkAggregateMaximumBitrate, // NRUESidelinkAggregateMaximumBitrate p_nRUESidelinkAggregateMaximumBitrate, - m_lTEUESidelinkAggregateMaximumBitrate, // LTEUESidelinkAggregateMaximumBitrate p_lTEUESidelinkAggregateMaximumBitrate, - PX_U_E_RADIO_CAPABILITY_ID - - + p_sRVCCOperationPossible := m_sRVCCOperationPossible, // SRVCCOperationPossible p_sRVCCOperationPossible, + p_iAB_Authorized := m_iAB_Authorized, // IAB_Authorized p_iAB_Authorized, + p_enhanced_CoverageRestriction := m_enhanced_CoverageRestriction, // Enhanced_CoverageRestriction p_enhanced_CoverageRestriction, + p_extended_ConnectedTime := -, // Extended_ConnectedTime p_extended_ConnectedTime := PX_EXTENDED_CONNECTED_TIME, + p_uE_DifferentiationInfo := m_uE_DifferentiationInfo, // UE_DifferentiationInfo p_uE_DifferentiationInfo, + p_nRUESidelinkAggregateMaximumBitrate := m_nRUESidelinkAggregateMaximumBitrate, // NRUESidelinkAggregateMaximumBitrate p_nRUESidelinkAggregateMaximumBitrate, + LTEUESidelinkAggregateMaximumBitrate := m_lTEUESidelinkAggregateMaximumBitrate, // LTEUESidelinkAggregateMaximumBitrate p_lTEUESidelinkAggregateMaximumBitrate, + p_uERadioCapabilityID := PX_U_E_RADIO_CAPABILITY_ID ))); @@ -1424,12 +1417,12 @@ module NGAP_TCFunctions { // Body f_send_NGAP_PDU( m_ngap_initMsg( - m_n2_InitialContextSetupRequest + f_m_n2_InitialContextSetupRequest ( -, -, - m_gUAMI, - { + p_gUAMI := m_gUAMI, + p_pDUSessionResourceSetupListCxtReq := { { PX_PDU_SESSION_ID, omit, @@ -1465,13 +1458,12 @@ module NGAP_TCFunctions { } }, - { + p_allowedNSSAI := { m_allowedNSSAI_Item( m_s_NSSAI('00'O, '000000'O) ) }, - m_uESecurityCapabilities, - - + p_uESecurityCapabilities := m_uESecurityCapabilities ) )); @@ -4379,10 +4371,10 @@ module NGAP_TCFunctions { f_recv_NGAP_PDU( mw_ngap_initMsg( - mw_n2_InitialContextSetupRequest_withPDUSessionList( - PX_AMF_UE_NGAP_ID, + f_mw_n2_InitialContextSetupRequest( + PX_AMF_UE_NGAP_ID, PX_RAN_UE_NGAP_ID, - mw_gUAMI + p_gUAMI := mw_gUAMI ( PX_PLMN_IDENTITY, PX_AMF_REGION_ID, @@ -4390,7 +4382,7 @@ module NGAP_TCFunctions { PX_AMF_POINTER, * ), - { + p_pDUSessionResourceSetupListCxtReq := { mw_pDUSessionResourceSetupItemCxtReq ( PX_PDU_SESSION_ID, @@ -4403,9 +4395,9 @@ module NGAP_TCFunctions { * ) }, - ?, - ?, - ? + p_allowedNSSAI := ?, + p_uESecurityCapabilities := ?, + p_nextHopNH := ? ))); @@ -6098,11 +6090,11 @@ module NGAP_TCFunctions { // Body f_send_NGAP_PDU( m_ngap_initMsg( - m_n2_InitialContextSetupRequest( + f_m_n2_InitialContextSetupRequest( -, -, - m_gUAMI, - { + p_gUAMI := m_gUAMI, + p_pDUSessionResourceSetupListCxtReq := { { PX_PDU_SESSION_ID, omit, @@ -6137,13 +6129,12 @@ module NGAP_TCFunctions { omit } }, - { + p_allowedNSSAI := { m_allowedNSSAI_Item( m_s_NSSAI('00'O, '000000'O) ) }, - m_uESecurityCapabilities, - - + p_uESecurityCapabilities := m_uESecurityCapabilities ) ) ); diff --git a/ttcn/LibNGAP/lib/LibNGAP_Templates.ttcn b/ttcn/LibNGAP/lib/LibNGAP_Templates.ttcn index 7f58d5959935388b3fa8c0cc44c93854e9473403..73ade7ca2853160a06e0a7ec8652384dbf782d64 100644 --- a/ttcn/LibNGAP/lib/LibNGAP_Templates.ttcn +++ b/ttcn/LibNGAP/lib/LibNGAP_Templates.ttcn @@ -1092,26 +1092,40 @@ module LibNGAP_Templates { /** * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.1 INITIAL CONTEXT SETUP REQUEST */ - template (value) InitiatingMessage m_n2_InitialContextSetupRequest( - in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, - in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, - in template (value) GUAMI p_gUAMI, - in template (value) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq, - in template (value) AllowedNSSAI p_allowedNSSAI, - in template (value) UESecurityCapabilities p_uESecurityCapabilities, - in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH - ) := { + function f_m_n2_InitialContextSetupRequest(template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, + template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, + template (omit) AMFName p_amfName := omit, + template (omit) UEAggregateMaximumBitRate p_uEAggregateMaximumBitRate := omit, + template (omit) CoreNetworkAssistanceInformationForInactive p_coreNetworkAssistanceInformationForInactive := omit, + template (value) GUAMI p_gUAMI, + template (omit) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq := omit, + template (value) AllowedNSSAI p_allowedNSSAI, + template (value) UESecurityCapabilities p_uESecurityCapabilities, + template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH, + template (omit) TraceActivation p_traceActivation := omit, + template (omit) MobilityRestrictionList p_mobilityRestrictionList := omit, + template (omit) UERadioCapability p_uERadioCapability := omit, + template (omit) IndexToRFSP p_indexToRFSP := PX_Index_to_RAT_Frequency_Selection_Priority, + template (omit) MaskedIMEISV p_maskedIMEISV := PX_MaskedIMEISV, + template (omit) NAS_PDU p_nAS_PDU := omit, + template (omit) EmergencyFallbackIndicator p_emergencyFallbackIndicator := omit, + template (omit) RRCInactiveTransitionReportRequest p_rRCInactiveTransitionReportRequest := omit, + template (omit) RedirectionVoiceFallback p_redirectionVoiceFallback := omit, + template (omit) LocationReportingRequestType p_locationReportingRequestType := omit, + template (omit) SRVCCOperationPossible p_sRVCCOperationPossible := omit, + template (omit) IAB_Authorized p_iAB_Authorized := omit, + template (omit) Enhanced_CoverageRestriction p_enhanced_CoverageRestriction := omit, + template (omit) Extended_ConnectedTime p_extended_ConnectedTime := PX_EXTENDED_CONNECTED_TIME, + template (omit) UE_DifferentiationInfo p_uE_DifferentiationInfo := omit, + template (omit) NRUESidelinkAggregateMaximumBitrate p_nRUESidelinkAggregateMaximumBitrate := omit, + template (omit) LTEUESidelinkAggregateMaximumBitrate p_lTEUESidelinkAggregateMaximumBitrate := omit, + template (omit) UERadioCapabilityID p_uERadioCapabilityID := omit) + return template (value) InitiatingMessage { + var template (value) InitiatingMessage pdu := { procedureCode := id_InitialContextSetup, criticality := reject, value_ := { InitialContextSetupRequest := { - - - - - - - protocolIEs := { { id := id_AMF_UE_NGAP_ID, @@ -1122,220 +1136,341 @@ module LibNGAP_Templates { id := id_RAN_UE_NGAP_ID, criticality := reject, value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } - }, - { - id := id_PDUSessionResourceSetupListCxtReq, - criticality := reject, - value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } } } } } - } // End of template m_n2_InitialContextSetupRequest + }; + var integer idx := lengthof(pdu.value_.InitialContextSetupRequest.protocolIEs); - template (value) InitiatingMessage m_n2_InitialContextSetupRequest_noPDUSessionResourceSetupListCxtReq( - in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, - in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, - in template (value) GUAMI p_gUAMI, - in template (value) AllowedNSSAI p_allowedNSSAI, - in template (value) UESecurityCapabilities p_uESecurityCapabilities, - in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH - ) := { - procedureCode := id_InitialContextSetup, - criticality := reject, - value_ := { - InitialContextSetupRequest := { - protocolIEs := { + /* Old AMF */ + if (isvalue(p_amfName)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_AMF_UE_NGAP_ID, + id := id_AMFName, criticality := reject, - value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } - }, - { - id := id_RAN_UE_NGAP_ID, - criticality := reject, - value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } - }, - { - id := id_GUAMI, - criticality := reject, - value_ := { GUAMI := p_gUAMI } - }, - { - id := id_AllowedNSSAI, - criticality := reject, - value_ := { AllowedNSSAI := p_allowedNSSAI } - }, + value_ := { AMFName := p_amfName } + }; + idx := idx + 1; + } + + /* UE Aggregate Maximum Bit Rate */ + if (isvalue(p_uEAggregateMaximumBitRate)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_UESecurityCapabilities, + id := id_UEAggregateMaximumBitRate, criticality := reject, - value_ := { UESecurityCapabilities := p_uESecurityCapabilities } - }, + value_ := { UEAggregateMaximumBitRate := p_uEAggregateMaximumBitRate } + }; + idx := idx + 1; + } + + /* Core Network Assistance Information for RRC INACTIVE */ + if (isvalue(p_coreNetworkAssistanceInformationForInactive)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_SecurityKey, - criticality := reject, - value_ := { SecurityKey := p_nextHopNH } + id := id_CoreNetworkAssistanceInformationForInactive, + criticality := ignore, + value_ := { CoreNetworkAssistanceInformationForInactive := p_coreNetworkAssistanceInformationForInactive } + }; + idx := idx + 1; } - } - } - } - } // End of template m_n2_InitialContextSetupRequest_noPDUSessionResourceSetupListCxtReq - /** - * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.1 INITIAL CONTEXT SETUP REQUEST - */ - template (value) InitiatingMessage m_n2_InitialContextSetupRequest_optional_TraceActivation( - in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, - in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, - in template (value) GUAMI p_gUAMI, - in template (value) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq, - in template (value) AllowedNSSAI p_allowedNSSAI, - in template (value) UESecurityCapabilities p_uESecurityCapabilities, - in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH, - in template (value) TraceActivation p_traceActivation - ) := { - procedureCode := id_InitialContextSetup, - criticality := reject, - value_ := { - InitialContextSetupRequest := { - protocolIEs := { - { - id := id_AMF_UE_NGAP_ID, - criticality := reject, - value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } - }, - { - id := id_RAN_UE_NGAP_ID, - criticality := reject, - value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } - }, + /* GUAMI */ + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_GUAMI, criticality := reject, value_ := { GUAMI := p_gUAMI } - }, + }; + idx := idx + 1; + + /* PDU Session Resource Setup Request List */ + if (isvalue(p_pDUSessionResourceSetupListCxtReq)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_PDUSessionResourceSetupListCxtReq, criticality := reject, value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } - }, + }; + idx := idx + 1; + } + + /* Allowed NSSAI */ + if (isvalue(p_allowedNSSAI)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_AllowedNSSAI, criticality := reject, value_ := { AllowedNSSAI := p_allowedNSSAI } - }, + }; + idx := idx + 1; + } + + /* UE Security Capabilities */ + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_UESecurityCapabilities, criticality := reject, value_ := { UESecurityCapabilities := p_uESecurityCapabilities } - }, + }; + idx := idx + 1; + + /* Security Key */ + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_SecurityKey, criticality := reject, value_ := { SecurityKey := p_nextHopNH } - }, + }; + idx := idx + 1; + + /* Trace Activation */ + if (isvalue(p_traceActivation)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_TraceActivation, criticality := ignore, value_ := { TraceActivation := p_traceActivation } + }; + idx := idx + 1; } + + /* Mobility Restriction List */ + if (isvalue(p_mobilityRestrictionList)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_MobilityRestrictionList, + criticality := ignore, + value_ := { MobilityRestrictionList := p_mobilityRestrictionList } + }; + idx := idx + 1; } + + /* UE Radio Capability */ + if (isvalue(p_uERadioCapability)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_UERadioCapability, + criticality := ignore, + value_ := { UERadioCapability := p_uERadioCapability } + }; + idx := idx + 1; } + + /* Index to RAT/Frequency Selection Priority */ + if (isvalue(p_indexToRFSP)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_IndexToRFSP, + criticality := ignore, + value_ := { IndexToRFSP := p_indexToRFSP } + }; + idx := idx + 1; } - } // End of template m_n2_InitialContextSetupRequest_optional_TraceActivation - /** - * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.1 INITIAL CONTEXT SETUP REQUEST - */ - template (value) InitiatingMessage m_n2_InitialContextSetupRequest_optional_MobilityRestriction( - in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, - in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, - in template (value) GUAMI p_gUAMI, - in template (value) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq, - in template (value) AllowedNSSAI p_allowedNSSAI, - in template (value) UESecurityCapabilities p_uESecurityCapabilities, - in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH, - in template (value) MobilityRestrictionList p_mobilityRestrictionList - ) := { - procedureCode := id_InitialContextSetup, - criticality := reject, - value_ := { - InitialContextSetupRequest := { - protocolIEs := { + /* Masked IMEISV */ + if (isvalue(p_maskedIMEISV)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_AMF_UE_NGAP_ID, - criticality := reject, - value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } - }, + id := id_MaskedIMEISV, + criticality := ignore, + value_ := { MaskedIMEISV := p_maskedIMEISV } + }; + idx := idx + 1; + } + + /* NAS-PDU */ + if (isvalue(p_nAS_PDU)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_RAN_UE_NGAP_ID, - criticality := reject, - value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } - }, + id := id_NAS_PDU, + criticality := ignore, + value_ := { nAS_PDU := p_nAS_PDU } + }; + idx := idx + 1; + } + + /* Emergency Fallback Indicator*/ + if (isvalue(p_emergencyFallbackIndicator)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_GUAMI, + id := id_EmergencyFallbackIndicator, criticality := reject, - value_ := { GUAMI := p_gUAMI } - }, + value_ := { EmergencyFallbackIndicator := p_emergencyFallbackIndicator} + }; + idx := idx + 1; + } + + /* RRC Inactive Transition Report Request */ + if (isvalue(p_rRCInactiveTransitionReportRequest)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_PDUSessionResourceSetupListCxtReq, - criticality := reject, - value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } - }, + id := id_RRCInactiveTransitionReportRequest, + criticality := ignore, + value_ := { RRCInactiveTransitionReportRequest := p_rRCInactiveTransitionReportRequest} + }; + idx := idx + 1; + } + + /* TODO: UE Radio Capability for Paging */ + + /* Redirection for Voice EPS Fallback */ + if (isvalue(p_redirectionVoiceFallback)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_AllowedNSSAI, - criticality := reject, - value_ := { AllowedNSSAI := p_allowedNSSAI } - }, + id := id_RedirectionVoiceFallback, + criticality := ignore, + value_ := { RedirectionVoiceFallback := p_redirectionVoiceFallback } + }; + idx := idx + 1; + } + + /* Location Reporting Request Type */ + if (isvalue(p_locationReportingRequestType)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_UESecurityCapabilities, - criticality := reject, - value_ := { UESecurityCapabilities := p_uESecurityCapabilities } - }, + id := id_LocationReportingRequestType, + criticality := ignore, + value_ := { LocationReportingRequestType := p_locationReportingRequestType } + }; + idx := idx + 1; + } + + /* SRVCC Operation Possible */ + if (isvalue(p_sRVCCOperationPossible)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_SecurityKey, - criticality := reject, - value_ := { SecurityKey := p_nextHopNH } - }, + id := id_SRVCCOperationPossible, + criticality := ignore, + value_ := { SRVCCOperationPossible := p_sRVCCOperationPossible } + }; + idx := idx + 1; + } + + /* IAB Authorized */ + if (isvalue(p_iAB_Authorized)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_TraceActivation, + id := id_IAB_Authorized, criticality := ignore, - value_ := { MobilityRestrictionList := p_mobilityRestrictionList } + value_ := { IAB_Authorized := p_iAB_Authorized } + }; + idx := idx + 1; } + + + /* Enhanced Coverage Restriction */ + if (isvalue(p_enhanced_CoverageRestriction)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_Enhanced_CoverageRestriction, + criticality := ignore, + value_ := { Enhanced_CoverageRestriction := p_enhanced_CoverageRestriction } + }; + idx := idx + 1; } + + /* Extended Connected Time */ + if (isvalue(p_extended_ConnectedTime)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_Extended_ConnectedTime, + criticality := ignore, + value_ := { Extended_ConnectedTime := p_extended_ConnectedTime } + }; + idx := idx + 1; } + + /* UE Differentiation Information */ + if (isvalue(p_uE_DifferentiationInfo)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_UE_DifferentiationInfo, + criticality := ignore, + value_ := { UE_DifferentiationInfo := p_uE_DifferentiationInfo } + }; + idx := idx + 1; } - } // End of template m_n2_InitialContextSetupRequest_optional_MobilityRestriction - /** - * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.1 INITIAL CONTEXT SETUP REQUEST - */ - template (value) InitiatingMessage m_n2_InitialContextSetupRequest_differentOptionals( - in template (value) AMF_UE_NGAP_ID p_amfUeNgapID := PX_AMF_UE_NGAP_ID, - in template (value) RAN_UE_NGAP_ID p_ranUeNgapID := PX_RAN_UE_NGAP_ID, - in template (value) GUAMI p_gUAMI, - in template (value) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq, - in template (value) AllowedNSSAI p_allowedNSSAI, - in template (value) UESecurityCapabilities p_uESecurityCapabilities, - in template (value) SecurityKey p_nextHopNH := PX_NEXT_HOP_NH, - in template (value) UERadioCapability p_uERadioCapability, - in template (value) IndexToRFSP p_indexToRFSP := PX_Index_to_RAT_Frequency_Selection_Priority, - in template (value) MaskedIMEISV p_maskedIMEISV := PX_MaskedIMEISV, - in template (value) NAS_PDU p_nasPdu, - in template (value) EmergencyFallbackIndicator p_emergencyFallbackIndicator, - in template (value) RRCInactiveTransitionReportRequest p_rRCInactiveTransitionReportRequest, - in template (value) RedirectionVoiceFallback p_redirectionVoiceFallback, - in template (value) LocationReportingRequestType p_locationReportingRequestType, - in template (value) SRVCCOperationPossible p_sRVCCOperationPossible, - in template (value) IAB_Authorized p_iAB_Authorized, - in template (value) Enhanced_CoverageRestriction p_enhanced_CoverageRestriction, - in template (value) Extended_ConnectedTime p_extended_ConnectedTime := PX_EXTENDED_CONNECTED_TIME, - in template (value) UE_DifferentiationInfo p_uE_DifferentiationInfo, - in template (value) NRUESidelinkAggregateMaximumBitrate p_nRUESidelinkAggregateMaximumBitrate, - in template (value) LTEUESidelinkAggregateMaximumBitrate p_lTEUESidelinkAggregateMaximumBitrate, - in template (value) UERadioCapabilityID p_uERadioCapabilityID + /* TODO: NR V2X Services Authorized */ + /* TODO: LTE V2X Services Authorized */ - ) := { + /* NR UE Sidelink Aggregate Maximum Bit Rate */ + if (isvalue(p_nRUESidelinkAggregateMaximumBitrate)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_NRUESidelinkAggregateMaximumBitrate, + criticality := ignore, + value_ := { NRUESidelinkAggregateMaximumBitrate := p_nRUESidelinkAggregateMaximumBitrate } + }; + idx := idx + 1; + } + + /* LTE UE Sidelink Aggregate Maximum Bit Rate */ + if (isvalue(p_lTEUESidelinkAggregateMaximumBitrate)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_LTEUESidelinkAggregateMaximumBitrate, + criticality := ignore, + value_ := { LTEUESidelinkAggregateMaximumBitrate := p_lTEUESidelinkAggregateMaximumBitrate } + }; + idx := idx + 1; + } + + /* ... TODO: lots other optional IEs ... */ + + /* UE Radio Capability ID */ + if (isvalue(p_uERadioCapabilityID)) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_UERadioCapabilityID, + criticality := reject, + value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + }; + idx := idx + 1; + } + + /* ... TODO: lots other optional IEs ... */ + + return pdu; + } // End of f_m_n2_InitialContextSetupRequest + + + } // End of group Send + + group Receive { + + function f_mw_n2_InitialContextSetupRequest(template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, + template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, + template AMFName p_amfName := omit, + template UEAggregateMaximumBitRate p_uEAggregateMaximumBitRate := omit, + template CoreNetworkAssistanceInformationForInactive p_coreNetworkAssistanceInformationForInactive := omit, + template (present) GUAMI p_gUAMI := ?, + template PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq := omit, + template (present) AllowedNSSAI p_allowedNSSAI := ?, + template (present) UESecurityCapabilities p_uESecurityCapabilities := ?, + template (present) SecurityKey p_nextHopNH := ?, + template TraceActivation p_traceActivation := omit, + template MobilityRestrictionList p_mobilityRestrictionList := omit, + template UERadioCapability p_uERadioCapability := omit, + template IndexToRFSP p_indexToRFSP := omit, + template MaskedIMEISV p_maskedIMEISV := omit, + template NAS_PDU p_nAS_PDU := omit, + template EmergencyFallbackIndicator p_emergencyFallbackIndicator := omit, + template RRCInactiveTransitionReportRequest p_rRCInactiveTransitionReportRequest := omit, + template RedirectionVoiceFallback p_redirectionVoiceFallback := omit, + template LocationReportingRequestType p_locationReportingRequestType := omit, + template SRVCCOperationPossible p_sRVCCOperationPossible := omit, + template IAB_Authorized p_iAB_Authorized := omit, + template Enhanced_CoverageRestriction p_enhanced_CoverageRestriction := omit, + template Extended_ConnectedTime p_extended_ConnectedTime := omit, + template UE_DifferentiationInfo p_uE_DifferentiationInfo := omit, + template NRUESidelinkAggregateMaximumBitrate p_nRUESidelinkAggregateMaximumBitrate := omit, + template LTEUESidelinkAggregateMaximumBitrate p_lTEUESidelinkAggregateMaximumBitrate := omit, + template UERadioCapabilityID p_uERadioCapabilityID := omit) + return template (present) InitiatingMessage { + var template (present) InitiatingMessage pdu := { procedureCode := id_InitialContextSetup, criticality := reject, value_ := { @@ -1350,179 +1485,305 @@ module LibNGAP_Templates { id := id_RAN_UE_NGAP_ID, criticality := reject, value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } - }, - { - id := id_GUAMI, - criticality := reject, - value_ := { GUAMI := p_gUAMI } - }, - { - id := id_PDUSessionResourceSetupListCxtReq, - criticality := reject, - value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } - }, + } + } + } + } + }; + var integer idx := lengthof(pdu.value_.InitialContextSetupRequest.protocolIEs); + + /* Old AMF */ + if (not istemplatekind(p_amfName, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_AMFName, + criticality := reject, + value_ := { AMFName := p_amfName } + }; + idx := idx + 1; + } + + /* UE Aggregate Maximum Bit Rate */ + if (not istemplatekind(p_uEAggregateMaximumBitRate, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_UEAggregateMaximumBitRate, + criticality := reject, + value_ := { UEAggregateMaximumBitRate := p_uEAggregateMaximumBitRate } + }; + idx := idx + 1; + } + + /* Core Network Assistance Information for RRC INACTIVE */ + if (not istemplatekind(p_coreNetworkAssistanceInformationForInactive, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_CoreNetworkAssistanceInformationForInactive, + criticality := ignore, + value_ := { CoreNetworkAssistanceInformationForInactive := p_coreNetworkAssistanceInformationForInactive } + }; + idx := idx + 1; + } + + /* GUAMI */ + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_GUAMI, + criticality := reject, + value_ := { GUAMI := p_gUAMI } + }; + idx := idx + 1; + + /* PDU Session Resource Setup Request List */ + if (not istemplatekind(p_pDUSessionResourceSetupListCxtReq, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_PDUSessionResourceSetupListCxtReq, + criticality := reject, + value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } + }; + idx := idx + 1; + } + + /* Allowed NSSAI */ + if (not istemplatekind(p_allowedNSSAI, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_AllowedNSSAI, + criticality := reject, + value_ := { AllowedNSSAI := p_allowedNSSAI } + }; + idx := idx + 1; + } + + /* UE Security Capabilities */ + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { - id := id_AllowedNSSAI, - criticality := reject, - value_ := { AllowedNSSAI := p_allowedNSSAI } - }, - { - id := id_UESecurityCapabilities, + id := id_UESecurityCapabilities, criticality := reject, - value_ := { UESecurityCapabilities := p_uESecurityCapabilities } - }, + value_ := { UESecurityCapabilities := p_uESecurityCapabilities } + }; + idx := idx + 1; + + /* Security Key */ + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_SecurityKey, criticality := reject, value_ := { SecurityKey := p_nextHopNH } - }, + }; + idx := idx + 1; + + /* Trace Activation */ + if (not istemplatekind(p_traceActivation, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_TraceActivation, + criticality := ignore, + value_ := { TraceActivation := p_traceActivation } + }; + idx := idx + 1; + } + + /* Mobility Restriction List */ + if (not istemplatekind(p_mobilityRestrictionList, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := + { + id := id_MobilityRestrictionList, + criticality := ignore, + value_ := { MobilityRestrictionList := p_mobilityRestrictionList } + }; + idx := idx + 1; + } + + /* UE Radio Capability */ + if (not istemplatekind(p_uERadioCapability, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_UERadioCapability, criticality := ignore, value_ := { UERadioCapability := p_uERadioCapability } - }, + }; + idx := idx + 1; + } + + /* Index to RAT/Frequency Selection Priority */ + if (not istemplatekind(p_indexToRFSP, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_IndexToRFSP, criticality := ignore, value_ := { IndexToRFSP := p_indexToRFSP } - }, + }; + idx := idx + 1; + } + + /* Masked IMEISV */ + if (not istemplatekind(p_maskedIMEISV, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_MaskedIMEISV, criticality := ignore, value_ := { MaskedIMEISV := p_maskedIMEISV } - }, + }; + idx := idx + 1; + } + + /* NAS-PDU */ + if (not istemplatekind(p_nAS_PDU, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_NAS_PDU, criticality := ignore, - value_ := { NAS_PDU := p_nasPdu } - }, + value_ := { nAS_PDU := p_nAS_PDU } + }; + idx := idx + 1; + } + + /* Emergency Fallback Indicator*/ + if (not istemplatekind(p_emergencyFallbackIndicator, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_EmergencyFallbackIndicator, criticality := reject, value_ := { EmergencyFallbackIndicator := p_emergencyFallbackIndicator} - }, + }; + idx := idx + 1; + } + + /* RRC Inactive Transition Report Request */ + if (not istemplatekind(p_rRCInactiveTransitionReportRequest, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_RRCInactiveTransitionReportRequest, criticality := ignore, value_ := { RRCInactiveTransitionReportRequest := p_rRCInactiveTransitionReportRequest} - }, + }; + idx := idx + 1; + } + + /* TODO: UE Radio Capability for Paging */ + + /* Redirection for Voice EPS Fallback */ + if (not istemplatekind(p_redirectionVoiceFallback, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_RedirectionVoiceFallback, criticality := ignore, value_ := { RedirectionVoiceFallback := p_redirectionVoiceFallback } - } , + }; + idx := idx + 1; + } + + /* Location Reporting Request Type */ + if (not istemplatekind(p_locationReportingRequestType, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_LocationReportingRequestType, criticality := ignore, value_ := { LocationReportingRequestType := p_locationReportingRequestType } - }, + }; + idx := idx + 1; + } + + /* SRVCC Operation Possible */ + if (not istemplatekind(p_sRVCCOperationPossible, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_SRVCCOperationPossible, criticality := ignore, value_ := { SRVCCOperationPossible := p_sRVCCOperationPossible } - }, + }; + idx := idx + 1; + } + + /* IAB Authorized */ + if (not istemplatekind(p_iAB_Authorized, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_IAB_Authorized, criticality := ignore, value_ := { IAB_Authorized := p_iAB_Authorized } - }, + }; + idx := idx + 1; + } + + + /* Enhanced Coverage Restriction */ + if (not istemplatekind(p_enhanced_CoverageRestriction, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_Enhanced_CoverageRestriction, criticality := ignore, value_ := { Enhanced_CoverageRestriction := p_enhanced_CoverageRestriction } - }, + }; + idx := idx + 1; + } + + /* Extended Connected Time */ + if (not istemplatekind(p_extended_ConnectedTime, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_Extended_ConnectedTime, criticality := ignore, value_ := { Extended_ConnectedTime := p_extended_ConnectedTime } - }, + }; + idx := idx + 1; + } + + /* UE Differentiation Information */ + if (not istemplatekind(p_uE_DifferentiationInfo, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_UE_DifferentiationInfo, criticality := ignore, value_ := { UE_DifferentiationInfo := p_uE_DifferentiationInfo } - }, + }; + idx := idx + 1; + } + + /* TODO: NR V2X Services Authorized */ + /* TODO: LTE V2X Services Authorized */ + + /* NR UE Sidelink Aggregate Maximum Bit Rate */ + if (not istemplatekind(p_nRUESidelinkAggregateMaximumBitrate, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_NRUESidelinkAggregateMaximumBitrate, criticality := ignore, value_ := { NRUESidelinkAggregateMaximumBitrate := p_nRUESidelinkAggregateMaximumBitrate } - }, + }; + idx := idx + 1; + } + + /* LTE UE Sidelink Aggregate Maximum Bit Rate */ + if (not istemplatekind(p_lTEUESidelinkAggregateMaximumBitrate, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_LTEUESidelinkAggregateMaximumBitrate, criticality := ignore, value_ := { LTEUESidelinkAggregateMaximumBitrate := p_lTEUESidelinkAggregateMaximumBitrate } - }, + }; + idx := idx + 1; + } + + /* ... TODO: lots other optional IEs ... */ + + /* UE Radio Capability ID */ + if (not istemplatekind(p_uERadioCapabilityID, "omit")) { + pdu.value_.InitialContextSetupRequest.protocolIEs[idx] := { id := id_UERadioCapabilityID, criticality := reject, value_ := { UERadioCapabilityID := p_uERadioCapabilityID } + }; + idx := idx + 1; } + /* ... TODO: lots other optional IEs ... */ - } - } - } - } // End of template m_n2_InitialContextSetupRequest_differentOptionals - - } // End of group Send - - group Receive { - - /** - * @see ETSI TS 138 413 V16.12.0 (2023-05) Clause 9.2.2.1 INITIAL CONTEXT SETUP REQUEST - */ - template (present) InitiatingMessage mw_n2_InitialContextSetupRequest_withPDUSessionList( - template (present) AMF_UE_NGAP_ID p_amfUeNgapID := ?, - template (present) RAN_UE_NGAP_ID p_ranUeNgapID := ?, - template (present) GUAMI p_gUAMI := ?, - template (present) PDUSessionResourceSetupListCxtReq p_pDUSessionResourceSetupListCxtReq := ?, - template (present) AllowedNSSAI p_allowedNSSAI := ?, - template (present) UESecurityCapabilities p_uESecurityCapabilities := ?, - template (present) SecurityKey p_nextHopNH := ? - ) := { - procedureCode := id_InitialContextSetup, - criticality := reject, - value_ := { - InitialContextSetupRequest := { - protocolIEs := { - { - id := id_AMF_UE_NGAP_ID, - criticality := reject, - value_ := { AMF_UE_NGAP_ID := p_amfUeNgapID } - }, - { - id := id_RAN_UE_NGAP_ID, - criticality := reject, - value_ := { RAN_UE_NGAP_ID := p_ranUeNgapID } - }, - { - id := id_GUAMI, - criticality := reject, - value_ := { GUAMI := p_gUAMI } - }, - { - id := id_PDUSessionResourceSetupListCxtReq, - criticality := reject, - value_ := { PDUSessionResourceSetupListCxtReq := p_pDUSessionResourceSetupListCxtReq } - }, - { - id := id_AllowedNSSAI, - criticality := reject, - value_ := { AllowedNSSAI := p_allowedNSSAI } - }, - { - id := id_UESecurityCapabilities, - criticality := reject, - value_ := { UESecurityCapabilities := p_uESecurityCapabilities } - }, - { - id := id_SecurityKey, - criticality := reject, - value_ := { SecurityKey := p_nextHopNH } - } - } - } - } - } // End of template mw_n2_InitialContextSetupRequest + return pdu; + } // End of f_mw_n2_InitialContextSetupRequest } // End of group Receive