pycrate/pycrate_corenet/ProcCNNgap.py

2839 lines
71 KiB
Python
Raw Permalink Normal View History

2020-04-15 16:13:47 +00:00
# -*- coding: UTF-8 -*-
#/**
# * Software Name : pycrate
# * Version : 0.4
# *
# * Copyright 2020. Benoit Michau. P1Sec.
# *
# * This library is free software; you can redistribute it and/or
# * modify it under the terms of the GNU Lesser General Public
# * License as published by the Free Software Foundation; either
# * version 2.1 of the License, or (at your option) any later version.
# *
# * This library is distributed in the hope that it will be useful,
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# * Lesser General Public License for more details.
# *
# * You should have received a copy of the GNU Lesser General Public
# * License along with this library; if not, write to the Free Software
# * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# * MA 02110-1301 USA
# *
# *--------------------------------------------------------
# * File Name : pycrate_corenet/ProcCNNgap.py
# * Created : 2020-04-15
# * Authors : Benoit Michau
# *--------------------------------------------------------
#*/
2020-04-28 12:19:50 +00:00
__all__ = [
"NGAPSigProc",
"NGAPNonUESigProc",
#
"NGAPPDUSessResSetup",
"NGAPPDUSessResRelease",
"NGAPPDUSessResModify",
"NGAPPDUSessResNotify",
"NGAPPDUSessResModifyInd",
"NGAPInitialContextSetup",
"NGAPUEContextReleaseRequest",
"NGAPUEContextRelease",
"NGAPUEContextModification",
"NGAPRRCInactiveTransitionReport",
"NGAPHandoverPreparation",
"NGAPHandoverResourceAllocation",
"NGAPHandoverNotification",
"NGAPPathSwitchRequest",
"NGAPHandoverCancel",
"NGAPUplinkRANStatusTransfer",
"NGAPDownlinkRANStatusTransfer",
"NGAPPaging",
"NGAPInitialUEMessage",
"NGAPDownlinkNASTransport",
"NGAPUplinkNASTransport",
"NGAPNASNonDeliveryInd",
"NGAPRerouteNASRequest",
"NGAPNGSetup",
"NGAPRANConfigUpdate",
"NGAPAMFConfigUpdate",
"NGAPNGResetCN",
"NGAPNGResetRAN",
"NGAPErrorIndNonUECN",
"NGAPErrorIndNonUERAN",
"NGAPErrorIndCN",
"NGAPErrorIndRAN",
"NGAPAMFStatusInd",
"NGAPOverloadStart",
"NGAPOverloadStop",
"NGAPUplinkRANConfigTransfer",
"NGAPDownlinkRANConfigTransfer",
"NGAPWriteReplaceWarning",
"NGAPPWSCancel",
"NGAPPWSRestartInd",
"NGAPPWSFailureInd",
"NGAPDownlinkUENRPPaTransport",
"NGAPUplinkUENRPPaTransport",
"NGAPDownlinkNonUENRPPaTransport",
"NGAPUplinkNonUENRPPaTransport",
"NGAPTraceStart",
"NGAPTraceFailureInd",
"NGAPDeactivateTrace",
"NGAPCellTrafficTrace",
"NGAPLocationReportingControl",
"NGAPLocationReportingFailureInd",
"NGAPLocationReport",
"NGAPUETNLABindingRelease",
"NGAPUERadioCapabilityInfoInd",
"NGAPUERadioCapabilityCheck",
"NGAPSecondaryRATDataUsageReport",
"NGAPUplinkRIMInfoTransfer",
"NGAPDownlinkRIMInfoTransfer",
#
"NGAPProcRANDispatcher",
"NGAPProcCNDispatcher",
"NGAPNonUEProcRANDispatcher",
"NGAPNonUEProcCNDispatcher",
]
2020-04-15 16:13:47 +00:00
from .utils import *
from .ProcProto import *
#------------------------------------------------------------------------------#
# NGAP signalling procedure
# TS 38.413, version g10
# Core Network side
#------------------------------------------------------------------------------#
class NGAPSigProc(LinkSigProc):
"""NGAP UE-associated signalling procedure handler
instance attributes:
- Name : procedure name
- NG : reference to the UENGd instance running this procedure
- GNB : reference to the GNBd instance connected by NG
2020-04-15 16:13:47 +00:00
- Server: reference to the CorenetServer instance handling the gNB
- UE : reference to the UEd instance connected by NG
2020-04-15 16:13:47 +00:00
- Desc : ASN.1 procedure description
- Code : procedure code
- Crit : procedure criticality
- Cont : ASN.1 procedure PDU(s) content
- Encod : custom PDU encoders with fixed values
- Decod : custom PDU decoders with transform functions
"""
TRACK_PDU = True
# for UE-related signalling
UE = None
def __init__(self, ngd):
2020-04-15 16:13:47 +00:00
#
self.Name = self.__class__.__name__
self.NG = ngd
self.GNB = ngd.GNB
self.Server = ngd.GNB.Server
if ngd.UE:
self.UE = ngd.UE
2020-04-15 16:13:47 +00:00
else:
self._log('WNG', 'no UEd instance attached')
#
# to store PDU traces
self._pdu = []
# list of PDU to be sent to the gNB
self._pdu_tx = []
# enable NAS procedure to set callback to .postprocess() before self terminates
self._cb = None
#
self._log('DBG', 'instantiating procedure')
def _log(self, logtype, msg):
self.NG._log(logtype, '[%s] %s' % (self.Name, msg))
2020-04-15 16:13:47 +00:00
def _recv(self, pdu):
if self.TRACK_PDU:
self._pdu.append( (time(), 'UL', pdu) )
self.errcause, self.UEInfo = None, {}
try:
self.decode_pdu(pdu, self.UEInfo)
except Exception as err:
self._err = err
self._log('ERR', 'decode_pdu (%s), sending error indication' % err)
self.errcause = ('protocol', 'abstract-syntax-error-reject')
def recv(self, pdu):
self._recv(pdu)
self._log('ERR', 'recv() not implemented')
def _send(self):
if self.TRACK_PDU:
for pdu in self._pdu_tx:
self._pdu.append( (time(), 'DL', pdu) )
return self._pdu_tx
def send(self):
self._log('ERR', 'send() not implemented')
return self._send()
def trigger(self):
return []
def abort(self):
if self.Code in self.NG.Proc:
del self.NG.Proc[self.Code]
2020-04-15 16:13:47 +00:00
self._log('INF', 'aborting')
class NGAPNonUESigProc(LinkSigProc):
"""NGAP non-UE-associated signalling procedure handler
instance attributes:
- Name : procedure name
- GNB : reference to the GNBd instance connected by NG
2020-04-15 16:13:47 +00:00
- Server: reference to the CorenetServer instance handling the gNB
- Desc : ASN.1 procedure description
- Code : procedure code
- Crit : procedure criticality
- Cont : ASN.1 procedure PDU(s) content
- Encod : custom PDU encoders with fixed values
- Decod : custom PDU decoders with transform functions
"""
TRACK_PDU = True
def __init__(self, gnbd):
#
self.Name = self.__class__.__name__
self.GNB = gnbd
self.Server = gnbd.Server
#
# to store PDU traces
self._pdu = []
# list of PDU to be sent to the HNB
self._pdu_tx = []
#
self._log('DBG', 'instantiating procedure')
def _log(self, logtype, msg):
self.GNB._log(logtype, '[%s] %s' % (self.Name, msg))
def _recv(self, pdu):
if self.TRACK_PDU:
self._pdu.append( (time(), 'UL', pdu) )
self.errcause, self.GNBInfo = None, {}
try:
self.decode_pdu(pdu, self.GNBInfo)
except Exception as err:
self._err = err
self._log('ERR', 'decode_pdu (%s), sending error indication' % err)
self.errcause = ('protocol', 'abstract-syntax-error-reject')
def recv(self, pdu):
self._recv(pdu)
self._log('ERR', 'recv() not implemented')
def _send(self):
if self.TRACK_PDU:
for pdu in self._pdu_tx:
self._pdu.append( (time(), 'DL', pdu) )
return self._pdu_tx
def send(self):
self._log('ERR', 'send() not implemented')
return self._send()
def trigger(self):
return []
def abort(self):
if self.Code in self.GNB.Proc:
del self.GNB.Proc[self.Code]
self._log('INF', 'aborting')
#------------------------------------------------------------------------------#
# PDU Session Management Procedures
# TS 38.413, section 8.2
#------------------------------------------------------------------------------#
class NGAPPDUSessResSetup(NGAPSigProc):
"""PDU Session Resource Setup: TS 38.413, section 8.2.1
CN-initiated
request-response
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 38: NAS_PDU (O)
- 74: PDUSessionResourceSetupListSUReq (M)
- 83: RANPagingPriority (O)
- 85: RAN_UE_NGAP_ID (M)
- 110: UEAggregateMaximumBitRate (O)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 58: PDUSessionResourceFailedToSetupListSURes (O)
- 75: PDUSessionResourceSetupListSURes (O)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.pDUSessionResourceSetup
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
class NGAPPDUSessResRelease(NGAPSigProc):
"""PDU Session Resource Release: TS 38.413, section 8.2.2
CN-initiated
request-response
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 38: NAS_PDU (O)
- 79: PDUSessionResourceToReleaseListRelCmd (M)
- 83: RANPagingPriority (O)
- 85: RAN_UE_NGAP_ID (M)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 70: PDUSessionResourceReleasedListRelRes (M)
- 85: RAN_UE_NGAP_ID (M)
- 121: UserLocationInformation (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.pDUSessionResourceRelease
# Custom decoders
Decod = {
'ini': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-15 16:13:47 +00:00
'suc': ({}, {}),
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
class NGAPPDUSessResModify(NGAPSigProc):
"""PDU Session Resource Modify: TS 38.413, section 8.2.3
CN-initiated
request-response
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 64: PDUSessionResourceModifyListModReq (M)
- 83: RANPagingPriority (O)
- 85: RAN_UE_NGAP_ID (M)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 54: PDUSessionResourceFailedToModifyListModRes (O)
- 65: PDUSessionResourceModifyListModRes (O)
- 85: RAN_UE_NGAP_ID (M)
- 121: UserLocationInformation (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.pDUSessionResourceModify
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
class NGAPPDUSessResNotify(NGAPSigProc):
"""PDU Session Resource Notify: TS 38.413, section 8.2.4
2020-04-28 12:19:50 +00:00
RAN-initiated
2020-04-15 16:13:47 +00:00
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 66: PDUSessionResourceNotifyList (O)
- 67: PDUSessionResourceReleasedListNot (O)
- 85: RAN_UE_NGAP_ID (M)
- 121: UserLocationInformation (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.pDUSessionResourceNotify
# Custom decoders
Decod = {
'ini': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-15 16:13:47 +00:00
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPPDUSessResModifyInd(NGAPSigProc):
"""PDU Session Resource Modify Indication: TS 38.413, section 8.2.5
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request-response
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 63: PDUSessionResourceModifyListModInd (M)
- 85: RAN_UE_NGAP_ID (M)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 62: PDUSessionResourceModifyListModCfm (M)
- 85: RAN_UE_NGAP_ID (M)
- 131: PDUSessionResourceFailedToModifyListModCfm (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.pDUSessionResourceModifyIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
#------------------------------------------------------------------------------#
# UE Context Management Procedures
# TS 38.413, section 8.3
#------------------------------------------------------------------------------#
class NGAPInitialContextSetup(NGAPSigProc):
"""Initial Context Setup: TS 38.413, section 8.3.1
CN-initiated
request-reponse
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 0: AllowedNSSAI (M)
- 10: AMF_UE_NGAP_ID (M)
- 18: CoreNetworkAssistanceInformationForInactive (O)
- 24: EmergencyFallbackIndicator (O)
- 28: GUAMI (M)
- 31: IndexToRFSP (O)
- 33: LocationReportingRequestType (O)
- 34: MaskedIMEISV (O)
- 36: MobilityRestrictionList (O)
- 38: NAS_PDU (O)
- 48: AMFName (O)
- 71: PDUSessionResourceSetupListCxtReq (O)
- 85: RAN_UE_NGAP_ID (M)
- 91: RRCInactiveTransitionReportRequest (O)
- 94: SecurityKey (M)
- 108: TraceActivation (O)
- 110: UEAggregateMaximumBitRate (C)
- 117: UERadioCapability (O)
- 118: UERadioCapabilityForPaging (O)
- 119: UESecurityCapabilities (M)
- 146: RedirectionVoiceFallback (O)
- 165: CNAssistedRANTuning (O)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 55: PDUSessionResourceFailedToSetupListCxtRes (O)
- 72: PDUSessionResourceSetupListCxtRes (O)
- 85: RAN_UE_NGAP_ID (M)
UnsuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 19: CriticalityDiagnostics (O)
- 85: RAN_UE_NGAP_ID (M)
- 132: PDUSessionResourceFailedToSetupListCxtFail (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.initialContextSetup
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
class NGAPUEContextReleaseRequest(NGAPSigProc):
"""UE Context Release Request: TS 38.413, section 8.3.2
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 85: RAN_UE_NGAP_ID (M)
- 133: PDUSessionResourceListCxtRelReq (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uEContextReleaseRequest
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
recv = NGAPSigProc._recv
def trigger(self):
# copy the cause signaled by the gNB
Proc = self.NG.init_ngap_proc(NGAPUEContextRelease,
Cause=self.UEInfo['Cause'],
UE_NGAP_IDs=('uE-NGAP-ID-pair',
{'aMF-UE-NGAP-ID': self.NG.CtxId,
'rAN-UE-NGAP-ID': self.NG.CtxId}))
if Proc:
return [Proc]
else:
return []
2020-04-15 16:13:47 +00:00
class NGAPUEContextRelease(NGAPSigProc):
"""UE Context Release: TS 38.413, section 8.3.3
2020-04-15 16:13:47 +00:00
CN-initiated
request-reponse
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 15: Cause (M)
- 114: UE_NGAP_IDs (M)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 32: InfoOnRecommendedCellsAndRANNodesForPaging (O)
- 60: PDUSessionResourceListCxtRelCpl (O)
- 85: RAN_UE_NGAP_ID (M)
- 121: UserLocationInformation (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uEContextRelease
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-15 16:13:47 +00:00
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
send = NGAPSigProc._send
def _release_ng(self):
# TODO: suspend all PDU sessions
#self.NG.FGSM.pdu_suspend()
# update mobility state
if self.NG.FGMM.state != 'INACTIVE':
self.NG.FGMM.state = 'IDLE'
self._log('INF', 'UE disconnected, cause %r' % (self._NetInfo['Cause'], ))
#
# disconnect the NG interface to the gNB for the UE
self.NG.unset_ran()
self.NG.unset_ctx()
def recv(self, pdu):
# recv the NGAPUEContextRelease response
self._recv(pdu)
# remove from the NGAP procedure stack
try:
del self.NG.Proc[self.Code]
except Exception:
pass
self._release_ng()
def abort(self):
# remove from the NGAP procedure stack
try:
del self.NG.Proc[self.Code]
except Exception:
pass
self._log('INF', 'aborting')
self._release_ng()
2020-04-15 16:13:47 +00:00
class NGAPUEContextModification(NGAPSigProc):
"""UE Context Modification: TS 38.413, section 8.3.4
CN-initiated
request-reponse
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 18: CoreNetworkAssistanceInformationForInactive (O)
- 24: EmergencyFallbackIndicator (O)
- 31: IndexToRFSP (O)
- 40: AMF_UE_NGAP_ID (O)
- 83: RANPagingPriority (O)
- 85: RAN_UE_NGAP_ID (M)
- 91: RRCInactiveTransitionReportRequest (O)
- 94: SecurityKey (O)
- 110: UEAggregateMaximumBitRate (O)
- 119: UESecurityCapabilities (O)
- 162: GUAMI (O)
- 165: CNAssistedRANTuning (O)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 85: RAN_UE_NGAP_ID (M)
- 92: RRCState (O)
- 121: UserLocationInformation (O)
UnsuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 19: CriticalityDiagnostics (O)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uEContextModification
# Custom decoders
Decod = {
'ini': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-15 16:13:47 +00:00
'suc': ({}, {}),
'uns': ({}, {})
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
class NGAPRRCInactiveTransitionReport(NGAPSigProc):
"""RRC Inactive Transition Report: TS 38.413, section 8.3.5
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 85: RAN_UE_NGAP_ID (M)
- 92: RRCState (M)
- 121: UserLocationInformation (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.rRCInactiveTransitionReport
# Custom decoders
Decod = {
'ini': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-15 16:13:47 +00:00
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# UE Mobility Management Procedures
# TS 38.413, section 8.4
#------------------------------------------------------------------------------#
class NGAPHandoverPreparation(NGAPNonUESigProc):
"""Handover Preparation: TS 38.413, section 8.4.1
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request-reponse
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 22: DirectForwardingPathAvailability (O)
- 29: HandoverType (M)
- 61: PDUSessionResourceListHORqd (M)
- 85: RAN_UE_NGAP_ID (M)
- 101: SourceToTarget_TransparentContainer (M)
- 105: TargetID (M)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 29: HandoverType (M)
- 39: NASSecurityParametersFromNGRAN (C)
- 59: PDUSessionResourceHandoverList (O)
- 78: PDUSessionResourceToReleaseListHOCmd (O)
- 85: RAN_UE_NGAP_ID (M)
- 106: TargetToSource_TransparentContainer (M)
UnsuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 19: CriticalityDiagnostics (O)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.handoverPreparation
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
class NGAPHandoverResourceAllocation(NGAPNonUESigProc):
"""Handover Resource Allocation: TS 38.413, section 8.4.2
CN-initiated
request-reponse
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 0: AllowedNSSAI (M)
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 18: CoreNetworkAssistanceInformationForInactive (O)
- 28: GUAMI (M)
- 29: HandoverType (M)
- 33: LocationReportingRequestType (O)
- 34: MaskedIMEISV (O)
- 36: MobilityRestrictionList (O)
- 37: NAS_PDU (O)
- 41: NewSecurityContextInd (O)
- 73: PDUSessionResourceSetupListHOReq (M)
- 91: RRCInactiveTransitionReportRequest (O)
- 93: SecurityContext (M)
- 101: SourceToTarget_TransparentContainer (M)
- 108: TraceActivation (O)
- 110: UEAggregateMaximumBitRate (M)
- 119: UESecurityCapabilities (M)
- 146: RedirectionVoiceFallback (O)
- 165: CNAssistedRANTuning (O)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 53: PDUSessionResourceAdmittedList (M)
- 56: PDUSessionResourceFailedToSetupListHOAck (O)
- 85: RAN_UE_NGAP_ID (M)
- 106: TargetToSource_TransparentContainer (M)
UnsuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 19: CriticalityDiagnostics (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.handoverResourceAllocation
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
class NGAPHandoverNotification(NGAPNonUESigProc):
"""Handover Notification: TS 38.413, section 8.4.3
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 85: RAN_UE_NGAP_ID (M)
- 121: UserLocationInformation (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.handoverNotification
# Custom decoders
Decod = {
'ini': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-15 16:13:47 +00:00
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPPathSwitchRequest(NGAPNonUESigProc):
"""Path Switch Request: TS 38.413, section 8.4.4
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request-reponse
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 57: PDUSessionResourceFailedToSetupListPSReq (O)
- 76: PDUSessionResourceToBeSwitchedDLList (M)
- 85: RAN_UE_NGAP_ID (M)
- 100: AMF_UE_NGAP_ID (M)
- 119: UESecurityCapabilities (M)
- 121: UserLocationInformation (M)
SuccessfulOutcome:
IEs:
- 0: AllowedNSSAI (M)
- 10: AMF_UE_NGAP_ID (M)
- 18: CoreNetworkAssistanceInformationForInactive (O)
- 19: CriticalityDiagnostics (O)
- 41: NewSecurityContextInd (O)
- 68: PDUSessionResourceReleasedListPSAck (O)
- 77: PDUSessionResourceSwitchedList (M)
- 85: RAN_UE_NGAP_ID (M)
- 91: RRCInactiveTransitionReportRequest (O)
- 93: SecurityContext (M)
- 119: UESecurityCapabilities (O)
- 146: RedirectionVoiceFallback (O)
- 165: CNAssistedRANTuning (O)
UnsuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 69: PDUSessionResourceReleasedListPSFail (M)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.pathSwitchRequest
# Custom decoders
Decod = {
'ini': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-15 16:13:47 +00:00
'suc': ({}, {}),
'uns': ({}, {})
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
class NGAPHandoverCancel(NGAPSigProc):
"""Handover Cancellation: TS 38.413, section 8.4.5
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request-reponse
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 85: RAN_UE_NGAP_ID (M)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.handoverCancel
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
class NGAPUplinkRANStatusTransfer(NGAPSigProc):
"""Uplink RAN Status Transfer: TS 38.413, section 8.4.6
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 84: RANStatusTransfer_TransparentContainer (M)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uplinkRANStatusTransfer
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPDownlinkRANStatusTransfer(NGAPSigProc):
"""Downlink RAN Status Transfer: TS 38.413, section 8.4.7
CN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 84: RANStatusTransfer_TransparentContainer (M)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.downlinkRANStatusTransfer
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# Paging Procedures
# TS 38.413, section 8.5
#------------------------------------------------------------------------------#
class NGAPPaging(NGAPNonUESigProc):
"""Paging: TS 38.413, section 8.5.1
CN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 11: AssistanceDataForPaging (O)
- 50: PagingDRX (O)
- 51: PagingOrigin (O)
- 52: PagingPriority (O)
- 103: TAIListForPaging (M)
- 115: UEPagingIdentity (M)
- 118: UERadioCapabilityForPaging (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.paging
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# Transport of NAS Messages Procedures
# TS 38.413, section 8.6
#------------------------------------------------------------------------------#
class NGAPInitialUEMessage(NGAPSigProc):
"""Initial UE Message: TS 38.413, section 8.6.1
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 0: AllowedNSSAI (O)
- 3: AMFSetID (O)
- 26: FiveG_S_TMSI (O)
- 38: NAS_PDU (M)
- 85: RAN_UE_NGAP_ID (M)
- 90: RRCEstablishmentCause (M)
- 112: UEContextRequest (O)
- 121: UserLocationInformation (M)
- 171: SourceToTarget_AMFInformationReroute (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.initialUEMessage
# Custom decoders
Decod = {
'ini': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-15 16:13:47 +00:00
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
def recv(self, pdu_rx):
self._recv(pdu_rx)
if not self.errcause:
# verification of UserLocInfo against GNBd parameters:
err = False
userloc = self.UEInfo['UserLocationInformation']
tai = userloc['TAI']
if 'NR-CGI' in userloc:
cgi = userloc['NR-CGI']
else:
cgi = userloc['EUTRA-CGI']
if cgi[0] != self.GNB.ID[0] or cgi[1][0] != self.GNB.ID[2][0]:
self._log('WNG', 'invalid Cell Global-ID, %s.%.9x' % (cgi[0], cgi[1][0]))
err = True
elif tai not in self.GNB.Config['TAIs']:
self._log('WNG', 'invalid TAI, %s.%.6x' % tai)
err = True
if err:
self.errcause = ('protocol', 'message-not-compatible-with-receiver-state')
#
if not self.errcause:
self.NG.FGMM.state = 'ACTIVE'
self._log('INF', 'RRC establishment cause: %s' % self.UEInfo['RRCEstablishmentCause'])
self.UE.set_tai(*tai)
self._ret = self.NG.process_nas(self.UEInfo['NAS_PDU'])
def trigger(self):
return self._ret
2020-04-15 16:13:47 +00:00
class NGAPDownlinkNASTransport(NGAPSigProc):
"""Downlink NAS Transport: TS 38.413, section 8.6.2
CN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 0: AllowedNSSAI (O)
- 10: AMF_UE_NGAP_ID (M)
- 31: IndexToRFSP (O)
- 36: MobilityRestrictionList (O)
- 38: NAS_PDU (M)
- 48: AMFName (O)
- 83: RANPagingPriority (O)
- 85: RAN_UE_NGAP_ID (M)
- 110: UEAggregateMaximumBitRate (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.downlinkNASTransport
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
send = NGAPSigProc._send
2020-04-15 16:13:47 +00:00
class NGAPUplinkNASTransport(NGAPSigProc):
"""Uplink NAS Transport: TS 38.413, section 8.6.3
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 38: NAS_PDU (M)
- 85: RAN_UE_NGAP_ID (M)
- 121: UserLocationInformation (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uplinkNASTransport
# Custom decoders
Decod = {
'ini': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-15 16:13:47 +00:00
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
def recv(self, pdu_rx):
self._recv(pdu_rx)
if not self.errcause:
# verification of UserLocInfo against GNBd parameters:
err = False
userloc = self.UEInfo['UserLocationInformation']
tai = userloc['TAI']
if 'NR-CGI' in userloc:
cgi = userloc['NR-CGI']
else:
cgi = userloc['EUTRA-CGI']
if cgi[0] != self.GNB.ID[0] or cgi[1][0] != self.GNB.ID[2][0]:
self._log('WNG', 'invalid Cell Global-ID, %s.%.9x' % (cgi[0], cgi[1][0]))
err = True
elif tai not in self.GNB.Config['TAIs']:
self._log('WNG', 'invalid TAI, %s.%.6x' % tai)
err = True
if err:
self.errcause = ('protocol', 'message-not-compatible-with-receiver-state')
#
if not self.errcause:
self._ret = self.NG.process_nas(self.UEInfo['NAS_PDU'])
def trigger(self):
return self._ret
2020-04-15 16:13:47 +00:00
class NGAPNASNonDeliveryInd(NGAPSigProc):
"""NAS Non Delivery Indication: TS 38.413, section 8.6.4
2020-04-28 12:19:50 +00:00
RAN-initiatied
2020-04-15 16:13:47 +00:00
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 38: NAS_PDU (M)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.nASNonDeliveryIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPRerouteNASRequest(NGAPSigProc):
"""Reroute NAS Request: TS 38.413, section 8.6.5
CN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 0: AllowedNSSAI (O)
- 3: AMFSetID (M)
- 10: AMF_UE_NGAP_ID (O)
- 42: [OCTET STRING] (M)
- 85: RAN_UE_NGAP_ID (M)
- 171: SourceToTarget_AMFInformationReroute (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.rerouteNASRequest
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# Interface Management Procedures
# TS 38.413, section 8.7
#------------------------------------------------------------------------------#
2020-04-28 12:19:50 +00:00
class NGAPNGSetup(NGAPNonUESigProc):
"""NG Setup : TS 38.413, section 8.7.1
2020-04-29 22:00:49 +00:00
gNB-initiated
2020-04-28 12:19:50 +00:00
request-response
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 21: PagingDRX (M)
- 27: GlobalRANNodeID (M)
- 82: RANNodeName (O)
- 102: SupportedTAList (M)
- 147: UERetentionInformation (O)
SuccessfulOutcome:
IEs:
- 1: AMFName (M)
- 19: CriticalityDiagnostics (O)
- 80: PLMNSupportList (M)
- 86: RelativeAMFCapacity (M)
- 96: ServedGUAMIList (M)
- 147: UERetentionInformation (O)
UnsuccessfulOutcome:
IEs:
- 15: Cause (M)
- 19: CriticalityDiagnostics (O)
- 107: TimeToWait (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.nGSetup
# Custom decoders
Decod = {
2020-04-29 22:00:49 +00:00
'ini': ({
2020-04-30 16:28:14 +00:00
'GlobalRANNodeID': globranid_to_hum,
2020-04-29 22:00:49 +00:00
'SupportedTAList': supptalist_to_hum,
},
{}),
2020-04-28 12:19:50 +00:00
'suc': ({}, {}),
'uns': ({}, {})
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
2020-04-29 22:00:49 +00:00
def recv(self, pdu):
# recv the NGSetupRequest
self._recv(pdu)
if self.errcause:
# procedure unsuccessful outcome
self.encode_pdu('uns', Cause=self.errcause)
self._log('INF', 'gNB NG Setup unsuccessful')
2020-04-29 22:00:49 +00:00
else:
self.GNB.Config = cpdict(self.GNBInfo)
2020-08-21 15:47:07 +00:00
tais = set()
2020-04-30 16:28:14 +00:00
for (tac, bcastplmnlist) in self.GNBInfo['SupportedTAList'].items():
2020-04-29 22:00:49 +00:00
for (plmn, _) in bcastplmnlist:
2020-08-21 15:47:07 +00:00
tais.add( (plmn, tac) )
self.GNB.Config['TAIs'] = tuple(tais)
2020-04-29 22:00:49 +00:00
self.GNB.ID = self.GNBInfo['GlobalRANNodeID']
2020-04-30 16:28:14 +00:00
# prepare the NGSetupResponse
2020-04-29 22:00:49 +00:00
IEs = self.GNB.get_ngsetup_ies_from_cfg()
self.encode_pdu('suc', **IEs)
self._log('INF', 'gNB NG Setup successful')
2020-04-29 22:00:49 +00:00
send = NGAPNonUESigProc._send
2020-04-28 12:19:50 +00:00
class NGAPRANConfigUpdate(NGAPNonUESigProc):
"""RAN Configuration Update: TS 38.413, section 8.7.2
RAN-initiated
request-response
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 21: PagingDRX (O)
- 27: GlobalRANNodeID (O)
- 82: RANNodeName (O)
- 102: SupportedTAList (O)
- 167: NGRAN_TNLAssociationToRemoveList (O)
SuccessfulOutcome:
IEs:
- 19: CriticalityDiagnostics (O)
UnsuccessfulOutcome:
IEs:
- 15: Cause (M)
- 19: CriticalityDiagnostics (O)
- 107: TimeToWait (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.rANConfigurationUpdate
# Custom decoders
Decod = {
2020-08-21 15:47:07 +00:00
'ini': ({
'GlobalRANNodeID': globranid_to_hum,
'SupportedTAList': supptalist_to_hum,
},
{}),
2020-04-28 12:19:50 +00:00
'suc': ({}, {}),
'uns': ({}, {})
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
def recv(self, pdu):
2020-11-09 14:48:01 +00:00
# recv the RANConfigUpdate, which provides similar configuration
# information as the NGSetup message
self._recv(pdu)
if self.errcause:
# procedure unsuccessful outcome
self.encode_pdu('uns', Cause=self.errcause)
self._log('INF', 'gNB Config Update unsuccessful')
else:
gnbcfg = cpdict(self.GNBInfo)
if 'NGRAN_TNLAssociationToRemoveList' in gnbcfg:
del gnbcfg['NGRAN_TNLAssociationToRemoveList']
self.GNB.Config.update(gnbcfg)
if 'SupportedTAList' in gnbcfg:
2020-08-21 15:47:07 +00:00
tais = set()
for (tac, bcastplmnlist) in self.GNBInfo['SupportedTAList'].items():
for (plmn, _) in bcastplmnlist:
2020-08-21 15:47:07 +00:00
tais.add( (plmn, tac) )
self.GNB.Config['TAIs'] = tuple(tais)
if 'GlobalRANNodeID' in gnbcfg:
self.GNB.ID = self.GNBInfo['GlobalRANNodeID']
# TODO: process NGRAN_TNLAssociationToRemoveList
# prepare the ConfigUpdateResponse
self.encode_pdu('suc')
self._log('INF', 'gNB Config Update successful')
send = NGAPNonUESigProc._send
2020-04-28 12:19:50 +00:00
class NGAPAMFConfigUpdate(NGAPNonUESigProc):
"""AMF Configuration Update: TS 38.413, section 8.7.3
CN-initiated
request-response
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 1: AMFName (O)
- 6: AMF_TNLAssociationToAddList (O)
- 7: AMF_TNLAssociationToRemoveList (O)
- 8: AMF_TNLAssociationToUpdateList (O)
- 80: PLMNSupportList (O)
- 86: RelativeAMFCapacity (O)
- 96: ServedGUAMIList (O)
SuccessfulOutcome:
IEs:
- 4: TNLAssociationList (O)
- 5: AMF_TNLAssociationSetupList (O)
- 19: CriticalityDiagnostics (O)
UnsuccessfulOutcome:
IEs:
- 15: Cause (M)
- 19: CriticalityDiagnostics (O)
- 107: TimeToWait (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.aMFConfigurationUpdate
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': ({}, {})
}
def recv(self, pdu):
# receive the AMFConfigUpdate response
self._recv(pdu)
try:
del self.GNB.Proc[self.Code]
except Exception:
pass
if not self.errcause:
self._log('INF', 'success')
send = NGAPNonUESigProc._send
2020-04-28 12:19:50 +00:00
class NGAPNGResetCN(NGAPNonUESigProc):
"""NG Reset: TS 38.413, section 8.7.4.2.1
CN-initiated
request-response
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 15: Cause (M)
- 88: ResetType (M)
SuccessfulOutcome:
IEs:
- 19: CriticalityDiagnostics (O)
- 111: UE_associatedLogicalNG_connectionList (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.nGReset
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
class NGAPNGResetRAN(NGAPNonUESigProc):
"""NG Reset: TS 38.413, section 8.7.4.2.2
RAN-initiated
request-response
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 15: Cause (M)
- 88: ResetType (M)
SuccessfulOutcome:
IEs:
- 19: CriticalityDiagnostics (O)
- 111: UE_associatedLogicalNG_connectionList (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.nGReset
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
class NGAPErrorIndNonUECN(NGAPNonUESigProc):
"""Error Indication: TS 38.413, section 8.7.5
CN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (O)
- 15: Cause (O)
- 19: CriticalityDiagnostics (O)
- 85: RAN_UE_NGAP_ID (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.errorIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
2020-04-29 22:00:49 +00:00
errcause = None
def recv(self, pdu):
if self.TRACK_PDU:
self._pdu.append( (time(), 'UL', pdu) )
send = NGAPNonUESigProc._send
2020-04-28 12:19:50 +00:00
class NGAPErrorIndNonUERAN(NGAPNonUESigProc):
"""Error Indication: TS 38.413, section 8.7.5
RAN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (O)
- 15: Cause (O)
- 19: CriticalityDiagnostics (O)
- 85: RAN_UE_NGAP_ID (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.errorIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
2020-04-29 22:00:49 +00:00
def recv(self, pdu):
self._recv(pdu)
if not self.errcause and 'Cause' in self.GNBInfo:
2020-04-29 22:00:49 +00:00
self._log('WNG', 'error ind received: %r' % (self.GNBInfo['Cause'], ))
# if it corresponds to a said-unknown UE ID, disconnect the UE instance
if self.GNBInfo['Cause'] == ('radioNetwork', 'unknown-local-UE-NGAP-ID') \
and 'AMF_UE_NGAP_ID' in self.GNBInfo \
and self.GNBInfo['AMF_UE_NGAP_ID'] in self.GNB.UE:
ue = self.GNB.UE[self.GNBInfo['AMF_UE_NGAP_ID']]
if ue.NG.is_connected():
self._log('INF', 'UE %s to be disconnected' % ue.IMSI)
ue.NG.unset_ran()
# if it corresponds to a previously CN-initiated class 1 procedure
# abort it
try:
self.GNB.Proc[self.GNB.ProcLast].abort()
except Exception:
2020-04-29 22:00:49 +00:00
pass
2020-04-28 12:19:50 +00:00
class NGAPErrorIndCN(NGAPSigProc):
"""Error Indication: TS 38.413, section 8.7.5
CN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (O)
- 15: Cause (O)
- 19: CriticalityDiagnostics (O)
- 85: RAN_UE_NGAP_ID (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.errorIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
2020-04-29 22:00:49 +00:00
errcause = None
def recv(self, pdu):
if self.TRACK_PDU:
self._pdu.append( (time(), 'UL', pdu) )
send = NGAPSigProc._send
2020-04-28 12:19:50 +00:00
class NGAPErrorIndRAN(NGAPSigProc):
"""Error Indication: TS 38.413, section 8.7.5
RAN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (O)
- 15: Cause (O)
- 19: CriticalityDiagnostics (O)
- 85: RAN_UE_NGAP_ID (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.errorIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
2020-04-29 22:00:49 +00:00
def recv(self, pdu):
self._recv(pdu)
if not self.errcause:
self._log('WNG', 'error ind received: %s.%i' % self.UEInfo['Cause'])
# if it corresponds to a previously CN-initiated class 1 procedure
# abort it
try:
self.NG.Proc[self.NG.ProcLast].abort()
except Exception:
2020-04-29 22:00:49 +00:00
pass
2020-04-28 12:19:50 +00:00
class NGAPAMFStatusInd(NGAPNonUESigProc):
"""AMF Status Indication: TS 38.413, section 8.7.6
CN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 120: UnavailableGUAMIList (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.aMFStatusIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPOverloadStart(NGAPNonUESigProc):
"""Overload Start: TS 38.413, section 8.7.7
CN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 2: OverloadResponse (O)
- 9: TrafficLoadReductionIndication (O)
- 49: OverloadStartNSSAIList (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.overloadStart
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPOverloadStop(NGAPNonUESigProc):
"""Overload Start: TS 38.413, section 8.7.8
CN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
None
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.overloadStop
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# Configuration Transfer Procedures
# TS 38.413, section 8.8
#------------------------------------------------------------------------------#
class NGAPUplinkRANConfigTransfer(NGAPNonUESigProc):
"""Uplink RAN Configuration Transfer: TS 38.413, section 8.8.1
RAN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 99: SONConfigurationTransfer (O)
- 158: EN_DCSONConfigurationTransfer (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uplinkRANConfigurationTransfer
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPDownlinkRANConfigTransfer(NGAPNonUESigProc):
"""Downlink RAN Configuration Transfer: TS 38.413, section 8.8.2
CN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 98: SONConfigurationTransfer (O)
- 157: EN_DCSONConfigurationTransfer (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.downlinkRANConfigurationTransfer
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# Warning Message Transmission Procedures
# TS 38.413, section 8.9
#------------------------------------------------------------------------------#
class NGAPWriteReplaceWarning(NGAPNonUESigProc):
"""Write-Replace Warning: TS 38.413, section 8.9.1
CN-initiated
request-response
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 17: ConcurrentWarningMessageInd (O)
- 20: DataCodingScheme (O)
- 35: MessageIdentifier (M)
- 47: NumberOfBroadcastsRequested (M)
- 87: RepetitionPeriod (M)
- 95: SerialNumber (M)
- 122: WarningAreaList (O)
- 123: WarningMessageContents (O)
- 124: WarningSecurityInfo (O)
- 125: WarningType (O)
- 141: WarningAreaCoordinates (O)
SuccessfulOutcome:
IEs:
- 13: BroadcastCompletedAreaList (O)
- 19: CriticalityDiagnostics (O)
- 35: MessageIdentifier (M)
- 95: SerialNumber (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.writeReplaceWarning
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
class NGAPPWSCancel(NGAPNonUESigProc):
"""PWS Cancel: TS 38.413, section 8.9.2
CN-initiated
request-response
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 14: CancelAllWarningMessages (O)
- 35: MessageIdentifier (M)
- 95: SerialNumber (M)
- 122: WarningAreaList (O)
SuccessfulOutcome:
IEs:
- 12: BroadcastCancelledAreaList (O)
- 19: CriticalityDiagnostics (O)
- 35: MessageIdentifier (M)
- 95: SerialNumber (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.pWSCancel
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
class NGAPPWSRestartInd(NGAPNonUESigProc):
"""PWS Restart Indication: TS 38.413, section 8.9.3
RAN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 16: CellIDListForRestart (M)
- 23: EmergencyAreaIDListForRestart (O)
- 27: GlobalRANNodeID (M)
- 104: TAIListForRestart (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.pWSRestartIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPPWSFailureInd(NGAPNonUESigProc):
"""PWS Failure Indication: TS 38.413, section 8.9.4
RAN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 27: GlobalRANNodeID (M)
- 81: PWSFailedCellIDList (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.pWSFailureIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# NRPPa Transport Procedures
# TS 38.413, section 8.10
#------------------------------------------------------------------------------#
class NGAPDownlinkUENRPPaTransport(NGAPSigProc):
"""DOWNLINK UE ASSOCIATED NRPPA TRANSPORT: TS 38.413, section 8.10.2.1
CN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 46: NRPPa_PDU (M)
- 85: RAN_UE_NGAP_ID (M)
- 89: RoutingID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.downlinkUEAssociatedNRPPaTransport
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPUplinkUENRPPaTransport(NGAPSigProc):
"""UPLINK UE ASSOCIATED NRPPA TRANSPORT: TS 38.413, section 8.10.2.2
RAN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 46: NRPPa_PDU (M)
- 85: RAN_UE_NGAP_ID (M)
- 89: RoutingID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uplinkUEAssociatedNRPPaTransport
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPDownlinkNonUENRPPaTransport(NGAPNonUESigProc):
"""DOWNLINK NON UE ASSOCIATED NRPPA TRANSPORT: TS 38.413, section 8.10.3.1
CN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 46: NRPPa_PDU (M)
- 89: RoutingID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.downlinkNonUEAssociatedNRPPaTransport
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPUplinkNonUENRPPaTransport(NGAPNonUESigProc):
"""UPLINK NON UE ASSOCIATED NRPPA TRANSPORT: TS 38.413, section 8.10.3.2
RAN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 46: NRPPa_PDU (M)
- 89: RoutingID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uplinkNonUEAssociatedNRPPaTransport
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# Trace Procedures
# TS 38.413, section 8.11
#------------------------------------------------------------------------------#
class NGAPTraceStart(NGAPSigProc):
"""Trace Start: TS 38.413, section 8.11.1
CN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 85: RAN_UE_NGAP_ID (M)
- 108: TraceActivation (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.traceStart
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPTraceFailureInd(NGAPSigProc):
"""Trace Failure Indication: TS 38.413, section 8.11.2
RAN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 44: NGRANTraceID (M)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.traceFailureIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPDeactivateTrace(NGAPSigProc):
"""Deactivate Trace: TS 38.413, section 8.11.3
CN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 44: NGRANTraceID (M)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.deactivateTrace
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPCellTrafficTrace(NGAPSigProc):
"""Cell Traffic Trace: TS 38.413, section 8.11.4
RAN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 43: NGRAN_CGI (M)
- 44: NGRANTraceID (M)
- 85: RAN_UE_NGAP_ID (M)
- 109: TransportLayerAddress (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.cellTrafficTrace
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# Location Reporting Procedures
# TS 38.413, section 8.12
#------------------------------------------------------------------------------#
class NGAPLocationReportingControl(NGAPSigProc):
"""Location Reporting Control: TS 38.413, section 8.12.1
CN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 33: LocationReportingRequestType (M)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.locationReportingControl
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPLocationReportingFailureInd(NGAPSigProc):
"""Location Reporting Failure Indication: TS 38.413, section 8.12.2
RAN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 15: Cause (M)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.locationReportingFailureIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPLocationReport(NGAPSigProc):
"""Location Report: TS 38.413, section 8.12.3
RAN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 33: LocationReportingRequestType (M)
- 85: RAN_UE_NGAP_ID (M)
- 116: UEPresenceInAreaOfInterestList (O)
- 121: UserLocationInformation (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.locationReport
# Custom decoders
Decod = {
'ini': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-28 12:19:50 +00:00
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# UE TNLA Binding Procedures
# TS 38.413, section 8.13
#------------------------------------------------------------------------------#
class NGAPUETNLABindingRelease(NGAPSigProc):
"""UE TNLA Binding Release: TS 38.413, section 8.13.1
CN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uETNLABindingRelease
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
#------------------------------------------------------------------------------#
# UE Radio Capability Management Procedures
# TS 38.413, section 8.14
#------------------------------------------------------------------------------#
class NGAPUERadioCapabilityInfoInd(NGAPSigProc):
"""UE Radio Capability Info Indication: TS 38.413, section 8.14.1
RAN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 85: RAN_UE_NGAP_ID (M)
- 117: UERadioCapability (M)
- 118: UERadioCapabilityForPaging (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uERadioCapabilityInfoIndication
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
class NGAPUERadioCapabilityCheck(NGAPSigProc):
"""UE Radio Capability Info Check: TS 38.413, section 8.14.2
CN-initiated
request-response
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 85: RAN_UE_NGAP_ID (M)
- 117: UERadioCapability (O)
SuccessfulOutcome:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 19: CriticalityDiagnostics (O)
- 30: IMSVoiceSupportIndicator (M)
- 85: RAN_UE_NGAP_ID (M)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uERadioCapabilityCheck
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': ({}, {}),
'uns': None
}
#------------------------------------------------------------------------------#
# Data Usage Reporting Procedures
# TS 38.413, section 8.15
#------------------------------------------------------------------------------#
class NGAPSecondaryRATDataUsageReport(NGAPSigProc):
"""Secondary RAT Data Usage Report: TS 38.413, section 8.15.1
RAN-initiated
request only
UE-associated signalling procedure
InitiatingMessage:
IEs:
- 10: AMF_UE_NGAP_ID (M)
- 85: RAN_UE_NGAP_ID (M)
- 121: UserLocationInformation (O)
- 142: PDUSessionResourceSecondaryRATUsageList (M)
- 143: HandoverFlag (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.secondaryRATDataUsageReport
# Custom decoders
Decod = {
'ini': ({
'UserLocationInformation': lambda x: ngap_userloc_to_hum(x)
}, {}),
2020-04-28 12:19:50 +00:00
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
2020-04-15 16:13:47 +00:00
2020-04-28 12:19:50 +00:00
#------------------------------------------------------------------------------#
# RIM Information Transfer Procedures
# TS 38.413, section 8.16
#------------------------------------------------------------------------------#
2020-04-15 16:13:47 +00:00
2020-04-28 12:19:50 +00:00
class NGAPUplinkRIMInfoTransfer(NGAPNonUESigProc):
"""Uplink RIM Information Transfer: TS 38.413, section 8.16.1
RAN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 175: RIMInformationTransfer (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.uplinkRIMInformationTransfer
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
2020-04-15 16:13:47 +00:00
2020-04-28 12:19:50 +00:00
class NGAPDownlinkRIMInfoTransfer(NGAPNonUESigProc):
"""Downlink RIM Information Transfer: TS 38.413, section 8.16.2
CN-initiated
request only
non-UE-associated signalling procedure
InitiatingMessage:
IEs:
- 175: RIMInformationTransfer (O)
"""
# ASN.1 procedure description
Desc = NGAP.NGAP_PDU_Descriptions.downlinkRIMInformationTransfer
# Custom decoders
Decod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
# Custom encoders
Encod = {
'ini': ({}, {}),
'suc': None,
'uns': None
}
2020-04-15 16:13:47 +00:00
2020-04-28 12:19:50 +00:00
# initializing all NGAP procedures classes
2020-04-15 16:13:47 +00:00
NGAPPDUSessResSetup.init()
NGAPPDUSessResRelease.init()
NGAPPDUSessResModify.init()
NGAPPDUSessResNotify.init()
NGAPPDUSessResModifyInd.init()
NGAPInitialContextSetup.init()
NGAPUEContextReleaseRequest.init()
NGAPUEContextRelease.init()
NGAPUEContextModification.init()
NGAPRRCInactiveTransitionReport.init()
NGAPHandoverPreparation.init()
NGAPHandoverResourceAllocation.init()
NGAPHandoverNotification.init()
NGAPPathSwitchRequest.init()
NGAPHandoverCancel.init()
NGAPUplinkRANStatusTransfer.init()
NGAPDownlinkRANStatusTransfer.init()
NGAPPaging.init()
NGAPInitialUEMessage.init()
NGAPDownlinkNASTransport.init()
NGAPUplinkNASTransport.init()
NGAPNASNonDeliveryInd.init()
NGAPRerouteNASRequest.init()
2020-04-28 12:19:50 +00:00
NGAPNGSetup.init()
NGAPRANConfigUpdate.init()
NGAPAMFConfigUpdate.init()
NGAPNGResetCN.init()
NGAPNGResetRAN.init()
NGAPErrorIndNonUECN.init()
NGAPErrorIndNonUERAN.init()
NGAPErrorIndCN.init()
NGAPErrorIndRAN.init()
NGAPAMFStatusInd.init()
NGAPOverloadStart.init()
NGAPOverloadStop.init()
NGAPUplinkRANConfigTransfer.init()
NGAPDownlinkRANConfigTransfer.init()
NGAPWriteReplaceWarning.init()
NGAPPWSCancel.init()
NGAPPWSRestartInd.init()
NGAPPWSFailureInd.init()
NGAPDownlinkUENRPPaTransport.init()
NGAPUplinkUENRPPaTransport.init()
NGAPDownlinkNonUENRPPaTransport.init()
NGAPUplinkNonUENRPPaTransport.init()
NGAPTraceStart.init()
NGAPTraceFailureInd.init()
NGAPDeactivateTrace.init()
NGAPCellTrafficTrace.init()
NGAPLocationReportingControl.init()
NGAPLocationReportingFailureInd.init()
NGAPLocationReport.init()
NGAPUETNLABindingRelease.init()
NGAPUERadioCapabilityInfoInd.init()
NGAPUERadioCapabilityCheck.init()
NGAPSecondaryRATDataUsageReport.init()
NGAPUplinkRIMInfoTransfer.init()
NGAPDownlinkRIMInfoTransfer.init()
# NGAP RAN-initiated UE-associated signalling procedures dispatcher
NGAPProcRANDispatcher = {
2 : NGAPCellTrafficTrace,
9 : NGAPErrorIndRAN,
10 : NGAPHandoverCancel,
15 : NGAPInitialUEMessage,
17 : NGAPLocationReportingFailureInd,
18 : NGAPLocationReport,
19 : NGAPNASNonDeliveryInd,
27 : NGAPPDUSessResModifyInd,
30 : NGAPPDUSessResNotify,
37 : NGAPRRCInactiveTransitionReport,
38 : NGAPTraceFailureInd,
42 : NGAPUEContextReleaseRequest,
44 : NGAPUERadioCapabilityInfoInd,
46 : NGAPUplinkNASTransport,
49 : NGAPUplinkRANStatusTransfer,
50 : NGAPUplinkUENRPPaTransport,
52 : NGAPSecondaryRATDataUsageReport
}
# NGAP CN-initiated UE-associated signalling procedures dispatcher
NGAPProcCNDispatcher = {
3 : NGAPDeactivateTrace,
4 : NGAPDownlinkNASTransport,
7 : NGAPDownlinkRANStatusTransfer,
8 : NGAPDownlinkUENRPPaTransport,
9 : NGAPErrorIndCN,
14 : NGAPInitialContextSetup,
16 : NGAPLocationReportingControl,
26 : NGAPPDUSessResModify,
28 : NGAPPDUSessResRelease,
29 : NGAPPDUSessResSetup,
36 : NGAPRerouteNASRequest,
39 : NGAPTraceStart,
40 : NGAPUEContextModification,
41 : NGAPUEContextRelease,
43 : NGAPUERadioCapabilityCheck,
45 : NGAPUETNLABindingRelease
}
# NGAP RAN-initiated non-UE-associated signalling procedures dispatcher
NGAPNonUEProcRANDispatcher = {
9 : NGAPErrorIndNonUERAN,
11 : NGAPHandoverNotification,
12 : NGAPHandoverPreparation,
20 : NGAPNGResetRAN,
21 : NGAPNGSetup,
25 : NGAPPathSwitchRequest,
33 : NGAPPWSFailureInd,
34 : NGAPPWSRestartInd,
35 : NGAPRANConfigUpdate,
47 : NGAPUplinkNonUENRPPaTransport,
48 : NGAPUplinkRANConfigTransfer,
53 : NGAPUplinkRIMInfoTransfer
}
# NGAP CN-initiated non-UE-associated signalling procedures dispatcher
NGAPNonUEProcCNDispatcher = {
0 : NGAPAMFConfigUpdate,
1 : NGAPAMFStatusInd,
5 : NGAPDownlinkNonUENRPPaTransport,
6 : NGAPDownlinkRANConfigTransfer,
9 : NGAPErrorIndNonUECN,
13 : NGAPHandoverResourceAllocation,
20 : NGAPNGResetCN,
22 : NGAPOverloadStart,
23 : NGAPOverloadStop,
24 : NGAPPaging,
32 : NGAPPWSCancel,
51 : NGAPWriteReplaceWarning,
54 : NGAPDownlinkRIMInfoTransfer
}
2020-04-15 16:13:47 +00:00