Tech-invite3GPPspaceIETFspace
959493929190898887868584838281807978777675747372717069686766656463626160595857565554535251504948474645444342414039383736353433323130292827262524232221201918171615141312111009080706050403020100
in Index   Prev   Next

RFC 2885

Megaco Protocol version 0.8

Pages: 170
Obsoleted by:  3015
Part 4 of 6 – Pages 77 to 107
First   Prev   Next

ToP   noToC   RFC2885 - Page 77   prevText

ANNEX A: BINARY ENCODING OF THE PROTOCOL (NORMATIVE)

This Annex specifies the syntax of messages using the notation defined in ASN.1 [ITU-T Recommendation X.680 (1997): Information Technology - Abstract Syntax Notation One (ASN.1) - Specification of basic notation.]. Messages shall be encoded for transmission by applying the basic encoding rules specified in [ITU-T Recommendation X.690(1994) Information Technology - ASN.1 Encoding Rules: Specification of Basic Encoding Rules (BER)].

A.1 Coding of wildcards

The use of wildcards ALL and CHOOSE is allowed in the protocol. This allows a MGC to partially specify Termination IDs and let the MG choose from the values that conform to the partial specification. Termination IDs may encode a hierarchy of names. This hierarchy is provisioned. For instance, a TerminationID may consist of a trunk group, a trunk within the group and a circuit. Wildcarding must be possible at all levels. The following paragraphs explain how this is achieved. The ASN.1 description uses octet strings of up to 8 octets in length for Termination IDs. This means that Termination IDs consist of at most 64 bits. A fully specified Termination ID may be preceded by a sequence of wildcarding fields. A wildcarding field is octet in length. Bit 7 (the most significant bit) of this octet specifies what type of wildcarding is invoked: if the bit value equals 1, then the ALL wildcard is used; if the bit value if 0, then the CHOOSE wildcard is used. Bit 6 of the wildcarding field specifies whether the wildcarding pertains to one level in the hierarchical naming scheme (bit value 0) or to the level of the hierarchy specified in the wildcarding field plus all lower levels (bit value 1). Bits 0 through 5 of the wildcarding field specify the bit position in the Termination ID at which the starts. We illustrate this scheme with some examples. In these examples, the most significant bit in a string of bits appears on the left hand side. Assume that Termination IDs are three octets long and that each octet represents a level in a hierarchical naming scheme. A valid Termination ID is 00000001 00011110 01010101. Addressing ALL names with prefix 00000001 00011110 is done as follows: wildcarding field: 10000111 Termination ID: 00000001 00011110 xxxxxxxx.
ToP   noToC   RFC2885 - Page 78
   The values of the bits labeled "x" is irrelevant and shall be ignored
   by the receiver.

   Indicating to the receiver that is must choose a name with 00011110
   as the second octet is done as follows:
        wildcarding fields: 00010111 followed by 00000111
        Termination ID: xxxxxxxx 00011110 xxxxxxxx.

   The first wildcard field indicates a CHOOSE wildcard for the level in
   the naming hierarchy starting at bit 23, the highest level in our
   assumed naming scheme.  The second wildcard field indicates a CHOOSE
   wildcard for the level in the naming hierarchy starting at bit 7, the
   lowest level in our assumed naming scheme.

   Finally, a CHOOSE-wildcarded name with the highest level of the name
   equal to 00000001 is specified as follows:
        wildcard field: 01001111
        Termination ID: 0000001 xxxxxxxx xxxxxxxx .

   Bit value 1 at bit position 6 of the first octet of the wildcard
   field indicates that the wildcarding pertains to the specified level
   in the naming hierarchy and all lower levels.

   Context IDs may also be wildcarded.  In the case of Context IDs,
   however, specifying partial names is not allowed.  Context ID 0x0
   SHALL be used to indicate the NULL Context, Context ID 0xFFFFFFFE
   SHALL be used to indicate a CHOOSE wildcard, and Context ID
   0xFFFFFFFF SHALL be used to indicate an ALL wildcard.

   TerminationID 0xFFFFFFFFFFFFFFFF SHALL be used to indicate the ROOT
   Termination.

A.2 ASN.1 syntax specification

This section contains the ASN.1 specification of the H.248 protocol syntax. NOTE - In case a transport mechanism is used that employs application level framing, the definition of Transaction below changes. Refer to the annex defining the transport mechanism for the definition that applies in that case. NOTE - The ASN.1 specification below contains a clause defining TerminationIDList as a sequence of TerminationIDs. The length of this sequence SHALL be one. The SEQUENCE OF construct is present only to allow future extensions. MEDIA-GATEWAY-CONTROL DEFINITIONS AUTOMATIC TAGS::= BEGIN
ToP   noToC   RFC2885 - Page 79
   MegacoMessage ::= SEQUENCE
   {
        authHeader      AuthenticationHeader OPTIONAL,
        mess            Message
   }

   AuthenticationHeader ::= SEQUENCE
   {
        secParmIndex    SecurityParmIndex,
        seqNum          SequenceNum,
        ad              AuthData
   }

   SecurityParmIndex ::= OCTET STRING(SIZE(4))

   SequenceNum       ::= OCTET STRING(SIZE(4))

   AuthData          ::= OCTET STRING (SIZE (16..32))

   Message ::= SEQUENCE
   {
        version         INTEGER(0..99),
   -- The version of the protocol defined here is equal to 1.
        mId             MId,    -- Name/address of message originator
        messageBody             CHOICE
        {
                messageError    ErrorDescriptor,
                transactions    SEQUENCE OF Transaction
        },
        ...
   }

   MId ::= CHOICE
   {
        ip4Address                      IP4Address,
        ip6Address                      IP6Address,
        domainName                      DomainName,
        deviceName                      PathName,
        mtpAddress                      OCTET STRING(SIZE(2)),
    -- Addressing structure of mtpAddress:
    --        15                0
    --        |  PC        | NI |
    --           14 bits    2 bits
         ...
   }

   DomainName ::= SEQUENCE
   {
ToP   noToC   RFC2885 - Page 80
        name            IA5String,
        -- The name starts with an alphanumeric digit followed by a
        -- sequence of alphanumeric digits, hyphens and dots.  No two
        -- dots shall occur consecutively.
        portNumber      INTEGER(0..65535) OPTIONAL
   }

   IP4Address ::= SEQUENCE
   {
        address         OCTET STRING (SIZE(4)),
        portNumber      INTEGER(0..65535) OPTIONAL
   }

   IP6Address ::= SEQUENCE
   {
        address         OCTET STRING (SIZE(16)),
        portNumber      INTEGER(0..65535) OPTIONAL
   }

   PathName ::= IA5String(SIZE (1..64))
   -- See section A.3

   Transaction ::= CHOICE
   {
        transactionRequest      TransactionRequest,
        transactionPending      TransactionPending,
        transactionReply        TransactionReply,
        transactionResponseAck  TransactionResponseAck,
             -- use of response acks is dependent on underlying
   transport
        ...
   }

   TransactionId ::= INTEGER(0..4294967295)  -- 32 bit unsigned integer

   TransactionRequest ::= SEQUENCE
   {
        transactionId           TransactionId,
        actions                 SEQUENCE OF ActionRequest,
        ...
   }

   TransactionPending ::= SEQUENCE
   {
        transactionId           TransactionId,
        ...
   }
ToP   noToC   RFC2885 - Page 81
   TransactionReply ::= SEQUENCE
   {
        transactionId           TransactionId,
        transactionResult       CHOICE
        {
             transactionError   ErrorDescriptor,
             actionReplies      SEQUENCE OF ActionReply
        },
        ...
   }

   TransactionResponseAck ::= SEQUENCE
   {
        firstAck        TransactionId,
        lastAck         TransactionId OPTIONAL
   }

   ErrorDescriptor ::= SEQUENCE
   {
        errorCode       ErrorCode,
        errorText       ErrorText OPTIONAL
   }

   ErrorCode ::= INTEGER(0..65535)
   -- See section 13 for IANA considerations w.r.t. error codes

   ErrorText ::= IA5String

   ContextID ::= INTEGER(0..4294967295)

   -- Context NULL Value: 0
   -- Context CHOOSE Value: 429467294 (0xFFFFFFFE)
   -- Context ALL Value: 4294967295 (0xFFFFFFFF)


   ActionRequest ::= SEQUENCE
   {
        contextId               ContextID,
        contextRequest          ContextRequest OPTIONAL,
        contextAttrAuditReq     ContextAttrAuditRequest OPTIONAL,
        commandRequests         SEQUENCE OF CommandRequest
   }

   ActionReply ::= SEQUENCE
   {
        contextId               ContextID,
        errorDescriptor         ErrorDescriptor OPTIONAL,
        contextReply            ContextRequest OPTIONAL,
ToP   noToC   RFC2885 - Page 82
        commandReply            SEQUENCE OF CommandReply
   }

   ContextRequest ::= SEQUENCE
   {
        priority                INTEGER(0..15) OPTIONAL,
        emergency               BOOLEAN OPTIONAL,
        topologyReq             SEQUENCE OF TopologyRequest OPTIONAL,
        ...
   }

   ContextAttrAuditRequest ::= SEQUENCE
   {
   topology     NULL OPTIONAL,
        emergency       NULL OPTIONAL,
        priority        NULL OPTIONAL,
        ...
   }

   CommandRequest ::= SEQUENCE
   {
        command                 Command,
        optional                NULL OPTIONAL,
        wildcardReturn          NULL OPTIONAL,
        ...
   }

   Command ::= CHOICE
   {
        addReq                  AmmRequest,
        moveReq                 AmmRequest,
        modReq                  AmmRequest,
        -- Add, Move, Modify requests have the same parameters
        subtractReq             SubtractRequest,
        auditCapRequest         AuditRequest,
        auditValueRequest       AuditRequest,
        notifyReq               NotifyRequest,
        serviceChangeReq        ServiceChangeRequest,
        ...
   }

   CommandReply ::= CHOICE
   {
        addReply                AmmsReply,
        moveReply               AmmsReply,
        modReply                AmmsReply,
        subtractReply           AmmsReply,
        -- Add, Move, Modify, Subtract replies have the same parameters
ToP   noToC   RFC2885 - Page 83
        auditCapReply           AuditReply,
        auditValueReply         AuditReply,
        notifyReply             NotifyReply,
        serviceChangeReply      ServiceChangeReply,
        ...
   }

   TopologyRequest ::= SEQUENCE
   {
        terminationFrom         TerminationID,
        terminationTo           TerminationID,
        topologyDirection       ENUMERATED
        {
                bothway(0),
                isolate(1),
                oneway(2)
        }
   }

   AmmRequest ::= SEQUENCE
   {
        terminationID           TerminationIDList,
        mediaDescriptor         MediaDescriptor OPTIONAL,
        modemDescriptor         ModemDescriptor OPTIONAL,
        muxDescriptor           MuxDescriptor OPTIONAL,
        eventsDescriptor        EventsDescriptor OPTIONAL,
        eventBufferDescriptor   EventBufferDescriptor OPTIONAL,
        signalsDescriptor       SignalsDescriptor OPTIONAL,
        digitMapDescriptor      DigitMapDescriptor OPTIONAL,
        auditDescriptor         AuditDescriptor OPTIONAL,
        ...
   }

   AmmsReply ::= SEQUENCE
   {
        terminationID           TerminationIDList,
        terminationAudit        TerminationAudit OPTIONAL
   }

   SubtractRequest ::= SEQUENCE
   {
        terminationID           TerminationIDList,
        auditDescriptor         AuditDescriptor OPTIONAL,
        ...
   }

   AuditRequest ::= SEQUENCE
   {
ToP   noToC   RFC2885 - Page 84
        terminationID           TerminationID,
        auditDescriptor         AuditDescriptor,
        ...
   }

   AuditReply ::= SEQUENCE
   {
        terminationID           TerminationID,
        auditResult             AuditResult
   }

   AuditResult ::= CHOICE
   {
        contextAuditResult      TerminationIDList,
        terminationAuditResult  TerminationAudit
   }

   AuditDescriptor ::= SEQUENCE
   {
        auditToken      BIT STRING
        {
                muxToken(0), modemToken(1), mediaToken(2),
                eventsToken(3), signalsToken(4),
                digitMapToken(5), statsToken(6),
                observedEventsToken(7),
                packagesToken(8), eventBufferToken(9)
        } OPTIONAL,
        ...
   }

   TerminationAudit ::= SEQUENCE OF AuditReturnParameter

   AuditReturnParameter ::= CHOICE
   {
        errorDescriptor                 ErrorDescriptor,
        mediaDescriptor                 MediaDescriptor,
        modemDescriptor                 ModemDescriptor,
        muxDescriptor                   MuxDescriptor,
        eventsDescriptor                EventsDescriptor,
        eventBufferDescriptor           EventBufferDescriptor,
        signalsDescriptor               SignalsDescriptor,
        digitMapDescriptor              DigitMapDescriptor,
        observedEventsDescriptor        ObservedEventsDescriptor,
        statisticsDescriptor            StatisticsDescriptor,
        packagesDescriptor              PackagesDescriptor,
        ...
   }
ToP   noToC   RFC2885 - Page 85
   NotifyRequest ::= SEQUENCE
   {
        terminationID                   TerminationIDList,
        observedEventsDescriptor        ObservedEventsDescriptor,
        errorDescriptor                 ErrorDescriptor OPTIONAL,
        ...
   }

   NotifyReply ::= SEQUENCE
   {
        terminationID                   TerminationIDList OPTIONAL,
        errorDescriptor                 ErrorDescriptor OPTIONAL,
        ...
   }

   ObservedEventsDescriptor ::= SEQUENCE
   {
        requestId                       RequestID,
        observedEventLst                SEQUENCE OF ObservedEvent
   }

   ObservedEvent ::= SEQUENCE
   {
        eventName                       EventName,
        streamID                        StreamID OPTIONAL,
        eventParList                    SEQUENCE OF EventParameter,
        timeNotation                    TimeNotation OPTIONAL
   }

   EventName ::= PkgdName

   EventParameter ::= SEQUENCE
   {
        eventParameterName              Name,
        value                           Value
   }

   ServiceChangeRequest ::= SEQUENCE
   {
        terminationID                   TerminationIDList,
        serviceChangeParms              ServiceChangeParm,
        ...
   }

   ServiceChangeReply ::= SEQUENCE
   {
        terminationID                   TerminationIDList,
        serviceChangeResult             ServiceChangeResult,
ToP   noToC   RFC2885 - Page 86
        ...
   }

   -- For ServiceChangeResult, no parameters are mandatory.  Hence the
   -- distinction between ServiceChangeParm and ServiceChangeResParm.

   ServiceChangeResult ::= CHOICE
   {
        errorDescriptor                 ErrorDescriptor,
        serviceChangeResParms           ServiceChangeResParm
   }

   WildcardField ::= OCTET STRING(SIZE(1))

   TerminationID ::= SEQUENCE
   {
        wildcard        SEQUENCE OF WildcardField,
        id              OCTET STRING(SIZE(1..8))
   }
   -- See Section A.1 for explanation of wildcarding mechanism.
   -- Termination ID 0xFFFFFFFFFFFFFFFF indicates the ROOT Termination.

   TerminationIDList ::= SEQUENCE OF TerminationID
   MediaDescriptor ::= SEQUENCE
   {

        termStateDescr  TerminationStateDescriptor OPTIONAL,
        streams         CHOICE
                {
                        oneStream       StreamParms,
                        multiStream     SEQUENCE OF StreamDescriptor
                },
        ...
   }

   StreamDescriptor ::= SEQUENCE
   {
        streamID                        StreamID,
        streamParms                     StreamParms
   }

   StreamParms ::= SEQUENCE
   {
        localControlDescriptor     LocalControlDescriptor OPTIONAL,
        localDescriptor            LocalRemoteDescriptor OPTIONAL,
        remoteDescriptor           LocalRemoteDescriptor OPTIONAL,
        ...
   }
ToP   noToC   RFC2885 - Page 87
   LocalControlDescriptor ::= SEQUENCE
   {
        streamMode      StreamMode OPTIONAL,
        reserveValue    BOOLEAN,
        reserveGroup    BOOLEAN,
        propertyParms   SEQUENCE OF PropertyParm,
        ...
   }

   StreamMode ::= ENUMERATED
   {
        sendOnly(0),
        recvOnly(1),
        sendRecv(2),
        inactive(3),
        loopBack(4),
                ...
   }

   -- In PropertyParm, value is a SEQUENCE OF octet string.  When sent
   -- by an MGC the interpretation is as follows:
   -- empty sequence means CHOOSE
   -- one element sequence specifies value
   -- longer sequence means "choose one of the values"
   -- The relation field may only be selected if the value sequence
   -- has length 1.  It indicates that the MG has to choose a value
   -- for the property. E.g., x > 3 (using the greaterThan
   -- value for relation) instructs the MG to choose any value larger
   -- than 3 for property x.
   -- The range field may only be selected if the value sequence
   -- has length 2.  It indicates that the MG has to choose a value
   -- in the range between the first octet in the value sequence and
   -- the trailing octet in the value sequence, including the
   -- boundary values.
   -- When sent by the MG, only responses to an AuditCapability request
   -- may contain multiple values, a range, or a relation field.

   PropertyParm ::= SEQUENCE
   {
        name            PkgdName,
        value           SEQUENCE OF OCTET STRING,
        extraInfo       CHOICE
                {
                        relation        Relation,
                        range           BOOLEAN
                } OPTIONAL

   }
ToP   noToC   RFC2885 - Page 88
   Name ::= OCTET STRING(SIZE(2))

   PkgdName ::= OCTET STRING(SIZE(4))
   -- represents Package Name (2 octets) plus Property Name (2 octets)
   -- To wildcard a package use 0xFFFF for first two octets, choose
   -- is not allowed. To reference native property tag specified in
   -- Annex C, use 0x0000 as first two octets.
   -- Wildcarding of Package Name is permitted only if Property Name is
   -- also wildcarded.

   Relation ::= ENUMERATED
   {
        greaterThan(0),
        smallerThan(1),
        unequalTo(2),
        ...
   }

   LocalRemoteDescriptor ::= SEQUENCE
   {
        propGrps        SEQUENCE OF PropertyGroup,
        ...
   }

   PropertyGroup ::= SEQUENCE OF PropertyParm
   TerminationStateDescriptor ::= SEQUENCE
   {
        propertyParms           SEQUENCE OF PropertyParm,
        eventBufferControl      EventBufferControl OPTIONAL,
        serviceState            ServiceState OPTIONAL,
        ...
   }

   EventBufferControl ::= ENUMERATED
   {
        Off(0),
        LockStep(1),
        ...
   }

   ServiceState ::= ENUMERATED
   {
        test(0),
        outOfSvc(1),
        inSvc(2),
         ...
   }
ToP   noToC   RFC2885 - Page 89
   MuxDescriptor   ::= SEQUENCE
   {
        muxType                 MuxType,
        termList                SEQUENCE OF TerminationID,
        nonStandardData         NonStandardData OPTIONAL,
        ...
   }

   MuxType ::= ENUMERATED
   {
        h221(0),
        h223(1),
        h226(2),
        v76(3),
        ...
   }

   StreamID ::= INTEGER(0..65535)  -- 16 bit unsigned integer

   EventsDescriptor ::= SEQUENCE
   {
        requestID               RequestID,
        eventList               SEQUENCE OF RequestedEvent
   }

   RequestedEvent ::= SEQUENCE
   {
        pkgdName                PkgdName,
        streamID                StreamID OPTIONAL,
        eventAction             RequestedActions OPTIONAL,
        evParList               SEQUENCE OF EventParameter
   }

   RequestedActions ::= SEQUENCE
   {
        keepActive              BOOLEAN,
        eventDM                 EventDM OPTIONAL,
        secondEvent             SecondEventsDescriptor OPTIONAL,
        signalsDescriptor       SignalsDescriptor OPTIONAL,
        ...
   }


   EventDM ::= CHOICE
   {    digitMapName    DigitMapName,
        digitMapValue   DigitMapValue
   }
ToP   noToC   RFC2885 - Page 90
   SecondEventsDescriptor ::= SEQUENCE
   {
        requestID               RequestID,
        eventList               SEQUENCE OF SecondRequestedEvent
   }

   SecondRequestedEvent ::= SEQUENCE
   {
        pkgdName                PkgdName,
        streamID                StreamID OPTIONAL,
        eventAction             SecondRequestedActions OPTIONAL,
        evParList               SEQUENCE OF EventParameter
   }

   SecondRequestedActions ::= SEQUENCE
   {
        keepActive              BOOLEAN,
        eventDM                 EventDM OPTIONAL,
        signalsDescriptor       SignalsDescriptor OPTIONAL,
        ...
   }

   EventBufferDescriptor ::= SEQUENCE OF ObservedEvent

   SignalsDescriptor ::= SEQUENCE OF SignalRequest
   SignalRequest ::=CHOICE
   {
        signal          Signal,
        seqSigList      SeqSigList
   }

   SeqSigList ::= SEQUENCE
   {
        id              INTEGER(0..65535),
        signalList      SEQUENCE OF Signal
   }

   Signal ::= SEQUENCE
   {
        signalName              SignalName,
        streamID                StreamID OPTIONAL,
        sigType                 SignalType OPTIONAL,
        duration                INTEGER (0..65535) OPTIONAL,
        notifyCompletion        BOOLEAN OPTIONAL,
        keepActive              BOOLEAN OPTIONAL,
        sigParList              SEQUENCE OF SigParameter
   }
ToP   noToC   RFC2885 - Page 91
   SignalType ::= ENUMERATED
   {
        brief(0),
        onOff(1),
        timeOut(2),
        ...
   }

   SignalName ::= PkgdName

   SigParameter ::= SEQUENCE
   {
        sigParameterName                Name,
        value                           Value
   }

   RequestID ::= INTEGER(0..4294967295)   -- 32 bit unsigned integer

   ModemDescriptor ::= SEQUENCE
   {
        mtl                     SEQUENCE OF ModemType,
        mpl                     SEQUENCE OF PropertyParm,
        nonStandardData         NonStandardData OPTIONAL
   }

   ModemType ::= ENUMERATED
   {
        v18(0),
        v22(1),
        v22bis(2),
        v32(3),
        v32bis(4),
        v34(5),
        v90(6),
        v91(7),
        synchISDN(8),
        ...
   }

   DigitMapDescriptor ::= SEQUENCE
   {
        digitMapName            DigitMapName,
        digitMapValue           DigitMapValue
   }

   DigitMapName ::= Name

   DigitMapValue ::= SEQUENCE
ToP   noToC   RFC2885 - Page 92
   {
        startTimer              INTEGER(0..99) OPTIONAL,
        shortTimer              INTEGER(0..99) OPTIONAL,
        longTimer               INTEGER(0..99) OPTIONAL,
        digitMapBody            IA5String
        -- See Section A.3 for explanation of digit map syntax
   }

   ServiceChangeParm ::= SEQUENCE
   {
        serviceChangeMethod     ServiceChangeMethod,
        serviceChangeAddress    ServiceChangeAddress OPTIONAL,
        serviceChangeVersion    INTEGER(0..99) OPTIONAL,
        serviceChangeProfile    ServiceChangeProfile OPTIONAL,
        serviceChangeReason     Value,
        serviceChangeDelay      INTEGER(0..4294967295) OPTIONAL,
                                    -- 32 bit unsigned integer
        serviceChangeMgcId      MId OPTIONAL,
        timeStamp               TimeNotation OPTIONAL,
        nonStandardData         NonStandardData OPTIONAL,
   }

   ServiceChangeAddress ::= CHOICE
   {
        portNumber      INTEGER(0..65535), -- TCP/UDP port number
        ip4Address      IP4Address,
        ip6Address      IP6Address,
        domainName      DomainName,
        deviceName      PathName,
        mtpAddress      OCTET STRING(SIZE(2)),
        ...
   }

   ServiceChangeResParm ::= SEQUENCE
   {
        serviceChangeMgcId      MId OPTIONAL,
        serviceChangeAddress    ServiceChangeAddress OPTIONAL,
        serviceChangeVersion    INTEGER(0..99) OPTIONAL,
        serviceChangeProfile    ServiceChangeProfile OPTIONAL
   }

   ServiceChangeMethod ::= ENUMERATED
   {
        failover(0),
        forced(1),
        graceful(2),
        restart(3),
        disconnected(4),
ToP   noToC   RFC2885 - Page 93
        handOff(5),
        ...
   }

   ServiceChangeProfile ::= SEQUENCE
   {
        profileName     Name,
        version         INTEGER(0..99)
   }

   PackagesDescriptor ::= SEQUENCE OF PackagesItem

   PackagesItem ::= SEQUENCE
   {
        packageName             Name,
        packageVersion  INTEGER(0..99)
   }

   StatisticsDescriptor ::= SEQUENCE OF StatisticsParameter

   StatisticsParameter ::= SEQUENCE
   {
        statName                PkgdName,
        statValue               Value
   }

   NonStandardData ::= SEQUENCE
   {
        nonStandardIdentifier   NonStandardIdentifier,
        data                    OCTET STRING
   }

   NonStandardIdentifier                ::= CHOICE
   {
        object                  OBJECT IDENTIFIER,
        h221NonStandard         H221NonStandard,
        experimental            IA5STRING(SIZE(8)),
    -- first two characters should be "X-" or "X+"
        ...
   }

   H221NonStandard ::= SEQUENCE
   {    t35CountryCode     INTEGER(0..255), -- country, as per T.35
        t35Extension       INTEGER(0..255), -- assigned nationally
        manufacturerCode   INTEGER(0..65535), -- assigned nationally
        ...
   }
ToP   noToC   RFC2885 - Page 94
   TimeNotation ::= SEQUENCE
   {
        date            IA5String(SIZE(8)),  -- yyyymmdd format
        time            IA5String(SIZE(8))  -- hhmmssss format
   }

   Value ::= OCTET STRING


   END

A.3 Digit maps and path names

From a syntactic viewpoint, digit maps are strings with syntactic restrictions imposed upon them. The syntax of valid digit maps is specified in ABNF [RFC 2234]. The syntax for digit maps presented in this section is for illustrative purposes only. The definition of digitMap in Annex B takes precedence in the case of differences between the two. digitMap = (digitString / LWSP "(" LWSP digitStringList LWSP ")" LWSP) digitStringList = digitString *( LWSP "/" LWSP digitString ) digitString = 1*(digitStringElement) digitStringElement = digitPosition [DOT] digitPosition = digitMapLetter / digitMapRange digitMapRange = ("x" / LWSP "[" LWSP digitLetter LWSP "]" LWSP) digitLetter = *((DIGIT "-" DIGIT) /digitMapLetter) digitMapLetter = DIGIT ;digits 0-9 / %x41-4B / %x61-6B ;a-k and A-K / "L" / "S" ;Inter-event timers ;(long, short) / "Z" ;Long duration event LWSP = *(WSP / COMMENT / EOL) WSP = SP / HTAB COMMENT = ";" *(SafeChar / RestChar / WSP) EOL EOL = (CR [LF]) / LF SP = %x20 HTAB = %x09 CR = %x0D LF = %x0A SafeChar = DIGIT / ALPHA / "+" / "-" / "&" / "!" / "_" / "/" / "'" / "?" / "@" / "^" / "`" / "~" / "*" / "$" / "\" / "(" / ")" / "%" / "." RestChar = ";" / "[" / "]" / "{" / "}" / ":" / "," / "#" / "<" / ">" / "=" / %x22 DIGIT = %x30-39 ; digits 0 through 9
ToP   noToC   RFC2885 - Page 95
   ALPHA = %x41-5A / %x61-7A    ; A-Z, a-z
   A path name is also a string with syntactic restrictions imposed
   upon it.  The ABNF production defining it is copied from Annex B.

   PathName = NAME *(["/"] ["*"] ["@"] (ALPHA / DIGIT)) ["*"]
   NAME = ALPHA *63(ALPHA / DIGIT / "_" )

ANNEX B TEXT ENCODING OF THE PROTOCOL (NORMATIVE)

B.1 Coding of wildcards

In a text encoding of the protocol, while TerminationIDs are arbitrary, by judicious choice of names, the wildcard character, "*" may be made more useful. When the wildcard character is encountered, it will "match" all TerminationIDs having the same previous and following characters (if appropriate). For example, if there were TerminationIDs of R13/3/1, R13/3/2 and R13/3/3, the TerminationID R13/3/* would match all of them. There are some circumstances where ALL Terminations must be referred to. The TerminationID "*" suffices, and is referred to as ALL. The CHOOSE TerminationID "$" may be used to signal to the MG that it has to create an ephemeral Termination or select an idle physical Termination.

B.2 ABNF specification

The protocol syntax is presented in ABNF according to RFC2234. megacoMessage = LWSP [authenticationHeader SEP ] message authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON SequenceNum COLON AuthData SecurityParmIndex = "0x" 8(HEXDIG) SequenceNum = "0x" 8(HEXDIG) AuthData = "0x" 32*64(HEXDIG) message = MegacopToken SLASH Version SEP mId SEP messageBody ; The version of the protocol defined here is equal to 1. messageBody = ( errorDescriptor / transactionList ) transactionList = 1*( transactionRequest / transactionReply / transactionPending / transactionResponseAck ) ;Use of response acks is dependent on underlying transport transactionPending = PendingToken EQUAL TransactionID LBRKT RBRKT
ToP   noToC   RFC2885 - Page 96
   transactionResponseAck = ResponseAckToken LBRKT transactionAck
                                        *(COMMA transactionAck) RBRKT
   transactionAck = transactionID / (transactionID "-" transactionID)

   transactionRequest   = TransToken EQUAL TransactionID LBRKT
                          actionRequest *(COMMA actionRequest) RBRKT

   actionRequest        = CtxToken EQUAL ContextID LBRKT ((
                          contextRequest [COMMA  commandRequestList])
                          / commandRequestList) RBRKT

   contextRequest          = ((contextProperties [COMMA contextAudit])
                           / contextAudit)

   contextProperties    = contextProperty *(COMMA contextProperty)

   ; at-most-once
   contextProperty  = (topologyDescriptor / priority / EmergencyToken)

   contextAudit    = ContextAuditToken LBRKT
                          contextAuditProperties *(COMMA
                          contextAuditProperties) RBRKT

   ; at-most-once
   contextAuditProperties = ( TopologyToken / EmergencyToken /
                              PriorityToken )

   commandRequestList= ["O-"] commandRequest *(COMMA ["O-"]
   commandRequest)

   commandRequest     = ( ammRequest / subtractRequest / auditRequest
                           / notifyRequest / serviceChangeRequest)

   transactionReply     = ReplyToken EQUAL TransactionID LBRKT
                          ( errorDescriptor / actionReplyList ) RBRKT

   actionReplyList      = actionReply *(COMMA actionReply )

   actionReply          = CtxToken EQUAL ContextID LBRKT
                          ( errorDescriptor / commandReply ) RBRKT

   commandReply       = (( contextProperties [COMMA commandReplyList] )
                           / commandReplyList )


   commandReplyList     = commandReplys *(COMMA commandReplys )
ToP   noToC   RFC2885 - Page 97
   commandReplys        = (serviceChangeReply / auditReply / ammsReply
                           / notifyReply )

   ;Add Move and Modify have the same request parameters
   ammRequest           = (AddToken / MoveToken / ModifyToken ) EQUAL
                          TerminationID [LBRKT ammParameter *(COMMA
                          ammParameter) RBRKT]

   ;at-most-once
   ammParameter         = (mediaDescriptor / modemDescriptor /
                           muxDescriptor / eventsDescriptor /
                           signalsDescriptor / digitMapDescriptor /
                           eventBufferDescriptor / auditDescriptor)

   ammsReply            = (AddToken / MoveToken / ModifyToken /
                           SubtractToken ) EQUAL TerminationID [ LBRKT
                           terminationAudit RBRKT ]

   subtractRequest      =  ["W-"] SubtractToken EQUAL TerminationID
                           [ LBRKT auditDescriptor RBRKT]

   auditRequest         = ["W-"] (AuditValueToken / AuditCapToken )
                        EQUAL TerminationID LBRKT auditDescriptor RBRKT

   auditReply           = (AuditValueToken / AuditCapToken )
                          ( contextTerminationAudit  / auditOther)

   auditOther           = EQUAL TerminationID LBRKT
                          terminationAudit RBRKT

   terminationAudit     = auditReturnParameter *(COMMA
                        auditReturnParameter)

   contextTerminationAudit = EQUAL CtxToken ( terminationIDList /
                          LBRKT errorDescriptor RBRKT )

   ;at-most-once except errorDescriptor
   auditReturnParameter = (mediaDescriptor / modemDescriptor /
                           muxDescriptor / eventsDescriptor /
                           signalsDescriptor / digitMapDescriptor /
                     observedEventsDescriptor / eventBufferDescriptor /
                           statisticsDescriptor / packagesDescriptor /
                            errorDescriptor )

   auditDescriptor      = AuditToken LBRKT [ auditItem
                          *(COMMA auditItem) ] RBRKT
ToP   noToC   RFC2885 - Page 98
   notifyRequest        = NotifyToken EQUAL TerminationID
                          LBRKT ( observedEventsDescriptor
                                [ COMMA errorDescriptor ] ) RBRKT

   notifyReply          = NotifyToken EQUAL TerminationID
                          [ LBRKT errorDescriptor RBRKT ]

   serviceChangeRequest = ServiceChangeToken EQUAL TerminationID
                          LBRKT serviceChangeDescriptor RBRKT

   serviceChangeReply   = ServiceChangeToken EQUAL TerminationID
                          [LBRKT (errorDescriptor /
                          serviceChangeReplyDescriptor) RBRKT]

   errorDescriptor   = ErrorToken EQUAL ErrorCode
                       LBRKT [quotedString] RBRKT

   ErrorCode            = 1*4(DIGIT) ; could be extended

   TransactionID        = UINT32

   mId                  = (( domainAddress / domainName )
                          [":" portNumber]) / mtpAddress / deviceName

   ; ABNF allows two or more consecutive "." although it is meaningless
   ; in a domain name.
   domainName           = "<" (ALPHA / DIGIT) *63(ALPHA / DIGIT / "-" /
                          ".") ">"
   deviceName           = pathNAME

   ContextID            = (UINT32 / "*" / "-" / "$")

   domainAddress        = "[" (IPv4address / IPv6address) "]"
   ;RFC2373 contains the definition of IP6Addresses.
   IPv6address          = hexpart [ ":" IPv4address ]
   IPv4address          = V4hex DOT V4hex DOT V4hex DOT V4hex
   V4hex                = 1*3(DIGIT) ; "0".."225"
   ; this production, while occurring in RFC2373, is not referenced
   ; IPv6prefix           = hexpart SLASH 1*2DIGIT
   hexpart          = hexseq "::" [ hexseq ] / "::" [ hexseq ] / hexseq
   hexseq               = hex4 *( ":" hex4)
   hex4                 = 1*4HEXDIG

   portNumber           = UINT16

   ; An mtp address is two octets long
   mtpAddress           = MTPToken LBRKT octetString RBRKT
ToP   noToC   RFC2885 - Page 99
   terminationIDList    = LBRKT TerminationID *(COMMA TerminationID)
   RBRKT

   ; Total length of pathNAME must not exceed 64 chars.
   pathNAME        = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
                          ["@" pathDomainName ]

   ; ABNF allows two or more consecutive "." although it is meaningless
   ; in a path domain name.
   pathDomainName       = (ALPHA / DIGIT / "*" )
                          *63(ALPHA / DIGIT / "-" / "*" / ".")

   TerminationID        = "ROOT" / pathNAME / "$" / "*"

   mediaDescriptor = MediaToken LBRKT mediaParm *(COMMA mediaParm)
                        RBRKT

   ; at-most-once per item
   ; and either streamParm or streamDescriptor but not both
   mediaParm            = (streamParm / streamDescriptor /
                           terminationStateDescriptor)

   ; at-most-once
   streamParm           = ( localDescriptor / remoteDescriptor /
                           localControlDescriptor )

   streamDescriptor     = StreamToken EQUAL StreamID LBRKT streamParm
                          *(COMMA streamParm) RBRKT

   localControlDescriptor = LocalControlToken LBRKT localParm
                            *(COMMA localParm) RBRKT

   ; at-most-once per item
   localParm            = ( streamMode / propertyParm /
   reservedValueMode
        / reservedGroupMode )

   reservedValueMode       = ReservedValueToken EQUAL ( "ON" / "OFF" )
   reservedGroupMode       = ReservedGroupToken EQUAL ( "ON" / "OFF" )

   streamMode           = ModeToken EQUAL streamModes

   streamModes          = (SendonlyToken / RecvonlyToken /
   SendrecvToken /
                          InactiveToken / LoopbackToken )
ToP   noToC   RFC2885 - Page 100
   propertyParm         = pkgdName parmValue
   parmValue            = (EQUAL alternativeValue/ INEQUAL VALUE)
   alternativeValue     = ( VALUE / LSBRKT VALUE *(COMMA VALUE) RSBRKT
   /
                          LSBRKT VALUE DOT DOT VALUE RSBRKT )

   INEQUAL              = LWSP (">" / "<" / "#" ) LWSP
   LSBRKT               = LWSP "[" LWSP
   RSBRKT               = LWSP "]" LWSP

   localDescriptor      = LocalToken LBRKT octetString RBRKT

   remoteDescriptor     = RemoteToken LBRKT octetString RBRKT

   eventBufferDescriptor= EventBufferToken LBRKT observedEvent
                          *( COMMA observedEvent ) RBRKT

   eventBufferControl     = BufferToken EQUAL ( "OFF" / LockStepToken )

   terminationStateDescriptor = TerminationStateToken LBRKT
               terminationStateParm *( COMMA terminationStateParm )
   RBRKT

   ; at-most-once per item
   terminationStateParm =(propertyParm / serviceStates /
   eventBufferControl )

   serviceStates        = ServiceStatesToken EQUAL ( TestToken /
                          OutOfSvcToken / InSvcToken )

   muxDescriptor        = MuxToken EQUAL MuxType  terminationIDList

   MuxType              = ( H221Token / H223Token / H226Token /
                       V76Token / extensionParameter )

   StreamID             = UINT16
   pkgdName             = (PackageName SLASH ItemID) ;specific item
                    / (PackageName SLASH "*") ;all events in package
                    / ("*" SLASH "*") ; all events supported by the MG
   PackageName          = NAME
   ItemID               = NAME

   eventsDescriptor     = EventsToken EQUAL RequestID LBRKT
                         requestedEvent *( COMMA requestedEvent ) RBRKT

   requestedEvent       = pkgdName [ LBRKT eventParameter
                          *( COMMA eventParameter ) RBRKT ]
ToP   noToC   RFC2885 - Page 101
   ; at-most-once each of KeepActiveToken , eventDM and eventStream
   ;at most one of either embedWithSig or embedNoSig but not both
   ;KeepActiveToken and embedWithSig must not both be present
   eventParameter       = ( embedWithSig / embedNoSig / KeepActiveToken
                           /eventDM / eventStream / eventOther )

   embedWithSig         = EmbedToken LBRKT signalsDescriptor
                             [COMMA embedFirst ] RBRKT
   embedNoSig           = EmbedToken LBRKT embedFirst RBRKT

   ; at-most-once of each
   embedFirst      = EventsToken EQUAL RequestID LBRKT
               secondRequestedEvent *(COMMA secondRequestedEvent) RBRKT

   secondRequestedEvent = pkgdName [ LBRKT secondEventParameter
                          *( COMMA secondEventParameter ) RBRKT ]

   ; at-most-once each of embedSig , KeepActiveToken, eventDM or
   ; eventStream
   ; KeepActiveToken and embedSig must not both be present
   secondEventParameter = ( EmbedSig / KeepActiveToken / eventDM /
                            eventStream / eventOther )

   embedSig  = EmbedToken LBRKT signalsDescriptor RBRKT

   eventStream          = StreamToken EQUAL StreamID

   eventOther           = eventParameterName parmValue

   eventParameterName   = NAME

   eventDM              = DigitMapToken ((EQUAL digitMapName ) /
                          (LBRKT digitMapValue RBRKT ))

   signalsDescriptor    = SignalsToken LBRKT [ signalParm
                          *(COMMA signalParm)] RBRKT

   signalParm           = signalList / signalRequest

   signalRequest        = signalName [ LBRKT sigParameter
                          *(COMMA sigParameter) RBRKT ]

   signalList           = SignalListToken EQUAL signalListId LBRKT
                          signalListParm *(COMMA signalListParm) RBRKT

   signalListId         = UINT16
ToP   noToC   RFC2885 - Page 102
   ;exactly once signalType, at most once duration and every signal
   ;parameter
   signalListParm       = signalRequest

   signalName           = pkgdName
   ;at-most-once sigStream, at-most-once sigSignalType,
   ;at-most-once sigDuration, every signalParameterName at most once
   sigParameter    = sigStream / sigSignalType / sigDuration / sigOther
                   / notifyCompletion / KeepActiveToken
   sigStream            = StreamToken EQUAL StreamID
   sigOther             = sigParameterName parmValue
   sigParameterName     = NAME
   sigSignalType        = SignalTypeToken EQUAL signalType
   signalType           = (OnOffToken / TimeOutToken / BriefToken)
   sigDuration          = DurationToken EQUAL UINT16
   notifyCompletion     = NotifyCompletionToken EQUAL ("ON" / "OFF")

   observedEventsDescriptor = ObservedEventsToken EQUAL RequestID
                      LBRKT observedEvent *(COMMA observedEvent) RBRKT

   ;time per event, because it might be buffered
   observedEvent        = [ TimeStamp LWSP COLON] LWSP
                          pkgdName [ LBRKT observedEventParameter
                          *(COMMA observedEventParameter) RBRKT ]

   ;at-most-once eventStream, every eventParameterName at most once
   observedEventParameter = eventStream / eventOther

   RequestID            = UINT32

   modemDescriptor      = ModemToken (( EQUAL modemType) /
                          (LSBRKT modemType *(COMMA modemType) RSBRKT))
                          [ LBRKT NAME parmValue
                         *(COMMA NAME parmValue) RBRKT ]

   ; at-most-once
   modemType            = (V32bisToken / V22bisToken / V18Token /
                           V22Token / V32Token / V34Token / V90Token /
                        V91Token / SynchISDNToken / extensionParameter)

   digitMapDescriptor   = DigitMapToken EQUAL digitMapName
                          ( LBRKT digitMapValue RBRKT )
   digitMapName       = NAME
   digitMapValue      = ["T" COLON Timer COMMA] ["S" COLON Timer COMMA]
                          ["L" COLON Timer COMMA] digitMap
   Timer              = 1*2DIGIT
   digitMap =
        digitString / LWSP "(" LWSP digitStringList LWSP ")" LWSP)
ToP   noToC   RFC2885 - Page 103
   digitStringList      = digitString *( LWSP "|" LWSP digitString )
   digitString          = 1*(digitStringElement)
   digitStringElement   = digitPosition [DOT]
   digitPosition        = digitMapLetter / digitMapRange
   digitMapRange      = ("x" / LWSP "[" LWSP digitLetter LWSP "]" LWSP)
   digitLetter          = *((DIGIT "-" DIGIT ) / digitMapLetter)
   digitMapLetter       = DIGIT   ;Basic event symbols
                   / %x41-4B / %x61-6B ; a-k, A-K
                   / "L" / "S"   ;Inter-event timers (long, short)
                   / Z"         ;Long duration modifier

   ;at-most-once
   auditItem            = ( MuxToken / ModemToken / MediaToken /
                           SignalsToken / EventBufferToken /
                           DigitMapToken / StatsToken / EventsToken /
                           ObservedEventsToken / PackagesToken )

   serviceChangeDescriptor = ServicesToken LBRKT serviceChangeParm
                            *(COMMA serviceChangeParm) RBRKT

   serviceChangeParm    = (serviceChangeMethod / serviceChangeReason /
                          serviceChangeDelay / serviceChangeAddress /
                         serviceChangeProfile / extension / TimeStamp /
                          serviceChangeMgcId / serviceChangeVersion )

   serviceChangeReplyDescriptor = ServicesToken LBRKT
                       servChgReplyParm *(COMMA servChgReplyParm) RBRKT

   ;at-most-once. Version is REQUIRED on first ServiceChange response
   servChgReplyParm     = (serviceChangeAddress / serviceChangeMgcId /
                          serviceChangeProfile / serviceChangeVersion )
   serviceChangeMethod  = MethodToken EQUAL (FailoverToken /
                          ForcedToken / GracefulToken / RestartToken /
                          DisconnectedToken / HandOffToken /
                          extensionParameter)

   serviceChangeReason  = ReasonToken  EQUAL VALUE
   serviceChangeDelay   = DelayToken   EQUAL UINT32
   serviceChangeAddress = ServiceChangeAddressToken EQUAL VALUE
   serviceChangeMgcId   = MgcIdToken   EQUAL mId
   serviceChangeProfile = ProfileToken EQUAL NAME SLASH Version
   serviceChangeVersion = VersionToken EQUAL Version
   extension            = extensionParameter parmValue

   packagesDescriptor   = PackagesToken LBRKT packagesItem
                          *(COMMA packagesItem) RBRKT

   Version              = 1*2(DIGIT)
ToP   noToC   RFC2885 - Page 104
   packagesItem         = NAME "-" UINT16

   TimeStamp            = Date "T" Time ; per ISO 8601:1988
   ; Date = yyyymmdd
   Date                 = 8(DIGIT)
   ; Time = hhmmssss
   Time                 = 8(DIGIT)
   statisticsDescriptor = StatsToken LBRKT statisticsParameter
                         *(COMMA statisticsParameter ) RBRKT

   ;at-most-once per item
   statisticsParameter  = pkgdName EQUAL VALUE

   topologyDescriptor   = TopologyToken LBRKT terminationA COMMA
                          terminationB COMMA topologyDirection RBRKT
   terminationA         = TerminationID
   terminationB         = TerminationID
   topologyDirection    = BothwayToken / IsolateToken / OnewayToken

   priority             = PriorityToken EQUAL UINT16

   extensionParameter   = "X"  ("-" / "+") 1*6(ALPHA / DIGIT)

   ; octetString is used to describe SDP defined in RFC2327.
   ; Caution should be taken if CRLF in RFC2327 is used.
   ; To be safe, use EOL in this ABNF.
   ; Whenever "}" appears in SDP, it is escaped by "\", e.g., "\}"
   octetString          = *(nonEscapeChar)
   nonEscapeChar        = ( "\}" / %x01-7C / %x7E-FF )
   quotedString         = DQUOTE 1*(SafeChar / RestChar/ WSP) DQUOTE

   UINT16               = 1*5(DIGIT)  ; %x0-FFFF
   UINT32               = 1*10(DIGIT) ; %x0-FFFFFFFF

   NAME                 = ALPHA *63(ALPHA / DIGIT / "_" )
   VALUE                = quotedString / 1*(SafeChar)
   SafeChar             = DIGIT / ALPHA / "+" / "-" / "&" /
                          "!" / "_" / "/" / "'" / "?" / "@" /
                          "^" / "`" / "~" / "*" / "$" / "\" /
                          "(" / ")" / "%" / "|" / "."

   EQUAL                = LWSP %x3D LWSP ; "="
   COLON                = %x3A           ; ":"
   LBRKT                = LWSP %x7B LWSP ; "{"
   RBRKT                = LWSP %x7D LWSP ; "}"
   COMMA                = LWSP %x2C LWSP ; ","
   DOT                  = %x2E           ; "."
   SLASH                = %x2F           ; "/"
ToP   noToC   RFC2885 - Page 105
   ALPHA                = %x41-5A / %x61-7A ; A-Z / a-z
   DIGIT                = %x30-39         ; 0-9
   DQUOTE               = %x22            ; " (Double Quote)
   HEXDIG               = ( DIGIT / "A" / "B" / "C" / "D" / "E" / "F" )
   SP                   = %x20        ; space
   HTAB                 = %x09        ; horizontal tab
   CR                   = %x0D        ; Carriage return
   LF                   = %x0A        ; linefeed
   LWSP                 = *( WSP / COMMENT / EOL )
   EOL                  = (CR [LF] / LF )
   WSP                  = SP / HTAB ; white space
   SEP                  = ( WSP / EOL / COMMENT) LWSP
   COMMENT              = ";" *(SafeChar/ RestChar / WSP / %x22) EOL
   RestChar             = ";" / "[" / "]" / "{" / "}" / ":" / "," / "#"
   /
                          "<" / ">" / "="


   AddToken                   = ("Add"                   / "A")
   AuditToken                 = ("Audit"                 / "AT")
   AuditCapToken              = ("AuditCapability"       / "AC")
   AuditValueToken            = ("AuditValue"            / "AV")
   AuthToken                  = ("Authentication"        / "AU")
   BothwayToken               = ("Bothway"               / "BW")
   BriefToken                 = ("Brief"                 / "BR")
   BufferToken                = ("Buffer"                / "BF")
   CtxToken                   = ("Context"               / "C")
   ContextAuditToken          = ("ContextAudit"          / "CA")
   DigitMapToken              = ("DigitMap"              / "DM")
   DiscardToken               = ("Discard"               / "DS")
   DisconnectedToken          = ("Disconnected"          / "DC")
   DelayToken                 = ("Delay"                 / "DL")
   DurationToken              = ("Duration"              / "DR")
   EmbedToken                 = ("Embed"                 / "EB")
   EmergencyToken             = ("Emergency"             / "EM")
   ErrorToken                 = ("Error"                 / "ER")
   EventBufferToken           = ("EventBuffer"           / "EB")
   EventsToken                = ("Events"                / "E")
   FailoverToken              = ("Failover"              / "FL")
   ForcedToken                = ("Forced"                / "FO")
   GracefulToken              = ("Graceful"              / "GR")
   H221Token                  = ("H221" )
   H223Token                  = ("H223" )
   H226Token                  = ("H226" )
   HandOffToken               = ("HandOff"               / "HO")
   InactiveToken              = ("Inactive"              / "IN")
   IsolateToken               = ("Isolate"               / "IS")
   InSvcToken                 = ("InService"             / "IV")
ToP   noToC   RFC2885 - Page 106
   KeepActiveToken            = ("KeepActive"            / "KA")
   LocalToken                 = ("Local"                 / "L")
   LocalControlToken          = ("LocalControl"          / "O")
   LockStepToken              = ("LockStep"              / "SP")
   LoopbackToken              = ("Loopback"              / "LB")
   MediaToken                 = ("Media"                 / "M")
   MegacopToken               = ("MEGACO"                / "!")
   MethodToken                = ("Method"                / "MT")
   MgcIdToken                 = ("MgcIdToTry"            / "MG")
   ModeToken                  = ("Mode"                  / "MO")
   ModifyToken                = ("Modify"                / "MF")
   ModemToken                 = ("Modem"                 / "MD")
   MoveToken                  = ("Move"                  / "MV")
   MTPToken                   = ("MTP")
   MuxToken                   = ("Mux"                   / "MX")
   NotifyToken                = ("Notify"                / "N")
   NotifyCompletionToken      = ("NotifyCompletion"      / "NC")
   ObservedEventsToken        = ("ObservedEvents"        / "OE")
   OnewayToken                = ("Oneway"                / "OW")
   OnOffToken                 = ("OnOff"                 / "OO")
   OutOfSvcToken              = ("OutOfService"          / "OS")
   PackagesToken              = ("Packages"              / "PG")
   PendingToken               = ("Pending"               / "PN")
   PriorityToken              = ("Priority"              / "PR")
   ProfileToken               = ("Profile"               / "PF")
   ReasonToken                = ("Reason"                / "RE")
   RecvonlyToken              = ("ReceiveOnly"           / "RC")
   ReplyToken                 = ("Reply"                 / "P")
   RestartToken               = ("Restart"               / "RS")
   RemoteToken                = ("Remote"                / "R")
   ReservedGroupToken         = ("ReservedGroup"         / "RG")
   ReservedValueToken         = ("ReservedValue"         / "RV")
   SendonlyToken              = ("SendOnly"              / "SO")
   SendrecvToken              = ("SendReceive"           / "SR")
   ServicesToken              = ("Services"              / "SV")
   ServiceStatesToken         = ("ServiceStates"         / "SI")
   ServiceChangeToken         = ("ServiceChange"         / "SC")
   ServiceChangeAddressToken  = ("ServiceChangeAddress"  / "AD")
   SignalListToken            = ("SignalList"            / "SL")
   SignalsToken               = ("Signals"               / "SG")
   SignalTypeToken            = ("SignalType"            / "SY")
   StatsToken                 = ("Statistics"            / "SA")
   StreamToken                = ("Stream"                / "ST")
   SubtractToken              = ("Subtract"              / "S")
   SynchISDNToken             = ("SynchISDN"             / "SN")
   TerminationStateToken      = ("TerminationState"      / "TS")
   TestToken                  = ("Test"                  / "TE")
   TimeOutToken               = ("TimeOut"               / "TO")
ToP   noToC   RFC2885 - Page 107
   TopologyToken              = ("Topology"              / "TP")
   TransToken                 = ("Transaction"           / "T")
   ResponseAckToken           = ("TransactionResponseAck"/ "K")
   V18Token                   = ("V18")
   V22Token                   = ("V22")
   V22bisToken                = ("V22b")
   V32Token                   = ("V32")
   V32bisToken                = ("V32b")
   V34Token                   = ("V34")
   V76Token                   = ("V76")
   V90Token                   = ("V90")
   V91Token                   = ("V91")



(page 107 continued on part 5)

Next Section