Commit de4c9b76 authored by canterburym's avatar canterburym
Browse files

New compile tests

parent be6eb325
Loading
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -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
}

@@ -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
@@ -3207,9 +3207,9 @@ MMEFailureCause ::= CHOICE
-- EPS SGW/PGW definitions
-- =======================

EPSBearerActivationDeactivation ::= SEQUENCE
EPSExtendedBearerActivationDeactivation ::= SEQUENCE
{
    bearerActivation [1] EPSIRIsContent,
    bearerActivation [1] EpsIRIsContent,
    new5GParams      [2] New5GParams
}

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.py

deleted100644 → 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)
+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 
+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