Loading 33128/r17/TS33128Payloads.asn +5 −5 Original line number Diff line number Diff line Loading @@ -185,7 +185,7 @@ XIRIEvent ::= CHOICE -- IMS events, see clause 7.11.4.2 iMSMessage [105] IMSMessage, startOfInterceptionForActiveIMSSession [106] StartOfInterceptionForActiveIMSSession, ePSBearerActivationDeactivation [11101] EPSIRIsContent, ePSBearerActivationDeactivation [11101] EpsIRIsContent, ePSExtendedBearerActivationDeactivation [11102] EPSExtendedBearerActivationDeactivation } Loading Loading @@ -358,8 +358,8 @@ IRIEvent ::= CHOICE -- IMS events, see clause 7.11.4.2 iMSMessage [105] IMSMessage, startOfInterceptionForActiveIMSSession [106] StartOfInterceptionForActiveIMSSession, ePSBearerActivationDeactivation [11101] EPSIRIsContent, ePSExtendedBearerActivation [11102] EPSExtendedBearerActivation ePSBearerActivationDeactivation [11101] EpsIRIsContent, ePSExtendedBearerActivationDeactivation [11102] EPSExtendedBearerActivationDeactivation } IRITargetIdentifier ::= SEQUENCE Loading Loading @@ -3207,9 +3207,9 @@ MMEFailureCause ::= CHOICE -- EPS SGW/PGW definitions -- ======================= EPSBearerActivationDeactivation ::= SEQUENCE EPSExtendedBearerActivationDeactivation ::= SEQUENCE { bearerActivation [1] EPSIRIsContent, bearerActivation [1] EpsIRIsContent, new5GParams [2] New5GParams } Loading testing/check_asn1.py 0 → 100644 +136 −0 Original line number Diff line number Diff line import logging from pathlib import Path from pprint import pprint from subprocess import run from pycrate_asn1c.asnproc import * ignoreReleases = {'33108' : [f'r{i}' for i in range(5, 17)], '33128' : [], 'testing' : [] } def prepareFile(f): with open(f) as fh: s = fh.read() s = s.replace("RELATIVE-OID", "OBJECT IDENTIFIER") # sigh return s def parseFile(f): p = run(['asn1c', '-E', str(f)], capture_output=True) if (p.returncode != 0): raise Exception(f"Compiler error: {p.returncode} - {p.stderr.decode().splitlines()[0]}") return p.stdout.decode() def compileFiles(fileList): p = run(['asn1c', '-P', '-fcompound-names'] + [str(f) for f in fileList], capture_output=True) results = { 'result' : p.returncode, 'errors' : [line for line in p.stderr.decode().splitlines() if len(line.strip()) > 0 and not line.startswith('WARNING')], 'warnings' : [line for line in p.stderr.decode().splitlines() if line.startswith('WARNING') if not "/usr/local/share/asn1c" in line] } return results def compileFiles2 (fileList): fileTexts = [] fileNames = [] GLOBAL.clear() for filename in fileList: with open(filename) as f: fileTexts.append(f.read()) fileNames.append(str(filename)) print (f"Loading {filename}") compile_text(fileTexts, filenames = fileNames) return { 'result' : 0, 'errors' : [], 'warnings' : [] } def extractModuleOID(s): oid = s[:s.find('DEFINITIONS')] return oid compileTargets = [ ['./33128/r15/TS33128Payloads.asn'], ['./33128/r16/TS33128Payloads.asn'], ['./33128/r16/TS33128IdentityAssociation.asn'], [ './33128/r17/TS33128Payloads.asn', './33108/r16/EpsHI2Operations.asn', './33108/r16/UmtsHI2Operations.asn', './testing/dependencies/asn/HI2Operations,ver18.asn', './testing/dependencies/asn/101909/TS101909201.asn', './testing/dependencies/asn/101909/PCESP.asn', './testing/dependencies/asn/301040/06132v203_C01.asn', ], ['./33128/r17/TS33128IdentityAssociation.asn'], ['./testing/mod1.asn', './testing/mod2.asn'] ] if __name__ == '__main__': fileList = list(Path(".").rglob("*.asn1")) + list(Path(".").rglob("*.asn")) ignoredFiles = [file for file in fileList if file.parts[1] in ignoreReleases[file.parts[0]]] logging.info(f"Ignoring {len(ignoredFiles)} files") logging.debug(ignoredFiles) fileList = [file for file in fileList if file not in ignoredFiles] if len(fileList) == 0: logging.warning ("No files specified") exit(0) print ("ASN.1 Parser checks:") print ("-----------------------------") logging.info("Parsing files...") errorCount = 0 moduleDict = {} for f in fileList: try: parsed = parseFile(f) oid = extractModuleOID(parsed) moduleDict[oid] = f except Exception as ex: logging.info (f" {f}: Failed - {ex!r}") print (f" {f}: Failed") print (f" {ex!r}") errorCount += 1 continue print (f" {f}: OK") if (errorCount > 0): print ("-----------------------------") print (f"Parse errors: {errorCount}") print ("-----------------------------") exit(-1) print ("-----------------------------") print (f"Module dictonary") print ("-----------------------------") for k,v in moduleDict.items(): print(f" {k} : {str(f)}") print ("-----------------------------") print (f"Compiling") print ("-----------------------------") errorList = [] for target in compileTargets: try: compileFiles2(target) except Exception as ex: errorList.append((target[0], ex)) continue print ("-----------------------------") print (f"Compile errors: {len(errorList)}") print ("-----------------------------") if len(errorList) > 0: for er in errorList: print(f" {er[0]:.<45}.{er[1]!r}") print ("-----------------------------") print (f"Compile errors: {len(errorList)}") print ("-----------------------------") exit(-1) exit(0) testing/compile_asn1.pydeleted 100644 → 0 +0 −47 Original line number Diff line number Diff line import logging import asn1tools from pathlib import Path from pprint import pprint ignoreReleases = {'33108' : [f'r{i}' for i in range(5, 17)], '33128' : [] } def prepareFile(f): with open(f) as fh: s = fh.read() s = s.replace("RELATIVE-OID", "OBJECT IDENTIFIER") # sigh return s if __name__ == '__main__': fileList = list(Path(".").rglob("*.asn1")) + list(Path(".").rglob("*.asn")) ignoredFiles = [file for file in fileList if file.parts[1] in ignoreReleases[file.parts[0]]] logging.info(f"Ignoring {len(ignoredFiles)} files") logging.debug(ignoredFiles) fileList = [file for file in fileList if file not in ignoredFiles] if len(fileList) == 0: logging.warning ("No files specified") exit(0) print ("ASN.1 Compilation checks:") print ("-----------------------------") logging.info("Parsing files...") errorCount = 0 for f in fileList: try: s = prepareFile(str(f)) asn1tools.compile_string(s) # this won't work for modules with IMPORTs except asn1tools.ParseError as ex: logging.info (f" {f}: Failed - {ex!r}") print (f" {f}: Failed - {ex!r}") errorCount += 1 continue print (f" {f}: OK") print ("-----------------------------") print (f"Compile errors: {errorCount}") print ("-----------------------------") exit(errorCount) testing/dependencies/asn/101909/PCESP.asn 0 → 100644 +428 −0 Original line number Diff line number Diff line PCESP {iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) cable-Television-Laboratories-Inc(4491) clabProject(2) clabProjPacketCable(2) pktcLawfulIntercept(5) pcesp(1) version-4(4)} DEFINITIONS IMPLICIT TAGS ::= BEGIN ProtocolVersion ::= ENUMERATED { -- Versions IO1 and IO2 do not support protocol versioning. v3(3), -- Version supporting PacketCable Electronic Surveillance -- Specification I03 v4(4), -- Version supporting PacketCable Electronic Surveillance -- Specification I04 ... } CdcPdu ::= SEQUENCE { protocolVersion [0] ProtocolVersion, message [1] Message, ... } Message ::= CHOICE { answer [1] Answer, ccclose [2] CCClose, ccopen [3] CCOpen, reserved0 [4] NULL, -- Reserved origination [5] Origination, reserved1 [6] NULL, -- Reserved redirection [7] Redirection, release [8] Release, reserved2 [9] NULL, -- Reserved terminationattempt [10] TerminationAttempt, reserved [11] NULL, -- Reserved ccchange [12] CCChange, reserved3 [13] NULL, -- Reserved reserved4 [14] NULL, -- Reserved dialeddigitextraction [15] DialedDigitExtraction, networksignal [16] NetworkSignal, subjectsignal [17] SubjectSignal, mediareport [18] MediaReport, serviceinstance [19] ServiceInstance, confpartychange [20] ConferencePartyChange, ... } Answer ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, answering [4] PartyId OPTIONAL, ... } CCChange ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, cCCId [4] EXPLICIT CCCId, subject [5] SDP OPTIONAL, associate [6] SDP OPTIONAL, flowDirection [7] FlowDirection, resourceState [8] ResourceState OPTIONAL, ... } CCClose ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, cCCId [3] EXPLICIT CCCId, flowDirection [4] FlowDirection, ... } CCOpen ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, ccOpenOption CHOICE { ccOpenTime [3] SEQUENCE OF CallId, reserved0 [4] NULL, -- Reserved ... }, cCCId [5] EXPLICIT CCCId, subject [6] SDP OPTIONAL, associate [7] SDP OPTIONAL, flowDirection [8] FlowDirection, ... } ConferencePartyChange ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, communicating [4] SEQUENCE OF SEQUENCE { -- include to identify parties participating in the -- communication. partyId [0] SEQUENCE OF PartyId OPTIONAL, -- identifies communicating party identities. cCCId [1] EXPLICIT CCCId OPTIONAL, -- included when the content of the resulting call is -- delivered to identify the associated CCC(s). ... } OPTIONAL, removed [5] SEQUENCE OF SEQUENCE { -- include to identify parties removed (e.g., hold -- service) from the communication. partyId [0] SEQUENCE OF PartyId OPTIONAL, -- identifies removed party identity(ies). cCCId [1] EXPLICIT CCCId OPTIONAL, -- included when the content of the resulting call is -- delivered to identify the associated CCC(s). ... } OPTIONAL, joined [6] SEQUENCE OF SEQUENCE { -- include to identify parties newly added to the -- communication. partyId [0] SEQUENCE OF PartyId OPTIONAL, -- identifies newly added party identity(ies) to an existing -- communication. cCCId [1] EXPLICIT CCCId OPTIONAL, -- included when the content of the resulting call is -- delivered to identify the associated CCC(s). ... } OPTIONAL, ... } DialedDigitExtraction ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, digits [4] VisibleString (SIZE (1..32, ...)), -- string consisting of digits representing -- Dual Tone Multi Frequency (DTMF) tones -- having values from the following numbers, -- letters, and symbols: -- '0", '1", '2", '3", '4", '5", '6", '7", -- '8", '9", '#", '*", 'A", 'B", 'C", 'D". -- Example: '123AB" or '*66" or '345#" ... } MediaReport ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, subject [4] SDP OPTIONAL, associate [5] SDP OPTIONAL, ... } NetworkSignal ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, -- Signal -- The following four parameters are used to report -- information regarding network-generated signals. -- Include at least one of the following four -- parameters to identify the network-generated signal -- being reported. alertingSignal [4] AlertingSignal OPTIONAL, subjectAudibleSignal [5] AudibleSignal OPTIONAL, terminalDisplayInfo [6] TerminalDisplayInfo OPTIONAL, other [7] VisibleString (SIZE (1..128, ...)) OPTIONAL, -- Can be used to report undefined network signals signaledToPartyId [8] PartyId, ... } Origination ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, calling [4] PartyId, called [5] PartyId OPTIONAL, input CHOICE { userinput [6] VisibleString (SIZE (1..32, ...)), translationinput [7] VisibleString (SIZE (1..32, ...)), ... }, reserved0 [8] NULL, -- Reserved transitCarrierId [9] TransitCarrierId OPTIONAL, ... } Redirection ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, old [3] CallId, redirectedto [4] PartyId, transitCarrierId [5] TransitCarrierId OPTIONAL, reserved0 [6] NULL, -- Reserved reserved1 [7] NULL, -- Reserved new [8] CallId OPTIONAL, redirectedfrom [9] PartyId OPTIONAL, ... } Release ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, ... } ServiceInstance ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, relatedCallId [4] CallId OPTIONAL, serviceName [5] VisibleString (SIZE (1..128, ...)), firstCallCalling [6] PartyId OPTIONAL, secondCallCalling [7] PartyId OPTIONAL, called [8] PartyId OPTIONAL, calling [9] PartyId OPTIONAL, ... } SubjectSignal ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId OPTIONAL, signal [4] SEQUENCE { -- The following four parameters are used to report -- information regarding subject-initiated dialing and -- signaling. Include at least one of the following four -- parameters to identify the subject- initiated dialing -- and signaling information being reported. switchhookFlash [0] VisibleString (SIZE (1..128, ...)) OPTIONAL, dialedDigits [1] VisibleString (SIZE (1..128, ...)) OPTIONAL, featureKey [2] VisibleString (SIZE (1..128, ...)) OPTIONAL, otherSignalingInformation [3] VisibleString (SIZE (1..128, ...)) OPTIONAL, -- Can be used to report undefined subject signals ... }, signaledFromPartyId [5] PartyId, ... } TerminationAttempt ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, calling [4] PartyId OPTIONAL, called [5] PartyId OPTIONAL, reserved0 [6] NULL, -- Reserved redirectedFromInfo [7] RedirectedFromInfo OPTIONAL, ... } AccessingElementId ::= VisibleString (SIZE(1..15, ...)) -- Statically configured element number AlertingSignal ::= ENUMERATED { notUsed (0), -- Reserved alertingPattern0 (1), -- normal ringing alertingPattern1 (2), -- distinctive ringing: intergroup alertingPattern2 (3), -- distinctive ringing: special/priority alertingPattern3 (4), -- distinctive ringing: electronic key -- telephone srvc alertingPattern4 (5), -- ringsplash, reminder ring callWaitingPattern1 (6), -- normal call waiting tone callWaitingPattern2 (7), -- incoming additional call waiting tone callWaitingPattern3 (8), -- priority additional call waiting tone callWaitingPattern4 (9), -- distinctive call waiting tone bargeInTone (10), -- barge-in tone (e.g. for operator barge-in) alertingPattern5 (11), -- distinctive ringing: solution specific alertingPattern6 (12), -- distinctive ringing: solution specific alertingPattern7 (13), -- distinctive ringing: solution specific alertingPattern8 (14), -- distinctive ringing: solution specific alertingPattern9 (15), -- distinctive ringing: solution specific ... } -- This parameter identifies the type of alerting (ringing) signal that is -- applied toward the surveillance subject. See GR-506-CORE, LSSGR: Signaling -- for Analog Interfaces (A Module of the LATA Switching Systems Generic -- Requirements [LSSGR], FR-64). AudibleSignal ::= ENUMERATED { notUsed (0), -- Reserved dialTone (1), recallDialTone (2), -- recall dial tone, stutter dial tone ringbackTone (3), -- tone indicates ringing at called party -- end reorderTone (4), -- reorder tone, congestion tone busyTone (5), confirmationTone (6), -- tone confirms receipt and processing of -- request expensiveRouteTone (7), -- tone indicates outgoing route is -- expensive messageWaitingTone (8), receiverOffHookTone (9), -- receiver off-hook tone, off-hook warning -- tone specialInfoTone (10), -- tone indicates call sent to announcement denialTone (11), -- tone indicates denial of feature request interceptTone (12), -- wireless intercept/mobile reorder tone answerTone (13), -- wireless service tone tonesOff (14), -- wireless service tone pipTone (15), -- wireless service tone abbreviatedIntercept (16), -- wireless service tone abbreviatedCongestion (17), -- wireless service tone warningTone (18), -- wireless service tone dialToneBurst (19), -- wireless service tone numberUnObtainableTone (20), -- wireless service tone authenticationFailureTone (21), -- wireless service tone ... } -- This parameter identifies the type of audible tone that is applied toward -- the surveillance subject. See GR-506-CORE, LSSGR: Signaling for Analog -- Interfaces (A Module of the LATA Switching Systems Generic Requirements -- [LSSGR], FR-64), ANSI/TIA/EIA-41-D, Cellular Radiotelecommunications -- Intersystem Operations, and GSM 02.40, Digital cellular telecommunications -- system (Phase 2+); Procedure for call progress indications. CallId ::= SEQUENCE { sequencenumber [0] VisibleString (SIZE(1..25, ...)), systemidentity [1] VisibleString (SIZE(1..15, ...)), ... } -- The Delivery Function generates this structure from the -- Billing-Correlation-ID (contained in the Event Messages). -- The sequencenumber is generated by converting the -- Timestamp (32 bits) and Event-Counter (32 bits) into -- ASCII strings, separating them with a comma. -- The systemidentity field is copied from the Element-ID field CaseId ::= VisibleString (SIZE(1..25, ...)) CCCId ::= CHOICE { combCCC [0] VisibleString (SIZE(1..20, ...)), sepCCCpair [1] SEQUENCE{ sepXmitCCC [0] VisibleString (SIZE(1..20, ...)), sepRecvCCC [1] VisibleString (SIZE(1..20, ...)), ... }, ... } -- The Delivery Function MUST generate this structure -- from the CCC-Identifier used for the corresponding -- Call Content packet stream by converting the 32-bit -- value into an 8-character (hex-encoded) ASCII string -- consisting of digits 0-9 and letters A-F. EventTime ::= GeneralizedTime FlowDirection ::= ENUMERATED { downstream (1), upstream (2), downstream-and-upstream (3), ... } PartyId ::= SEQUENCE { reserved0 [0] NULL OPTIONAL, -- Reserved reserved1 [1] NULL OPTIONAL, -- Reserved reserved2 [2] NULL OPTIONAL, -- Reserved reserved3 [3] NULL OPTIONAL, -- Reserved reserved4 [4] NULL OPTIONAL, -- Reserved reserved5 [5] NULL OPTIONAL, -- Reserved dn [6] VisibleString (SIZE(1..15, ...)) OPTIONAL, userProvided [7] VisibleString (SIZE(1..15, ...)) OPTIONAL, reserved6 [8] NULL OPTIONAL, -- Reserved reserved7 [9] NULL OPTIONAL, -- Reserved ipAddress [10] VisibleString (SIZE(1..32, ...)) OPTIONAL, reserved8 [11] NULL OPTIONAL, -- Reserved trunkId [12] VisibleString (SIZE(1..32, ...)) OPTIONAL, reserved9 [13] NULL OPTIONAL, -- Reserved genericAddress [14] VisibleString (SIZE(1..32, ...)) OPTIONAL, genericDigits [15] VisibleString (SIZE(1..32, ...)) OPTIONAL, genericName [16] VisibleString (SIZE(1..48, ...)) OPTIONAL, port [17] VisibleString (SIZE(1..32, ...)) OPTIONAL, context [18] VisibleString (SIZE(1..32, ...)) OPTIONAL, ... } RedirectedFromInfo ::= SEQUENCE { lastRedirecting [0] PartyId OPTIONAL, originalCalled [1] PartyId OPTIONAL, numRedirections [2] INTEGER (1..100, ...) OPTIONAL, ... } ResourceState ::= ENUMERATED {reserved(1), committed(2), ...} SDP ::= UTF8String -- The format and syntax of this field are defined in [8]. TerminalDisplayInfo ::= SEQUENCE { generalDisplay [0] VisibleString (SIZE (1..80, ...)) OPTIONAL, -- Can be used to report display-related -- network signals not addressed by -- other parameters. calledNumber [1] VisibleString (SIZE (1..40, ...)) OPTIONAL, callingNumber [2] VisibleString (SIZE (1..40, ...)) OPTIONAL, callingName [3] VisibleString (SIZE (1..40, ...)) OPTIONAL, originalCalledNumber [4] VisibleString (SIZE (1..40, ...)) OPTIONAL, lastRedirectingNumber [5] VisibleString (SIZE (1..40, ...)) OPTIONAL, redirectingName [6] VisibleString (SIZE (1..40, ...)) OPTIONAL, redirectingReason [7] VisibleString (SIZE (1..40, ...)) OPTIONAL, messageWaitingNotif [8] VisibleString (SIZE (1..40, ...)) OPTIONAL, ... } -- This parameter reports information that is displayed on the surveillance -- subject's terminal. See GR-506-CORE, LSSGR: Signaling for Analog -- Interfaces (A Module of the LATA Switching Systems Generic Requirements [LSSGR], FR-64). TransitCarrierId ::= VisibleString (SIZE(3..7, ...)) END -- PCESP testing/dependencies/asn/101909/TS101909201.asn 0 → 100644 +65 −0 Original line number Diff line number Diff line TS101909201 {itu-t (0) identified-organization (4) etsi (0) ts101909 (1909) part20 (20) subpart1(1) interceptVersion (0)} DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS CdcPdu FROM PCESP {iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) cable-Television-Laboratories-Inc(4491) clabProject(2) clabProjPacketCable(2) pktcLawfulIntercept(5) pcesp(1) version-4(4)}; TARGETACTIVITYMONITOR-1 ::= SEQUENCE { version INTEGER DEFAULT 1, -- header, version - lIInstanceid LIIDType, -- header, who - timestamp UTCTime, -- header, when - targetLocation LocationType, -- header, where - direction DirectionType, iRITransaction IRITransactionType DEFAULT iRIreport, iRITransactionNumber INTEGER, userSignal UserSignalType, -- Either copy or interpreted signalling cryptoCheckSum BIT STRING OPTIONAL } TTRAFFIC ::= SEQUENCE { version INTEGER DEFAULT 1, -- header, version - lIInstanceid LIIDType, iRITransactionNumber INTEGER, trafficPacket BIT STRING, cryptoChecksum BIT STRING OPTIONAL } CTTRAFFIC ::= SEQUENCE { version INTEGER DEFAULT 1, -- header, version - lIInstanceid LIIDType, correspondentCount INTEGER, iRITransactionNumber INTEGER, trafficPacket BIT STRING, cryptoChecksum BIT STRING OPTIONAL } DirectionType ::= ENUMERATED { toTarget, fromTarget, unknown } UserSignalType ::= CHOICE { copySignal BIT STRING, interpretedSignal INTEGER, cdcPdu CdcPdu } IRITransactionType ::= ENUMERATED { iRIbegin, iRIcontinue, iRIend, iRIreport } LocationType ::= CHOICE { geodeticData BIT STRING, nameAddress PrintableString (SIZE (1..100)) } LIIDType ::= INTEGER (0..65535) -- 16 bit integer to identify interception END Loading
33128/r17/TS33128Payloads.asn +5 −5 Original line number Diff line number Diff line Loading @@ -185,7 +185,7 @@ XIRIEvent ::= CHOICE -- IMS events, see clause 7.11.4.2 iMSMessage [105] IMSMessage, startOfInterceptionForActiveIMSSession [106] StartOfInterceptionForActiveIMSSession, ePSBearerActivationDeactivation [11101] EPSIRIsContent, ePSBearerActivationDeactivation [11101] EpsIRIsContent, ePSExtendedBearerActivationDeactivation [11102] EPSExtendedBearerActivationDeactivation } Loading Loading @@ -358,8 +358,8 @@ IRIEvent ::= CHOICE -- IMS events, see clause 7.11.4.2 iMSMessage [105] IMSMessage, startOfInterceptionForActiveIMSSession [106] StartOfInterceptionForActiveIMSSession, ePSBearerActivationDeactivation [11101] EPSIRIsContent, ePSExtendedBearerActivation [11102] EPSExtendedBearerActivation ePSBearerActivationDeactivation [11101] EpsIRIsContent, ePSExtendedBearerActivationDeactivation [11102] EPSExtendedBearerActivationDeactivation } IRITargetIdentifier ::= SEQUENCE Loading Loading @@ -3207,9 +3207,9 @@ MMEFailureCause ::= CHOICE -- EPS SGW/PGW definitions -- ======================= EPSBearerActivationDeactivation ::= SEQUENCE EPSExtendedBearerActivationDeactivation ::= SEQUENCE { bearerActivation [1] EPSIRIsContent, bearerActivation [1] EpsIRIsContent, new5GParams [2] New5GParams } Loading
testing/check_asn1.py 0 → 100644 +136 −0 Original line number Diff line number Diff line import logging from pathlib import Path from pprint import pprint from subprocess import run from pycrate_asn1c.asnproc import * ignoreReleases = {'33108' : [f'r{i}' for i in range(5, 17)], '33128' : [], 'testing' : [] } def prepareFile(f): with open(f) as fh: s = fh.read() s = s.replace("RELATIVE-OID", "OBJECT IDENTIFIER") # sigh return s def parseFile(f): p = run(['asn1c', '-E', str(f)], capture_output=True) if (p.returncode != 0): raise Exception(f"Compiler error: {p.returncode} - {p.stderr.decode().splitlines()[0]}") return p.stdout.decode() def compileFiles(fileList): p = run(['asn1c', '-P', '-fcompound-names'] + [str(f) for f in fileList], capture_output=True) results = { 'result' : p.returncode, 'errors' : [line for line in p.stderr.decode().splitlines() if len(line.strip()) > 0 and not line.startswith('WARNING')], 'warnings' : [line for line in p.stderr.decode().splitlines() if line.startswith('WARNING') if not "/usr/local/share/asn1c" in line] } return results def compileFiles2 (fileList): fileTexts = [] fileNames = [] GLOBAL.clear() for filename in fileList: with open(filename) as f: fileTexts.append(f.read()) fileNames.append(str(filename)) print (f"Loading {filename}") compile_text(fileTexts, filenames = fileNames) return { 'result' : 0, 'errors' : [], 'warnings' : [] } def extractModuleOID(s): oid = s[:s.find('DEFINITIONS')] return oid compileTargets = [ ['./33128/r15/TS33128Payloads.asn'], ['./33128/r16/TS33128Payloads.asn'], ['./33128/r16/TS33128IdentityAssociation.asn'], [ './33128/r17/TS33128Payloads.asn', './33108/r16/EpsHI2Operations.asn', './33108/r16/UmtsHI2Operations.asn', './testing/dependencies/asn/HI2Operations,ver18.asn', './testing/dependencies/asn/101909/TS101909201.asn', './testing/dependencies/asn/101909/PCESP.asn', './testing/dependencies/asn/301040/06132v203_C01.asn', ], ['./33128/r17/TS33128IdentityAssociation.asn'], ['./testing/mod1.asn', './testing/mod2.asn'] ] if __name__ == '__main__': fileList = list(Path(".").rglob("*.asn1")) + list(Path(".").rglob("*.asn")) ignoredFiles = [file for file in fileList if file.parts[1] in ignoreReleases[file.parts[0]]] logging.info(f"Ignoring {len(ignoredFiles)} files") logging.debug(ignoredFiles) fileList = [file for file in fileList if file not in ignoredFiles] if len(fileList) == 0: logging.warning ("No files specified") exit(0) print ("ASN.1 Parser checks:") print ("-----------------------------") logging.info("Parsing files...") errorCount = 0 moduleDict = {} for f in fileList: try: parsed = parseFile(f) oid = extractModuleOID(parsed) moduleDict[oid] = f except Exception as ex: logging.info (f" {f}: Failed - {ex!r}") print (f" {f}: Failed") print (f" {ex!r}") errorCount += 1 continue print (f" {f}: OK") if (errorCount > 0): print ("-----------------------------") print (f"Parse errors: {errorCount}") print ("-----------------------------") exit(-1) print ("-----------------------------") print (f"Module dictonary") print ("-----------------------------") for k,v in moduleDict.items(): print(f" {k} : {str(f)}") print ("-----------------------------") print (f"Compiling") print ("-----------------------------") errorList = [] for target in compileTargets: try: compileFiles2(target) except Exception as ex: errorList.append((target[0], ex)) continue print ("-----------------------------") print (f"Compile errors: {len(errorList)}") print ("-----------------------------") if len(errorList) > 0: for er in errorList: print(f" {er[0]:.<45}.{er[1]!r}") print ("-----------------------------") print (f"Compile errors: {len(errorList)}") print ("-----------------------------") exit(-1) exit(0)
testing/compile_asn1.pydeleted 100644 → 0 +0 −47 Original line number Diff line number Diff line import logging import asn1tools from pathlib import Path from pprint import pprint ignoreReleases = {'33108' : [f'r{i}' for i in range(5, 17)], '33128' : [] } def prepareFile(f): with open(f) as fh: s = fh.read() s = s.replace("RELATIVE-OID", "OBJECT IDENTIFIER") # sigh return s if __name__ == '__main__': fileList = list(Path(".").rglob("*.asn1")) + list(Path(".").rglob("*.asn")) ignoredFiles = [file for file in fileList if file.parts[1] in ignoreReleases[file.parts[0]]] logging.info(f"Ignoring {len(ignoredFiles)} files") logging.debug(ignoredFiles) fileList = [file for file in fileList if file not in ignoredFiles] if len(fileList) == 0: logging.warning ("No files specified") exit(0) print ("ASN.1 Compilation checks:") print ("-----------------------------") logging.info("Parsing files...") errorCount = 0 for f in fileList: try: s = prepareFile(str(f)) asn1tools.compile_string(s) # this won't work for modules with IMPORTs except asn1tools.ParseError as ex: logging.info (f" {f}: Failed - {ex!r}") print (f" {f}: Failed - {ex!r}") errorCount += 1 continue print (f" {f}: OK") print ("-----------------------------") print (f"Compile errors: {errorCount}") print ("-----------------------------") exit(errorCount)
testing/dependencies/asn/101909/PCESP.asn 0 → 100644 +428 −0 Original line number Diff line number Diff line PCESP {iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) cable-Television-Laboratories-Inc(4491) clabProject(2) clabProjPacketCable(2) pktcLawfulIntercept(5) pcesp(1) version-4(4)} DEFINITIONS IMPLICIT TAGS ::= BEGIN ProtocolVersion ::= ENUMERATED { -- Versions IO1 and IO2 do not support protocol versioning. v3(3), -- Version supporting PacketCable Electronic Surveillance -- Specification I03 v4(4), -- Version supporting PacketCable Electronic Surveillance -- Specification I04 ... } CdcPdu ::= SEQUENCE { protocolVersion [0] ProtocolVersion, message [1] Message, ... } Message ::= CHOICE { answer [1] Answer, ccclose [2] CCClose, ccopen [3] CCOpen, reserved0 [4] NULL, -- Reserved origination [5] Origination, reserved1 [6] NULL, -- Reserved redirection [7] Redirection, release [8] Release, reserved2 [9] NULL, -- Reserved terminationattempt [10] TerminationAttempt, reserved [11] NULL, -- Reserved ccchange [12] CCChange, reserved3 [13] NULL, -- Reserved reserved4 [14] NULL, -- Reserved dialeddigitextraction [15] DialedDigitExtraction, networksignal [16] NetworkSignal, subjectsignal [17] SubjectSignal, mediareport [18] MediaReport, serviceinstance [19] ServiceInstance, confpartychange [20] ConferencePartyChange, ... } Answer ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, answering [4] PartyId OPTIONAL, ... } CCChange ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, cCCId [4] EXPLICIT CCCId, subject [5] SDP OPTIONAL, associate [6] SDP OPTIONAL, flowDirection [7] FlowDirection, resourceState [8] ResourceState OPTIONAL, ... } CCClose ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, cCCId [3] EXPLICIT CCCId, flowDirection [4] FlowDirection, ... } CCOpen ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, ccOpenOption CHOICE { ccOpenTime [3] SEQUENCE OF CallId, reserved0 [4] NULL, -- Reserved ... }, cCCId [5] EXPLICIT CCCId, subject [6] SDP OPTIONAL, associate [7] SDP OPTIONAL, flowDirection [8] FlowDirection, ... } ConferencePartyChange ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, communicating [4] SEQUENCE OF SEQUENCE { -- include to identify parties participating in the -- communication. partyId [0] SEQUENCE OF PartyId OPTIONAL, -- identifies communicating party identities. cCCId [1] EXPLICIT CCCId OPTIONAL, -- included when the content of the resulting call is -- delivered to identify the associated CCC(s). ... } OPTIONAL, removed [5] SEQUENCE OF SEQUENCE { -- include to identify parties removed (e.g., hold -- service) from the communication. partyId [0] SEQUENCE OF PartyId OPTIONAL, -- identifies removed party identity(ies). cCCId [1] EXPLICIT CCCId OPTIONAL, -- included when the content of the resulting call is -- delivered to identify the associated CCC(s). ... } OPTIONAL, joined [6] SEQUENCE OF SEQUENCE { -- include to identify parties newly added to the -- communication. partyId [0] SEQUENCE OF PartyId OPTIONAL, -- identifies newly added party identity(ies) to an existing -- communication. cCCId [1] EXPLICIT CCCId OPTIONAL, -- included when the content of the resulting call is -- delivered to identify the associated CCC(s). ... } OPTIONAL, ... } DialedDigitExtraction ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, digits [4] VisibleString (SIZE (1..32, ...)), -- string consisting of digits representing -- Dual Tone Multi Frequency (DTMF) tones -- having values from the following numbers, -- letters, and symbols: -- '0", '1", '2", '3", '4", '5", '6", '7", -- '8", '9", '#", '*", 'A", 'B", 'C", 'D". -- Example: '123AB" or '*66" or '345#" ... } MediaReport ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, subject [4] SDP OPTIONAL, associate [5] SDP OPTIONAL, ... } NetworkSignal ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, -- Signal -- The following four parameters are used to report -- information regarding network-generated signals. -- Include at least one of the following four -- parameters to identify the network-generated signal -- being reported. alertingSignal [4] AlertingSignal OPTIONAL, subjectAudibleSignal [5] AudibleSignal OPTIONAL, terminalDisplayInfo [6] TerminalDisplayInfo OPTIONAL, other [7] VisibleString (SIZE (1..128, ...)) OPTIONAL, -- Can be used to report undefined network signals signaledToPartyId [8] PartyId, ... } Origination ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, calling [4] PartyId, called [5] PartyId OPTIONAL, input CHOICE { userinput [6] VisibleString (SIZE (1..32, ...)), translationinput [7] VisibleString (SIZE (1..32, ...)), ... }, reserved0 [8] NULL, -- Reserved transitCarrierId [9] TransitCarrierId OPTIONAL, ... } Redirection ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, old [3] CallId, redirectedto [4] PartyId, transitCarrierId [5] TransitCarrierId OPTIONAL, reserved0 [6] NULL, -- Reserved reserved1 [7] NULL, -- Reserved new [8] CallId OPTIONAL, redirectedfrom [9] PartyId OPTIONAL, ... } Release ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, ... } ServiceInstance ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, relatedCallId [4] CallId OPTIONAL, serviceName [5] VisibleString (SIZE (1..128, ...)), firstCallCalling [6] PartyId OPTIONAL, secondCallCalling [7] PartyId OPTIONAL, called [8] PartyId OPTIONAL, calling [9] PartyId OPTIONAL, ... } SubjectSignal ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId OPTIONAL, signal [4] SEQUENCE { -- The following four parameters are used to report -- information regarding subject-initiated dialing and -- signaling. Include at least one of the following four -- parameters to identify the subject- initiated dialing -- and signaling information being reported. switchhookFlash [0] VisibleString (SIZE (1..128, ...)) OPTIONAL, dialedDigits [1] VisibleString (SIZE (1..128, ...)) OPTIONAL, featureKey [2] VisibleString (SIZE (1..128, ...)) OPTIONAL, otherSignalingInformation [3] VisibleString (SIZE (1..128, ...)) OPTIONAL, -- Can be used to report undefined subject signals ... }, signaledFromPartyId [5] PartyId, ... } TerminationAttempt ::= SEQUENCE { caseId [0] CaseId, accessingElementId [1] AccessingElementId, eventTime [2] EventTime, callId [3] CallId, calling [4] PartyId OPTIONAL, called [5] PartyId OPTIONAL, reserved0 [6] NULL, -- Reserved redirectedFromInfo [7] RedirectedFromInfo OPTIONAL, ... } AccessingElementId ::= VisibleString (SIZE(1..15, ...)) -- Statically configured element number AlertingSignal ::= ENUMERATED { notUsed (0), -- Reserved alertingPattern0 (1), -- normal ringing alertingPattern1 (2), -- distinctive ringing: intergroup alertingPattern2 (3), -- distinctive ringing: special/priority alertingPattern3 (4), -- distinctive ringing: electronic key -- telephone srvc alertingPattern4 (5), -- ringsplash, reminder ring callWaitingPattern1 (6), -- normal call waiting tone callWaitingPattern2 (7), -- incoming additional call waiting tone callWaitingPattern3 (8), -- priority additional call waiting tone callWaitingPattern4 (9), -- distinctive call waiting tone bargeInTone (10), -- barge-in tone (e.g. for operator barge-in) alertingPattern5 (11), -- distinctive ringing: solution specific alertingPattern6 (12), -- distinctive ringing: solution specific alertingPattern7 (13), -- distinctive ringing: solution specific alertingPattern8 (14), -- distinctive ringing: solution specific alertingPattern9 (15), -- distinctive ringing: solution specific ... } -- This parameter identifies the type of alerting (ringing) signal that is -- applied toward the surveillance subject. See GR-506-CORE, LSSGR: Signaling -- for Analog Interfaces (A Module of the LATA Switching Systems Generic -- Requirements [LSSGR], FR-64). AudibleSignal ::= ENUMERATED { notUsed (0), -- Reserved dialTone (1), recallDialTone (2), -- recall dial tone, stutter dial tone ringbackTone (3), -- tone indicates ringing at called party -- end reorderTone (4), -- reorder tone, congestion tone busyTone (5), confirmationTone (6), -- tone confirms receipt and processing of -- request expensiveRouteTone (7), -- tone indicates outgoing route is -- expensive messageWaitingTone (8), receiverOffHookTone (9), -- receiver off-hook tone, off-hook warning -- tone specialInfoTone (10), -- tone indicates call sent to announcement denialTone (11), -- tone indicates denial of feature request interceptTone (12), -- wireless intercept/mobile reorder tone answerTone (13), -- wireless service tone tonesOff (14), -- wireless service tone pipTone (15), -- wireless service tone abbreviatedIntercept (16), -- wireless service tone abbreviatedCongestion (17), -- wireless service tone warningTone (18), -- wireless service tone dialToneBurst (19), -- wireless service tone numberUnObtainableTone (20), -- wireless service tone authenticationFailureTone (21), -- wireless service tone ... } -- This parameter identifies the type of audible tone that is applied toward -- the surveillance subject. See GR-506-CORE, LSSGR: Signaling for Analog -- Interfaces (A Module of the LATA Switching Systems Generic Requirements -- [LSSGR], FR-64), ANSI/TIA/EIA-41-D, Cellular Radiotelecommunications -- Intersystem Operations, and GSM 02.40, Digital cellular telecommunications -- system (Phase 2+); Procedure for call progress indications. CallId ::= SEQUENCE { sequencenumber [0] VisibleString (SIZE(1..25, ...)), systemidentity [1] VisibleString (SIZE(1..15, ...)), ... } -- The Delivery Function generates this structure from the -- Billing-Correlation-ID (contained in the Event Messages). -- The sequencenumber is generated by converting the -- Timestamp (32 bits) and Event-Counter (32 bits) into -- ASCII strings, separating them with a comma. -- The systemidentity field is copied from the Element-ID field CaseId ::= VisibleString (SIZE(1..25, ...)) CCCId ::= CHOICE { combCCC [0] VisibleString (SIZE(1..20, ...)), sepCCCpair [1] SEQUENCE{ sepXmitCCC [0] VisibleString (SIZE(1..20, ...)), sepRecvCCC [1] VisibleString (SIZE(1..20, ...)), ... }, ... } -- The Delivery Function MUST generate this structure -- from the CCC-Identifier used for the corresponding -- Call Content packet stream by converting the 32-bit -- value into an 8-character (hex-encoded) ASCII string -- consisting of digits 0-9 and letters A-F. EventTime ::= GeneralizedTime FlowDirection ::= ENUMERATED { downstream (1), upstream (2), downstream-and-upstream (3), ... } PartyId ::= SEQUENCE { reserved0 [0] NULL OPTIONAL, -- Reserved reserved1 [1] NULL OPTIONAL, -- Reserved reserved2 [2] NULL OPTIONAL, -- Reserved reserved3 [3] NULL OPTIONAL, -- Reserved reserved4 [4] NULL OPTIONAL, -- Reserved reserved5 [5] NULL OPTIONAL, -- Reserved dn [6] VisibleString (SIZE(1..15, ...)) OPTIONAL, userProvided [7] VisibleString (SIZE(1..15, ...)) OPTIONAL, reserved6 [8] NULL OPTIONAL, -- Reserved reserved7 [9] NULL OPTIONAL, -- Reserved ipAddress [10] VisibleString (SIZE(1..32, ...)) OPTIONAL, reserved8 [11] NULL OPTIONAL, -- Reserved trunkId [12] VisibleString (SIZE(1..32, ...)) OPTIONAL, reserved9 [13] NULL OPTIONAL, -- Reserved genericAddress [14] VisibleString (SIZE(1..32, ...)) OPTIONAL, genericDigits [15] VisibleString (SIZE(1..32, ...)) OPTIONAL, genericName [16] VisibleString (SIZE(1..48, ...)) OPTIONAL, port [17] VisibleString (SIZE(1..32, ...)) OPTIONAL, context [18] VisibleString (SIZE(1..32, ...)) OPTIONAL, ... } RedirectedFromInfo ::= SEQUENCE { lastRedirecting [0] PartyId OPTIONAL, originalCalled [1] PartyId OPTIONAL, numRedirections [2] INTEGER (1..100, ...) OPTIONAL, ... } ResourceState ::= ENUMERATED {reserved(1), committed(2), ...} SDP ::= UTF8String -- The format and syntax of this field are defined in [8]. TerminalDisplayInfo ::= SEQUENCE { generalDisplay [0] VisibleString (SIZE (1..80, ...)) OPTIONAL, -- Can be used to report display-related -- network signals not addressed by -- other parameters. calledNumber [1] VisibleString (SIZE (1..40, ...)) OPTIONAL, callingNumber [2] VisibleString (SIZE (1..40, ...)) OPTIONAL, callingName [3] VisibleString (SIZE (1..40, ...)) OPTIONAL, originalCalledNumber [4] VisibleString (SIZE (1..40, ...)) OPTIONAL, lastRedirectingNumber [5] VisibleString (SIZE (1..40, ...)) OPTIONAL, redirectingName [6] VisibleString (SIZE (1..40, ...)) OPTIONAL, redirectingReason [7] VisibleString (SIZE (1..40, ...)) OPTIONAL, messageWaitingNotif [8] VisibleString (SIZE (1..40, ...)) OPTIONAL, ... } -- This parameter reports information that is displayed on the surveillance -- subject's terminal. See GR-506-CORE, LSSGR: Signaling for Analog -- Interfaces (A Module of the LATA Switching Systems Generic Requirements [LSSGR], FR-64). TransitCarrierId ::= VisibleString (SIZE(3..7, ...)) END -- PCESP
testing/dependencies/asn/101909/TS101909201.asn 0 → 100644 +65 −0 Original line number Diff line number Diff line TS101909201 {itu-t (0) identified-organization (4) etsi (0) ts101909 (1909) part20 (20) subpart1(1) interceptVersion (0)} DEFINITIONS AUTOMATIC TAGS ::= BEGIN IMPORTS CdcPdu FROM PCESP {iso(1) identified-organization(3) dod(6) internet(1) private(4) enterprise(1) cable-Television-Laboratories-Inc(4491) clabProject(2) clabProjPacketCable(2) pktcLawfulIntercept(5) pcesp(1) version-4(4)}; TARGETACTIVITYMONITOR-1 ::= SEQUENCE { version INTEGER DEFAULT 1, -- header, version - lIInstanceid LIIDType, -- header, who - timestamp UTCTime, -- header, when - targetLocation LocationType, -- header, where - direction DirectionType, iRITransaction IRITransactionType DEFAULT iRIreport, iRITransactionNumber INTEGER, userSignal UserSignalType, -- Either copy or interpreted signalling cryptoCheckSum BIT STRING OPTIONAL } TTRAFFIC ::= SEQUENCE { version INTEGER DEFAULT 1, -- header, version - lIInstanceid LIIDType, iRITransactionNumber INTEGER, trafficPacket BIT STRING, cryptoChecksum BIT STRING OPTIONAL } CTTRAFFIC ::= SEQUENCE { version INTEGER DEFAULT 1, -- header, version - lIInstanceid LIIDType, correspondentCount INTEGER, iRITransactionNumber INTEGER, trafficPacket BIT STRING, cryptoChecksum BIT STRING OPTIONAL } DirectionType ::= ENUMERATED { toTarget, fromTarget, unknown } UserSignalType ::= CHOICE { copySignal BIT STRING, interpretedSignal INTEGER, cdcPdu CdcPdu } IRITransactionType ::= ENUMERATED { iRIbegin, iRIcontinue, iRIend, iRIreport } LocationType ::= CHOICE { geodeticData BIT STRING, nameAddress PrintableString (SIZE (1..100)) } LIIDType ::= INTEGER (0..65535) -- 16 bit integer to identify interception END