1-- This ASN.1 spec has been extracted from the Megaco/H.248 spec
2-- http://www.ietf.org/internet-drafts/draft-ietf-megaco-merged-01.txt
3--
4-- o Removed stuff named nonStandard
5-- o Major enhancements of the indentation has been performed.
6--
7-- Hakan Mattsson <hakan@cslab.ericsson.se>
8--
9-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10-- ANNEX A: BINARY ENCODING OF THE PROTOCOL (NORMATIVE)
11-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
12--
13-- This Annex specifies the syntax of messages using the notation
14-- defined in ASN.1 [ITU-T Recommendation X.680 (1997): Information
15-- Technology - Abstract Syntax Notation One (ASN.1) - Specification of
16-- basic notation.]. Messages shall be encoded for transmission by
17-- applying the basic encoding rules specified in [ITU-T Recommendation
18-- X.690(1994) Information Technology - ASN.1  Encoding Rules:
19-- Specification of Basic Encoding Rules (BER)].
20--
21-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
22-- A.1 Coding of wildcards
23-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
24--
25-- The use of wildcards ALL and CHOOSE is allowed in the protocol.
26-- This allows a MGC to partially specify Termination IDs and let the
27-- MG choose from the values that conform to the partial specification.
28-- Termination IDs may encode a hierarchy of names.  This hierarchy is
29-- provisioned. For instance, a TerminationID may consist of a trunk
30-- group, a trunk within the group and a circuit.  Wildcarding must be
31-- possible at all levels.  The following paragraphs explain how this
32-- is achieved.
33--
34-- The ASN.1 description uses octet strings of up to 8 octets in length
35-- for Termination IDs.  This means that Termination IDs consist of at
36-- most 64 bits.  A fully specified Termination ID may be preceded by a
37-- sequence of wildcarding fields.  A wildcarding field is one octet in
38-- length.  Bit 7 (the most significant bit) of this octet specifies
39-- what type of wildcarding is invoked:  if the bit value equals 1,
40-- then the ALL wildcard is used; if the bit value if 0, then the
41-- CHOOSE wildcard is used.  Bit 6 of the wildcarding field specifies
42-- whether the wildcarding pertains to one level in the hierarchical
43-- naming scheme (bit value 0) or to the level of the hierarchy
44-- specified in the wildcarding field plus all lower levels (bit value
45-- 1).  Bits 0 through 5 of the wildcarding field specify the bit
46-- position in the Termination ID at which the starts.
47--
48-- We illustrate this scheme with some examples.  In these examples,
49-- the most significant bit in a string of bits appears on the left
50-- hand side.
51--
52-- Assume that Termination IDs are three octets long and that each
53-- octet represents a level in a hierarchical naming scheme.  A valid
54-- Termination ID is
55--      00000001 00011110 01010101.
56--
57-- Addressing ALL names with prefix 00000001 00011110 is done as
58-- follows:
59--      wildcarding field: 10000111
60--      Termination ID: 00000001 00011110 xxxxxxxx.
61--
62-- The values of the bits labeled "x" is irrelevant and shall be
63-- ignored by the receiver.
64--
65-- Indicating to the receiver that is must choose a name with 00011110
66-- as the second octet is done as follows:
67--      wildcarding fields: 00010111 followed by 00000111
68--      Termination ID: xxxxxxxx 00011110 xxxxxxxx.
69--
70-- The first wildcard field indicates a CHOOSE wildcard for the level
71-- in the naming hierarchy starting at bit 23, the highest level in our
72-- assumed naming scheme.  The second wildcard field indicates a CHOOSE
73-- wildcard for the level in the naming hierarchy starting at bit 7,
74-- the lowest level in our assumed naming scheme.
75--
76-- Finally, a CHOOSE-wildcarded name with the highest level of the name
77-- equal to 00000001 is specified as follows:
78--      wildcard field: 01001111
79--      Termination ID: 0000001 xxxxxxxx xxxxxxxx .
80--
81-- Bit value 1 at bit position 6 of the first octet of the wildcard
82-- field indicates that the wildcarding pertains to the specified level
83-- in the naming hierarchy and all lower levels.
84--
85-- Context IDs may also be wildcarded.  In the case of Context IDs,
86-- however, specifying partial names is not allowed.  Context ID 0x0
87-- SHALL be used to indicate the NULL Context, Context ID 0xFFFFFFFE
88-- SHALL be used to indicate a CHOOSE wildcard, and Context ID
89-- 0xFFFFFFFF SHALL be used to indicate an ALL wildcard.
90--
91-- TerminationID 0xFFFFFFFFFFFFFFFF SHALL be used to indicate the ROOT
92-- Termination.
93--
94-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
95-- Digit maps and path names
96-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
97--
98-- From a syntactic viewpoint, digit maps are strings with syntactic
99-- restrictions imposed upon them.  The syntax of valid digit maps is
100-- specified in ABNF [RFC 2234].  The syntax for digit maps presented
101-- in this section is for illustrative purposes only. The definition of
102-- digitMap in Annex B takes precedence in the case of differences
103-- between the two.
104--
105-- digitMap = (digitString / LWSP "(" LWSP digitStringList LWSP ")"
106-- LWSP)
107-- digitStringList = digitString *( LWSP "/" LWSP digitString )
108-- digitString = 1*(digitStringElement)
109-- digitStringElement = digitPosition [DOT]
110-- digitPosition = digitMapLetter / digitMapRange
111-- digitMapRange = ("x" / LWSP "[" LWSP digitLetter LWSP "]" LWSP)
112-- digitLetter = *((DIGIT "-" DIGIT) /digitMapLetter)
113-- digitMapLetter = DIGIT               ;digits 0-9
114--         / %x41-4B / %x61-6B             ;a-k and A-K
115--         / "L"   / "S"                   ;Inter-event timers
116--                                         ;(long, short)
117--         / "Z"                           ;Long duration event
118-- DOT = %x2E ; "."
119-- LWSP = *(WSP / COMMENT / EOL)
120-- WSP = SP / HTAB
121-- COMMENT = ";" *(SafeChar / RestChar / WSP) EOL
122-- EOL = (CR [LF]) / LF
123-- SP = %x20
124-- HTAB = %x09
125-- CR = %x0D
126-- LF = %x0A
127-- SafeChar = DIGIT / ALPHA / "+" / "-" / "&" / "!" / "_" / "/" /
128--  "'" / "?" / "@" / "^" / "`" / "~" / "*" / "$" / "\" /
129-- "(" / ")" / "%" / "."
130-- RestChar = ";" / "[" / "]" / "{" / "}" / ":" / "," / "#" /
131--                 "<" / ">" / "=" / %x22
132-- DIGIT = %x30-39                      ; digits 0 through 9
133-- ALPHA = %x41-5A / %x61-7A    ; A-Z, a-z
134-- A path name is also a string with syntactic restrictions imposed
135-- upon it.  The ABNF production defining it is copied from Annex B.
136--
137-- PathName = NAME *(["/"] ["*"] ["@"] (ALPHA / DIGIT)) ["*"]
138-- NAME = ALPHA *63(ALPHA / DIGIT / "_" )
139--
140-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
141-- A.2 ASN.1 syntax specification
142-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
143--
144-- This section contains the ASN.1 specification of the H.248 protocol
145-- syntax.
146--
147-- NOTE - In case a transport mechanism is used that employs
148-- application level framing, the definition of Transaction below
149-- changes.  Refer to the annex defining the transport mechanism for
150-- the definition that applies in that case.
151--
152-- NOTE - The ASN.1 specification below contains a clause defining
153-- TerminationIDList as a sequence of TerminationIDs.  The length of
154-- this sequence SHALL be one, except possibly when used in
155-- contextAuditResult.
156-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
157
158OLD-MEDIA-GATEWAY-CONTROL DEFINITIONS AUTOMATIC TAGS::=
159BEGIN
160
161MegacoMessage ::= SEQUENCE
162{
163     authHeader                 AuthenticationHeader OPTIONAL,
164     mess                       Message
165}
166
167AuthenticationHeader ::= SEQUENCE
168{
169     secParmIndex               SecurityParmIndex,
170     seqNum                     SequenceNum,
171     ad                         AuthData
172}
173
174SecurityParmIndex ::= OCTET STRING(SIZE(4))
175
176SequenceNum       ::= OCTET STRING(SIZE(4))
177
178AuthData          ::= OCTET STRING (SIZE (12..32))
179
180Message ::= SEQUENCE
181{
182        version         INTEGER(0..99),
183        -- The version of the protocol defined here is equal to 1.
184             mId             MId,    -- Name/address of message originator
185             messageBody             CHOICE
186             {
187                     messageError    ErrorDescriptor,
188                     transactions    SEQUENCE OF Transaction
189             },
190        ...
191}
192
193MId ::= CHOICE
194{
195        ip4Address              IP4Address,
196        ip6Address              IP6Address,
197        domainName              DomainName,
198        deviceName              PathName,
199        mtpAddress              OCTET STRING(SIZE(2)),
200        -- Addressing structure of mtpAddress:
201        --        15                0
202        --        |  PC        | NI |
203        --           14 bits    2 bits
204      ...
205}
206
207DomainName ::= SEQUENCE
208{
209        name                    IA5String,
210        -- The name starts with an alphanumeric digit followed by a
211        -- sequence of alphanumeric digits, hyphens and dots.  No two
212        -- dots shall occur consecutively.
213        portNumber              INTEGER(0..65535) OPTIONAL
214}
215
216IP4Address ::= SEQUENCE
217{
218        address                 OCTET STRING (SIZE(4)),
219        portNumber              INTEGER(0..65535) OPTIONAL
220}
221
222IP6Address ::= SEQUENCE
223{
224        address                 OCTET STRING (SIZE(16)),
225        portNumber              INTEGER(0..65535) OPTIONAL
226}
227
228PathName ::= IA5String(SIZE (1..64))
229-- See section A.3
230
231Transaction ::= CHOICE
232{
233        transactionRequest      TransactionRequest,
234        transactionPending      TransactionPending,
235        transactionReply        TransactionReply,
236        transactionResponseAck  TransactionResponseAck,
237             -- use of response acks is dependent on underlying transport
238        ...
239}
240
241TransactionId ::= INTEGER(0..4294967295)  -- 32 bit unsigned integer
242
243TransactionRequest ::= SEQUENCE
244{
245        transactionId           TransactionId,
246        actions                 SEQUENCE OF ActionRequest,
247        ...
248}
249
250TransactionPending ::= SEQUENCE
251{
252        transactionId           TransactionId,
253        ...
254}
255
256TransactionReply ::= SEQUENCE
257{
258        transactionId           TransactionId,
259        immAckRequired          NULL OPTIONAL,
260        transactionResult       CHOICE
261        {
262             transactionError   ErrorDescriptor,
263             actionReplies      SEQUENCE OF ActionReply
264        },
265        ...
266}
267
268TransactionResponseAck ::= SEQUENCE
269{
270        firstAck                TransactionId,
271        lastAck                 TransactionId OPTIONAL
272}
273
274ErrorDescriptor ::= SEQUENCE
275{
276        errorCode               ErrorCode,
277        errorText               ErrorText OPTIONAL
278}
279
280ErrorCode ::= INTEGER(0..65535)
281-- See section 13 for IANA considerations w.r.t. error codes
282
283ErrorText ::= IA5String
284
285ContextID ::= INTEGER(0..4294967295)
286
287-- Context NULL Value:    0
288-- Context CHOOSE Value: 4294967294 (0xFFFFFFFE)
289-- Context ALL Value:    4294967295 (0xFFFFFFFF)
290
291
292ActionRequest ::= SEQUENCE
293{
294        contextId               ContextID,
295        contextRequest          ContextRequest OPTIONAL,
296        contextAttrAuditReq     ContextAttrAuditRequest OPTIONAL,
297        commandRequests         SEQUENCE OF CommandRequest
298}
299
300ActionReply ::= SEQUENCE
301{
302        contextId               ContextID,
303        errorDescriptor         ErrorDescriptor OPTIONAL,
304        contextReply            ContextRequest OPTIONAL,
305        commandReply            SEQUENCE OF CommandReply
306}
307
308ContextRequest ::= SEQUENCE
309{
310        priority                INTEGER(0..15) OPTIONAL,
311        emergency               BOOLEAN OPTIONAL,
312        topologyReq             SEQUENCE OF TopologyRequest OPTIONAL,
313        ...
314}
315
316ContextAttrAuditRequest ::= SEQUENCE
317{
318        topology                NULL OPTIONAL,
319        emergency               NULL OPTIONAL,
320        priority                NULL OPTIONAL,
321        ...
322}
323
324CommandRequest ::= SEQUENCE
325{
326        command                 Command,
327        optional                NULL OPTIONAL,
328        wildcardReturn          NULL OPTIONAL,
329        ...
330}
331
332Command ::= CHOICE
333{
334        addReq                  AmmRequest,
335        moveReq                 AmmRequest,
336        modReq                  AmmRequest,
337        -- Add, Move, Modify requests have the same parameters
338        subtractReq             SubtractRequest,
339        auditCapRequest         AuditRequest,
340        auditValueRequest       AuditRequest,
341        notifyReq               NotifyRequest,
342        serviceChangeReq        ServiceChangeRequest,
343        ...
344}
345
346CommandReply ::= CHOICE
347{
348        addReply                AmmsReply,
349        moveReply               AmmsReply,
350        modReply                AmmsReply,
351        subtractReply           AmmsReply,
352        -- Add, Move, Modify, Subtract replies have the same parameters
353        auditCapReply           AuditReply,
354        auditValueReply         AuditReply,
355        notifyReply             NotifyReply,
356        serviceChangeReply      ServiceChangeReply,
357        ...
358}
359
360TopologyRequest ::= SEQUENCE
361{
362        terminationFrom         TerminationID,
363        terminationTo           TerminationID,
364        topologyDirection       ENUMERATED
365        {
366                bothway(0),
367                isolate(1),
368                oneway(2)
369        }
370}
371
372AmmRequest ::= SEQUENCE
373{
374        terminationID           TerminationIDList,
375        descriptors             SEQUENCE OF     AmmDescriptor,
376        -- At most one descriptor of each type (see AmmDescriptor)
377        -- allowed in the sequence.
378        ...
379}
380
381AmmDescriptor ::= CHOICE
382{
383        mediaDescriptor         MediaDescriptor,
384        modemDescriptor         ModemDescriptor,
385        muxDescriptor           MuxDescriptor,
386        eventsDescriptor        EventsDescriptor,
387        eventBufferDescriptor   EventBufferDescriptor,
388        signalsDescriptor       SignalsDescriptor,
389        digitMapDescriptor      DigitMapDescriptor,
390        auditDescriptor         AuditDescriptor,
391...
392}
393
394AmmsReply ::= SEQUENCE
395{
396        terminationID           TerminationIDList,
397        terminationAudit        TerminationAudit OPTIONAL,
398        ...
399}
400
401SubtractRequest ::= SEQUENCE
402{
403        terminationID           TerminationIDList,
404        auditDescriptor         AuditDescriptor OPTIONAL,
405        ...
406}
407
408AuditRequest ::= SEQUENCE
409{
410        terminationID           TerminationID,
411        auditDescriptor         AuditDescriptor,
412        ...
413}
414
415AuditReply ::= SEQUENCE
416{
417        terminationID           TerminationID,
418        auditResult             AuditResult,
419        ...
420}
421
422AuditResult ::= CHOICE
423{
424        contextAuditResult      TerminationIDList,
425        terminationAuditResult  TerminationAudit
426}
427
428
429
430TerminationAudit ::= SEQUENCE OF AuditReturnParameter
431
432AuditReturnParameter ::= CHOICE
433{
434        errorDescriptor          ErrorDescriptor,
435        mediaDescriptor          MediaDescriptor,
436        modemDescriptor          ModemDescriptor,
437        muxDescriptor            MuxDescriptor,
438        eventsDescriptor         EventsDescriptor,
439        eventBufferDescriptor    EventBufferDescriptor,
440        signalsDescriptor        SignalsDescriptor,
441        digitMapDescriptor       DigitMapDescriptor,
442        observedEventsDescriptor ObservedEventsDescriptor,
443        statisticsDescriptor     StatisticsDescriptor,
444        packagesDescriptor       PackagesDescriptor,
445        emptyDescriptors         AuditDescriptor,
446        ...
447}
448
449AuditDescriptor ::= SEQUENCE
450{
451        auditToken              BIT STRING
452        {
453                muxToken(0),
454                modemToken(1),
455                mediaToken(2),
456                eventsToken(3),
457                signalsToken(4),
458                digitMapToken(5),
459                statsToken(6),
460                observedEventsToken(7),
461                packagesToken(8),
462                eventBufferToken(9)
463        } OPTIONAL,
464        ...
465}
466
467NotifyRequest ::= SEQUENCE
468{
469        terminationID            TerminationIDList,
470        observedEventsDescriptor ObservedEventsDescriptor,
471        errorDescriptor          ErrorDescriptor OPTIONAL,
472        ...
473}
474
475NotifyReply ::= SEQUENCE
476{
477        terminationID           TerminationIDList OPTIONAL,
478        errorDescriptor         ErrorDescriptor OPTIONAL,
479        ...
480}
481
482ObservedEventsDescriptor ::= SEQUENCE
483{
484        requestId               RequestID,
485        observedEventLst        SEQUENCE OF ObservedEvent
486}
487
488ObservedEvent ::= SEQUENCE
489{
490        eventName               EventName,
491        streamID                StreamID OPTIONAL,
492        eventParList            SEQUENCE OF EventParameter,
493        timeNotation            TimeNotation OPTIONAL,
494        ...
495}
496
497EventName ::= PkgdName
498
499EventParameter ::= SEQUENCE
500{
501        eventParameterName      Name,
502        value                   Value
503}
504
505ServiceChangeRequest ::= SEQUENCE
506{
507        terminationID           TerminationIDList,
508        serviceChangeParms      ServiceChangeParm,
509        ...
510}
511
512ServiceChangeReply ::= SEQUENCE
513{
514        terminationID           TerminationIDList,
515        serviceChangeResult     ServiceChangeResult,
516        ...
517}
518
519-- For ServiceChangeResult, no parameters are mandatory.  Hence the
520-- distinction between ServiceChangeParm and ServiceChangeResParm.
521
522ServiceChangeResult ::= CHOICE
523{
524        errorDescriptor         ErrorDescriptor,
525        serviceChangeResParms   ServiceChangeResParm
526}
527
528WildcardField ::= OCTET STRING(SIZE(1))
529
530TerminationID ::= SEQUENCE
531{
532        wildcard                SEQUENCE OF WildcardField,
533        id                      OCTET STRING(SIZE(1..8)),
534        ...
535}
536-- See Section A.1 for explanation of wildcarding mechanism.
537-- Termination ID 0xFFFFFFFFFFFFFFFF indicates the ROOT Termination.
538
539TerminationIDList ::= SEQUENCE OF TerminationID
540
541MediaDescriptor ::= SEQUENCE
542{
543
544        termStateDescr          TerminationStateDescriptor OPTIONAL,
545        streams                 CHOICE
546        {
547                oneStream       StreamParms,
548                multiStream     SEQUENCE OF StreamDescriptor
549        },
550        ...
551}
552
553StreamDescriptor ::= SEQUENCE
554{
555        streamID                StreamID,
556        streamParms             StreamParms
557}
558
559StreamParms ::= SEQUENCE
560{
561        localControlDescriptor  LocalControlDescriptor OPTIONAL,
562        localDescriptor         LocalRemoteDescriptor OPTIONAL,
563        remoteDescriptor        LocalRemoteDescriptor OPTIONAL,
564        ...
565}
566
567LocalControlDescriptor ::= SEQUENCE
568{
569        streamMode              StreamMode OPTIONAL,
570        reserveValue            BOOLEAN,
571        reserveGroup            BOOLEAN,
572        propertyParms           SEQUENCE OF PropertyParm,
573        ...
574}
575
576StreamMode ::= ENUMERATED
577{
578        sendOnly(0),
579        recvOnly(1),
580        sendRecv(2),
581        inactive(3),
582        loopBack(4),
583                ...
584}
585
586-- In PropertyParm, value is a SEQUENCE OF octet string.  When sent
587-- by an MGC the interpretation is as follows:
588-- empty sequence means CHOOSE
589-- one element sequence specifies value
590-- If the sublist field is not selected, a longer sequence means
591-- "choose one of the values" (i.e. value1 OR value2 OR ...)
592-- If the sublist field is selected,
593-- a sequence with more than one element encodes the value of a
594-- list-valued property (i.e. value1 AND value2 AND ...).
595-- The relation field may only be selected if the value sequence
596-- has length 1.  It indicates that the MG has to choose a value
597-- for the property. E.g., x > 3 (using the greaterThan
598-- value for relation) instructs the MG to choose any value larger
599-- than 3 for property x.
600-- The range field may only be selected if the value sequence
601-- has length 2.  It indicates that the MG has to choose a value
602-- in the range between the first octet in the value sequence and
603-- the trailing octet in the value sequence, including the
604-- boundary values.
605-- When sent by the MG, only responses to an AuditCapability request
606-- may contain multiple values, a range, or a relation field.
607
608PropertyParm ::= SEQUENCE
609{
610        name                    PkgdName,
611        value                   SEQUENCE OF OCTET STRING,
612        extraInfo               CHOICE
613        {
614                relation        Relation,
615                range           BOOLEAN,
616                sublist         BOOLEAN
617        } OPTIONAL,
618        ...
619}
620
621Name ::= OCTET STRING(SIZE(2))
622
623PkgdName ::= OCTET STRING(SIZE(4))
624-- represents Package Name (2 octets) plus Property Name (2 octets)
625-- To wildcard a package use 0xFFFF for first two octets, choose
626-- is not allowed. To reference native property tag specified in
627-- Annex C, use 0x0000 as first two octets.
628-- Wildcarding of Package Name is permitted only if Property Name is
629-- also wildcarded.
630
631Relation ::= ENUMERATED
632{
633        greaterThan(0),
634        smallerThan(1),
635        unequalTo(2),
636        ...
637}
638
639LocalRemoteDescriptor ::= SEQUENCE
640{
641        propGrps                SEQUENCE OF PropertyGroup,
642        ...
643}
644
645PropertyGroup ::= SEQUENCE OF PropertyParm
646
647TerminationStateDescriptor ::= SEQUENCE
648{
649        propertyParms           SEQUENCE OF PropertyParm,
650        eventBufferControl      EventBufferControl OPTIONAL,
651        serviceState            ServiceState OPTIONAL,
652        ...
653}
654
655EventBufferControl ::= ENUMERATED
656{
657        off(0),
658        lockStep(1),
659        ...
660}
661
662ServiceState ::= ENUMERATED
663{
664        test(0),
665        outOfSvc(1),
666        inSvc(2),
667         ...
668}
669
670MuxDescriptor   ::= SEQUENCE
671{
672        muxType                 MuxType,
673        termList                SEQUENCE OF TerminationID,
674--      nonStandardData         NonStandardData OPTIONAL,
675        ...
676}
677
678MuxType ::= ENUMERATED
679{
680        h221(0),
681        h223(1),
682        h226(2),
683        v76(3),
684        ...
685}
686
687StreamID ::= INTEGER(0..65535)  -- 16 bit unsigned integer
688
689EventsDescriptor ::= SEQUENCE
690{
691        requestID               RequestID,
692        eventList               SEQUENCE OF RequestedEvent,
693        ...
694}
695
696RequestedEvent ::= SEQUENCE
697{
698        pkgdName                PkgdName,
699        streamID                StreamID OPTIONAL,
700        eventAction             RequestedActions OPTIONAL,
701        evParList               SEQUENCE OF EventParameter,
702        ...
703}
704
705RequestedActions ::= SEQUENCE
706{
707        keepActive              BOOLEAN,
708        eventDM                 EventDM OPTIONAL,
709        secondEvent             SecondEventsDescriptor OPTIONAL,
710        signalsDescriptor       SignalsDescriptor OPTIONAL,
711        ...
712}
713
714
715EventDM ::= CHOICE
716{
717        digitMapName            DigitMapName,
718        digitMapValue           DigitMapValue
719}
720
721SecondEventsDescriptor ::= SEQUENCE
722{
723        requestID               RequestID,
724        eventList               SEQUENCE OF SecondRequestedEvent,
725        ...
726}
727
728SecondRequestedEvent ::= SEQUENCE
729{
730        pkgdName                PkgdName,
731        streamID                StreamID OPTIONAL,
732        eventAction             SecondRequestedActions OPTIONAL,
733        evParList               SEQUENCE OF EventParameter,
734        ...
735}
736
737SecondRequestedActions ::= SEQUENCE
738{
739        keepActive              BOOLEAN,
740        eventDM                 EventDM OPTIONAL,
741        signalsDescriptor       SignalsDescriptor OPTIONAL,
742        ...
743}
744
745EventBufferDescriptor ::= SEQUENCE OF EventSpec
746
747EventSpec ::= SEQUENCE
748{
749        eventName               EventName,
750        streamID                StreamID OPTIONAL,
751        eventParList            SEQUENCE OF EventParameter,
752        ...
753}
754
755SignalsDescriptor ::= SEQUENCE OF SignalRequest
756
757SignalRequest ::= CHOICE
758{
759        signal                  Signal,
760        seqSigList              SeqSigList,
761        ...
762}
763
764SeqSigList ::= SEQUENCE
765{
766        id                      INTEGER(0..65535),
767        signalList              SEQUENCE OF Signal
768}
769
770Signal ::= SEQUENCE
771{
772        signalName              SignalName,
773        streamID                StreamID OPTIONAL,
774        sigType                 SignalType OPTIONAL,
775        duration                INTEGER (0..65535) OPTIONAL,
776        notifyCompletion        NotifyCompletion OPTIONAL,
777        keepActive              BOOLEAN OPTIONAL,
778        sigParList              SEQUENCE OF SigParameter,
779        ...
780}
781
782SignalType ::= ENUMERATED
783{
784        brief(0),
785        onOff(1),
786        timeOut(2),
787        ...
788}
789
790SignalName ::= PkgdName
791
792NotifyCompletion ::= BIT STRING
793{
794        onTimeOut(0),
795        onInterruptByEvent(1),
796        onInterruptByNewSignalDescr(2),
797        otherReason(3)
798}
799
800SigParameter ::= SEQUENCE
801{
802        sigParameterName        Name,
803        value                   Value
804}
805
806RequestID ::= INTEGER(0..4294967295)   -- 32 bit unsigned integer
807
808ModemDescriptor ::= SEQUENCE
809{
810        mtl                     SEQUENCE OF ModemType,
811        mpl                     SEQUENCE OF PropertyParm
812--      nonStandardData         NonStandardData OPTIONAL
813}
814
815ModemType ::= ENUMERATED
816{
817        v18(0),
818        v22(1),
819        v22bis(2),
820        v32(3),
821        v32bis(4),
822        v34(5),
823        v90(6),
824        v91(7),
825        synchISDN(8),
826        ...
827}
828
829DigitMapDescriptor ::= SEQUENCE
830{
831        digitMapName            DigitMapName    OPTIONAL,
832        digitMapValue           DigitMapValue   OPTIONAL
833}
834
835DigitMapName ::= Name
836
837DigitMapValue ::= SEQUENCE
838{
839        startTimer              INTEGER(0..99) OPTIONAL,
840        shortTimer              INTEGER(0..99) OPTIONAL,
841        longTimer               INTEGER(0..99) OPTIONAL,
842        digitMapBody            IA5String,
843        -- See Section A.3 for explanation of digit map syntax
844        ...
845}
846
847ServiceChangeParm ::= SEQUENCE
848{
849        serviceChangeMethod     ServiceChangeMethod,
850        serviceChangeAddress    ServiceChangeAddress OPTIONAL,
851        serviceChangeVersion    INTEGER(0..99) OPTIONAL,
852        serviceChangeProfile    ServiceChangeProfile OPTIONAL,
853        serviceChangeReason     Value,
854        serviceChangeDelay      INTEGER(0..4294967295) OPTIONAL,
855                                    -- 32 bit unsigned integer
856        serviceChangeMgcId      MId OPTIONAL,
857        timeStamp               TimeNotation OPTIONAL,
858--      nonStandardData         NonStandardData OPTIONAL,
859        ...
860}
861
862ServiceChangeAddress ::= CHOICE
863{
864        portNumber              INTEGER(0..65535), -- TCP/UDP port number
865        ip4Address              IP4Address,
866        ip6Address              IP6Address,
867        domainName              DomainName,
868        deviceName              PathName,
869        mtpAddress              OCTET STRING(SIZE(2)),
870        ...
871}
872
873ServiceChangeResParm ::= SEQUENCE
874{
875        serviceChangeMgcId      MId OPTIONAL,
876        serviceChangeAddress    ServiceChangeAddress OPTIONAL,
877        serviceChangeVersion    INTEGER(0..99) OPTIONAL,
878        serviceChangeProfile    ServiceChangeProfile OPTIONAL,
879        ...
880}
881
882ServiceChangeMethod ::= ENUMERATED
883{
884        failover(0),
885        forced(1),
886        graceful(2),
887        restart(3),
888        disconnected(4),
889        handOff(5),
890        ...
891}
892
893ServiceChangeProfile ::= SEQUENCE
894{
895        profileName             Name,
896        version                 INTEGER(0..99)
897}
898
899PackagesDescriptor ::= SEQUENCE OF PackagesItem
900
901PackagesItem ::= SEQUENCE
902{
903        packageName             Name,
904        packageVersion          INTEGER(0..99),
905        ...
906}
907
908StatisticsDescriptor ::= SEQUENCE OF StatisticsParameter
909
910StatisticsParameter ::= SEQUENCE
911{
912        statName                PkgdName,
913        statValue               Value
914}
915
916-- NonStandardData ::= SEQUENCE
917-- {
918-- 	   nonStandardIdentifier   NonStandardIdentifier,
919-- 	   data                    OCTET STRING
920-- }
921--
922-- NonStandardIdentifier                ::= CHOICE
923-- {
924-- 	   object                  OBJECT IDENTIFIER,
925-- 	   h221NonStandard         H221NonStandard,
926-- 	   experimental            IA5String(SIZE(8)),
927--  first two characters should be "X-" or "X+"
928-- 	   ...
929-- }
930--
931-- H221NonStandard ::= SEQUENCE
932-- {
933-- 	   t35CountryCode1         INTEGER(0..255),
934-- 	   t35CountryCode2         INTEGER(0..255),    country, as per T.35
935-- 	   t35Extension            INTEGER(0..255),    assigned nationally
936-- 	   manufacturerCode        INTEGER(0..65535),  assigned nationally
937-- 	   ...
938-- }
939
940TimeNotation ::= SEQUENCE
941{
942        date                    IA5String(SIZE(8)), -- yyyymmdd format
943        time                    IA5String(SIZE(8))  -- hhmmssss format
944}
945
946Value ::= OCTET STRING
947
948
949END
950
951