diff --git a/examples/rfc3525.txt b/examples/rfc3525.txt
new file mode 100644
index 0000000..80663cc
--- /dev/null
+++ b/examples/rfc3525.txt
@@ -0,0 +1,11931 @@
+
+
+
+
+
+
+Network Working Group                                          C. Groves
+Request for Comments: 3525                                   M. Pantaleo
+Obsoletes: 3015                                              LM Ericsson
+Category: Standards Track                                    T. Anderson
+                                                              Consultant
+                                                               T. Taylor
+                                                         Nortel Networks
+                                                                 Editors
+                                                               June 2003
+
+
+                  Gateway Control Protocol Version 1
+
+Status of this Memo
+
+   This document specifies an Internet standards track protocol for the
+   Internet community, and requests discussion and suggestions for
+   improvements.  Please refer to the current edition of the "Internet
+   Official Protocol Standards" (STD 1) for the standardization state
+   and status of this protocol.  Distribution of this memo is unlimited.
+
+Copyright Notice
+
+   Copyright (C) The Internet Society (2003).  All Rights Reserved.
+
+Abstract
+
+   This document defines the protocol used between elements of a
+   physically decomposed multimedia gateway, i.e., a Media Gateway and a
+   Media Gateway Controller.  The protocol presented in this document
+   meets the requirements for a media gateway control protocol as
+   presented in RFC 2805.
+
+   This document replaces RFC 3015.  It is the result of continued
+   cooperation between the IETF Megaco Working Group and ITU-T Study
+   Group 16.  It incorporates the original text of RFC 3015, modified by
+   corrections and clarifications discussed on the Megaco
+   E-mail list and incorporated into the Study Group 16 Implementor's
+   Guide for Recommendation H.248.  The present version of this document
+   underwent  ITU-T Last Call as Recommendation H.248 Amendment 1.
+   Because of ITU-T renumbering, it was published by the ITU-T as
+   Recommendation H.248.1 (03/2002), Gateway Control Protocol Version 1.
+
+   Users of this specification are advised to consult the H.248 Sub-
+   series Implementors' Guide at http://www.itu.int/itudoc/itu-
+   t/com16/implgd for additional corrections and clarifications.
+
+
+
+
+
+Groves, et al.              Standards Track                     [Page 1]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+Conventions used in this document
+
+   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
+   document are to be interpreted as described in RFC 2119 [RFC2119].
+
+Table of Contents
+
+   1 Scope.........................................................5
+     1.1 Changes From RFC 3015.....................................5
+     1.2 Differences From ITU-T Recommendation H.248.1 (03/2002)...5
+   2 References....................................................6
+     2.1 Normative references......................................6
+     2.2 Informative references....................................9
+   3 Definitions..................................................10
+   4 Abbreviations................................................11
+   5 Conventions..................................................12
+   6 Connection model.............................................13
+     6.1 Contexts.................................................16
+     6.2 Terminations.............................................17
+       6.2.1 Termination dynamics.................................21
+       6.2.2 TerminationIDs.......................................21
+       6.2.3 Packages.............................................22
+       6.2.4 Termination properties and descriptors...............23
+       6.2.5 Root Termination.....................................25
+   7 Commands.....................................................26
+     7.1 Descriptors..............................................27
+       7.1.1 Specifying parameters................................27
+       7.1.2 Modem descriptor.....................................28
+       7.1.3 Multiplex descriptor.................................28
+       7.1.4 Media descriptor.....................................29
+       7.1.5 TerminationState descriptor..........................29
+       7.1.6 Stream descriptor....................................30
+       7.1.7 LocalControl descriptor..............................31
+       7.1.8 Local and Remote descriptors.........................32
+       7.1.9 Events descriptor....................................35
+       7.1.10 EventBuffer descriptor..............................38
+       7.1.11 Signals descriptor..................................38
+       7.1.12 Audit descriptor....................................40
+       7.1.13 ServiceChange descriptor............................41
+       7.1.14 DigitMap descriptor.................................41
+       7.1.15 Statistics descriptor...............................46
+       7.1.16 Packages descriptor.................................47
+       7.1.17 ObservedEvents descriptor...........................47
+       7.1.18 Topology descriptor.................................47
+       7.1.19 Error Descriptor....................................50
+     7.2 Command Application Programming Interface................50
+       7.2.1 Add..................................................51
+
+
+
+Groves, et al.              Standards Track                     [Page 2]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+       7.2.2 Modify...............................................52
+       7.2.3 Subtract.............................................53
+       7.2.4 Move.................................................55
+       7.2.5 AuditValue...........................................56
+       7.2.6 AuditCapabilities....................................59
+       7.2.7 Notify...............................................60
+       7.2.8 ServiceChange........................................61
+       7.2.9 Manipulating and Auditing Context Attributes.........65
+       7.2.10 Generic Command Syntax..............................66
+     7.3 Command Error Codes......................................66
+   8 Transactions.................................................66
+     8.1 Common parameters........................................68
+       8.1.1 Transaction Identifiers..............................68
+       8.1.2 Context Identifiers..................................68
+     8.2 Transaction Application Programming Interface............69
+       8.2.1 TransactionRequest...................................69
+       8.2.2 TransactionReply.....................................69
+       8.2.3 TransactionPending...................................71
+     8.3 Messages.................................................72
+   9 Transport....................................................72
+     9.1 Ordering of Commands.....................................73
+     9.2 Protection against Restart Avalanche.....................74
+   10 Security Considerations.....................................75
+     10.1 Protection of Protocol Connections......................75
+     10.2 Interim AH scheme.......................................76
+     10.3 Protection of Media Connections.........................77
+   11 MG-MGC Control Interface....................................78
+     11.1 Multiple Virtual MGs....................................78
+     11.2 Cold start..............................................79
+     11.3 Negotiation of protocol version.........................79
+     11.4 Failure of a MG.........................................80
+     11.5 Failure of an MGC.......................................81
+   12 Package definition..........................................82
+     12.1 Guidelines for defining packages........................82
+       12.1.1 Package.............................................83
+       12.1.2 Properties..........................................84
+       12.1.3 Events..............................................85
+       12.1.4 Signals.............................................85
+       12.1.5 Statistics..........................................86
+       12.1.6 Procedures..........................................86
+     12.2 Guidelines to defining Parameters to Events and Signals.86
+     12.3 Lists...................................................87
+     12.4 Identifiers.............................................87
+     12.5 Package registration....................................88
+   13 IANA Considerations.........................................88
+     13.1 Packages................................................88
+     13.2 Error codes.............................................89
+     13.3 ServiceChange reasons...................................89
+
+
+
+Groves, et al.              Standards Track                     [Page 3]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   ANNEX A  Binary encoding of the protocol.......................90
+     A.1 Coding of wildcards......................................90
+     A.2 ASN.1 syntax specification...............................92
+     A.3 Digit maps and path names...............................111
+   ANNEX B Text encoding of the protocol.........................113
+     B.1 Coding of wildcards.....................................113
+     B.2 ABNF specification......................................113
+     B.3 Hexadecimal octet coding................................127
+     B.4 Hexadecimal octet sequence..............................127
+   ANNEX C Tags for media stream properties......................128
+     C.1 General media attributes................................128
+     C.2 Mux properties..........................................130
+     C.3 General bearer properties...............................130
+     C.4 General ATM properties..................................130
+     C.5 Frame Relay.............................................134
+     C.6 IP......................................................134
+     C.7 ATM AAL2................................................134
+     C.8 ATM AAL1................................................136
+     C.9 Bearer capabilities.....................................137
+     C.10 AAL5 properties........................................147
+     C.11 SDP equivalents........................................148
+     C.12 H.245..................................................149
+   ANNEX D Transport over IP.....................................150
+     D.1 Transport over IP/UDP using Application Level Framing ..150
+       D.1.1 Providing At-Most-Once functionality................150
+       D.1.2 Transaction identifiers and three-way handshake.....151
+       D.1.3 Computing retransmission timers.....................152
+       D.1.4 Provisional responses...............................153
+       D.1.5 Repeating Requests, Responses and Acknowledgements..153
+     D.2 Using TCP...............................................155
+       D.2.1 Providing the At-Most-Once functionality............155
+       D.2.2 Transaction identifiers and three-way handshake.....155
+       D.2.3 Computing retransmission timers.....................156
+       D.2.4 Provisional responses...............................156
+       D.2.5 Ordering of commands................................156
+   ANNEX E  Basic packages.......................................157
+     E.1 Generic.................................................157
+     E.2 Base Root Package.......................................159
+     E.3 Tone Generator Package..................................161
+     E.4 Tone Detection Package..................................163
+     E.5 Basic DTMF Generator Package............................166
+     E.6 DTMF detection Package..................................167
+     E.7 Call Progress Tones Generator Package...................169
+     E.8 Call Progress Tones Detection Package...................171
+     E.9 Analog Line Supervision Package.........................172
+     E.10 Basic Continuity Package...............................175
+     E.11 Network Package........................................178
+     E.12 RTP Package............................................180
+
+
+
+Groves, et al.              Standards Track                     [Page 4]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+     E.13 TDM Circuit Package....................................182
+   APPENDIX I EXAMPLE CALL FLOWS (INFORMATIVE)...................184
+     A.1 Residential Gateway to Residential Gateway Call.........184
+       A.1.1 Programming Residential GW Analog Line Terminations
+             for Idle Behavior...................................184
+       A.1.2 Collecting Originator Digits and Initiating
+             Termination.........................................186
+   APPENDIX II  Changes From RFC 3015............................195
+   Intellectual Property Rights..................................210
+   Acknowledgments...............................................211
+   Authors' Addresses............................................212
+   Full Copyright Statement......................................213
+
+1  Scope
+
+   The present document, which is identical to the published version of
+   ITU-T Recommendation H.248.1 (03/2002) except as noted below, defines
+   the protocols used between elements of a physically decomposed
+   multimedia gateway.  There are no functional differences from a
+   system view between a decomposed gateway, with distributed sub-
+   components potentially on more than one physical device, and a
+   monolithic gateway such as described in ITU-T Recommendation H.246.
+   This document does not define how gateways, multipoint control units
+   or interactive voice response units (IVRs) work.  Instead it creates
+   a general framework that is suitable for these applications.
+
+   Packet network interfaces may include IP, ATM or possibly others.
+   The interfaces will support a variety of Switched Circuit Network
+   (SCN) signalling systems, including tone signalling, ISDN, ISUP, QSIG
+   and GSM.  National variants of these signalling systems will be
+   supported where applicable.
+
+1.1 Changes From RFC 3015
+
+   The differences between this document and RFC 3015 are documented in
+   Appendix II.
+
+1.2 Differences From ITU-T Recommendation H.248.1 (03/2002)
+
+   This document differs from the corresponding ITU-T publication in the
+   following respects:
+
+   -  Added IETF front matter in place of the corresponding ITU-T
+      material.
+
+   -  The ITU-T summary is too H.323-specific and has been omitted.
+
+
+
+
+
+Groves, et al.              Standards Track                     [Page 5]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  The IETF conventions have been stated as governing this document.
+      As discussed in section 5 below, this gives slightly greater
+      strength to "should" requirements.
+
+   -  The Scope section (just above) has been edited slightly to suit
+      its IETF context.
+
+   -  Added normative references to RFCs 2026 and 2119.
+
+   -  Figures 4, 5, and 6 show the centre of the context for greater
+      clarity.  Also added Figure 6a showing an important additional
+      example.
+
+   -  Added a paragraph in section 7.1.18 which was approved in the
+      Implementor's Guide but lost inadvertently in the ITU-T approved
+      version.
+
+   -  This document incorporates corrections to the informative examples
+      in Appendix I which also appear in H.248.1 version 2, but which
+      were not picked up in H.248.1 (03/2002).
+
+   -  This document includes a new Appendix II listing all the changes
+      from RFC 3015.
+
+   -  This document includes an Acknowledgements section listing the
+      authors of RFC 3015 but also many other people who contributed to
+      the development of the Megaco/H.248.x protocol.
+
+   -  Moved the Intellectual Property declaration to its usual place in
+      an IETF document and added a reference to declarations on the IETF
+      web site.
+
+2  References
+
+   The following ITU-T Recommendations and other references contain
+   provisions which, through reference in this text, constitute
+   provisions of this RFC.  At the time of publication, the editions
+   indicated were valid.  All Recommendations and other references are
+   subject to revision; all users of this RFC are therefore encouraged
+   to investigate the possibility of applying the most recent edition of
+   the Recommendations and other references listed below.  A list of the
+   currently valid ITU-T Recommendations is regularly published.
+
+2.1   Normative references
+
+   -  ITU-T Recommendation H.225.0 (1999), Call signalling protocols and
+      media stream packetization for packet-based multimedia
+      communication systems.
+
+
+
+Groves, et al.              Standards Track                     [Page 6]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  ITU-T Recommendation H.235 (1998), Security and encryption for
+      H-Series (H.323 and other H.245-based) multimedia terminals.
+
+   -  ITU-T Recommendation H.245 (1998), Control protocol for multimedia
+      communication.
+
+   -  ITU-T Recommendation H.246 (1998), Interworking of H-series
+      multimedia terminals with H-series multimedia terminals and
+      voice/voiceband terminals on GSTN and ISDN.
+
+   -  ITU-T Recommendation H.248.8 (2002), H.248 Error Codes and Service
+      Change Reasons.
+
+   -  ITU-T Recommendation H.323 (1999), Packet-based multimedia
+      communication systems.
+
+   -  ITU-T Recommendation I.363.1 (1996), B-ISDN ATM adaptation layer
+      (AAL) specification: Type 1 AAL.
+
+   -  ITU-T Recommendation I.363.2 (1997), B-ISDN ATM adaptation layer
+      (AAL) specification: Type 2 AAL.
+
+   -  ITU-T Recommendation I.363.5 (1996), B-ISDN ATM adaptation layer
+      (AAL) specification: Type 5 AAL.
+
+   -  ITU-T Recommendation I.366.1 (1998), Segmentation and Reassembly
+      Service Specific Convergence Sublayer for the AAL type 2.
+
+   -  ITU-T Recommendation I.366.2 (1999), AAL type 2 service specific
+      convergence sublayer for trunking.
+
+   -  ITU-T Recommendation I.371 (2000), Traffic control and congestion
+      control in B-ISDN.
+
+   -  ITU-T Recommendation Q.763 (1999), Signalling System No. 7 - ISDN
+      user part formats and codes.
+
+   -  ITU-T Recommendation Q.765.5 (2001), Application transport
+      mechanism - Bearer independent call control (BICC).
+
+   -  ITU-T Recommendation Q.931 (1998), ISDN user-network interface
+      layer 3 specification for basic call control.
+
+   -  ITU-T Recommendation Q.2630.1 (1999), AAL type 2 signalling
+      protocol (Capability Set 1).
+
+
+
+
+
+
+Groves, et al.              Standards Track                     [Page 7]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  ITU-T Recommendation Q.2931 (1995), Digital Subscriber Signalling
+      System No. 2 (DSS2) - User-Network Interface (UNI) - Layer 3
+      specification for basic call/connection control.
+
+   -  ITU-T Recommendation Q.2941.1 (1997), Digital Subscriber
+      Signalling System No. 2 - Generic identifier transport.
+
+   -  ITU-T Recommendation Q.2961.1 (1995), Additional signalling
+      capabilities to support traffic parameters for the tagging option
+      and the sustainable call rate parameter set.
+
+   -  ITU-T Recommendation Q.2961.2 (1997), Additional traffic
+      parameters: Support of ATM transfer capability in the broadband
+      bearer capability information element.
+
+   -  ITU-T Recommendation Q.2965.1 (1999), Digital subscriber
+      signalling system No. 2 - Support of Quality of Service classes.
+
+   -  ITU-T Recommendation Q.2965.2 (1999), Digital subscriber
+      signalling system No. 2 - Signalling of individual Quality of
+      Service parameters.
+
+   -  ITU-T Recommendation V.76 (1996), Generic multiplexer using V.42
+      LAPM-based procedures.
+
+   -  ITU-T Recommendation X.213 (1995), Information technology - Open
+      Systems Interconnection - Network service definition plus
+      Amendment 1 (1997), Addition of the Internet protocol address
+      format identifier.
+
+   -  ITU-T Recommendation X.680 (1997), Information technology -
+      Abstract Syntax Notation One (ASN.1): Specification of basic
+      notation.
+
+   -  ITU-T Recommendation X.690 (1997), Information Technology - ASN.1
+      Encoding Rules: Specification of Basic Encoding Rules (BER),
+      Canonical Encoding Rules (CER) and Distinguished Encoding Rules
+      (DER).
+
+   -  ATM Forum (1996), ATM User-Network Interface (UNI) Signalling
+      Specification - Version 4.0.
+
+   [RFC 1006] Rose, M. and D. Cass, "ISO Transport Service on top of the
+              TCP, Version 3", STD 35, RFC 1006, May 1987.
+
+   [RFC 2026] Brander, S., "The Internet Standards Process -- Revision
+              3", BCP 9, RFC 2026, October 1996.
+
+
+
+
+Groves, et al.              Standards Track                     [Page 8]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   [RFC 2119] Bradner, S., "Key words for use in RFCs to Indicate
+              Requirement Levels", BCP 14, RFC 2119, March 1997.
+
+   [RFC 2234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
+              Specifications: ABNF", RFC 2234, November 1997.
+
+   [RFC 2327] Handley, M. and V. Jacobson, "SDP: Session Description
+              Protocol", RFC 2327, April 1998.
+
+   [RFC 2402] Kent, S. and R. Atkinson, "IP Authentication Header", RFC
+              2402, November 1998.
+
+   [RFC 2406] Kent, S. and R. Atkinson, "IP Encapsulating Security
+              Payload (ESP)", RFC 2406, November 1998.
+
+2.2   Informative references
+
+   -  ITU-T Recommendation E.180/Q.35 (1998), Technical characteristics
+      of tones for the telephone service.
+
+   -  CCITT Recommendation G.711 (1988), Pulse Code Modulation (PCM) of
+      voice frequencies.
+
+   -  ITU-T Recommendation H.221 (1999), Frame structure for a 64 to
+      1920 kbit/s channel in audiovisual teleservices.
+
+   -  ITU  T Recommendation H.223 (1996), Multiplexing protocol for low
+      bit rate multimedia communication.
+
+   -  ITU-T Recommendation H.226 (1998), Channel aggregation protocol
+      for multilink operation on circuit-switched networks
+
+   -  ITU-T Recommendation Q.724 (1998), Signalling procedures.
+
+   -  ITU-T Recommendation Q.764 (1999), Signalling system No. 7 - ISDN
+      user part signalling procedures.
+
+   -  ITU-T Recommendation Q.1902.4 (2001), Bearer independent call
+      control protocol - Basic call procedures.
+
+   [RFC 768]  Postel, J., "User Datagram Protocol", STD 6, RFC 768,
+              August 1980.
+
+   [RFC 791]  Postel, J., "Internet Protocol", STD 5, RFC 791, September
+              1981.
+
+   [RFC 793]  Postel, J., "Transmission Control Protocol", STD 7, RFC
+              793, September 1981.
+
+
+
+Groves, et al.              Standards Track                     [Page 9]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   [RFC 1661] Simpson, W., Ed., "The Point-to-Point Protocol (PPP)", STD
+              51, RFC 1661, July 1994.
+
+   [RFC 1889] Schulzrinne, H., Casner, S., Frederick, R. and V.
+              Jacobson, "RTP: A Transport Protocol for Real-Time
+              Applications", RFC 1889, January 1996.
+
+   [RFC 1890] Schulzrinne, H. and G. Fokus, "RTP Profile for Audio and
+              Video Conferences with Minimal Control",  RFC 1890,
+              January 1996.
+
+   [RFC 2401] Kent, S. and R. Atkinson, "Security Architecture for the
+              Internet Protocol", RFC 2401, November 1998.
+
+   [RFC 2460] Deering, S. and R. Hinden, "Internet Protocol, Version 6
+              (IPv6) Specification", RFC 2460, December 1998.
+
+   [RFC 2543] Handley, M., Schulzrinne, H., Schooler, E. and J.
+              Rosenberg, "SIP: Session Initiation Protocol", RFC 2543,
+              March 1999.
+
+   [RFC 2805] Greene, N., Ramalho, M. and B. Rosen, "Media Gateway
+              Control Protocol Architecture and Requirements", RFC 2805,
+              April 2000.
+
+3  Definitions
+
+   This document defines the following terms:
+
+   Access gateway:
+   A type of gateway that provides a User-Network Interface (UNI) such
+   as ISDN.
+
+   Descriptor:
+   A syntactic element of the protocol that groups related properties.
+   For instance, the properties of a media flow on the MG can be set by
+   the MGC by including the appropriate descriptor in a command.
+
+   Media Gateway (MG):
+   The media gateway converts media provided in one type of network to
+   the format required in another type of network.  For example, a MG
+   could terminate bearer channels from a switched circuit network
+   (e.g., DS0s) and media streams from a packet network (e.g., RTP
+   streams in an IP network).  This gateway may be capable of processing
+   audio, video and T.120 alone or in any combination, and will be
+   capable of full duplex media translations.  The MG may also play
+   audio/video messages and perform other IVR functions, or may perform
+   media conferencing.
+
+
+
+Groves, et al.              Standards Track                    [Page 10]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Media Gateway Controller (MGC):
+   Controls the parts of the call state that pertain to connection
+   control for media channels in a MG.
+
+   Multipoint Control Unit (MCU):
+   An entity that controls the setup and coordination of a multi-user
+   conference that typically includes processing of audio, video and
+   data.
+
+   Residential gateway:
+   A gateway that interworks an analogue line to a packet network.  A
+   residential gateway typically contains one or two analogue lines and
+   is located at the customer premises.
+
+   SCN FAS signalling gateway:
+   This function contains the SCN Signalling Interface that terminates
+   SS7, ISDN or other signalling links where the call control channel
+   and bearer channels are collocated in the same physical span.
+
+   SCN NFAS signalling gateway:
+   This function contains the SCN Signalling Interface that terminates
+   SS7 or other signalling links where the call control channels are
+   separated from bearer channels.
+
+   Stream:
+   Bidirectional media or control flow received/sent by a media gateway
+   as part of a call or conference.
+
+   Trunk:
+   A communication channel between two switching systems such as a DS0
+   on a T1 or E1 line.
+
+   Trunking gateway:
+   A gateway between SCN network and packet network that typically
+   terminates a large number of digital circuits.
+
+4  Abbreviations
+
+   This RFC document uses the following abbreviations:
+
+   ALF   Application Layer Framing
+
+   ATM   Asynchronous Transfer Mode
+
+   CAS   Channel Associated Signalling
+
+   DTMF  Dual Tone Multi-Frequency
+
+
+
+
+Groves, et al.              Standards Track                    [Page 11]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   FAS   Facility Associated Signalling
+
+   GSM   Global System for Mobile communications
+
+   GW    GateWay
+
+   IANA  Internet Assigned Numbers Authority (superseded by Internet
+         Corporation for Assigned Names and Numbers - ICANN)
+
+   IP    Internet Protocol
+
+   ISUP  ISDN User Part
+
+   IVR   Interactive Voice Response
+
+   MG    Media Gateway
+
+   MGC   Media Gateway Controller
+
+   NFAS  Non-Facility Associated Signalling
+
+   PRI   Primary Rate Interface
+
+   PSTN  Public Switched Telephone Network
+
+   QoS   Quality of Service
+
+   RTP   Real-time Transport Protocol
+
+   SCN   Switched Circuit Network
+
+   SG    Signalling Gateway
+
+   SS7   Signalling System No. 7
+
+5  Conventions
+
+   In the H.248.1 Recommendation, "SHALL" refers to a mandatory
+   requirement, while "SHOULD" refers to a suggested but optional
+   feature or procedure.  The term "MAY" refers to an optional course of
+   action without expressing a preference.  Note that these definition
+   are overridden in the present document by the RFC 2119 conventions
+   stated at the beginning of this document.  RFC 2119 has a more
+   precise definition of "should" than is provided by the ITU-T.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 12]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+6  Connection model
+
+   The connection model for the protocol describes the logical entities,
+   or objects, within the Media Gateway that can be controlled by the
+   Media Gateway Controller.  The main abstractions used in the
+   connection model are Terminations and Contexts.
+
+   A Termination sources and/or sinks one or more streams.  In a
+   multimedia conference, a Termination can be multimedia and sources or
+   sinks multiple media streams.  The media stream parameters, as well
+   as modem, and bearer parameters are encapsulated within the
+   Termination.
+
+   A Context is an association between a collection of Terminations.
+   There is a special type of Context, the null Context, which contains
+   all Terminations that are not associated to any other Termination.
+   For instance, in a decomposed access gateway, all idle lines are
+   represented by Terminations in the null Context.
+
+   Following is a graphical depiction of these concepts.  The diagram of
+   Figure 1 gives several examples and is not meant to be an
+   all-inclusive illustration.  The asterisk box in each of the Contexts
+   represents the logical association of Terminations implied by the
+   Context.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 13]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         +------------------------------------------------------+
+         |Media Gateway                                         |
+         | +-------------------------------------------------+  |
+         | |Context                          +-------------+ |  |
+         | |                                 | Termination | |  |
+         | |                                 |-------------| |  |
+         | |  +-------------+             +->| SCN Bearer  |<---+->
+         | |  | Termination |   +-----+   |  |   Channel   | |  |
+         | |  |-------------|   |     |---+  +-------------+ |  |
+       <-+--->| RTP Stream  |---|  *  |                      |  |
+         | |  |             |   |     |---+  +-------------+ |  |
+         | |  +-------------+   +-----+   |  | Termination | |  |
+         | |                              |  |-------------| |  |
+         | |                              +->| SCN Bearer  |<---+->
+         | |                                 |   Channel   | |  |
+         | |                                 +-------------+ |  |
+         | +-------------------------------------------------+  |
+         |                                                      |
+         |                                                      |
+         |                    +------------------------------+  |
+         |   (NULL Context)   |Context                       |  |
+         |  +-------------+   |              +-------------+ |  |
+         |  | Termination |   | +-----+      | Termination | |  |
+         |  |-------------|   | |     |      |-------------| |  |
+         |  | SCN Bearer  |   | |  *  |------| SCN Bearer  |<---+->
+         |  |   Channel   |   | |     |      |   Channel   | |  |
+         |  +-------------+   | +-----+      +-------------+ |  |
+         |                    +------------------------------+  |
+         |                                                      |
+         |                                                      |
+         | +-------------------------------------------------+  |
+         | |Context                                          |  |
+         | |  +-------------+                +-------------+ |  |
+         | |  | Termination |   +-----+      | Termination | |  |
+         | |  |-------------|   |     |      |-------------| |  |
+       <-+--->| SCN Bearer  |---|  *  |------| SCN Bearer  |<---+->
+         | |  |   Channel   |   |     |      |   Channel   | |  |
+         | |  +-------------+   +-----+      +-------------+ |  |
+         | +-------------------------------------------------+  |
+         | ___________________________________________________  |
+         +------------------------------------------------------+
+
+            Figure 1: Examples of Megaco/H.248 Connection Model
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 14]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The example in Figure 2 shows an example of one way to accomplish a
+   call-waiting scenario in a decomposed access gateway, illustrating
+   the relocation of a Termination between Contexts.  Terminations T1
+   and T2 belong to Context C1 in a two-way audio call.  A second audio
+   call is waiting for T1 from Termination T3.  T3 is alone in Context
+   C2.  T1 accepts the call from T3, placing T2 on hold.  This action
+   results in T1 moving into Context C2, as shown in Figure 3.
+
+         +------------------------------------------------------+
+         |Media Gateway                                         |
+         | +-------------------------------------------------+  |
+         | |Context C1                                       |  |
+         | |  +-------------+                +-------------+ |  |
+         | |  | Term. T2    |   +-----+      | Term. T1    | |  |
+         | |  |-------------|   |     |      |-------------| |  |
+       <-+--->| RTP Stream  |---|  *  |------| SCN Bearer  |<---+->
+         | |  |             |   |     |      |   Channel   | |  |
+         | |  +-------------+   +-----+      +-------------+ |  |
+         | +-------------------------------------------------+  |
+         |                                                      |
+         | +-------------------------------------------------+  |
+         | |Context C2                                       |  |
+         | |                                 +-------------+ |  |
+         | |                    +-----+      | Term. T3    | |  |
+         | |                    |     |      |-------------| |  |
+         | |                    |  *  |------| SCN Bearer  |<---+->
+         | |                    |     |      |   Channel   | |  |
+         | |                    +-----+      +-------------+ |  |
+         | +-------------------------------------------------+  |
+         +------------------------------------------------------+
+
+     Figure 2: Example Call Waiting Scenario / Alerting Applied to T1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 15]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         +------------------------------------------------------+
+         |Media Gateway                                         |
+         | +-------------------------------------------------+  |
+         | |Context C1                                       |  |
+         | |  +-------------+                                |  |
+         | |  | Term. T2    |   +-----+                      |  |
+         | |  |-------------|   |     |                      |  |
+       <-+--->| RTP Stream  |---|  *  |                      |  |
+         | |  |             |   |     |                      |  |
+         | |  +-------------+   +-----+                      |  |
+         | +-------------------------------------------------+  |
+         |                                                      |
+         | +-------------------------------------------------+  |
+         | |Context C2                                       |  |
+         | |  +-------------+                +-------------+ |  |
+         | |  | Term. T1    |   +-----+      | Term. T3    | |  |
+         | |  |-------------|   |     |      |-------------| |  |
+       <-+--->| SCN Bearer  |---|  *  |------| SCN Bearer  |<---+->
+         | |  |   Channel   |   |     |      |   Channel   | |  |
+         | |  +-------------+   +-----+      +-------------+ |  |
+         | +-------------------------------------------------+  |
+         +------------------------------------------------------+
+
+          Figure 3. Example Call Waiting Scenario / Answer by T1
+
+6.1   Contexts
+
+   A Context is an association between a number of Terminations.  The
+   Context describes the topology (who hears/sees whom) and the media
+   mixing and/or switching parameters if more than two Terminations are
+   involved in the association.
+
+   There is a special Context called the null Context.  It contains
+   Terminations that are not associated to any other Termination.
+   Terminations in the null Context can have their parameters examined
+   or modified, and may have events detected on them.
+
+   In general, an Add command is used to add Terminations to Contexts.
+   If the MGC does not specify an existing Context to which the
+   Termination is to be added, the MG creates a new Context.  A
+   Termination may be removed from a Context with a Subtract command,
+   and a Termination may be moved from one Context to another with a
+   Move command.  A Termination SHALL exist in only one Context at a
+   time.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 16]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The maximum number of Terminations in a Context is a MG property.
+   Media gateways that offer only point-to-point connectivity might
+   allow at most two Terminations per Context.  Media gateways that
+   support multipoint conferences might allow three or more Terminations
+   per Context.
+
+6.1.1 Context attributes and descriptors
+
+   The attributes of Contexts are:
+
+   -  ContextID.
+
+   -  The topology (who hears/sees whom).
+
+      The topology of a Context describes the flow of media between the
+      Terminations within a Context.  In contrast, the mode of a
+      Termination (send/receive/...) describes the flow of the media at
+      the ingress/egress of the media gateway.
+
+   -  The priority is used for a Context in order to provide the MG with
+      information about a certain precedence handling for a Context.
+      The MGC can also use the priority to control autonomously the
+      traffic precedence in the MG in a smooth way in certain
+      situations (e.g., restart), when a lot of Contexts must be handled
+      simultaneously.  Priority 0 is the lowest priority and a priority
+      of 15 is the highest priority.
+
+   -  An indicator for an emergency call is also provided to allow a
+      preference handling in the MG.
+
+6.1.2 Creating, deleting and modifying Contexts
+
+   The protocol can be used to (implicitly) create Contexts and modify
+   the parameter values of existing Contexts.  The protocol has commands
+   to add Terminations to Contexts, subtract them from Contexts, and to
+   move Terminations between Contexts.  Contexts are deleted implicitly
+   when the last remaining Termination is subtracted or moved out.
+
+6.2   Terminations
+
+   A Termination is a logical entity on a MG that sources and/or sinks
+   media and/or control streams.  A Termination is described by a number
+   of characterizing Properties, which are grouped in a set of
+   Descriptors that are included in commands.  Terminations have unique
+   identities (TerminationIDs), assigned by the MG at the time of their
+   creation.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 17]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Terminations representing physical entities have a semi-permanent
+   existence.  For example, a Termination representing a TDM channel
+   might exist for as long as it is provisioned in the gateway.
+   Terminations representing ephemeral information flows, such as RTP
+   flows, would usually exist only for the duration of their use.
+
+   Ephemeral Terminations are created by means of an Add command.  They
+   are destroyed by means of a Subtract command.  In contrast, when a
+   physical Termination is Added to or Subtracted from a Context, it is
+   taken from or to the null Context, respectively.
+
+   Terminations may have signals applied to them (see 7.1.11).
+   Terminations may be programmed to detect Events, the occurrence of
+   which can trigger notification messages to the MGC, or action by the
+   MG.  Statistics may be accumulated on a Termination.  Statistics are
+   reported to the MGC upon request (by means of the AuditValue command,
+   see 7.2.5) and when the Termination is taken out of the call it is
+   in.
+
+   Multimedia gateways may process multiplexed media streams.  For
+   example, Recommendation H.221 describes a frame structure for
+   multiple media streams multiplexed on a number of digital 64 kbit/s
+   channels.  Such a case is handled in the connection model in the
+   following way.  For every bearer channel that carries part of the
+   multiplexed streams, there is a physical or ephemeral "bearer
+   Termination".  The bearer Terminations that source/sink the digital
+   channels are connected to a separate Termination called the
+   "multiplexing Termination".  The multiplexing termination is an
+   ephemeral termination representing a frame-oriented session.  The
+   MultiplexDescriptor for this Termination describes the multiplex used
+   (e.g., H.221 for an H.320 session) and indicates the order in which
+   the contained digital channels are assembled into a frame.
+
+   Multiplexing terminations may be cascades (e.g., H.226 multiplex of
+   digital channels feeding into a H.223 multiplex supporting an H.324
+   session).
+
+   The individual media streams carried in the session are described by
+   StreamDescriptors on the multiplexing Termination.  These media
+   streams can be associated with streams sourced/sunk by Terminations
+   in the Context other than the bearer Terminations supporting the
+   multiplexing Termination.  Each bearer Termination supports only a
+   single data stream.  These data streams do not appear explicitly as
+   streams on the multiplexing Termination and they are hidden from the
+   rest of the context.
+
+   Figures 4, 5, 6, and 6a illustrate typical applications of the
+   multiplexing termination and Multiplex Descriptor.
+
+
+
+Groves, et al.              Standards Track                    [Page 18]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                  +-----------------------------------+
+                  | Context     +-------+             |
+                 +----+         |       |             |
+   Circuit 1 -|--| TC1|---------+ Tmux  |             |
+              |  +----+ (Str 1) |       |  Audio    +-----+
+              |   |             |       +-----*-----+     |-----
+              |  +----+         | H.22x | Stream 1  |     |
+   Circuit 2 -|--| TC2|---------+ multi-|           | TR1 |
+              |  +----+ (Str 1) | plex  |           |(RTP)|
+              |   |             |       |  Video    |     |
+              |  +----+         |       +-----*-----+     |-----
+   Circuit 3 -|--| TC3|---------+       | Stream 2  |     |
+              /  +----+ (Str 1) |       |           +-----+
+             /    |             +-------+             |
+            /     +-----------------\-----------------+
+   Audio, video, and control         \
+   signals are carried in frames    Tmux is an ephemeral with two
+   spanning the circuits.           explicit Stream Descriptors
+                                    and a Multiplex Descriptor.
+
+      Figure 4: Multiplexed Termination Scenario - Circuit to Packet
+              (Asterisks * denote the centre of the context)
+
+                    Context
+                  +--------------------------------------+
+                  |       +-------+        +-------+     |
+                 +----+   |       |        |       |   +----+
+   Circuit 1 ----| TC1|---+ Tmux1 |  Audio | Tmux2 +---| TC4|---
+                 +----+   |       +---*----+       |   +----+
+                  |       |       |  Str 1 |       |     |
+                 +----+   | H.22x |        | H.22x |   +----+
+   Circuit 2 ----| TC2|---+ multi-|        | multi-+---| TC5|---
+                 +----+   | plex  |        | plex  |   +----+
+                  |       |       |  Video |       |     |
+                 +----+   |       +---*----+       |   +----+
+   Circuit 3 ----| TC3|---+       |  Str 2 |       +---| TC6|---
+                 +----+   |       |        |       |   +----+
+                  |       +-------+        +-------+     |
+                  +-----------------\-----/--------------+
+                                     \   /
+             Tmux1 and Tmux2 are ephemerals each with two
+            explicit Stream Descriptors and a Multiplex Descriptor.
+
+      Figure 5: Multiplexed Termination Scenario - Circuit to Circuit
+              (Asterisks * denote the centre of the context)
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 19]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                  +-----------------------------------+
+                  | Context     +-------+             |
+                 +----+         |       |             |
+   Circuit 1 -|--| TC1|---------+ Tmux  |             |
+              |  +----+ (Str 1) |       |  Audio    +-----+
+              |   |             |       +-----*-----+ TR1 |-----
+              |  +----+         | H.22x | Stream 1  |(RTP)|
+   Circuit 2 -|--| TC2|---------+ multi-|           +-----+
+              |  +----+ (Str 1) | plex  |             |
+              |   |             |       |  Video    +-----+
+              |  +----+         |       +-----*-----+ TR2 |-----
+   Circuit 3 -|--| TC3|---------+       | Stream 2  |(RTP)|
+              /  +----+ (Str 1) |       |           +-----+
+             /    |             +-------+             |
+            /     +-----------------\-----------------+
+   Audio, video, and control         \ Tmux is an ephemeral with two
+   signals are carried in frames    explicit Stream Descriptors and
+   spanning the circuits.           and a Multiplex Descriptor.
+
+      Figure 6: Multiplexed Termination Scenario - Single to Multiple
+                               Terminations
+              (Asterisks * denote the centre of the context)
+
+            Context
+          +---------------------------------------------+
+          |       +-------+       +-------+             |
+   Cct 1 +----+   |       |       |       | Audio     +-----+
+     ----| TC1|---+ Tmux1 |       | Tmux2 +-----*-----| TR1 |-----
+         +----+   |       |       |       | Stream 1  |(RTP)|
+          |       |       | Data  |       |           +-----+
+   Cct 2 +----+   | H.226 +-------+ H.223 |             |
+     ----| TC2|---+ multi-|(Str 1)| multi-| Control   +-----+
+         +----+   | plex  |       | plex  +-----*-----+ Tctl|-----
+          |       |       |       |       | Stream 3  +-----+
+   Cct 3 +----+   |       |       |       |             |
+     ----| TC3|---+       |       |       |           +-----+
+         +----+   |       |       |       +-----*-----+ TR2 |-----
+          |       +-------+       |       |  Video    |(RTP)|
+          |                       +-------+ Stream 2  +-----+
+          |                                             |
+          +---------------------------------------------+
+        Tmux1 has a Multiplex Descriptor and a single data stream.
+        Tmux2 has a Multiplex Descriptor with a single bearer and
+        three explicit Stream Descriptors.
+
+    Figure 6a: Multiplexed Termination Scenario - Cascaded Multiplexes
+              (Asterisks * denote the centre of the context)
+     Note: this figure does not appear in Rec.  H.248.1
+
+
+
+Groves, et al.              Standards Track                    [Page 20]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Terminations may be created which represent multiplexed bearers, such
+   as an ATM AAL Type 2 bearer.  When a new multiplexed bearer is to be
+   created, an ephemeral Termination is created in a Context established
+   for this purpose.  When the Termination is subtracted, the
+   multiplexed bearer is destroyed.
+
+6.2.1 Termination dynamics
+
+   The protocol can be used to create new Terminations and to modify
+   property values of existing Terminations.  These modifications
+   include the possibility of adding or removing events and/or signals.
+   The Termination properties, and events and signals are described in
+   the ensuing subclauses.  An MGC can only release/modify Terminations
+   and the resources that the Termination represents which it has
+   previously seized via, e.g., the Add command.
+
+6.2.2 TerminationIDs
+
+   Terminations are referenced by a TerminationID, which is an arbitrary
+   schema chosen by the MG.
+
+   TerminationIDs of physical Terminations are provisioned in the Media
+   Gateway.  The TerminationIDs may be chosen to have structure.  For
+   instance, a TerminationID may consist of trunk group and a trunk
+   within the group.
+
+   A wildcarding mechanism using two types of wildcards can be used with
+   TerminationIDs.  The two wildcards are ALL and CHOOSE.  The former is
+   used to address multiple Terminations at once, while the latter is
+   used to indicate to a media gateway that it must select a Termination
+   satisfying the partially specified TerminationID.  This allows, for
+   instance, that a MGC instructs a MG to choose a circuit within a
+   trunk group.
+
+   When ALL is used in the TerminationID of a command, the effect is
+   identical to repeating the command with each of the matching
+   TerminationIDs.  The use of ALL does not address the ROOT
+   termination.  Since each of these commands may generate a response,
+   the size of the entire response may be large.  If individual
+   responses are not required, a wildcard response may be requested.  In
+   such a case, a single response is generated, which contains the UNION
+   of all of the individual responses which otherwise would have been
+   generated, with duplicate values suppressed.  For instance, given a
+   Termination Ta with properties p1=a, p2=b and Termination Tb with
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 21]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   properties p2=c, p3=d, a UNION response would consist of a wildcarded
+   TerminationId and the sequence of properties p1=a, p2=b,c and p3=d.
+   Wildcard response may be particularly useful in the Audit commands.
+
+   The encoding of the wildcarding mechanism is detailed in Annexes A
+   and B.
+
+6.2.3 Packages
+
+   Different types of gateways may implement Terminations that have
+   widely differing characteristics.  Variations in Terminations are
+   accommodated in the protocol by allowing Terminations to have
+   optional Properties, Events, Signals and Statistics implemented by
+   MGs.
+
+   In order to achieve MG/MGC interoperability, such options are grouped
+   into Packages, and typically a Termination realizes a set of such
+   Packages.  More information on definition of packages can be found in
+   clause 12.  An MGC can audit a Termination to determine which
+   Packages it realizes.
+
+   Properties, Events, Signals and Statistics defined in Packages, as
+   well as parameters to them, are referenced by identifiers (Ids).
+   Identifiers are scoped.  For each package, PropertyIds, EventIds,
+   SignalIds, StatisticsIds and ParameterIds have unique name spaces and
+   the same identifier may be used in each of them.  Two PropertyIds in
+   different packages may also have the same identifier, etc.
+
+   To support a particular package the MG must support all properties,
+   signals, events and statistics defined in a package.  It must also
+   support all Signal and Event parameters.  The MG may support a subset
+   of the values listed in a package for a particular Property or
+   Parameter.
+
+   When packages are extended, the properties, events, signals and
+   statistics defined in the base package can be referred to using
+   either the extended package name or the base package name.  For
+   example, if Package A defines event e1, and Package B extends Package
+   A, then B/e1 is an event for a termination implementing Package B. By
+   definition, the MG MUST also implement the base Package, but it is
+   optional to publish the base package as an allowed interface.  If it
+   does publish  A, then A would be reported on the Package Descriptor
+   in AuditValue as well as B, and event A/e1 would be available on a
+   termination.  If the MG does not publish A, then only B/e1 would be
+   available.  If published through AuditValue, A/e1 and B/e1 are the
+   same event.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 22]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   For improved interoperability and backward compatibility, an MG MAY
+   publish all Packages supported by its Terminations, including base
+   Packages from which extended Packages are derived.  An exception to
+   this is in cases where the base packages are expressly "Designed to
+   be extended only".
+
+6.2.4 Termination properties and descriptors
+
+   Terminations have properties.  The properties have unique
+   PropertyIDs. Most properties have default values, which are
+   explicitly defined in this protocol specification or in a package
+   (see clause 12) or set by provisioning.  If not provisioned
+   otherwise, the properties in all descriptors except TerminationState
+   and LocalControl default to empty/"no value" when a Termination is
+   first created or returned to the null Context.  The default contents
+   of the two exceptions are described in 7.1.5 and 7.1.7.
+
+   The provisioning of a property value in the MG will override any
+   default value, be it supplied in this protocol specification or in a
+   package.  Therefore if it is essential for the MGC to have full
+   control over the property values of a Termination, it should supply
+   explicit values when ADDing the Termination to a Context.
+   Alternatively, for a physical Termination the MGC can determine any
+   provisioned property values by auditing the Termination while it is
+   in the NULL Context.
+
+   There are a number of common properties for Terminations and
+   properties specific to media streams.  The common properties are also
+   called the Termination state properties.  For each media stream,
+   there are local properties and properties of the received and
+   transmitted flows.
+
+   Properties not included in the base protocol are defined in Packages.
+   These properties are referred to by a name consisting of the
+   PackageName and a PropertyId.  Most properties have default values
+   described in the Package description.  Properties may be read-only or
+   read/write.  The possible values of a property may be audited, as can
+   their current values.  For properties that are read/write, the MGC
+   can set their values.  A property may be declared as "Global" which
+   has a single value shared by all Terminations realizing the package.
+   Related properties are grouped into descriptors for convenience.
+
+   When a Termination is added to a Context, the value of its read/write
+   properties can be set by including the appropriate descriptors as
+   parameters to the Add command.  Similarly, a property of a
+   Termination in a Context may have its value changed by the Modify
+   command.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 23]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Properties may also have their values changed when a Termination is
+   moved from one Context to another as a result of a Move command.  In
+   some cases, descriptors are returned as output from a command.
+
+   In general, if a Descriptor is completely omitted from one of the
+   aforementioned Commands, the properties in that Descriptor retain
+   their prior values for the Termination(s) upon which the Command
+   acts.  On the other hand, if some read/write properties are omitted
+   from a Descriptor in a Command (i.e., the Descriptor is only
+   partially specified), those properties will be reset to their default
+   values for the Termination(s) upon which the Command acts, unless the
+   package specifies other behavior.  For more details, see clause 7.1
+   dealing with the individual Descriptors.
+
+   The following table lists all of the possible descriptors and their
+   use.  Not all descriptors are legal as input or output parameters to
+   every command.
+
+   Descriptor name  Description
+
+   Modem            Identifies modem type and properties when
+                    applicable
+
+   Mux              Describes multiplex type for multimedia
+                    Terminations (e.g., H.221, H.223, H.225.0) and
+                    Terminations forming the input mux
+
+   Media            A list of media stream specifications (see 7.1.4)
+
+   TerminationState Properties of a Termination (which can be defined
+                    in Packages) that are not stream specific
+
+   Stream           A list of remote/local/localControl descriptors for
+                    a single stream
+
+   Local            Contains properties that specify the media flows
+                    that the MG receives from the remote entity.
+
+   Remote           Contains properties that specify the media flows
+                    that the MG sends to the remote entity.
+
+   LocalControl     Contains properties (which can be defined in
+                    packages) that are of interest between the MG and
+                    the MGC.
+
+   Events           Describes events to be detected by the MG and what
+                    to do when an event is detected.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 24]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   EventBuffer      Describes events to be detected by the MG when
+                    Event Buffering is active.
+
+   Signals          Describes signals (see 7.1.11) applied  to
+                    Terminations.
+
+   Audit            In Audit commands, identifies which information is
+                    desired.
+
+   Packages         In AuditValue, returns a list of Packages realized
+                    by Termination.
+
+   DigitMap         Defines patterns against which sequences of a
+                    specified set of events are to be matched so they
+                    can be reported as a group rather than singly.
+
+   ServiceChange    In ServiceChange, what, why service change
+                    occurred, etc.
+
+   ObservedEvents   In Notify or AuditValue, report of events observed.
+
+   Statistics       In Subtract and Audit, report of Statistics kept on
+                    a Termination.
+
+   Topology         Specifies flow directions between Terminations in a
+                    Context.
+
+   Error            Contains an error code and optionally error text;
+                    it may occur in command replies and in Notify
+                    requests.
+
+6.2.5 Root Termination
+
+   Occasionally, a command must refer to the entire gateway, rather than
+   a Termination within it.  A special TerminationID, "Root" is reserved
+   for this purpose.  Packages may be defined on Root.  Root thus may
+   have properties, events and statistics (signals are not appropriate
+   for root).  Accordingly, the root TerminationID may appear in:
+
+   -  a Modify command - to change a property or set an event
+
+   -  a Notify command - to report an event
+
+   -  an AuditValue return - to examine the values of properties and
+      statistics implemented on root
+
+   -  an AuditCapability - to determine what properties of root are
+      implemented
+
+
+
+Groves, et al.              Standards Track                    [Page 25]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  a ServiceChange - to declare the gateway in or out of service.
+
+   Any other use of the root TerminationID is an error.  Error code
+   410 - Incorrect identifier shall be returned in these cases.
+
+7  Commands
+
+   The protocol provides commands for manipulating the logical entities
+   of the protocol connection model, Contexts and Terminations.
+   Commands provide control at the finest level of granularity supported
+   by the protocol.  For example, Commands exist to add Terminations to
+   a Context, modify Terminations, subtract Terminations from a Context,
+   and audit properties of Contexts or Terminations.  Commands provide
+   for complete control of the properties of Contexts and Terminations.
+   This includes specifying which events a Termination is to report,
+   which signals/actions are to be applied to a Termination and
+   specifying the topology of a Context (who hears/sees whom).
+
+   Most commands are for the specific use of the Media Gateway
+   Controller as command initiator in controlling Media Gateways as
+   command responders.  The exceptions are the Notify and ServiceChange
+   commands: Notify is sent from Media Gateway to Media Gateway
+   Controller, and ServiceChange may be sent by either entity.  Below is
+   an overview of the commands; they are explained in more detail in
+   7.2.
+
+   1) Add - The Add command adds a Termination to a Context.  The Add
+      command on the first Termination in a Context is used to create a
+      Context.
+
+   2) Modify - The Modify command modifies the properties, events and
+      signals of a Termination.
+
+   3) Subtract - The Subtract command disconnects a Termination from its
+      Context and returns statistics on the Termination's participation
+      in the Context.  The Subtract command on the last Termination in a
+      Context deletes the Context.
+
+   4) Move - The Move command atomically moves a Termination to another
+      Context.
+
+   5) AuditValue - The AuditValue command returns the current state of
+      properties, events, signals and statistics of Terminations.
+
+   6) AuditCapabilities - The AuditCapabilities command returns all the
+      possible values for Termination properties, events and signals
+      allowed by the Media Gateway.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 26]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   7) Notify - The Notify command allows the Media Gateway to inform the
+      Media Gateway Controller of the occurrence of events in the Media
+      Gateway.
+
+   8) ServiceChange - The ServiceChange command allows the Media Gateway
+      to notify the Media Gateway Controller that a Termination or group
+      of Terminations is about to be taken out of service or has just
+      been returned to service.  ServiceChange is also used by the MG to
+      announce its availability to a MGC (registration), and to notify
+      the MGC of impending or completed restart of the MG.  The MGC may
+      announce a handover to the MG by sending it a ServiceChange
+      command.  The MGC may also use ServiceChange to instruct the MG to
+      take a Termination or group of Terminations in or out of service.
+
+   These commands are detailed in 7.2.1 through 7.2.8.
+
+7.1   Descriptors
+
+   The parameters to a command are termed Descriptors.  A descriptor
+   consists of a name and a list of items.  Some items may have values.
+   Many Commands share common descriptors.  This subclause enumerates
+   these descriptors.  Descriptors may be returned as output from a
+   command.  In any such return of descriptor contents, an empty
+   descriptor is represented by its name unaccompanied by any list.
+   Parameters and parameter usage specific to a given Command type are
+   described in the subclause that describes the Command.
+
+7.1.1 Specifying parameters
+
+   Command parameters are structured into a number of descriptors.  In
+   general, the text format of descriptors is
+   DescriptorName=<someID>{parm=value, parm=value, ...}.
+
+   Parameters may be fully specified, overspecified or underspecified:
+
+   1) Fully specified parameters have a single, unambiguous value that
+      the command initiator is instructing the command responder to use
+      for the specified parameter.
+
+   2) Underspecified parameters, using the CHOOSE value, allow the
+      command responder to choose any value it can support.
+
+   3) Overspecified parameters have a list of potential values.  The
+      list order specifies the command initiator's order of preference
+      of selection.  The command responder chooses one value from
+      the offered list and returns that value to the command initiator.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 27]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   If a required descriptor other than the Audit descriptor is
+   unspecified (i.e., entirely absent) from a command, the previous
+   values set in that descriptor for that Termination, if any, are
+   retained.  In commands other than Subtract, a missing Audit
+   descriptor is equivalent to an empty Audit descriptor.  The Behaviour
+   of the MG with respect to unspecified parameters within a descriptor
+   varies with the descriptor concerned, as indicated in succeeding
+   subclauses.  Whenever a parameter is underspecified or overspecified,
+   the descriptor containing the value chosen by the responder is
+   included as output from the command.
+
+   Each command specifies the TerminationId the command operates on.
+   This TerminationId may be "wildcarded".  When the TerminationId of a
+   command is wildcarded, the effect shall be as if the command was
+   repeated with each of the TerminationIds matched.
+
+7.1.2 Modem descriptor
+
+   The Modem descriptor specifies the modem type and parameters, if any,
+   required for use in e.g., H.324 and text conversation.  The
+   descriptor includes the following modem types: V.18, V.22, V.22 bis,
+   V.32, V.32 bis, V.34, V.90, V.91, Synchronous ISDN, and allows for
+   extensions.  By default, no Modem descriptor is present in a
+   Termination.
+
+7.1.3 Multiplex descriptor
+
+   In multimedia calls, a number of media streams are carried on a
+   (possibly different) number of bearers.  The multiplex descriptor
+   associates the media and the bearers.  The descriptor includes the
+   multiplex type:
+
+   -  H.221;
+
+   -  H.223;
+
+   -  H.226;
+
+   -  V.76;
+
+   -  possible extensions,
+
+   and a set of TerminationIDs representing the multiplexed bearers, in
+   order.  For example:
+
+      Mux = H.221{ MyT3/1/2, MyT3/2/13, MyT3/3/6, MyT3/21/22}
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 28]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+7.1.4 Media descriptor
+
+   The Media descriptor specifies the parameters for all the media
+   streams.  These parameters are structured into two descriptors: a
+   TerminationState descriptor, which specifies the properties of a
+   Termination that are not stream dependent, and one or more Stream
+   descriptors each of which describes a single media stream.
+
+   A stream is identified by a StreamID.  The StreamID is used to link
+   the streams in a Context that belong together.  Multiple streams
+   exiting a Termination shall be synchronized with each other.  Within
+   the Stream descriptor, there are up to three subsidiary descriptors:
+   LocalControl, Local, and Remote.  The relationship between these
+   descriptors is thus:
+
+   Media descriptor
+      TerminationState Descriptor
+      Stream descriptor
+         LocalControl descriptor
+         Local descriptor
+         Remote descriptor
+
+   As a convenience, LocalControl, Local, or Remote descriptors may be
+   included in the Media descriptor without an enclosing Stream
+   descriptor.  In this case, the StreamID is assumed to be 1.
+
+7.1.5 TerminationState descriptor
+
+   The TerminationState descriptor contains the ServiceStates property,
+   the EventBufferControl property and properties of a Termination
+   (defined in Packages) that are not stream specific.
+
+   The ServiceStates property describes the overall state of the
+   Termination (not stream specific).  A Termination can be in one of
+   the following states: "test", "out of service", or "in service".  The
+   "test" state indicates that the Termination is being tested.  The
+   state "out of service" indicates that the Termination cannot be used
+   for traffic.  The state "in service" indicates that a Termination can
+   be used or is being used for normal traffic.  "in service" is the
+   default state.
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 29]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Values assigned to Properties may be simple values
+   (integer/string/enumeration) or may be underspecified, where more
+   than one value is supplied and the MG may make a choice:
+
+   -  Alternative Values - multiple values in a list, one of which must
+      be selected
+
+   -  Ranges - minimum and maximum values, any value between min and max
+      must be selected, boundary values included
+
+   -  Greater Than/Less Than - value must be greater/less than specified
+      value
+
+   -  CHOOSE Wildcard - the MG chooses from the allowed values for the
+      property
+
+   The EventBufferControl property specifies whether events are buffered
+   following detection of an event in the Events descriptor, or
+   processed immediately.  See 7.1.9 for details.
+
+7.1.6 Stream descriptor
+
+   A Stream descriptor specifies the parameters of a single
+   bidirectional stream.  These parameters are structured into three
+   descriptors: one that contains Termination properties specific to a
+   stream and one each for local and remote flows.  The Stream
+   Descriptor includes a StreamID which identifies the stream.  Streams
+   are created by specifying a new StreamID on one of the Terminations
+   in a Context.  A stream is deleted by setting empty Local and Remote
+   descriptors for the stream with ReserveGroup and ReserveValue in
+   LocalControl set to "false" on all Terminations in the Context that
+   previously supported that stream.
+
+   StreamIDs are of local significance between MGC and MG and they are
+   assigned by the MGC.  Within a Context, StreamID is a means by which
+   to indicate which media flows are interconnected: streams with the
+   same StreamID are connected.
+
+   If a Termination is moved from one Context to another, the effect on
+   the Context to which the Termination is moved is the same as in the
+   case that a new Termination were added with the same StreamIDs as the
+   moved Termination.
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 30]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+7.1.7 LocalControl descriptor
+
+   The LocalControl descriptor contains the Mode property, the
+   ReserveGroup and ReserveValue properties and properties of a
+   Termination (defined in Packages) that are stream specific, and are
+   of interest between the MG and the MGC.  Values of properties may be
+   underspecified as in 7.1.1.
+
+   The allowed values for the mode property are send-only, receive-only,
+   send/receive, inactive and loop-back. "Send" and "receive" are with
+   respect to the exterior of the Context, so that, for example, a
+   stream set to mode=sendOnly does not pass received media into the
+   Context.  The default value for the mode property is "Inactive".
+   Signals and Events are not affected by mode.
+
+   The boolean-valued Reserve properties, ReserveValue and ReserveGroup,
+   of a Termination indicate what the MG is expected to do when it
+   receives a Local and/or Remote descriptor.
+
+   If the value of a Reserve property is True, the MG SHALL reserve
+   resources for all alternatives specified in the Local and/or Remote
+   descriptors for which it currently has resources available.  It SHALL
+   respond with the alternatives for which it reserves resources.  If it
+   cannot not support any of the alternatives, it SHALL respond with a
+   reply to the MGC that contains empty Local and/or Remote descriptors.
+   If media begins to flow while more than a single alternative is
+   reserved, media packets may be sent/received on any of the
+   alternatives and must be processed, although only a single
+   alternative may be active at any given time.
+
+   If the value of a Reserve property is False, the MG SHALL choose one
+   of the alternatives specified in the Local descriptor (if present)
+   and one of the alternatives specified in the Remote descriptor (if
+   present).  If the MG has not yet reserved resources to support the
+   selected alternative, it SHALL reserve the resources.  If, on the
+   other hand, it already reserved resources for the Termination
+   addressed (because of a prior exchange with ReserveValue and/or
+   ReserveGroup equal to True), it SHALL release any excess resources it
+   reserved previously.  Finally, the MG shall send a reply to the MGC
+   containing the alternatives for the Local and/or Remote descriptor
+   that it selected.  If the MG does not have sufficient resources to
+   support any of the alternatives specified, it SHALL respond with
+   error 510 (insufficient resources).
+
+   The default value of ReserveValue and ReserveGroup is False.  More
+   information on the use of the two Reserve properties is provided in
+   7.1.8.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 31]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   A new setting of the LocalControl Descriptor completely replaces the
+   previous setting of that descriptor in the MG.  Thus, to retain
+   information from the previous setting, the MGC must include that
+   information in the new setting.  If the MGC wishes to delete some
+   information from the existing descriptor, it merely resends the
+   descriptor (in a Modify command) with the unwanted information
+   stripped out.
+
+7.1.8 Local and Remote descriptors
+
+   The MGC uses Local and Remote descriptors to reserve and commit MG
+   resources for media decoding and encoding for the given Stream(s) and
+   Termination to which they apply.  The MG includes these descriptors
+   in its response to indicate what it is actually prepared to support.
+   The MG SHALL include additional properties and their values in its
+   response if these properties are mandatory yet not present in the
+   requests made by the MGC (e.g., by specifying detailed video encoding
+   parameters where the MGC only specified the payload type).
+
+   Local refers to the media received by the MG and Remote refers to the
+   media sent by the MG.
+
+   When text encoding the protocol, the descriptors consist of session
+   descriptions as defined in SDP (RFC 2327).  In session descriptions
+   sent from the MGC to the MG, the following exceptions to the syntax
+   of RFC 2327 are allowed:
+
+   -  the "s=", "t=" and "o=" lines are optional;
+
+   -  the use of CHOOSE is allowed in place of a single parameter value;
+      and
+
+   -  the use of alternatives is allowed in place of a single parameter
+      value.
+
+   A Stream Descriptor specifies a single bi-directional media stream
+   and so a single session description MUST NOT include more than one
+   media description ("m=" line).  A Stream Descriptor may contain
+   additional session descriptions as alternatives.  Each media stream
+   for a termination must appear in distinct Stream Descriptors.  When
+   multiple session descriptions are provided in one descriptor, the
+   "v=" lines are required as delimiters; otherwise they are optional in
+   session descriptions sent to the MG.  Implementations shall accept
+   session descriptions that are fully conformant to RFC 2327.  When
+   binary encoding the protocol the descriptor consists of groups of
+   properties (tag-value pairs) as specified in Annex C.  Each such
+   group may contain the parameters of a session description.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 32]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Below, the semantics of the Local and Remote descriptors are
+   specified in detail.  The specification consists of two parts.  The
+   first part specifies the interpretation of the contents of the
+   descriptor.  The second part specifies the actions the MG must take
+   upon receiving the Local and Remote descriptors.  The actions to be
+   taken by the MG depend on the values of the ReserveValue and
+   ReserveGroup properties of the LocalControl descriptor.
+
+   Either the Local or the Remote descriptor or both may be:
+
+   1) unspecified (i.e., absent);
+
+   2) empty;
+
+   3) underspecified through use of CHOOSE in a property value;
+
+   4) fully specified; or
+
+   5) overspecified through presentation of multiple groups of
+      properties and possibly multiple property values in one or more of
+      these groups.
+
+   Where the descriptors have been passed from the MGC to the MG, they
+   are interpreted according to the rules given in 7.1.1, with the
+   following additional comments for clarification:
+
+   a) An unspecified Local or Remote descriptor is considered to be a
+      missing mandatory parameter.  It requires the MG to use whatever
+      was last specified for that descriptor.  It is possible that there
+      was no previously specified value, in which case the descriptor
+      concerned is ignored in further processing of the command.
+
+   b) An empty Local (Remote) descriptor in a message from the MGC
+      signifies a request to release any resources reserved for the
+      media flow received (sent).
+
+   c) If multiple groups of properties are present in a Local or Remote
+      descriptor or multiple values within a group, the order of
+      preference is descending.
+
+   d) Underspecified or overspecified properties within a group of
+      properties sent by the MGC are requests for the MG to choose one
+      or more values which it can support for each of those properties.
+      In case of an overspecified property, the list of values is in
+      descending order of preference.
+
+   Subject to the above rules, subsequent action depends on the values
+   of the ReserveValue and ReserveGroup properties in LocalControl.
+
+
+
+Groves, et al.              Standards Track                    [Page 33]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   If ReserveGroup is True, the MG reserves the resources required to
+   support any of the requested property group alternatives that it can
+   currently support.  If ReserveValue is True, the MG reserves the
+   resources required to support any of the requested property value
+   alternatives that it can currently support.
+
+   NOTE - If a Local or Remote descriptor contains multiple groups of
+   properties, and ReserveGroup is True, then the MG is requested to
+   reserve resources so that it can decode or encode the media stream
+   according to any of the alternatives.  For instance, if the Local
+   descriptor contains two groups of properties, one specifying
+   packetized G.711 A-law audio and the other G.723.1 audio, the MG
+   reserves resources so that it can decode one audio stream encoded in
+   either G.711 A-law format or G.723.1 format.  The MG does not have to
+   reserve resources to decode two audio streams simultaneously, one
+   encoded in G.711 A-law and one in G.723.1.  The intention for the use
+   of ReserveValue is analogous.
+
+   If ReserveGroup is true or ReserveValue is True, then the following
+   rules apply:
+
+   -  If the MG has insufficient resources to support all alternatives
+      requested by the MGC and the MGC requested resources in both Local
+      and Remote, the MG should reserve resources to support at least
+      one alternative each within Local and Remote.
+
+   -  If the MG has insufficient resources to support at least one
+      alternative within a Local (Remote) descriptor received from the
+      MGC, it shall return an empty Local (Remote) in response.
+
+   -  In its response to the MGC, when the MGC included Local and Remote
+      descriptors, the MG SHALL include Local and Remote descriptors for
+      all groups of properties and property values it reserved resources
+      for.  If the MG is incapable of supporting at least one of the
+      alternatives within the Local (Remote) descriptor received from
+      the MGC, it SHALL return an empty Local (Remote) descriptor.
+
+   -  If the Mode property of the LocalControl descriptor is RecvOnly,
+      SendRecv, or LoopBack, the MG must be prepared to receive media
+      encoded according to any of the alternatives included in its
+      response to the MGC.
+
+   If ReserveGroup is False and ReserveValue is False, then the MG
+   SHOULD apply the following rules to resolve Local and Remote to a
+   single alternative each:
+
+   -  The MG chooses the first alternative in Local for which it is able
+      to support at least one alternative in Remote.
+
+
+
+Groves, et al.              Standards Track                    [Page 34]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  If the MG is unable to support at least one Local and one Remote
+      alternative, it returns Error 510 (Insufficient Resources).
+
+   -  The MG returns its selected alternative in each of Local and
+      Remote.
+
+   A new setting of a Local or Remote descriptor completely replaces the
+   previous setting of that descriptor in the MG.  Thus, to retain
+   information from the previous setting, the MGC must include that
+   information in the new setting.  If the MGC wishes to delete some
+   information from the existing descriptor, it merely resends the
+   descriptor (in a Modify command) with the unwanted information
+   stripped out.
+
+7.1.9 Events descriptor
+
+   The EventsDescriptor parameter contains a RequestIdentifier and a
+   list of events that the Media Gateway is requested to detect and
+   report.  The RequestIdentifier is used to correlate the request with
+   the notifications that it may trigger.  Requested events include, for
+   example, fax tones, continuity test results, and on-hook and off-hook
+   transitions.  The RequestIdentifier is omitted if the
+   EventsDescriptor is empty (i.e., no events are specified).
+
+   Each event in the descriptor contains the Event name, an optional
+   streamID, an optional KeepActive flag, and optional parameters.  The
+   Event name consists of a Package Name (where the event is defined)
+   and an EventID.  The ALL wildcard may be used for the EventID,
+   indicating that all events from the specified package have to be
+   detected.  The default streamID is 0, indicating that the event to be
+   detected is not related to a particular media stream.  Events can
+   have parameters.  This allows a single event description to have some
+   variation in meaning without creating large numbers of individual
+   events.  Further event parameters are defined in the package.
+
+   If a digit map completion event is present or implied in the
+   EventsDescriptor, the EventDM parameter is used to carry either the
+   name or the value of the associated digit map.  See 7.1.14 for
+   further details.
+
+   When an event is processed against the contents of an active Events
+   Descriptor and found to be present in that descriptor ("recognized"),
+   the default action of the MG is to send a Notify command to the MGC.
+   Notification may be deferred if the event is absorbed into the
+   current dial string of an active digit map (see 7.1.14).  Any other
+   action is for further study.  Moreover, event recognition may cause
+   currently active signals to stop, or may cause the current Events
+   and/or Signals descriptor to be replaced, as described at the end of
+
+
+
+Groves, et al.              Standards Track                    [Page 35]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   this subclause.  Unless the Events Descriptor is replaced by another
+   Events Descriptor, it remains active after an event has been
+   recognized.
+
+   If the value of the EventBufferControl property equals LockStep,
+   following detection of such an event, normal handling of events is
+   suspended.  Any event which is subsequently detected and occurs in
+   the EventBuffer descriptor is added to the end of the EventBuffer (a
+   FIFO queue), along with the time that it was detected.  The MG SHALL
+   wait for a new EventsDescriptor to be loaded.  A new EventsDescriptor
+   can be loaded either as the result of receiving a command with a new
+   EventsDescriptor, or by activating an embedded EventsDescriptor.
+
+   If EventBufferControl equals Off, the MG continues processing based
+   on the active EventsDescriptor.
+
+   In the case of an embedded EventsDescriptor being activated, the MG
+   continues event processing based on the newly activated
+   EventsDescriptor.
+
+     NOTE 1 - For purposes of EventBuffer handling, activation of an
+     embedded EventsDescriptor is equivalent to receipt of a new
+     EventsDescriptor.
+
+   When the MG receives a command with a new EventsDescriptor, one or
+   more events may have been buffered in the EventBuffer in the MG.  The
+   value of EventBufferControl then determines how the MG treats such
+   buffered events.
+
+   Case 1
+
+   If EventBufferControl equals LockStep and the MG receives a new
+   EventsDescriptor, it will check the FIFO EventBuffer and take the
+   following actions:
+
+   1) If the EventBuffer is empty, the MG waits for detection of events
+      based on the new EventsDescriptor.
+
+   2) If the EventBuffer is non-empty, the MG processes the FIFO queue
+      starting with the first event:
+
+      a) If the event in the queue is in the events listed in the new
+         EventsDescriptor, the MG acts on the event and removes the
+         event from the EventBuffer.  The time stamp of the Notify shall
+         be the time the event was actually detected.  The MG then waits
+         for a new EventsDescriptor.  While waiting for a new
+         EventsDescriptor, any events detected that appear in the
+
+
+
+
+Groves, et al.              Standards Track                    [Page 36]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         EventsBufferDescriptor will be placed in the EventBuffer.  When
+         a new EventsDescriptor is received, the event processing will
+         repeat from step 1.
+
+      b) If the event is not in the new EventsDescriptor, the MG SHALL
+         discard the event and repeat from step 1.
+
+   Case 2
+
+   If EventBufferControl equals Off and the MG receives a new
+   EventsDescriptor, it processes new events with the new
+   EventsDescriptor.
+
+   If the MG receives a command instructing it to set the value of
+   EventBufferControl to Off, all events in the EventBuffer SHALL be
+   discarded.
+
+   The MG may report several events in a single Transaction as long as
+   this does not unnecessarily delay the reporting of individual events.
+
+   For procedures regarding transmitting the Notify command, refer to
+   the appropriate annex or Recommendation of the H.248 sub-series for
+   specific transport considerations.
+
+   The default value of EventBufferControl is Off.
+
+     NOTE 2 - Since the EventBufferControl property is in the
+     TerminationStateDescriptor, the MG might receive a command that
+     changes the EventBufferControl property and does not include an
+     EventsDescriptor.
+
+   Normally, recognition of an event shall cause any active signals to
+   stop.  When KeepActive is specified in the event, the MG shall not
+   interrupt any signals active on the Termination on which the event is
+   detected.
+
+   An event can include an Embedded Signals descriptor and/or an
+   Embedded Events descriptor which, if present, replaces the current
+   Signals/Events descriptor when the event is recognized.  It is
+   possible, for example, to specify that the dial-tone Signal be
+   generated when an off-hook Event is recognized, or that the dial-tone
+   Signal be stopped when a digit is recognized.  A media gateway
+   controller shall not send EventsDescriptors with an event both marked
+   KeepActive and containing an embedded SignalsDescriptor.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 37]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Only one level of embedding is permitted.  An embedded
+   EventsDescriptor SHALL NOT contain another embedded EventsDescriptor;
+   an embedded EventsDescriptor MAY contain an embedded
+   SignalsDescriptor.
+
+   An EventsDescriptor received by a media gateway replaces any previous
+   Events descriptor.  Event notification in process shall complete, and
+   events detected after the command containing the new EventsDescriptor
+   executes, shall be processed according to the new EventsDescriptor.
+
+   An empty Events Descriptor disables all event recognition and
+   reporting.  An empty EventBuffer Descriptor clears the EventBuffer
+   and disables all event accumulation in LockStep mode: the only events
+   reported will be those occurring while an Events Descriptor is
+   active.  If an empty Events Descriptor is activated while the
+   Termination is operating in LockStep mode, the events buffer is
+   immediately cleared.
+
+7.1.10   EventBuffer descriptor
+
+   The EventBuffer descriptor contains a list of events, with their
+   parameters if any, that the MG is requested to detect and buffer when
+   EventBufferControl equals LockStep (see 7.1.9).
+
+7.1.11   Signals descriptor
+
+   Signals are MG generated media such as tones and announcements as
+   well as bearer-related signals such as hookswitch.  More complex
+   signals may include a sequence of such simple signals interspersed
+   with and conditioned upon the receipt and analysis of media or
+   bearer-related signals.  Examples include echoing of received data as
+   in Continuity Test package.  Signals may also request preparation of
+   media content for future signals.
+
+   A SignalsDescriptor is a parameter that contains the set of signals
+   that the Media Gateway is asked to apply to a Termination.  A
+   SignalsDescriptor contains a number of signals and/or sequential
+   signal lists.  A SignalsDescriptor may contain zero signals and
+   sequential signal lists.  Support of sequential signal lists is
+   optional.
+
+   Signals are defined in packages.  Signals shall be named with a
+   Package name (in which the signal is defined) and a SignalID.  No
+   wildcard shall be used in the SignalID.  Signals that occur in a
+   SignalsDescriptor have an optional StreamID parameter (default is 0,
+   to indicate that the signal is not related to a particular media
+   stream), an optional signal type (see below), an optional duration
+   and possibly parameters defined in the package that defines the
+
+
+
+Groves, et al.              Standards Track                    [Page 38]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   signal.  This allows a single signal to have some variation in
+   meaning, obviating the need to create large numbers of individual
+   signals.
+
+   Finally, the optional parameter "notifyCompletion" allows a MGC to
+   indicate that it wishes to be notified when the signal finishes
+   playout.  The possible cases are that the signal timed out (or
+   otherwise completed on its own), that it was interrupted by an event,
+   that it was halted when a Signals descriptor was replaced, or that it
+   stopped or never started for other reasons.  If the notifyCompletion
+   parameter is not included in a Signals descriptor, notification is
+   generated only if the signal stopped or was never started for other
+   reasons.  For reporting to occur, the signal completion event (see
+   E.1.2) must be enabled in the currently active Events descriptor.
+
+   The duration is an integer value that is expressed in hundredths of a
+   second.
+
+   There are three types of signals:
+
+   -  on/off - the signal lasts until it is turned off;
+
+   -  timeout - the signal lasts until it is turned off or a specific
+      period of time elapses;
+
+   -  brief - the signal will stop on its own unless a new Signals
+      descriptor is applied that causes it to stop; no timeout value is
+      needed.
+
+   If a signal of default type other than TO has its type overridden to
+   type TO in the Signals descriptor, the duration parameter must be
+   present.
+
+   If the signal type is specified in a SignalsDescriptor, it overrides
+   the default signal type (see 12.1.4).  If duration is specified for
+   an on/off signal, it SHALL be ignored.
+
+   A sequential signal list consists of a signal list identifier and a
+   sequence of signals to be played sequentially.  Only the trailing
+   element of the sequence of signals in a sequential signal list may be
+   an on/off signal.  The duration of a sequential signal list is the
+   sum of the durations of the signals it contains.
+
+   Multiple signals and sequential signal lists in the same
+   SignalsDescriptor shall be played simultaneously.
+
+   Signals are defined as proceeding from the Termination towards the
+   exterior of the Context unless otherwise specified in a package.
+
+
+
+Groves, et al.              Standards Track                    [Page 39]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   When the same Signal is applied to multiple Terminations within one
+   Transaction, the MG should consider using the same resource to
+   generate these Signals.
+
+   Production of a Signal on a Termination is stopped by application of
+   a new SignalsDescriptor, or detection of an Event on the Termination
+   (see 7.1.9).
+
+   A new SignalsDescriptor replaces any existing SignalsDescriptor.  Any
+   signals applied to the Termination not in the replacement descriptor
+   shall be stopped, and new signals are applied, except as follows.
+   Signals present in the replacement descriptor and containing the
+   KeepActive flag shall be continued if they are currently playing and
+   have not already completed.  If a replacement signal descriptor
+   contains a signal that is not currently playing and contains the
+   KeepActive flag, that signal SHALL be ignored.  If the replacement
+   descriptor contains a sequential signal list with the same identifier
+   as the existing descriptor, then
+
+   -  the signal type and sequence of signals in the sequential signal
+      list in the replacement descriptor shall be ignored; and
+
+   -  the playing of the signals in the sequential signal list in the
+      existing descriptor shall not be interrupted.
+
+7.1.12   Audit descriptor
+
+   The Audit descriptor specifies what information is to be audited.
+   The Audit descriptor specifies the list of descriptors to be
+   returned.  Audit may be used in any command to force the return of
+   any descriptor containing the current values of its properties,
+   events, signals and statistics even if that descriptor was not
+   present in the command, or had no underspecified parameters.
+   Possible items in the Audit descriptor are:
+
+      Modem
+      Mux
+      Events
+      Media
+      Signals
+      ObservedEvents
+      DigitMap
+      Statistics
+      Packages
+      EventBuffer
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 40]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Audit may be empty, in which case, no descriptors are returned.  This
+   is useful in Subtract, to inhibit return of statistics, especially
+   when using wildcard.
+
+7.1.13   ServiceChange descriptor
+
+   The ServiceChangeDescriptor contains the following parameters:
+
+      .  ServiceChangeMethod
+      .  ServiceChangeReason
+      .  ServiceChangeAddress
+      .  ServiceChangeDelay
+      .  ServiceChangeProfile
+      .  ServiceChangeVersion
+      .  ServiceChangeMGCId
+      .  TimeStamp
+      .  Extension
+
+   See 7.2.8.
+
+7.1.14   DigitMap descriptor
+
+7.1.14.1 DigitMap definition, creation, modification and deletion
+
+   A DigitMap is a dialing plan resident in the Media Gateway used for
+   detecting and reporting digit events received on a Termination.  The
+   DigitMap descriptor contains a DigitMap name and the DigitMap to be
+   assigned.  A digit map may be preloaded into the MG by management
+   action and referenced by name in an EventsDescriptor, may be defined
+   dynamically and subsequently referenced by name, or the actual
+   digitmap itself may be specified in the EventsDescriptor.  It is
+   permissible for a digit map completion event within an Events
+   descriptor to refer by name to a DigitMap which is defined by a
+   DigitMap descriptor within the same command, regardless of the
+   transmitted order of the respective descriptors.
+
+   DigitMaps defined in a DigitMapDescriptor can occur in any of the
+   standard Termination manipulation Commands of the protocol.  A
+   DigitMap, once defined, can be used on all Terminations specified by
+   the (possibly wildcarded) TerminationID in such a command.  DigitMaps
+   defined on the root Termination are global and can be used on every
+   Termination in the MG, provided that a DigitMap with the same name
+   has not been defined on the given Termination.  When a DigitMap is
+   defined dynamically in a DigitMap descriptor:
+
+   -  A new DigitMap is created by specifying a name that is not yet
+      defined.  The value shall be present.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 41]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  A DigitMap value is updated by supplying a new value for a name
+      that is already defined.  Terminations presently using the
+      digitmap shall continue to use the old definition; subsequent
+      EventsDescriptors specifying the name, including any
+      EventsDescriptor in the command containing the DigitMap
+      descriptor, shall use the new one.
+
+   -  A DigitMap is deleted by supplying an empty value for a name that
+      is already defined.  Terminations presently using the digitmap
+      shall continue to use the old definition.
+
+7.1.14.2 DigitMap Timers
+
+   The collection of digits according to a DigitMap may be protected by
+   three timers, viz. a start timer (T), short timer (S), and long timer
+   (L).
+
+   1) The start timer (T) is used prior to any digits having been
+      dialed.  If the start timer is overridden with the value set to
+      zero (T=0), then the start timer shall be disabled.  This implies
+      that the MG will wait indefinitely for digits.
+
+   2) If the Media Gateway can determine that at least one more digit is
+      needed for a digit string to match any of the allowed patterns in
+      the digit map, then the interdigit timer value should be set to a
+      long (L) duration (e.g., 16 seconds).
+
+   3) If the digit string has matched one of the patterns in a digit
+      map, but it is possible that more digits could be received which
+      would cause a match with a different pattern, then instead of
+      reporting the match immediately, the MG must apply the short timer
+      (S) and wait for more digits.
+
+   The timers are configurable parameters to a DigitMap.  Default values
+   of these timers should be provisioned on the MG, but can be
+   overridden by values specified within the DigitMap.
+
+7.1.14.3 DigitMap Syntax
+
+   The formal syntax of the digit map is described by the DigitMap rule
+   in the formal syntax description of the protocol (see Annex A and
+   Annex B).  A DigitMap, according to this syntax, is defined either by
+   a string or by a list of strings.  Each string in the list is an
+   alternative event sequence, specified either as a sequence of digit
+   map symbols or as a regular expression of digit map symbols.  These
+   digit map symbols, the digits "0" through "9" and letters "A" through
+   a maximum value depending on the signalling system concerned, but
+   never exceeding "K", correspond to specified events within a package
+
+
+
+Groves, et al.              Standards Track                    [Page 42]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   which has been designated in the Events descriptor on the Termination
+   to which the digit map is being applied.  (The mapping between events
+   and digit map symbols is defined in the documentation for packages
+   associated with channel-associated signalling systems such as DTMF,
+   MF, or R2.  Digits "0" through "9" MUST be mapped to the
+   corresponding digit events within the signalling system concerned.
+   Letters should be allocated in logical fashion, facilitating the use
+   of range notation for alternative events.)
+
+   The letter "x" is used as a wildcard, designating any event
+   corresponding to symbols in the range "0"-"9".  The string may also
+   contain explicit ranges and, more generally, explicit sets of
+   symbols, designating alternative events any one of which satisfies
+   that position of the digit map.  Finally, the dot symbol "." stands
+   for zero or more repetitions of the event selector (event, range of
+   events, set of alternative events, or wildcard) that precedes it.  As
+   a consequence of the third timing rule above, inter-event timing
+   while matching a terminal dot symbol uses the short timer by default.
+
+   In addition to these event symbols, the string may contain "S" and
+   "L" inter-event timing specifiers and the "Z" duration modifier.  "S"
+   and "L" respectively indicate that the MG should use the short (S)
+   timer or the long (L) timer for subsequent events, overriding the
+   timing rules described above.  If an explicit timing specifier is in
+   effect in one alternative event sequence, but none is given in any
+   other candidate alternative, the timer value set by the explicit
+   timing specifier must be used.  If all sequences with explicit timing
+   controls are dropped from the candidate set, timing reverts to the
+   default rules given above.  Finally, if conflicting timing specifiers
+   are in effect in different alternative sequences, the long timer
+   shall be used.
+
+   A "Z" designates a long duration event: placed in front of the
+   symbol(s) designating the event(s) which satisfy a given digit
+   position, it indicates that that position is satisfied only if the
+   duration of the event exceeds the long-duration threshold.  The value
+   of this threshold is assumed to be provisioned in the MG.
+
+7.1.14.4 DigitMap Completion Event
+
+   A digit map is active while the Events descriptor which invoked it is
+   active and it has not completed.  A digit map completes when:
+
+   -  a timer has expired; or
+
+   -  an alternative event sequence has been matched and no other
+      alternative event sequence in the digit map could be matched
+      through detection of an additional event (unambiguous match); or
+
+
+
+Groves, et al.              Standards Track                    [Page 43]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  an event has been detected such that a match to a complete
+      alternative event sequence of the digit map will be impossible no
+      matter what additional events are received.
+
+   Upon completion, a digit map completion event as defined in the
+   package providing the events being mapped into the digit map shall be
+   generated.  At that point the digit map is deactivated.  Subsequent
+   events in the package are processed as per the currently active event
+   processing mechanisms.
+
+7.1.14.5 DigitMap Procedures
+
+   Pending completion, successive events shall be processed according to
+   the following rules:
+
+   1) The "current dial string", an internal variable, is initially
+      empty.  The set of candidate alternative event sequences includes
+      all of the alternatives specified in the digit map.
+
+   2) At each step, a timer is set to wait for the next event, based
+      either on the default timing rules given above or on explicit
+      timing specified in one or more alternative event sequences.  If
+      the timer expires and a member of the candidate set of
+      alternatives is fully satisfied, a timeout completion with full
+      match is reported.  If the timer expires and part or none of any
+      candidate alternative is satisfied, a timeout completion with
+      partial match is reported.
+
+   3) If an event is detected before the timer expires, it is mapped to
+      a digit string symbol and provisionally added to the end of the
+      current dial string.  The duration of the event (long or not long)
+      is noted if and only if this is relevant in the current symbol
+      position (because at least one of the candidate alternative event
+      sequences includes the "Z" modifier at this position in the
+      sequence).
+
+   4) The current dial string is compared to the candidate alternative
+      event sequences.  If and only if a sequence expecting a
+      long-duration event at this position is matched (i.e., the event
+      had long duration and met the specification for this position),
+      then any alternative event sequences not specifying a long
+      duration event at this position are discarded, and the current
+      dial string is modified by inserting a "Z" in front of the symbol
+      representing the latest event.   Any sequence expecting a long-
+      duration event at this position but not matching the observed
+      event is discarded from the candidate set.  If alternative event
+      sequences not specifying a long duration event in the given
+
+
+
+
+Groves, et al.              Standards Track                    [Page 44]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      position remain in the candidate set after application of the
+      above rules, the observed event duration is treated as irrelevant
+      in assessing matches to them.
+
+   5) If exactly one candidate remains and it has been fully matched, a
+      completion event is generated indicating an unambiguous match.  If
+      no candidates remain, the latest event is removed from the current
+      dial string and a completion event is generated indicating full
+      match if one of the candidates from the previous step was fully
+      satisfied before the latest event was detected, or partial match
+      otherwise.  The event removed from the current dial string will
+      then be reported as per the currently active event processing
+      mechanisms.
+
+   6) If no completion event is reported out of step 5, processing
+      returns to step 2.
+
+7.1.14.6 DigitMap Activation
+
+   A digit map is activated whenever a new Event descriptor is applied
+   to the Termination or embedded Event descriptor is activated, and
+   that Event descriptor contains a digit map completion event.  The
+   digit map completion event contains an eventDM field in the requested
+   actions field.  Each new activation of a digit map begins at step 1
+   of the above procedure, with a clear current dial string.  Any
+   previous contents of the current dial string from an earlier
+   activation are lost.
+
+   A digit map completion event that does not contain an eventDM field
+   in its requested actions field is considered an error.  Upon receipt
+   of such an event in an EventsDescriptor, a MG shall respond with an
+   error response, including Error 457 - Missing parameter in signal or
+   event.
+
+7.1.14.7 Interaction Of DigitMap and Event Processing
+
+   While the digit map is activated, detection is enabled for all events
+   defined in the package containing the specified digit map completion
+   event.  Normal event behaviour (e.g., stopping of signals unless the
+   digit completion event has the KeepActive flag enabled) continues to
+   apply for each such event detected, except that:
+
+   -  the events in the package containing the specified digit map
+      completion event other than the completion event itself are not
+      individually notified and have no side-effects unless separately
+      enabled; and
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 45]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  an event that triggers a partial match completion event is not
+      recognized and therefore has no side effects until reprocessed
+      following the recognition of the digit map completion event.
+
+7.1.14.8 Wildcards
+
+   Note that if a package contains a digit map completion event, then an
+   event specification consisting of the package name with a wildcarded
+   ItemID (Property Name) will activate a digit map; to that end, the
+   event specification must include an eventDM field according to
+   section 7.1.14.6.  If the package also contains the digit events
+   themselves, this form of event specification will cause the
+   individual events to be reported to the MGC as they are detected.
+
+7.1.14.9 Example
+
+   As an example, consider the following dial plan:
+
+   0                      Local operator
+
+   00                     Long-distance operator
+
+   xxxx                   Local extension number (starts with 1-7)
+
+   8xxxxxxx               Local number
+
+   #xxxxxxx               Off-site extension
+
+   *xx                    Star services
+
+   91xxxxxxxxxx           Long-distance number
+
+   9011 + up to 15 digits International number
+
+
+
+   If the DTMF detection package described in E.6 is used to collect the
+   dialed digits, then the dialing plan shown above results in the
+   following digit map:
+
+    (0| 00|[1-7]xxx|8xxxxxxx|Fxxxxxxx|Exx|91xxxxxxxxxx|9011x.)
+
+7.1.15   Statistics descriptor
+
+   The Statistics Descriptor provides information describing the status
+   and usage of a Termination during its existence within a specific
+   Context.  There is a set of standard statistics kept for each
+   Termination where appropriate (number of octets sent and received for
+
+
+
+Groves, et al.              Standards Track                    [Page 46]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   example).  The particular statistical properties that are reported
+   for a given Termination are determined by the Packages realized by
+   the Termination.  By default, statistics are reported when the
+   Termination is Subtracted from the Context.  This behaviour can be
+   overridden by including an empty AuditDescriptor in the Subtract
+   command.  Statistics may also be returned from the AuditValue
+   command, or any Add/Move/Modify command using the Audit descriptor.
+
+   Statistics are cumulative; reporting Statistics does not reset them.
+   Statistics are reset when a Termination is Subtracted from a Context.
+
+7.1.16   Packages descriptor
+
+   Used only with the AuditValue command, the PackageDescriptor returns
+   a list of Packages realized by the Termination.
+
+7.1.17   ObservedEvents descriptor
+
+   ObservedEvents is supplied with the Notify command to inform the MGC
+   of which event(s) were detected.  Used with the AuditValue command,
+   the ObservedEventsDescriptor returns events in the event buffer which
+   have not been Notified.  ObservedEvents contains the
+   RequestIdentifier of the EventsDescriptor that triggered the
+   notification, the event(s) detected, optionally the detection time(s)
+   and any parameters of the observed event.  Detection times are
+   reported with a precision of hundredths of a second.
+
+7.1.18   Topology descriptor
+
+   A Topology descriptor is used to specify flow directions between
+   Terminations in a Context.  Contrary to the descriptors in previous
+   subclauses, the Topology descriptor applies to a Context instead of a
+   Termination.  The default topology of a Context is that each
+   Termination's transmission is received by all other Terminations.
+   The Topology descriptor is optional to implement.  An MG that does
+   not support Topology descriptors, but receives a command containing
+   one, returns Error 444 Unsupported or unknown descriptor, and
+   optionally includes a string containing the name of the unsupported
+   Descriptor ("Topology") in the error text in the error descriptor.
+
+   The Topology descriptor occurs before the commands in an action.  It
+   is possible to have an action containing only a Topology descriptor,
+   provided that the Context to which the action applies already exists.
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 47]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   A Topology descriptor consists of a sequence of triples of the form
+   (T1, T2, association).  T1 and T2 specify Terminations within the
+   Context, possibly using the ALL or CHOOSE wildcard.  The association
+   specifies how media flows between these two Terminations as follows.
+
+   -  (T1, T2, isolate) means that the Terminations matching T2 do not
+      receive media from the Terminations matching T1, nor vice versa.
+
+   -  (T1, T2, oneway) means that the Terminations that match T2 receive
+      media from the Terminations matching T1, but not vice versa.  In
+      this case use of the ALL wildcard such that there are Terminations
+      that match both T1 and T2 is not allowed.
+
+   -  (T1, T2, bothway) means that the Terminations matching T2 receive
+      media from the Terminations matching T1, and vice versa.  In this
+      case it is allowed to use wildcards such that there are
+      Terminations that match both T1 and T2.  However, if there is a
+      Termination that matches both, no loopback is introduced.
+
+   CHOOSE wildcards may be used in T1 and T2 as well, under the
+   following restrictions:
+
+   -  the action (see clause 8) of which the topology descriptor is part
+      contains an Add command in which a CHOOSE wildcard is used;
+
+   -  if a CHOOSE wildcard occurs in T1 or T2, then a partial name SHALL
+      NOT be specified.
+
+   The CHOOSE wildcard in a Topology descriptor matches the
+   TerminationID that the MG assigns in the first Add command that uses
+   a CHOOSE wildcard in the same action.  An existing Termination that
+   matches T1 or T2 in the Context to which a Termination is added, is
+   connected to the newly added Termination as specified by the Topology
+   descriptor.
+
+   If a termination is not mentioned within a Topology Descriptor, any
+   topology associated with it remains unchanged.  If, however, a new
+   termination is added into a context its association with the other
+   terminations within the context defaults to bothway, unless a
+   Topology Descriptor is given to change this (e.g., if T3 is added to
+   a context with T1 and T2 with topology (T3, T1, oneway) it will be
+   connected bothway to T2).
+
+   Figure 7 and the table following it show some examples of the effect
+   of including topology descriptors in actions.  In these examples it
+   is assumed that the topology descriptors are applied in sequence.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 48]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+     +------------------+  +------------------+  +------------------+
+     |      +----+      |  |      +----+      |  |      +----+      |
+     |      | T2 |      |  |      | T2 |      |  |      | T2 |      |
+     |      +----+      |  |      +----+      |  |      +----+      |
+     |       ^  ^       |  |          ^       |  |          ^       |
+     |       |  |       |  |          |       |  |          |       |
+     |    +--+  +--+    |  |          +---+   |  |          +--+    |
+     |    |        |    |  |              |   |  |             |    |
+     |    v        v    |  |              v   |  |             |    |
+     | +----+    +----+ |  | +----+    +----+ |  | +----+    +----+ |
+     | | T1 |<-->| T3 | |  | | T1 |<-->| T3 | |  | | T1 |<-->| T3 | |
+     | +----+    +----+ |  | +----+    +----+ |  | +----+    +----+ |
+     +------------------+  +------------------+  +------------------+
+     1. No Topology Desc.   2. T1, T2, Isolate    3. T3, T2, Oneway
+
+     +------------------+  +------------------+  +------------------+
+     |      +----+      |  |      +----+      |  |      +----+      |
+     |      | T2 |      |  |      | T2 |      |  |      | T2 |      |
+     |      +----+      |  |      +----+      |  |      +----+      |
+     |          |       |  |          ^       |  |       ^  ^       |
+     |          |       |  |          |       |  |       |  |       |
+     |          +--+    |  |          +---+   |  |    +--+  +--+    |
+     |             |    |  |              |   |  |    |        |    |
+     |             v    |  |              v   |  |    v        v    |
+     | +----+    +----+ |  | +----+    +----+ |  | +----+    +----+ |
+     | | T1 |<-->| T3 | |  | | T1 |<-->| T3 | |  | | T1 |<-->| T3 | |
+     | +----+    +----+ |  | +----+    +----+ |  | +----+    +----+ |
+     +------------------+  +------------------+  +------------------+
+     4. T2, T3 oneway      5. T2, T3 bothway     6. T1, T2 bothway
+
+     Note: the direction of the arrow indicates the direction of flow.
+
+                       Figure 7: Example topologies
+
+   Topology Description
+
+   1 No topology descriptors    When no topology descriptors are
+                                included, all Terminations have a
+                                bothway connection to all other
+                                Terminations.
+
+   2 T1, T2 Isolate             Removes the connection between T1 and
+                                T2.  T3 has a bothway connection with
+                                both T1 and T2.  T1 and T2 have bothway
+                                connection to T3.
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 49]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   3 T3, T2 oneway              A oneway connection from T3 to T2 (i.e.,
+                                T2 receives media flow from T3).  A
+                                bothway connection between T1 and T3.
+
+   4 T2, T3 oneway              A oneway connection between T2 to T3.
+                                T1 and T3 remain bothway connected.
+
+   5 T2, T3 bothway             T2 is bothway connected to T3.  This
+                                results in the same as 2.
+
+   6 T1, T2 bothway (T2, T3     All Terminations have a bothway
+     bothway and T1, T3         connection to all other Terminations.
+     bothway may be implied or
+     explicit).
+
+   A oneway connection must be implemented in such a way that the other
+   Terminations in the Context are not aware of the change in topology.
+
+7.1.19   Error Descriptor
+
+   If a responder encounters an error when processing a transaction
+   request, it must include an error descriptor in its response.  A
+   Notify request may contain an error descriptor as well.
+
+   An error descriptor consists of an IANA-registered error code,
+   optionally accompanied by an error text.  H.248.8 contains a list of
+   valid error codes and error descriptions.
+
+   An error descriptor shall be specified at the "deepest level" that is
+   semantically appropriate for the error being described and that is
+   possible given any parsing problems with the original request.  An
+   error descriptor may refer to a syntactical construct other than
+   where it appears.  For example, Error descriptor 422 - Syntax Error
+   in Action, could appear within a command even though it refers to the
+   larger construct - the action - and not the particular command within
+   which it appears.
+
+7.2   Command Application Programming Interface
+
+   Following is an Application Programming Interface (API) describing
+   the Commands of the protocol.  This API is shown to illustrate the
+   Commands and their parameters and is not intended to specify
+   implementation (e.g., via use of blocking function calls).  It
+   describes the input parameters in parentheses after the command name
+   and the return values in front of the Command.  This is only for
+   descriptive purposes; the actual Command syntax and encoding are
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 50]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   specified in later subclauses.  The order of parameters to commands
+   is not fixed.  Descriptors may appear as parameters to commands in
+   any order.  The descriptors SHALL be processed in the order in which
+   they appear.
+
+   Any reply to a command may contain an error descriptor; the API does
+   not specifically show this.
+
+   All parameters enclosed by square brackets ([. . .]) are considered
+   optional.
+
+7.2.1 Add
+
+   The Add Command adds a Termination to a Context.
+
+     TerminationID
+     [,MediaDescriptor]
+     [,ModemDescriptor]
+     [,MuxDescriptor]
+     [,EventsDescriptor]
+     [,SignalsDescriptor]
+     [,DigitMapDescriptor]
+     [,ObservedEventsDescriptor]
+     [,EventBufferDescriptor]
+     [,StatisticsDescriptor]
+     [,PackagesDescriptor]
+       Add( TerminationID
+        [, MediaDescriptor]
+        [, ModemDescriptor]
+        [, MuxDescriptor]
+        [, EventsDescriptor]
+        [, EventBufferDescriptor]
+        [, SignalsDescriptor]
+        [, DigitMapDescriptor]
+        [, AuditDescriptor]
+        )
+
+   The TerminationID specifies the Termination to be added to the
+   Context.  The Termination is either created, or taken from the null
+   Context.  If a CHOOSE wildcard is used in the TerminationID, the
+   selected TerminationID will be returned.  Wildcards may be used in an
+   Add, but such usage would be unusual.  If the wildcard matches more
+   than one TerminationID, all possible matches are attempted, with
+   results reported for each one.  The order of attempts when multiple
+   TerminationIDs match is not specified.
+
+   The optional MediaDescriptor describes all media streams.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 51]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The optional ModemDescriptor and MuxDescriptor specify a modem and
+   multiplexer if applicable.  For convenience, if a Multiplex
+   descriptor is present in an Add command and lists any Terminations
+   that are not currently in the Context, such Terminations are added to
+   the Context as if individual Add commands listing the Terminations
+   were invoked. If an error occurs on such an implied Add, error 471 -
+   Implied Add for Multiplex failure shall be returned and further
+   processing of the command shall cease.
+
+   The EventsDescriptor parameter is optional.  If present, it provides
+   the list of events that should be detected on the Termination.
+
+   The EventBufferDescriptor parameter is optional.  If present, it
+   provides the list of events that the MG is requested to detect and
+   buffer when EventBufferControl equals LockStep.
+
+   The SignalsDescriptor parameter is optional.  If present, it provides
+   the list of signals that should be applied to the Termination.
+
+   The DigitMapDescriptor parameter is optional.  If present, it defines
+   a DigitMap definition that may be used in an EventsDescriptor.
+
+   The AuditDescriptor is optional.  If present, the command will return
+   descriptors as specified in the AuditDescriptor.
+
+   All descriptors that can be modified could be returned by MG if a
+   parameter was underspecified or overspecified.  ObservedEvents,
+   Statistics, and Packages, and the EventBuffer descriptors are
+   returned only if requested in the AuditDescriptor.
+
+   Add SHALL NOT be used on a Termination with a serviceState of
+   "OutofService".
+
+7.2.2 Modify
+
+   The Modify Command modifies the properties of a Termination.
+
+     TerminationID
+     [,MediaDescriptor]
+     [,ModemDescriptor]
+     [,MuxDescriptor]
+     [,EventsDescriptor]
+     [,SignalsDescriptor]
+     [,DigitMapDescriptor]
+     [,ObservedEventsDescriptor]
+     [,EventBufferDescriptor]
+     [,StatisticsDescriptor]
+     [,PackagesDescriptor]
+
+
+
+Groves, et al.              Standards Track                    [Page 52]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      Modify( TerminationID
+         [, MediaDescriptor]
+         [, ModemDescriptor]
+         [, MuxDescriptor]
+         [, EventsDescriptor]
+         [, EventBufferDescriptor]
+         [, SignalsDescriptor]
+         [, DigitMapDescriptor]
+         [, AuditDescriptor]
+         )
+
+   The TerminationID may be specific if a single Termination in the
+   Context is to be modified.  Use of wildcards in the TerminationID may
+   be appropriate for some operations.  If the wildcard matches more
+   than one TerminationID, all possible matches are attempted, with
+   results reported for each one.  The order of attempts when multiple
+   TerminationIDs match is not specified.  The CHOOSE option is an
+   error, as the Modify command may only be used on existing
+   Terminations.
+
+   For convenience, if a Multiplex Descriptor is present in a Modify
+   command, then:
+
+   -  if the new Multiplex Descriptor lists any Terminations that are
+      not currently in the Context, such Terminations are added to the
+      context as if individual commands listing the Terminations were
+      invoked.
+
+   -  if any Terminations listed previously in the Multiplex Descriptor
+      are no longer present in the new Multiplex Descriptor, they are
+      subtracted from the context as if individual Subtract commands
+      listing the Terminations were invoked.
+
+   The remaining parameters to Modify are the same as those to Add.
+   Possible return values are the same as those to Add.
+
+7.2.3 Subtract
+
+   The Subtract Command disconnects a Termination from its Context and
+   returns statistics on the Termination's participation in the Context.
+
+     TerminationID
+     [,MediaDescriptor]
+     [,ModemDescriptor]
+     [,MuxDescriptor]
+     [,EventsDescriptor]
+     [,SignalsDescriptor]
+     [,DigitMapDescriptor]
+
+
+
+Groves, et al.              Standards Track                    [Page 53]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+     [,ObservedEventsDescriptor]
+     [,EventBufferDescriptor]
+     [,StatisticsDescriptor]
+     [,PackagesDescriptor]
+      Subtract(TerminationID
+         [, AuditDescriptor]
+         )
+
+   TerminationID in the input parameters represents the Termination that
+   is being subtracted.  The TerminationID may be specific or may be a
+   wildcard value indicating that all (or a set of related) Terminations
+   in the Context of the Subtract Command are to be subtracted.  If the
+   wildcard matches more than one TerminationID, all possible matches
+   are attempted, with results reported for each one.  The order of
+   attempts when multiple TerminationIDs match is not specified.
+
+   The use of CHOOSE in the TerminationID is an error, as the Subtract
+   command may only be used on existing Terminations.
+
+   ALL may be used as the ContextID as well as the TerminationId in a
+   Subtract, which would have the effect of deleting all Contexts,
+   deleting all ephemeral Terminations, and returning all physical
+   Terminations to Null Context.  Subtract of a termination from the
+   Null Context is not allowed.
+
+   For convenience, if a multiplexing Termination is the object of a
+   Subtract command, then any bearer Terminations listed in its
+   Multiplex Descriptor are subtracted from the context as if individual
+   Subtract commands listing the Terminations were invoked.
+
+   By default, the Statistics parameter is returned to report
+   information collected on the Termination or Terminations specified in
+   the Command.  The information reported applies to the Termination's
+   or Terminations' existence in the Context from which it or they are
+   being subtracted.
+
+   The AuditDescriptor is optional.  If present, the command will return
+   only those descriptors as specified in the AuditDescriptor, which may
+   be empty.  If omitted, the Statistics descriptor is returned, by
+   default.  Possible return values are the same as those to Add.
+
+   When a provisioned Termination is Subtracted from a Context, its
+   property values shall revert to:
+
+   -  the default value, if specified for the property and not
+      overridden by provisioning;
+
+   -  otherwise, the provisioned value.
+
+
+
+Groves, et al.              Standards Track                    [Page 54]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+7.2.4 Move
+
+   The Move Command moves a Termination to another Context from its
+   current Context in one atomic operation.  The Move command is the
+   only command that refers to a Termination in a Context different from
+   that to which the command is applied.  The Move command shall not be
+   used to move Terminations to or from the null Context.
+
+     TerminationID
+     [,MediaDescriptor]
+     [,ModemDescriptor]
+     [,MuxDescriptor]
+     [,EventsDescriptor]
+     [,SignalsDescriptor]
+     [,DigitMapDescriptor]
+     [,ObservedEventsDescriptor]
+     [,EventBufferDescriptor]
+     [,StatisticsDescriptor]
+     [,PackagesDescriptor]
+      Move( TerminationID
+         [, MediaDescriptor]
+         [, ModemDescriptor]
+         [, MuxDescriptor]
+         [, EventsDescriptor]
+         [, EventBufferDescriptor]
+         [, SignalsDescriptor]
+         [, DigitMapDescriptor]
+         [, AuditDescriptor]
+         )
+
+   The TerminationID specifies the Termination to be moved.  It may be
+   wildcarded, but CHOOSE shall not be used in the TerminationID.  If
+   the wildcard matches more than one TerminationID, all possible
+   matches are attempted, with results reported for each one.  The order
+   of attempts when multiple TerminationIDs match is not specified.  The
+   Context to which the Termination is moved is indicated by the target
+   ContextId in the Action.  If the last remaining Termination is moved
+   out of a Context, the Context is deleted.
+
+   The Move command does not affect the properties of the Termination on
+   which it operates, except those properties explicitly modified by
+   descriptors included in the Move command.  The AuditDescriptor with
+   the Statistics option, for example, would return statistics on the
+   Termination just prior to the Move.  Possible descriptors returned
+   from Move are the same as for Add.
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 55]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   For convenience, if a multiplexing Termination is the object of a
+   Move command, then any bearer Terminations listed in its Multiplex
+   Descriptor are also moved as if individual Move commands listing the
+   Terminations were invoked.
+
+   Move SHALL NOT be used on a Termination with a serviceState of
+   "OutofService".
+
+7.2.5 AuditValue
+
+   The AuditValue Command returns the current values of properties,
+   events, signals and statistics associated with Terminations.
+
+   TerminationID
+   [,MediaDescriptor]
+   [,ModemDescriptor]
+   [,MuxDescriptor]
+   [,EventsDescriptor]
+   [,SignalsDescriptor]
+   [,DigitMapDescriptor]
+   [,ObservedEventsDescriptor]
+   [,EventBufferDescriptor]
+   [,StatisticsDescriptor]
+   [,PackagesDescriptor]
+     AuditValue(TerminationID,
+      AuditDescriptor
+      )
+
+   TerminationID may be specific or wildcarded.  If the wildcard matches
+   more than one TerminationID, all possible matches are attempted, with
+   results reported for each one.  The order of attempts when multiple
+   TerminationIDs match is not specified.  If a wildcarded response is
+   requested, only one command return is generated, with the contents
+   containing the union of the values of all Terminations matching the
+   wildcard.  This convention may reduce the volume of data required to
+   audit a group of Terminations.  Use of CHOOSE is an error.
+
+   The appropriate descriptors, with the current values for the
+   Termination, are returned from AuditValue.  Values appearing in
+   multiple instances of a descriptor are defined to be alternate values
+   supported, with each parameter in a descriptor considered
+   independent.
+
+   ObservedEvents returns a list of events in the EventBuffer.  If the
+   ObservedEventsDescriptor is audited while a DigitMap is active, the
+   returned ObservedEvents descriptor also includes a digit map
+   completion event that shows the current dial string but does not show
+   a Termination method.
+
+
+
+Groves, et al.              Standards Track                    [Page 56]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   EventBuffer returns the set of events and associated parameter values
+   currently enabled in the EventBufferDescriptor.  PackagesDescriptor
+   returns a list of packages realized by the Termination.
+   DigitMapDescriptor returns the name or value of the current DigitMap
+   for the Termination.  DigitMap requested in an AuditValue command
+   with TerminationID ALL returns all DigitMaps in the gateway.
+   Statistics returns the current values of all statistics being kept on
+   the Termination.   Specifying an empty Audit descriptor results in
+   only the TerminationID being returned.  This may be useful to get a
+   list of TerminationIDs when used with wildcard.  Annexes A and B
+   provide a special syntax for presenting such a list in condensed
+   form, such that the AuditValue command tag does not have to be
+   repeated for each TerminationID.
+
+   AuditValue results depend on the Context, viz. specific, null, or
+   wildcarded.  (Note that ContextID ALL does not include the null
+   Context.)  The TerminationID may be specific, or wildcarded.
+
+   The following are examples of what is returned in case the context
+   and/or the termination is wildcarded and a wildcarded response has
+   been specified.
+
+   Assume that the gateway has 4 terminations: t1/1, t1/2, t2/1 and
+   t2/2.  Assume that terminations t1/* have implemented packages aaa
+   and bbb and that terminations t2/* have implemented packages ccc and
+   ddd.  Assume that Context 1 has t1/1 and t2/1 in it and that Context
+   2 has t1/2 and t2/2 in it.
+
+   The command:
+
+     Context=1{AuditValue=t1/1{Audit{Packages}}}
+
+   Returns:
+
+     Context=1{AuditValue=t1/1{Packages{aaa,bbb}}}
+
+   The command:
+
+     Context=*{AuditValue=t2/*{Audit{Packages}}}
+
+   Returns:
+
+     Context=1{AuditValue=t2/1{Packages{ccc,ddd}}},
+     Context=2{AuditValue=t2/2{Packages{ccc,ddd}}}
+
+   The command:
+
+     Context=*{W-AuditValue=t1/*{Audit{Packages}}}
+
+
+
+Groves, et al.              Standards Track                    [Page 57]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Returns:
+
+     Context=*{W-AuditValue=t1/*{Packages{aaa,bbb}}}
+
+   Note: A wildcard response may also be used for other commands such as
+   Subtract.
+
+   The following illustrates other information that can be obtained with
+   the AuditValue Command:
+
+   ContextID TerminationID Information Obtained
+
+   Specific  wildcard      Audit of matching Terminations in a Context
+
+   Specific  specific      Audit of a single Termination in a Context
+
+   Null      Root          Audit of Media Gateway state and events
+
+   Null      wildcard      Audit of all matching Terminations in the
+                            null Context
+
+   Null      specific      Audit of a single Termination outside of any
+                            Context
+
+   All       wildcard      Audit of all matching Terminations and the
+                            Context to which they are associated
+
+   All       Root          List of all ContextIds (the ContextID list
+                            should be returned by using multiple action
+                            replies, each containing a ContextID from
+                            the list)
+
+   All       Specific      (Non-null) ContextID in which the
+                            Termination currently exists
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 58]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+7.2.6 AuditCapabilities
+
+   The AuditCapabilities Command returns the possible values of
+   properties, events, signals and statistics associated with
+   Terminations.
+
+     TerminationID
+     [,MediaDescriptor]
+     [,ModemDescriptor]
+     [,MuxDescriptor]
+     [,EventsDescriptor]
+     [,SignalsDescriptor]
+     [,ObservedEventsDescriptor]
+     [,EventBufferDescriptor]
+     [,StatisticsDescriptor]
+      AuditCapabilities(TerminationID,
+         AuditDescriptor
+         )
+
+   The appropriate descriptors, with the possible values for the
+   Termination are returned from AuditCapabilities.  Descriptors may be
+   repeated where there are multiple possible values.  If a wildcarded
+   response is requested, only one command return is generated, with the
+   contents containing the union of the values of all Terminations
+   matching the wildcard.  This convention may reduce the volume of data
+   required to audit a group of Terminations.
+
+   Interpretation of what capabilities are requested for various values
+   of ContextID and TerminationID is the same as in AuditValue.
+
+   The EventsDescriptor returns the list of possible events on the
+   Termination together with the list of all possible values for the
+   EventsDescriptor Parameters.  EventBufferDescriptor returns the same
+   information as EventsDescriptor.  The SignalsDescriptor returns the
+   list of possible signals that could be applied to the Termination
+   together with the list of all possible values for the Signals
+   Parameters.  StatisticsDescriptor returns the names of the statistics
+   being kept on the termination.  ObservedEventsDescriptor returns the
+   names of active events on the Termination.  DigitMap and Packages are
+   not legal in AuditCapability.
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 59]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The following illustrates other information that can be obtained with
+   the AuditCapabilties Command:
+
+   ContextID TerminationID Information Obtained
+
+   Specific  wildcard      Audit of matching Terminations in a Context
+
+   Specific  specific      Audit of a single Termination in a Context
+
+   Null      Root          Audit of MG state and events
+
+   Null      wildcard      Audit of all matching Terminations in the
+                            Null Context
+
+   Null      specific      Audit of a single Termination outside of any
+                            Context
+
+   All       wildcard      Audit of all matching Terminations and the
+                            Context to which they are associated
+
+   All       Root          Same as for AuditValue
+
+   All       Specific      Same as for AuditValue
+
+7.2.7 Notify
+
+   The Notify Command allows the Media Gateway to notify the Media
+   Gateway Controller of events occurring within the Media Gateway.
+
+     TerminationID
+      Notify(TerminationID,
+         ObservedEventsDescriptor,
+         [ErrorDescriptor]
+         )
+
+   The TerminationID parameter specifies the Termination issuing the
+   Notify Command.  The TerminationID shall be a fully qualified name.
+
+   The ObservedEventsDescriptor contains the RequestID and a list of
+   events that the Media Gateway detected in the order that they were
+   detected.  Each event in the list is accompanied by parameters
+   associated with the event and optionally an indication of the time
+   that the event was detected.  Procedures for sending Notify commands
+   with RequestID equal to 0 are for further study.
+
+   Notify Commands with RequestID not equal to 0 shall occur only as the
+   result of detection of an event specified by an Events descriptor
+   which is active on the Termination concerned.
+
+
+
+Groves, et al.              Standards Track                    [Page 60]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The RequestID returns the RequestID parameter of the EventsDescriptor
+   that triggered the Notify Command.  It is used to correlate the
+   notification with the request that triggered it.  The events in the
+   list must have been requested via the triggering EventsDescriptor or
+   embedded events descriptor unless the RequestID is 0 (which is for
+   further study).
+
+   The ErrorDescriptor may be sent in the Notify Command as a result of
+   Error 518 - Event buffer full.
+
+7.2.8 ServiceChange
+
+   The ServiceChange Command allows the Media Gateway to notify the
+   Media Gateway Controller that a Termination or group of Terminations
+   is about to be taken out of service or has just been returned to
+   service.  The Media Gateway Controller may indicate that
+   Termination(s) shall be taken out of or returned to service.   The
+   Media Gateway may notify the MGC that the capability of a Termination
+   has changed.  It also allows a MGC to hand over control of a MG to
+   another MGC.
+
+   TerminationID,
+
+     [ServiceChangeDescriptor]
+      ServiceChange ( TerminationID,
+         ServiceChangeDescriptor
+         )
+
+   The TerminationID parameter specifies the Termination(s) that are
+   taken out of or returned to service.  Wildcarding of Termination
+   names is permitted, with the exception that the CHOOSE mechanism
+   shall not be used.  Use of the "Root" TerminationID indicates a
+   ServiceChange affecting the entire Media Gateway.
+
+   The ServiceChangeDescriptor contains the following parameters as
+   required:
+
+   -  ServiceChangeMethod
+   -  ServiceChangeReason
+   -  ServiceChangeDelay
+   -  ServiceChangeAddress
+   -  ServiceChangeProfile
+   -  ServiceChangeVersion
+   -  ServiceChangeMgcId
+   -  TimeStamp
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 61]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The ServiceChangeMethod parameter specifies the type of ServiceChange
+   that will or has occurred:
+
+   1) Graceful - indicates that the specified Terminations will be taken
+      out of service after the specified ServiceChangeDelay; established
+      connections are not yet affected, but the Media Gateway Controller
+      should refrain from establishing new connections and should
+      attempt to gracefully tear down existing connections on the
+      Termination(s) affected by the serviceChange command.  The MG
+      should set Termination serviceState at the expiry of
+      ServiceChangeDelay or the removal of the Termination from an
+      active Context (whichever is first), to "out of service".
+
+   2) Forced - indicates that the specified Terminations were taken
+      abruptly out of service and any established connections associated
+      with them may be lost.  For non-Root terminations, the MGC is
+      responsible for cleaning up the Context (if any) with which the
+      failed Termination is associated.  At a minimum the Termination
+      shall be subtracted from the Context.  The Termination
+      serviceState should be "out of service".  For the root
+      termination, the MGC can assume that all connections are lost on
+      the MG and thus can consider that all the terminations have been
+      subtracted.
+
+   3) Restart - indicates that service will be restored on the specified
+      Terminations after expiration of the ServiceChangeDelay.  The
+      serviceState should be set to "inService" upon expiry of
+      ServiceChangeDelay.
+
+   4) Disconnected - always applied with the Root TerminationID,
+      indicates that the MG lost communication with the MGC, but it was
+      subsequently restored to the same MGC (possibly after trying other
+      MGCs on a pre-provisioned list).  Since MG state may have changed,
+      the MGC may wish to use the Audit command to resynchronize its
+      state with the MG's.
+
+   5) Handoff - sent from the MGC to the MG, this reason indicates that
+      the MGC is going out of service and a new MGC association must be
+      established.  Sent from the MG to the MGC, this indicates that the
+      MG is attempting to establish a new association in accordance with
+      a Handoff received from the MGC with which it was previously
+      associated.
+
+   6) Failover - sent from MG to MGC to indicate the primary MG is out
+      of service and a secondary MG is taking over.  This serviceChange
+      method is also sent from the MG to the MGC when the MG detects
+      that MGC has failed.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 62]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   7) Another value whose meaning is mutually understood between the MG
+      and the MGC.
+
+   The ServiceChangeReason parameter specifies the reason why the
+   ServiceChange has or will occur.  It consists of an alphanumeric
+   token (IANA registered) and, optionally, an explanatory string.
+
+   The optional ServiceChangeAddress parameter specifies the address
+   (e.g., IP port number for IP networks) to be used for subsequent
+   communications.  It can be specified in the input parameter
+   descriptor or the returned result descriptor.  ServiceChangeAddress
+   and ServiceChangeMgcId parameters must not both be present in the
+   ServiceChangeDescriptor or the ServiceChangeResultDescriptor.  The
+   ServiceChangeAddress provides an address to be used within the
+   Context of the association currently being negotiated, while the
+   ServiceChangeMgcId provides an alternate address where the MG should
+   seek to establish another association.  Note that the use of
+   ServiceChangeAddress is not encouraged.  MGCs and MGs must be able to
+   cope with the ServiceChangeAddress being either a full address or
+   just a port number in the case of TCP transports.
+
+   The optional ServiceChangeDelay parameter is expressed in seconds.
+   If the delay is absent or set to zero, the delay value should be
+   considered to be null.  In the case of a "graceful"
+   ServiceChangeMethod, a null delay indicates that the Media Gateway
+   Controller should wait for the natural removal of existing
+   connections and should not establish new connections.  For "graceful"
+   only, a null delay means the MG must not set serviceState "out of
+   service" until the Termination is in the null Context.
+
+   The optional ServiceChangeProfile parameter specifies the Profile (if
+   any) of the protocol supported.  The ServiceChangeProfile includes
+   the version of the profile supported.
+
+   The optional ServiceChangeVersion parameter contains the protocol
+   version and is used if protocol version negotiation occurs (see
+   11.3).
+
+   The optional TimeStamp parameter specifies the actual time as kept by
+   the sender.  As such, it is not necessarily absolute time according
+   to, for example, a local time zone - it merely establishes an
+   arbitrary starting time against which all future timestamps
+   transmitted by a sender during this association shall be compared.
+   It can be used by the responder to determine how its notion of time
+   differs from that of its correspondent.  TimeStamp is sent with a
+   precision of hundredths of a second.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 63]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The optional Extension parameter may contain any value whose meaning
+   is mutually understood by the MG and MGC.
+
+   A ServiceChange Command specifying the "Root" for the TerminationID
+   and ServiceChangeMethod equal to Restart is a registration command by
+   which a Media Gateway announces its existence to the Media Gateway
+   Controller.  The Media Gateway may also announce a registration
+   command by specifying the "Root" for the TerminationID and
+   ServiceChangeMethod equal to Failover when the MG detects MGC
+   failures.  The Media Gateway is expected to be provisioned with the
+   name of one primary and optionally some number of alternate Media
+   Gateway Controllers.  Acknowledgement of the ServiceChange Command
+   completes the registration process, except when the MGC has returned
+   an alternative ServiceChangeMgcId as described in the following
+   paragraph.  The MG may specify the transport ServiceChangeAddress to
+   be used by the MGC for sending messages in the ServiceChangeAddress
+   parameter in the input ServiceChangeDescriptor.  The MG may specify
+   an address in the ServiceChangeAddress parameter of the ServiceChange
+   request, and the MGC may also do so in the ServiceChange reply.  In
+   either case, the recipient must use the supplied address as the
+   destination for all subsequent transaction requests within the
+   association.  At the same time, as indicated in clause 9, transaction
+   replies and pending indications must be sent to the address from
+   which the corresponding requests originated.  This must be done even
+   if it implies extra messaging because commands and responses cannot
+   be packed together.  The TimeStamp parameter shall be sent with a
+   registration command and its response.
+
+   The Media Gateway Controller may return a ServiceChangeMgcId
+   parameter that describes the Media Gateway Controller that should
+   preferably be contacted for further service by the Media Gateway.  In
+   this case the Media Gateway shall reissue the ServiceChange command
+   to the new Media Gateway Controller.  The MGC specified in a
+   ServiceChangeMgcId, if provided, shall be contacted before any
+   further alternate MGCs.  On a HandOff message from MGC to MG, the
+   ServiceChangeMgcId is the new MGC that will take over from the
+   current MGC.
+
+   The return from ServiceChange is empty except when the Root
+   terminationID is used.  In that case it includes the following
+   parameters as required:
+
+   -  ServiceChangeAddress, if the responding MGC wishes to specify a
+      new destination for messages from the MG for the remainder of the
+      association;
+
+   -  ServiceChangeMgcId, if the responding MGC does not wish to sustain
+      an association with the MG;
+
+
+
+Groves, et al.              Standards Track                    [Page 64]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   -  ServiceChangeProfile, if the responder wishes to negotiate the
+      profile to be used for the association;
+
+   -  ServiceChangeVersion, if the responder wishes to negotiate the
+      version of the protocol to be used for the association.
+
+   The following ServiceChangeReasons are defined.  This list may be
+   extended by an IANA registration as outlined in 13.3.
+
+      900 Service Restored
+      901 Cold Boot
+      902 Warm Boot
+      903 MGC Directed Change
+      904 Termination malfunctioning
+      905 Termination taken out of service
+      906 Loss of lower layer connectivity (e.g., downstream sync)
+      907 Transmission Failure
+      908 MG Impending Failure
+      909 MGC Impending Failure
+      910 Media Capability Failure
+      911 Modem Capability Failure
+      912 Mux Capability Failure
+      913 Signal Capability Failure
+      914 Event Capability Failure
+      915 State Loss
+
+7.2.9 Manipulating and Auditing Context Attributes
+
+   The commands of the protocol as discussed in the preceding subclauses
+   apply to Terminations.  This subclause specifies how Contexts are
+   manipulated and audited.
+
+   Commands are grouped into actions (see clause 8).  An action applies
+   to one Context.  In addition to commands, an action may contain
+   Context manipulation and auditing instructions.
+
+   An action request sent to a MG may include a request to audit
+   attributes of a Context.  An action may also include a request to
+   change the attributes of a Context.
+
+   The Context properties that may be included in an action reply are
+   used to return information to a MGC.  This can be information
+   requested by an audit of Context attributes or details of the effect
+   of manipulation of a Context.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 65]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   If a MG receives an action which contains both a request to audit
+   context attributes and a request to manipulate those attributes, the
+   response SHALL include the values of the attributes after processing
+   the manipulation request.
+
+7.2.10   Generic Command Syntax
+
+   The protocol can be encoded in a binary format or in a text format.
+   MGCs should support both encoding formats.  MGs may support both
+   formats.
+
+   The protocol syntax for the binary format of the protocol is defined
+   in Annex A.  Annex C specifies the encoding of the Local and Remote
+   descriptors for use with the binary format.
+
+   A complete ABNF of the text encoding of the protocol per RFC 2234 is
+   given in Annex B.  SDP is used as the encoding of the Local and
+   Remote descriptors for use with the text encoding as modified in
+   7.1.8.
+
+7.3   Command Error Codes
+
+   Errors consist of an IANA registered error code and an explanatory
+   string.  Sending the explanatory string is optional.  Implementations
+   are encouraged to append diagnostic information to the end of the
+   string.
+
+   When a MG reports an error to a MGC, it does so in an error
+   descriptor.  An error descriptor consists of an error code and
+   optionally the associated explanatory string.
+
+   H.248.8 contains the error codes supported by Recommendations in the
+   H.248 sub-series.
+
+8  Transactions
+
+   Commands between the Media Gateway Controller and the Media Gateway
+   are grouped into Transactions, each of which is identified by a
+   TransactionID.  Transactions consist of one or more Actions.  An
+   Action consists of a non-empty series of Commands, Context property
+   modifications, or Context property audits that are limited to
+   operating within a single Context.  Consequently, each Action
+   typically specifies a ContextID.  However, there are two
+   circumstances where a specific ContextID is not provided with an
+   Action.  One is the case of modification of a Termination outside of
+   a Context.  The other is where the controller requests the gateway to
+   create a new Context.  Figure 8 is a graphic representation of the
+   Transaction, Action and Command relationships.
+
+
+
+Groves, et al.              Standards Track                    [Page 66]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      +----------------------------------------------------------+
+      | Transaction x                                            |
+      |  +----------------------------------------------------+  |
+      |  | Action 1                                           |  |
+      |  | +---------+  +---------+  +---------+  +---------+ |  |
+      |  | | Command |  | Command |  | Command |  | Command | |  |
+      |  | |    1    |  |    2    |  |    3    |  |    4    | |  |
+      |  | +---------+  +---------+  +---------+  +---------+ |  |
+      |  +----------------------------------------------------+  |
+      |                                                          |
+      |  +----------------------------------------------------+  |
+      |  | Action 2                                           |  |
+      |  | +---------+                                        |  |
+      |  | | Command |                                        |  |
+      |  | |    1    |                                        |  |
+      |  | +---------+                                        |  |
+      |  +----------------------------------------------------+  |
+      |                                                          |
+      |  +----------------------------------------------------+  |
+      |  | Action 3                                           |  |
+      |  | +---------+  +---------+  +---------+              |  |
+      |  | | Command |  | Command |  | Command |              |  |
+      |  | |    1    |  |    2    |  |    3    |              |  |
+      |  | +---------+  +---------+  +---------+              |  |
+      |  +----------------------------------------------------+  |
+      +----------------------------------------------------------+
+
+               Figure 8: Transactions, Actions and Commands
+
+   Transactions are presented as TransactionRequests.  Corresponding
+   responses to a TransactionRequest are received in a single reply,
+   possibly preceded by a number of TransactionPending messages (see
+   8.2.3).
+
+   Transactions guarantee ordered Command processing.  That is, Commands
+   within a Transaction are executed sequentially.  Ordering of
+   Transactions is NOT guaranteed - transactions may be executed in any
+   order, or simultaneously.
+
+   At the first failing Command in a Transaction, processing of the
+   remaining Commands in that Transaction stops.  If a command contains
+   a wildcarded TerminationID, the command is attempted with each of the
+   actual TerminationIDs matching the wildcard.  A response within the
+   TransactionReply is included for each matching TerminationID, even if
+   one or more instances generated an error.  If any TerminationID
+   matching a wildcard results in an error when executed, any commands
+   following the wildcarded command are not attempted.
+
+
+
+
+Groves, et al.              Standards Track                    [Page 67]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Commands may be marked as "Optional" which can override this
+   behaviour - if a command marked as Optional results in an error,
+   subsequent commands in the Transaction will be executed.  If a
+   command fails, the MG shall as far as possible restore the state that
+   existed prior to the attempted execution of the command before
+   continuing with command processing.
+
+   A TransactionReply includes the results for all of the Commands in
+   the corresponding TransactionRequest.  The TransactionReply includes
+   the return values for the Commands that were executed successfully,
+   and the Command and error descriptor for any Command that failed.
+
+   TransactionPending is used to periodically notify the receiver that a
+   Transaction has not completed yet, but is actively being processed.
+
+   Applications SHOULD implement an application level timer per
+   transaction.  Expiration of the timer should cause a retransmission
+   of the request.  Receipt of a Reply should cancel the timer.  Receipt
+   of Pending should restart the timer.
+
+8.1   Common parameters
+
+8.1.1 Transaction Identifiers
+
+   Transactions are identified by a TransactionID, which is assigned by
+   sender and is unique within the scope of the sender.  A response
+   containing an error descriptor to indicate that the TransactionID is
+   missing in a request shall use TransactionID 0 in the corresponding
+   TransactionReply.
+
+8.1.2 Context Identifiers
+
+   Contexts are identified by a ContextID, which is assigned by the
+   Media Gateway and is unique within the scope of the Media Gateway.
+   The Media Gateway Controller shall use the ContextID supplied by the
+   Media Gateway in all subsequent Transactions relating to that
+   Context.  The protocol makes reference to a distinguished value that
+   may be used by the Media Gateway Controller when referring to a
+   Termination that is currently not associated with a Context, namely
+   the null ContextID.
+
+   The CHOOSE wildcard is used to request that the Media Gateway create
+   a new Context.
+
+   The MGC may use the ALL wildcard to address all Contexts on the MG.
+   The null Context is not included when the ALL wildcard is used.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 68]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The MGC shall not use partially specified ContextIDs containing the
+   CHOOSE or ALL wildcards.
+
+8.2   Transaction Application Programming Interface
+
+   Following is an Application Programming Interface (API) describing
+   the Transactions of the protocol.  This API is shown to illustrate
+   the Transactions and their parameters and is not intended to specify
+   implementation (e.g., via use of blocking function calls).  It will
+   describe the input parameters and return values expected to be used
+   by the various Transactions of the protocol from a very high level.
+   Transaction syntax and encodings are specified in later subclauses.
+
+8.2.1 TransactionRequest
+
+   The TransactionRequest is invoked by the sender.  There is one
+   Transaction per request invocation.  A request contains one or more
+   Actions, each of which specifies its target Context and one or more
+   Commands per Context.
+
+     TransactionRequest(TransactionId {
+         ContextID {Command ... Command},
+            . . .
+         ContextID {Command ... Command } })
+
+   The TransactionID parameter must specify a value for later
+   correlation with the TransactionReply or TransactionPending response
+   from the receiver.
+
+   The ContextID parameter must specify a value to pertain to all
+   Commands that follow up to either the next specification of a
+   ContextID parameter or the end of the TransactionRequest, whichever
+   comes first.
+
+   The Command parameter represents one of the Commands mentioned in 7.2
+   (Command Application Programming Interface).
+
+8.2.2 TransactionReply
+
+   The TransactionReply is invoked by the receiver.  There is one reply
+   invocation per transaction.  A reply contains one or more Actions,
+   each of which must specify its target Context and one or more
+   Responses per Context.  The TransactionReply is invoked by the
+   responder when it has processed the TransactionRequest.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 69]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   A TransactionRequest has been processed:
+
+   -  when all actions in that TransactionRequest have been processed;
+      or
+
+   -  when an error is encountered in processing that
+      TransactionRequest, except when the error is in an optional
+      command.
+
+   A command has been processed when all descriptors in that command
+   have been processed.
+
+   A SignalsDescriptor is considered to have been processed when it has
+   been established that the descriptor is syntactically valid, the
+   requested signals are supported and they have been queued to be
+   applied.
+
+   An EventsDescriptor or EventBufferDescriptor is considered to have
+   been processed when it has been established that the descriptor is
+   syntactically valid, the requested events can be observed, any
+   embedded signals can be generated, any embedded events can be
+   detected, and the MG has been brought into a state in which the
+   events will be detected.
+
+     TransactionReply(TransactionID {
+         ContextID { Response ... Response },
+            . . .
+         ContextID { Response ... Response } })
+
+   The TransactionID parameter must be the same as that of the
+   corresponding TransactionRequest.
+
+   The ContextID parameter must specify a value to pertain to all
+   Responses for the action.  The ContextID may be specific, all or
+   null.
+
+   Each of the Response parameters represents a return value as
+   mentioned in 7.2, or an error descriptor if the command execution
+   encountered an error.  Commands after the point of failure are not
+   processed and, therefore, Responses are not issued for them.
+
+   An exception to this occurs if a command has been marked as optional
+   in the Transaction request.  If the optional command generates an
+   error, the transaction still continues to execute, so the Reply
+   would, in this case, have Responses after an Error.
+
+   Section 7.1.19 Error Descriptor specifies the generation of error
+   descriptors.  The text below discusses several individual cases.
+
+
+
+Groves, et al.              Standards Track                    [Page 70]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   If the receiver encounters an error in processing a ContextID, the
+   requested Action response will consist of the Context ID and a single
+   error descriptor, 422 - Syntax Error in Action.
+
+   If the receiver encounters an error such that it cannot determine a
+   legal Action, it will return a TransactionReply consisting of the
+   TransactionID and a single error descriptor, 422 - Syntax Error in
+   Action.  If the end of an action cannot be reliably determined but
+   one or more commands can be parsed, it will process them and then
+   send 422 - Syntax Error in Action as the last action for the
+   transaction.  If the receiver encounters an error such that is cannot
+   determine a legal Transaction, it will return a TransactionReply with
+   a null TransactionID and a single error descriptor (403 - Syntax
+   Error in TransactionRequest).
+
+   If the end of a transaction cannot be reliably determined and one or
+   more Actions can be parsed, it will process them and then return 403
+   - Syntax Error in Transaction as the last action reply for the
+   transaction.  If no Actions can be parsed, it will return 403 -
+   Syntax Error in TransactionRequest as the only reply.
+
+   If the terminationID cannot be reliably determined, it will send 442
+   - Syntax Error in Command as the action reply.
+
+   If the end of a command cannot be reliably determined, it will return
+   442 - Syntax Error in Command as the reply to the last action it can
+   parse.
+
+8.2.3 TransactionPending
+
+   The receiver invokes the TransactionPending.  A TransactionPending
+   indicates that the Transaction is actively being processed, but has
+   not been completed.  It is used to prevent the sender from assuming
+   the TransactionRequest was lost where the Transaction will take some
+   time to complete.
+
+     TransactionPending(TransactionID { } )
+
+   The TransactionID parameter must be the same as that of the
+   corresponding TransactionRequest.  A property of root
+   (normalMGExecutionTime) is settable by the MGC to indicate the
+   interval within which the MGC expects a response to any transaction
+   from the MG.  Another property (normalMGCExecutionTime) is settable
+   by the MGC to indicate the interval within which the MG should expect
+   a response to any transaction from the MGC.  Senders may receive more
+   than one TransactionPending for a command.  If a duplicate request is
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 71]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   received when pending, the responder may send a duplicate pending
+   immediately, or continue waiting for its timer to trigger another
+   TransactionPending.
+
+8.3   Messages
+
+   Multiple Transactions can be concatenated into a Message.  Messages
+   have a header, which includes the identity of the sender.  The
+   Message Identifier (MID) of a message is set to a provisioned name
+   (e.g., domain address/domain name/device name) of the entity
+   transmitting the message.  Domain name is a suggested default.  An
+   H.248.1 entity (MG/MGC) must consistently use the same MID in all
+   messages it originates for the duration of control association with
+   the peer (MGC/MG).
+
+   Every Message contains a Version Number identifying the version of
+   the protocol the message conforms to.  Versions consist of one or two
+   digits, beginning with version 1 for the present version of the
+   protocol.
+
+   The transactions in a message are treated independently.  There is no
+   order implied; there is no application or protocol acknowledgement of
+   a message.  A message is essentially a transport mechanism.  For
+   example, message X containing transaction requests A, B, and C may be
+   responded to with message Y containing replies to A and C and message
+   Z containing the reply to B.  Likewise, message L containing request
+   D and message M containing request E may be responded to with message
+   N containing replies to both D and E.
+
+9  Transport
+
+   The transport mechanism for the protocol should allow the reliable
+   transport of transactions between a MGC and MG.  The transport shall
+   remain independent of what particular commands are being sent and
+   shall be applicable to all application states.  There are several
+   transports defined for the protocol, which are defined in Annexes to
+   this RFC and other Recommendations of the H.248
+   sub-series.  Additional Transports may be defined as additional
+
+   Recommendations of the H.248 sub-series.  For transport of the
+   protocol over IP, MGCs shall implement both TCP and UDP/ALF, a MG
+   shall implement TCP or UDP/ALF or both.
+
+   The MG is provisioned with a name or address (such as DNS name or IP
+   address) of a primary and zero or more secondary MGCs (see 7.2.8)
+   that is the address the MG uses to send messages to the MGC.  If TCP
+   or UDP is used as the protocol transport and the port to which the
+   initial ServiceChange request is to be sent is not otherwise known,
+
+
+
+Groves, et al.              Standards Track                    [Page 72]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   that request should be sent to the default port number for the
+   protocol.  This port number is 2944 for text-encoded operation or
+   2945 for binary-encoded operation, for either UDP or TCP.  The MGC
+   receives the message containing the ServiceChange request from the MG
+   and can determine the MG's address from it.  As described in 7.2.8,
+   either the MG or the MGC may supply an address in the
+   ServiceChangeAddress parameter to which subsequent transaction
+   requests must be addressed, but responses (including the response to
+   the initial ServiceChange request) must always be sent back to the
+   address which was the source of the corresponding request.  For
+   example, in IP networks, this is the source address in the IP header
+   and the source port number in the TCP/UDP/SCTP header.
+
+9.1   Ordering of Commands
+
+   This RFC does not mandate that the underlying transport protocol
+   guarantees the sequencing of transactions sent to an entity.  This
+   property tends to maximize the timeliness of actions, but it has a
+   few drawbacks.  For example:
+
+   -  Notify commands may be delayed and arrive at the MGC after the
+      transmission of a new command changing the EventsDescriptor.
+
+   -  If a new command is transmitted before a previous one is
+      acknowledged, there is no guarantee that prior command will be
+      executed before the new one.
+
+   Media Gateway Controllers that want to guarantee consistent operation
+   of the Media Gateway may use the following rules.  These rules are
+   with respect to commands that are in different transactions.
+   Commands that are in the same transaction are executed in order (see
+   clause 8).
+
+   1) When a Media Gateway handles several Terminations, commands
+      pertaining to the different Terminations may be sent in parallel,
+      for example following a model where each Termination (or group of
+      Terminations) is controlled by its own process or its own thread.
+
+   2) On a Termination, there should normally be at most one outstanding
+      command (Add or Modify or Move), unless the outstanding commands
+      are in the same transaction.  However, a Subtract command may be
+      issued at any time.  In consequence, a Media Gateway may sometimes
+      receive a Modify command that applies to a previously subtracted
+      Termination.  Such commands should be ignored, and an error code
+      should be returned.
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 73]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   3) For transports that do not guarantee in-sequence delivery of
+      messages (i.e., UDP), there should normally be on a given
+      Termination at most one outstanding Notify command at any time.
+
+   4) In some cases, an implicitly or explicitly wildcarded Subtract
+      command that applies to a group of Terminations may step in front
+      of a pending Add command.  The Media Gateway Controller should
+      individually delete all Terminations for which an Add command was
+      pending at the time of the global Subtract command.  Also, new Add
+      commands for Terminations named by the wildcarding (or implied in
+      a Multiplex descriptor) should not be sent until the wildcarded
+      Subtract command is acknowledged.
+
+   5) AuditValue and AuditCapability are not subject to any sequencing.
+
+   6) ServiceChange shall always be the first command sent by a MG as
+      defined by the restart procedure.  Any other command or response
+      must be delivered after this ServiceChange command.
+
+   These rules do not affect the command responder, which should always
+   respond to commands.
+
+9.2   Protection against Restart Avalanche
+
+   In the event that a large number of Media Gateways are powered on
+   simultaneously and they were to all initiate a ServiceChange
+   transaction, the Media Gateway Controller would very likely be
+   swamped, leading to message losses and network congestion during the
+   critical period of service restoration.  In order to prevent such
+   avalanches, the following behaviour is suggested:
+
+   1) When a Media Gateway is powered on, it should initiate a restart
+      timer to a random value, uniformly distributed between 0 and a
+      maximum waiting delay (MWD).  Care should be taken to avoid
+      synchronicity of the random number generation between multiple
+      Media Gateways that would use the same algorithm.
+
+   2) The Media Gateway should then wait for either the end of this
+      timer or the detection of a local user activity, such as for
+      example an off-hook transition on a residential Media Gateway.
+
+   3) When the timer elapses, or when an activity is detected, the Media
+      Gateway should initiate the restart procedure.
+
+   The restart procedure simply requires the MG to guarantee that the
+   first message that the Media Gateway Controller sees from this MG is
+   a ServiceChange message informing the Media Gateway Controller about
+   the restart.
+
+
+
+Groves, et al.              Standards Track                    [Page 74]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+     NOTE - The value of MWD is a configuration parameter that depends
+     on the type of the Media Gateway.  The following reasoning may be
+     used to determine the value of this delay on residential gateways.
+
+   Media Gateway Controllers are typically dimensioned to handle the
+   peak hour traffic load, during which, in average, 10% of the lines
+   will be busy, placing calls whose average duration is typically 3
+   minutes.  The processing of a call typically involves 5 to 6 Media
+   Gateway Controller transactions between each Media Gateway and the
+   Media Gateway Controller.  This simple calculation shows that the
+   Media Gateway Controller is expected to handle 5 to 6 transactions
+   for each Termination, every 30 minutes on average, or, to put it
+   otherwise, about one transaction per Termination every 5 to 6 minutes
+   on average.  This suggests that a reasonable value of MWD for a
+   residential gateway would be 10 to 12 minutes.  In the absence of
+   explicit configuration, residential gateways should adopt a value of
+   600 seconds for MWD.
+
+   The same reasoning suggests that the value of MWD should be much
+   shorter for trunking gateways or for business gateways, because they
+   handle a large number of Terminations, and also because the usage
+   rate of these Terminations is much higher than 10% during the peak
+   busy hour, a typical value being 60%.  These Terminations, during the
+   peak hour, are this expected to contribute about one transaction per
+   minute to the Media Gateway Controller load.  A reasonable algorithm
+   is to make the value of MWD per "trunk" Termination six times shorter
+   than the MWD per residential gateway, and also inversely proportional
+   to the number of Terminations that are being restarted.  For example
+   MWD should be set to 2.5 seconds for a gateway that handles a T1
+   line, or to 60 milliseconds for a gateway that handles a T3 line.
+
+10 Security Considerations
+
+   This clause covers security when using the protocol in an IP
+   environment.
+
+10.1  Protection of Protocol Connections
+
+   A security mechanism is clearly needed to prevent unauthorized
+   entities from using the protocol defined in this RFC for setting up
+   unauthorized calls or interfering with authorized calls.  The
+   security mechanism for the protocol when transported over IP networks
+   is IPsec [RFC 2401 to RFC 2411].
+
+   The AH header [RFC 2402] affords data origin authentication,
+   connectionless integrity and optional anti-replay protection of
+   messages passed between the MG and the MGC.  The ESP header [RFC
+   2406] provides confidentiality of messages, if desired.  For
+
+
+
+Groves, et al.              Standards Track                    [Page 75]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   instance, the ESP encryption service should be requested if the
+   session descriptions are used to carry session keys, as defined in
+   SDP.
+
+   Implementations of the protocol defined in this RFC employing the ESP
+   header SHALL comply with section 5 of [RFC 2406], which defines a
+   minimum set of algorithms for integrity checking and encryption.
+   Similarly, implementations employing the AH header SHALL comply with
+   section 5 of [RFC 2402], which defines a minimum set of algorithms
+   for integrity checking using manual keys.
+
+   Implementations SHOULD use IKE [RFC 2409] to permit more robust
+   keying options.  Implementations employing IKE SHOULD support
+   authentication with RSA signatures and RSA public key encryption.
+
+10.2  Interim AH scheme
+
+   Implementation of IPsec requires that the AH or ESP header be
+   inserted immediately after the IP header.  This cannot be easily done
+   at the application level.  Therefore, this presents a deployment
+   problem for the protocol defined in this RFC where the underlying
+   network implementation does not support IPsec.
+
+   As an interim solution, an optional AH header is defined within the
+   H.248.1 protocol header.  The header fields are exactly those of the
+   SPI, SEQUENCE NUMBER and DATA fields as defined in [RFC 2402].  The
+   semantics of the header fields are the same as the "transport mode"
+   of [RFC 2402], except for the calculation of the Integrity Check
+   Value (ICV).  In IPsec, the ICV is calculated over the entire IP
+   packet including the IP header.  This prevents spoofing of the IP
+   addresses.  To retain the same functionality, the ICV calculation
+   should be performed across all the transactions (concatenated) in the
+   message prepended by a synthesized IP header consisting of a 32-bit
+   source IP address, a 32-bit destination address and a 16-bit UDP
+   destination port encoded as 20 hex digits.  When the interim AH
+   mechanism is employed when TCP is the transport Layer, the UDP Port
+   above becomes the TCP port, and all other operations are the same.
+
+   Implementations of the H.248.1 protocol SHALL implement IPsec where
+   the underlying operating system and the transport network supports
+   IPsec.  Implementations of the protocol using IPv4 SHALL implement
+   the interim AH scheme.  However, this interim scheme SHALL NOT be
+   used when the underlying network layer supports IPsec.  IPv6
+   implementations are assumed to support IPsec and SHALL NOT use the
+   interim AH scheme.
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 76]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   All implementations of the interim AH mechanism SHALL comply with
+   section 5 of RFC 2402 which defines a minimum set of algorithms for
+   integrity checking using manual keys.
+
+   The interim AH interim scheme does not provide protection against
+   eavesdropping, thus forbidding third parties from monitoring the
+   connections set up by a given Termination.  Also, it does not provide
+   protection against replay attacks.  These procedures do not
+   necessarily protect against denial of service attacks by misbehaving
+   MGs or misbehaving MGCs.  However, they will provide an
+   identification of these misbehaving entities, which should then be
+   deprived of their authorization through maintenance procedures.
+
+10.3  Protection of Media Connections
+
+   The protocol allows the MGC to provide MGs with "session keys" that
+   can be used to encrypt the audio messages, protecting against
+   eavesdropping.
+
+   A specific problem of packet networks is "uncontrolled barge-in".
+   This attack can be performed by directing media packets to the IP
+   address and UDP port used by a connection.  If no protection is
+   implemented, the packets must be decompressed and the signals must be
+   played on the "line side".
+
+   A basic protection against this attack is to only accept packets from
+   known sources, checking for example that the IP source address and
+   UDP source port match the values announced in the Remote descriptor.
+   This has two inconveniences: it slows down connection establishment
+   and it can be fooled by source spoofing:
+
+   -  To enable the address-based protection, the MGC must obtain the
+      remote session description of the egress MG and pass it to the
+      ingress MG.  This requires at least one network round trip, and
+      leaves us with a dilemma: either allow the call to proceed without
+      waiting for the round trip to complete, and risk for example,
+      "clipping" a remote announcement, or wait for the full round trip
+      and settle for slower call-set up procedures.
+
+   -  Source spoofing is only effective if the attacker can obtain valid
+      pairs of source destination addresses and ports, for example by
+      listening to a fraction of the traffic.  To fight source spoofing,
+      one could try to control all access points to the network.  But
+      this is in practice very hard to achieve.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 77]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   An alternative to checking the source address is to encrypt and
+   authenticate the packets, using a secret key that is conveyed during
+   the call set-up procedure.  This will not slow down the call set-up,
+   and provides strong protection against address spoofing.
+
+11 MG-MGC Control Interface
+
+   The control association between MG and MGC is initiated at MG cold
+   start, and announced by a ServiceChange message, but can be changed
+   by subsequent events, such as failures or manual service events.
+   While the protocol does not have an explicit mechanism to support
+   multiple MGCs controlling a physical MG, it has been designed to
+   support the multiple logical MG (within a single physical MG) that
+   can be associated with different MGCs.
+
+11.1  Multiple Virtual MGs
+
+   A physical Media Gateway may be partitioned into one or more Virtual
+   MGs.  A virtual MG consists of a set of statically partitioned
+   physical Terminations and/or sets of ephemeral Terminations.  A
+   physical Termination is controlled by one MGC.  The model does not
+   require that other resources be statically allocated, just
+   Terminations.  The mechanism for allocating Terminations to virtual
+   MGs is a management method outside the scope of the protocol.  Each
+   of the virtual MGs appears to the MGC as a complete MG client.
+
+   A physical MG may have only one network interface, which must be
+   shared across virtual MGs.  In such a case, the packet/cell side
+   Termination is shared.  It should be noted however, that in use, such
+   interfaces require an ephemeral instance of the Termination to be
+   created per flow, and thus sharing the Termination is
+   straightforward.  This mechanism does lead to a complication, namely
+   that the MG must always know which of its controlling MGCs should be
+   notified if an event occurs on the interface.
+
+   In normal operation, the Virtual MG will be instructed by the MGC to
+   create network flows (if it is the originating side), or to expect
+   flow requests (if it is the terminating side), and no confusion will
+   arise.  However, if an unexpected event occurs, the Virtual MG must
+   know what to do with respect to the physical resources it is
+   controlling.
+
+   If recovering from the event requires manipulation of a physical
+   interface's state, only one MGC should do so.  These issues are
+   resolved by allowing any of the MGCs to create EventsDescriptors to
+   be notified of such events, but only one MGC can have read/write
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 78]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   access to the physical interface properties; all other MGCs have
+   read-only access.  The management mechanism is used to designate
+   which MGC has read/write capability, and is designated the Master
+   MGC.
+
+   Each virtual MG has its own Root Termination.  In most cases the
+   values for the properties of the Root Termination are independently
+   settable by each MGC.  Where there can only be one value, the
+   parameter is read-only to all but the Master MGC.
+
+   ServiceChange may only be applied to a Termination or set of
+   Terminations partitioned to the Virtual MG or created (in the case of
+   ephemeral Terminations) by that Virtual MG.
+
+11.2  Cold start
+
+   A MG is pre-provisioned by a management mechanism outside the scope
+   of this protocol with a primary and (optionally) an ordered list of
+   secondary MGCs.  Upon a cold start of the MG, it will issue a
+   ServiceChange command with a "Restart" method, on the Root
+   Termination to its primary MGC.  If the MGC accepts the MG, it sends
+   a Transaction Reply not including a ServiceChangeMgcId parameter.  If
+   the MGC does not accept the MG's registration, it sends a Transaction
+   Reply, providing the address of an alternate MGC to be contacted by
+   including a ServiceChangeMgcId parameter.
+
+   If the MG receives a Transaction Reply that includes a
+   ServiceChangeMgcId parameter, it sends a ServiceChange to the MGC
+   specified in the ServiceChangeMgcId.  It continues this process until
+   it gets a controlling MGC to accept its registration, or it fails to
+   get a reply.  Upon failure to obtain a reply, either from the primary
+   MGC, or a designated successor, the MG tries its pre-provisioned
+   secondary MGCs, in order.  If the MG is unable to establish a control
+   relationship with any MGC, it shall wait a random amount of time as
+   described in 9.2 and then start contacting its primary, and if
+   necessary, its secondary MGCs again.
+
+   It is possible that the reply to a ServiceChange with Restart will be
+   lost, and a command will be received by the MG prior to the receipt
+   of the ServiceChange response.  The MG shall issue Error 505 -
+   Command Received before a ServiceChange Reply has been received.
+
+11.3  Negotiation of protocol version
+
+   The first ServiceChange command from a MG shall contain the version
+   number of the protocol supported by the MG in the
+   ServiceChangeVersion parameter.  Upon receiving such a message, if
+   the MGC supports only a lower version, then the MGC shall send a
+
+
+
+Groves, et al.              Standards Track                    [Page 79]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   ServiceChangeReply with the lower version and thereafter all the
+   messages between MG and MGC shall conform to the lower version of the
+   protocol.  If the MG is unable to comply and it has established a
+   transport connection to the MGC, it should close that connection.  In
+   any event, it should reject all subsequent requests from the MGC with
+   error 406 - Version Not Supported.
+
+   If the MGC supports a higher version than the MG but is able to
+   support the lower version proposed by the MG, it shall send a
+   ServiceChangeReply with the lower version and thereafter all the
+   messages between MG and MGC shall conform to the lower version of the
+   protocol.  If the MGC is unable to comply, it shall reject the
+   association, with error 406 - Version Not Supported.
+
+   Protocol version negotiation may also occur at "handoff" and
+   "failover" ServiceChanges.
+
+   When extending the protocol with new versions, the following rules
+   should be followed:
+
+   1) Existing protocol elements, i.e., procedures, parameters,
+      descriptor, property, values, should not be changed unless a
+      protocol error needs to be corrected or it becomes necessary to
+      change the operation of the service that is being supported by the
+      protocol.
+
+   2) The semantics of a command, a parameter, a descriptor, a property,
+      or a value should not be changed.
+
+   3) Established rules for formatting and encoding messages and
+      parameters should not be modified.
+
+   4) When information elements are found to be obsolete they can be
+      marked as not used.  However, the identifier for that information
+      element will be marked as reserved.  In that way it can not be
+      used in future versions.
+
+11.4  Failure of a MG
+
+   If a MG fails, but is capable of sending a message to the MGC, it
+   sends a ServiceChange with an appropriate method (graceful or forced)
+   and specifies the Root TerminationID.  When it returns to service, it
+   sends a ServiceChange with a "Restart" method.
+
+   Allowing the MGC to send duplicate messages to both MGs accommodates
+   pairs of MGs that are capable of redundant failover of one of the
+   MGs.  Only the Working MG shall accept or reject transactions.  Upon
+   failover, the primary MG sends a ServiceChange command with a
+
+
+
+Groves, et al.              Standards Track                    [Page 80]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   "Failover" method and a "MG Impending Failure" reason.  The MGC then
+   uses the secondary MG as the active MG.  When the error condition is
+   repaired, the Working MG can send a "ServiceChange" with a "Restart"
+   method.
+
+     Note: Redundant failover MGs require a reliable transport, because
+     the protocol provides no means for a secondary MG running ALF to
+     acknowledge messages sent from the MGC.
+
+11.5  Failure of an MGC
+
+   If the MG detects a failure of its controlling MGC, it attempts to
+   contact the next MGC on its pre-provisioned list.  It starts its
+   attempts at the beginning (primary MGC), unless that was the MGC that
+   failed, in which case it starts at its first secondary MGC.  It sends
+   a ServiceChange message with a "Failover" method and a "MGC Impending
+   Failure" reason.  If the MG is unable to establish a control
+   relationship with any MGC, it shall wait a random amount of time as
+   described in section 9.2 and then start again contacting its primary,
+   and (if necessary) its secondary MGCs.  When contacting its
+   previously controlling MGC, the MG sends the ServiceChange message
+   with "Disconnected" method.
+
+   In partial failure, or for manual maintenance reasons, an MGC may
+   wish to direct its controlled MGs to use a different MGC.  To do so,
+   it sends a ServiceChange method to the MG with a "HandOff" method,
+   and its designated replacement in ServiceChangeMgcId.  If "HandOff"
+   is supported, the MG shall send a ServiceChange message with a
+   "Handoff" method and a "MGC directed change" reason to the designated
+   MGC.  If it fails to get a reply from the designated MGC, the MG
+   shall behave as if its MGC failed, and start contacting secondary
+   MGCs as specified in the previous paragraph.  If the MG is unable to
+   establish a control relationship with any MGC, it shall wait a random
+   amount of time as described in 9.2 and then start contacting its
+   primary, and if necessary, its secondary MGCs again.
+
+   No recommendation is made on how the MGCs involved in the Handoff
+   maintain state information; this is considered to be out of scope of
+   this RFC.  The MGC and MG may take the following steps when Handoff
+   occurs.  When the MGC initiates a HandOff, the handover should be
+   transparent to Operations on the Media Gateway.  Transactions can be
+   executed in any order, and could be in progress when the
+   ServiceChange is executed.  Accordingly, commands in progress
+   continue and replies to all commands from the original MGC must be
+   sent to the transport address from which they were sent.  If the
+   service relationship with the sending MGC has ended, the replies
+   should be discarded.  The MG may receive outstanding transaction
+   replies from the new MGC.  No new messages shall be sent to the new
+
+
+
+Groves, et al.              Standards Track                    [Page 81]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   MGC until the control association is established.  Repeated
+   transaction requests shall be directed to the new MGC.  The MG shall
+   maintain state on all Terminations and Contexts.
+
+   It is possible that the MGC could be implemented in such a way that a
+   failed MGC is replaced by a working MGC where the identity of the new
+   MGC is the same as the failed one.  In such a case,
+   ServiceChangeMgcId would be specified with the previous value and the
+   MG shall behave as if the value was changed, and send a ServiceChange
+   message, as above.
+
+   Pairs of MGCs that are capable of redundant failover can notify the
+   controlled MGs of the failover by the above mechanism.
+
+12 Package definition
+
+   The primary mechanism for extension is by means of Packages.
+   Packages define additional Properties, Events, Signals and Statistics
+   that may occur on Terminations.
+
+   Packages defined by IETF will appear in separate RFCs.
+
+   Packages defined by ITU-T may appear in the relevant Recommendations
+   (e.g., as Recommendations of the H.248 sub-series).
+
+   1) A public document or a standard forum document, which can be
+      referenced as the document that describes the package following
+      the guideline above, should be specified.
+
+   2) The document shall specify the version of the Package that it
+      describes.
+
+   3) The document should be available on a public web server and should
+      have a stable URL.  The site should provide a mechanism to provide
+      comments and appropriate responses should be returned.
+
+12.1  Guidelines for defining packages
+
+   Packages define Properties, Events, Signals, and Statistics.
+
+   Packages may also define new error codes according to the guidelines
+   given in 13.2.  This is a matter of documentary convenience: the
+   package documentation is submitted to IANA in support of the error
+   code registration.  If a package is modified, it is unnecessary to
+   provide IANA with a new document reference in support of the error
+   code unless the description of the error code itself is modified.
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 82]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Names of all such defined constructs shall consist of the PackageID
+   (which uniquely identifies the package) and the ID of the item (which
+   uniquely identifies the item in that package).  In the text encoding
+   the two shall be separated by a forward slash ("/") character.
+   Example: togen/playtone is the text encoding to refer to the play
+   tone signal in the tone generation package.
+
+   A Package will contain the following sections:
+
+12.1.1   Package
+
+   Overall description of the package, specifying:
+
+      Package Name: only descriptive
+
+      PackageID: is an identifier
+
+      Description:
+
+      Version:
+
+         A new version of a package can only add additional Properties,
+         Events, Signals, Statistics and new possible values for an
+         existing parameter described in the original package.  No
+         deletions or modifications shall be allowed.  A version is an
+         integer in the range from 1 to 99.
+
+      Designed to be extended only (Optional):
+
+         This indicates that the package has been expressly designed to
+         be extended by others, not to be directly referenced.  For
+         example, the package may not have any function on its own or be
+         nonsensical on its own.  The MG SHOULD NOT publish this
+         PackageID when reporting packages.
+
+      Extends (Optional): existing package Descriptor
+
+         A package may extend an existing package.  The version of the
+         original package must be specified.  When a package extends
+         another package it shall only add additional Properties,
+         Events, Signals, Statistics and new possible values for an
+         existing parameter described in the original package.  An
+         extended package shall not redefine or overload an identifier
+         defined in the original package and packages it may have
+         extended (multiple levels of extension).  Hence, if package B
+         version 1 extends package A version 1, version 2 of B will not
+         be able to extend the A version 2 if A version 2 defines a name
+         already in B version 1.
+
+
+
+Groves, et al.              Standards Track                    [Page 83]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+12.1.2   Properties
+
+   Properties defined by the package, specifying:
+
+      Property Name: only descriptive
+
+      PropertyID: is an identifier
+
+      Description:
+
+      Type: One of:
+
+         Boolean
+
+         String: UTF-8 string
+
+         Octet String: A number of octets.  See Annex A and Annex B.3
+         for encoding
+
+         Integer: 4 byte signed integer
+
+         Double: 8 byte signed integer
+
+         Character: unicode UTF-8 encoding of a single letter.  Could be
+         more than one octet.
+
+         Enumeration: one of a list of possible unique values (see 12.3)
+
+         Sub-list: a list of several values from a list.  The type of
+         sub-list SHALL also be specified.  The type shall be chosen
+         from the types specified in this section (with the exception of
+         sub-list).  For example, Type: sub-list of enumeration.  The
+         encoding of sub-lists is specified in Annexes A and B.3.
+
+      Possible values:
+
+         A package MUST specify either a specific set of values or a
+         description of how values are determined.  A package MUST also
+         specify a default value or the default behaviour when the value
+         is omitted from its descriptor.  For example, a package may
+         specify that procedures related to the property are suspended
+         when its value is omitted.  A default value (but not
+   procedures)
+         may be specified as provisionable.
+
+      Defined in:
+
+         Which H.248.1 descriptor the property is defined in.
+
+
+
+Groves, et al.              Standards Track                    [Page 84]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         LocalControl is for stream dependent properties.
+         TerminationState is for stream independent properties.  These
+         are expected to be the most common cases, but it is possible
+         for properties to be defined in other descriptors.
+
+      Characteristics: Read/Write or both, and (optionally), global:
+
+         Indicates whether a property is read-only, or read-write, and
+         if it is global.  If Global is omitted, the property is not
+         global.  If a property is declared as global, the value of the
+         property is shared by all Terminations realizing the package.
+
+12.1.3   Events
+
+   Events defined by the package, specifying:
+
+      Event name: only descriptive
+
+      EventID: is an identifier
+
+      Description:
+
+      EventsDescriptor Parameters:
+
+         Parameters used by the MGC to configure the event, and found in
+         the EventsDescriptor.  See 12.2.
+
+      ObservedEventsDescriptor Parameters:
+
+         Parameters returned to the MGC in Notify requests and in
+         replies to command requests from the MGC that audit
+         ObservedEventsDescriptor, and found in the
+         ObservedEventsDescriptor.  See 12.2.
+
+12.1.4   Signals
+
+   Signals defined by the package, specifying:
+
+      Signal Name: only descriptive
+
+      SignalID: is an identifier.  SignalID is used in a
+      SignalsDescriptor
+
+      Description
+
+      SignalType: one of:
+
+         OO (On/Off)
+
+
+
+Groves, et al.              Standards Track                    [Page 85]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         TO (TimeOut)
+
+         BR (Brief)
+
+      NOTE - SignalType may be defined such that it is dependent on the
+      value of one or more parameters.  The package MUST specify a
+      default signal type.  If the default type is TO, the package MUST
+      specify a default duration which may be provisioned.  A default
+      duration is meaningless for BR.
+
+      Duration: in hundredths of seconds
+
+      Additional Parameters: see 12.2
+
+12.1.5   Statistics
+
+   Statistics defined by the package, specifying:
+
+      Statistic name: only descriptive
+
+      StatisticID: is an identifier
+
+      StatisticID is used in a StatisticsDescriptor
+
+      Description:
+
+      Units: unit of measure, e.g., milliseconds, packets
+
+12.1.6   Procedures
+
+   Additional guidance on the use of the package.
+
+12.2  Guidelines to defining Parameters to Events and Signals
+
+   Parameter Name: only descriptive
+
+   ParameterID: is an identifier.  The textual ParameterID of parameters
+   to Events and Signals shall not start with "EPA" and "SPA",
+   respectively.  The textual ParameterID shall also not be "ST",
+   "Stream", "SY", "SignalType", "DR", "Duration", "NC",
+   "NotifyCompletion", "KA", "Keepactive", "EB", "Embed", "DM" or
+   "DigitMap".
+
+   Type: One of:
+
+      Boolean
+
+      String: UTF-8 octet string
+
+
+
+Groves, et al.              Standards Track                    [Page 86]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      Octet String: A number of octets.  See Annex A and Annex B.3 for
+      encoding
+
+      Integer: 4-octet signed integer
+
+      Double: 8-octet signed integer
+
+      Character: unicode UTF-8 encoding of a single letter.  Could be
+      more than one octet.
+
+      Enumeration: one of a list of possible unique values (see 12.3)
+
+      Sub-list: a list of several values from a list (not supported for
+      statistics).  The type of sub-list SHALL also be specified.  The
+      type shall be chosen from the types specified in this section
+      (with the exception of sub-list).  For example, Type: sub-list of
+      enumeration.  The encoding of sub-lists is specified in Annexes A
+      and B.3.
+
+   Possible values:
+
+      A package MUST specify either a specific set of values or a
+      description of how values are determined.  A package MUST also
+      specify a default value or the default behavior when the value is
+      omitted from its descriptor.  For example, a package may specify
+      that procedures related to the parameter are suspended when it
+      value is omitted.  A default value (but not procedures) may be
+      specified as provisionable.
+
+   Description:
+
+12.3  Lists
+
+   Possible values for parameters include enumerations.  Enumerations
+   may be defined in a list.  It is recommended that the list be IANA
+   registered so that packages that extend the list can be defined
+   without concern for conflicting names.
+
+12.4  Identifiers
+
+   Identifiers in text encoding shall be strings of up to 64 characters,
+   containing no spaces, starting with an alphabetic character and
+   consisting of alphanumeric characters and/or digits, and possibly
+   including the special character underscore ("_").
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 87]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Identifiers in binary encoding are 2 octets long.
+
+   Both text and binary values shall be specified for each identifier,
+   including identifiers used as values in enumerated types.
+
+12.5  Package registration
+
+   A package can be registered with IANA for interoperability reasons.
+   See clause 13 for IANA Considerations.
+
+13 IANA Considerations
+
+13.1  Packages
+
+   The following considerations SHALL be met to register a package with
+   IANA:
+
+   1) A unique string name, unique serial number and version number is
+      registered for each package.  The string name is used with text
+      encoding.  The serial number shall be used with binary encoding.
+      Serial Numbers 0x8000 to 0xFFFF are reserved for private use.
+      Serial number 0 is reserved.
+
+   2) A contact name, email and postal addresses for that contact shall
+      be specified.  The contact information shall be updated by the
+      defining organization as necessary.
+
+   3) A reference to a document that describes the package, which should
+      be public:
+
+      The document shall specify the version of the Package that it
+      describes.
+
+      If the document is public, it should be located on a public web
+      server and should have a stable URL.  The site should provide a
+      mechanism to provide comments and appropriate responses should be
+      returned.
+
+   4) Packages registered by other than recognized standards bodies
+      shall have a minimum package name length of 8 characters.
+
+   5) All other package names are first come-first served if all other
+      conditions are met.
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 88]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+13.2  Error codes
+
+   The following considerations SHALL be met to register an error code
+   with IANA:
+
+   1) An error number and a one-line (80-character maximum) string is
+      registered for each error.
+
+   2) A complete description of the conditions under which the error is
+      detected shall be included in a publicly available document.  The
+      description shall be sufficiently clear to differentiate the error
+      from all other existing error codes.
+
+   3) The document should be available on a public web server and should
+      have a stable URL.
+
+   4) Error numbers registered by recognized standards bodies shall have
+      3- or 4-character error numbers.
+
+   5) Error numbers registered by all other organizations or individuals
+      shall have 4-character error numbers.
+
+   6) An error number shall not be redefined nor modified except by the
+      organization or individual that originally defined it, or their
+      successors or assigns.
+
+13.3  ServiceChange reasons
+
+   The following considerations SHALL be met to register service change
+   reason with IANA:
+
+   1) A one-phrase, 80-character maximum, unique reason code is
+      registered for each reason.
+
+   2) A complete description of the conditions under which the reason is
+      used is detected shall be included in a publicly available
+      document.  The description shall be sufficiently clear to
+      differentiate the reason from all other existing reasons.
+
+   3) The document should be available on a public web server and should
+      have a stable URL.
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 89]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+ANNEX A - Binary encoding of the protocol
+
+   This annex specifies the syntax of messages using the notation
+   defined in Recommendation X.680; 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 Recommendation X.690, Information
+   Technology - ASN.1 Encoding Rules: Specification of Basic Encoding
+   Rules (BER), Canonical Encoding Rules (CER) and Distinguished
+   Encoding Rules.
+
+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 to 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 one 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 wildcarding 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.
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 90]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Addressing ALL names with prefix 00000001 00011110 is done as
+   follows:
+
+      wildcarding field: 10000111
+
+      Termination ID: 00000001 00011110 xxxxxxxx.
+
+   The values of the bits labeled "x" is irrelevant and shall be ignored
+   by the receiver.
+
+   Indicating to the receiver that it 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.
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                    [Page 91]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+A.2   ASN.1 syntax specification
+
+   This subclause contains the ASN.1 specification of the H.248.1
+   protocol syntax.
+
+     NOTE 1 - In case a transport mechanism is used that employs
+     application level framing, the definition of Transaction below
+     changes.  Refer to the annex or to the Recommendation of the H.248
+     sub-series defining the transport mechanism for the definition that
+     applies in that case.
+
+     NOTE 2 - The ASN.1 specification below contains a clause defining
+     TerminationIDList as a sequence of TerminationIDs.  The length of
+     this sequence SHALL be one, except possibly when used in
+     contextAuditResult.
+
+     NOTE 3 - This syntax specification does not enforce all
+     restrictions on element inclusions and values.  Some additional
+     restrictions are stated in comments and other restrictions appear
+     in the text of this RFC.  These additional restrictions
+     are part of the protocol even though not enforced by this
+     specification.
+
+     NOTE 4 - The ASN.1 module in this Annex uses octet string types to
+     encode values for property parameter, signal parameter and event
+     parameter values and statistics.  The actual types of these values
+     vary and are specified in Annex C or the relevant package
+     definition.
+
+   A value is first BER-encoded based on its type using the table below.
+   The result of this BER-encoding is then encoded as an ASN.1 octet
+   string, "double wrapping" the value.  The format specified in Annex C
+   or the package relates to BER encoding according to the following
+   table:
+
+   Type Specified in Package   ASN.1 BER Type
+
+   String                      IA5String or UTF8String (Note 4)
+
+   Integer (4 Octet)           INTEGER
+
+   Double (8 octet signed int) INTEGER (Note 3)
+
+   Character (UTF-8, Note 1)   IA5String
+
+   Enumeration                 ENUMERATED
+
+   Boolean                     BOOLEAN
+
+
+
+Groves, et al.              Standards Track                    [Page 92]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Unsigned Integer (Note 2)   INTEGER  (Note 3)
+
+   Octet (String)              OCTET STRING
+
+     Note 1: Can be more than one byte
+
+     Note 2: Unsigned integer is referenced in Annex C
+
+     Note 3: The BER encoding of INTEGER does not imply the use of 4
+     bytes.
+
+     Note 4: String should be encoded as IA5String when the contents
+     are all ASCII characters, but as UTF8String if it contains any
+     Non-ASCII characters.
+
+   See ITU-T Rec.  X.690, 8.7, for the definition of the encoding of an
+   octet string value.
+
+   MEDIA-GATEWAY-CONTROL DEFINITIONS AUTOMATIC TAGS::=
+   BEGIN
+
+   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 (12..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,
+
+
+
+Groves, et al.              Standards Track                    [Page 93]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         transactions      SEQUENCE OF Transaction
+      },
+      ...
+   }
+
+   MId ::= CHOICE
+   {
+      ip4Address           IP4Address,
+      ip6Address           IP6Address,
+      domainName           DomainName,
+      deviceName           PathName,
+      mtpAddress           OCTET STRING(SIZE(2..4)),
+      -- Addressing structure of mtpAddress:
+      --     25 - 15           0
+      --        |  PC        | NI |
+      --      24 - 14 bits    2 bits
+      -- Note: 14 bits are defined for international use.
+      -- Two national options exist where the point code is 16 or 24
+      -- bits.
+      -- To octet align the mtpAddress, the MSBs shall be encoded as 0s.
+             ...
+   }
+
+   DomainName ::= SEQUENCE
+   {
+      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 A.3
+
+   Transaction ::= CHOICE
+
+
+
+Groves, et al.              Standards Track                    [Page 94]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   {
+      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,
+      ...
+   }
+
+   TransactionReply ::= SEQUENCE
+   {
+      transactionId        TransactionId,
+      immAckRequired       NULL OPTIONAL,
+      transactionResult    CHOICE
+      {
+           transactionError   ErrorDescriptor,
+           actionReplies      SEQUENCE OF ActionReply
+      },
+      ...
+   }
+
+   TransactionResponseAck ::= SEQUENCE OF TransactionAck
+   TransactionAck ::= SEQUENCE
+   {
+      firstAck       TransactionId,
+      lastAck        TransactionId OPTIONAL
+   }
+
+   ErrorDescriptor ::= SEQUENCE
+   {
+      errorCode      ErrorCode,
+      errorText      ErrorText OPTIONAL
+   }
+
+
+
+Groves, et al.              Standards Track                    [Page 95]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   ErrorCode ::= INTEGER(0..65535)
+   -- See clause 13 for IANA Considerations with respect to error codes
+
+   ErrorText ::= IA5String
+
+   ContextID ::= INTEGER(0..4294967295)
+
+   -- Context   NULL Value: 0
+   -- Context CHOOSE Value: 4294967294 (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,
+      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,
+
+
+
+Groves, et al.              Standards Track                    [Page 96]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      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
+      auditCapReply           AuditReply,
+      auditValueReply         AuditReply,
+      notifyReply             NotifyReply,
+      serviceChangeReply      ServiceChangeReply,
+      ...
+   }
+
+   TopologyRequest ::= SEQUENCE
+   {
+      terminationFrom         TerminationID,
+      terminationTo           TerminationID,
+      topologyDirection       ENUMERATED
+      {
+         bothway(0),
+         isolate(1),
+         oneway(2)
+      },
+      ...
+   }
+
+   AmmRequest ::= SEQUENCE
+   {
+
+
+
+Groves, et al.              Standards Track                    [Page 97]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      terminationID        TerminationIDList,
+      descriptors          SEQUENCE OF AmmDescriptor,
+      -- At most one descriptor of each type (see AmmDescriptor)
+      -- allowed in the sequence.
+      ...
+   }
+
+   AmmDescriptor ::= CHOICE
+   {
+      mediaDescriptor         MediaDescriptor,
+      modemDescriptor         ModemDescriptor,
+      muxDescriptor           MuxDescriptor,
+      eventsDescriptor        EventsDescriptor,
+      eventBufferDescriptor   EventBufferDescriptor,
+      signalsDescriptor       SignalsDescriptor,
+      digitMapDescriptor      DigitMapDescriptor,
+      auditDescriptor         AuditDescriptor,
+      ...
+   }
+
+   AmmsReply ::= SEQUENCE
+   {
+      terminationID        TerminationIDList,
+      terminationAudit     TerminationAudit OPTIONAL,
+      ...
+   }
+
+   SubtractRequest ::= SEQUENCE
+   {
+      terminationID        TerminationIDList,
+      auditDescriptor      AuditDescriptor OPTIONAL,
+      ...
+   }
+
+   AuditRequest ::= SEQUENCE
+   {
+      terminationID        TerminationID,
+      auditDescriptor      AuditDescriptor,
+      ...
+   }
+
+   AuditReply ::= CHOICE
+   {
+      contextAuditResult   TerminationIDList,
+      error                ErrorDescriptor,
+      auditResult          AuditResult,
+      ...
+   }
+
+
+
+Groves, et al.              Standards Track                    [Page 98]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   AuditResult ::= SEQUENCE
+   {
+
+      terminationID           TerminationID,
+      terminationAuditResult  TerminationAudit
+   }
+
+   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,
+      emptyDescriptors        AuditDescriptor,
+      ...
+   }
+
+   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,
+      ...
+   }
+
+   NotifyRequest ::= SEQUENCE
+   {
+      terminationID              TerminationIDList,
+      observedEventsDescriptor   ObservedEventsDescriptor,
+      errorDescriptor            ErrorDescriptor OPTIONAL,
+      ...
+   }
+
+
+
+
+Groves, et al.              Standards Track                    [Page 99]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   NotifyReply ::= SEQUENCE
+   {
+      terminationID           TerminationIDList,
+      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,
+   -- For use of extraInfo see the comment related to PropertyParm
+      extraInfo CHOICE
+      {
+         relation Relation,
+         range    BOOLEAN,
+         sublist  BOOLEAN
+      } OPTIONAL,
+      ...
+   }
+
+   ServiceChangeRequest ::= SEQUENCE
+   {
+      terminationID           TerminationIDList,
+      serviceChangeParms      ServiceChangeParm,
+      ...
+   }
+
+   ServiceChangeReply ::= SEQUENCE
+   {
+      terminationID           TerminationIDList,
+
+
+
+Groves, et al.              Standards Track                   [Page 100]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      serviceChangeResult     ServiceChangeResult,
+      ...
+   }
+
+   -- 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 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
+      } OPTIONAL,
+      ...
+   }
+
+   StreamDescriptor ::= SEQUENCE
+   {
+      streamID          StreamID,
+      streamParms       StreamParms
+   }
+
+   StreamParms ::= SEQUENCE
+   {
+      localControlDescriptor     LocalControlDescriptor OPTIONAL,
+      localDescriptor            LocalRemoteDescriptor OPTIONAL,
+
+
+
+Groves, et al.              Standards Track                   [Page 101]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      remoteDescriptor           LocalRemoteDescriptor OPTIONAL,
+      ...
+   }
+
+   LocalControlDescriptor ::= SEQUENCE
+   {
+
+      streamMode        StreamMode OPTIONAL,
+      reserveValue      BOOLEAN OPTIONAL,
+      reserveGroup      BOOLEAN OPTIONAL,
+      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
+   -- If the sublist field is not selected, a longer sequence means
+   -- "choose one of the values" (i.e., value1 OR value2 OR ...)
+   -- If the sublist field is selected,
+   -- a sequence with more than one element encodes the value of a
+   -- list-valued property (i.e., value1 AND value2 AND ...).
+   -- 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
+   {
+
+
+
+Groves, et al.              Standards Track                   [Page 102]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      name        PkgdName,
+      value       SEQUENCE OF OCTET STRING,
+      extraInfo   CHOICE
+      {
+         relation    Relation,
+         range       BOOLEAN,
+         sublist     BOOLEAN
+      } OPTIONAL,
+      ...
+   }
+
+   Name ::= OCTET STRING(SIZE(2))
+
+   PkgdName ::= OCTET STRING(SIZE(4))
+   -- represents Package Name (2 octets) plus Property, Event,
+   -- Signal Names or Statistics ID. (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.
+   -- To wildcard a Property, Event, Signal, or Statistics ID, use
+   -- 0xFFFF for last two octets, choose is not allowed.
+   -- Wildcarding of Package Name is permitted only if Property,
+   -- Event, Signal, or Statistics ID are
+   -- 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,
+      ...
+   }
+
+
+
+Groves, et al.              Standards Track                   [Page 103]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   EventBufferControl ::= ENUMERATED
+   {
+      off(0),
+      lockStep(1),
+      ...
+   }
+
+   ServiceState ::= ENUMERATED
+
+   {
+      test(0),
+      outOfSvc(1),
+      inSvc(2),
+         ...
+   }
+
+   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 OPTIONAL,
+                  -- RequestID must be present if eventList
+                  -- is non empty
+      eventList      SEQUENCE OF RequestedEvent,
+      ...
+   }
+
+   RequestedEvent ::= SEQUENCE
+   {
+      pkgdName       PkgdName,
+
+
+
+Groves, et al.              Standards Track                   [Page 104]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      streamID       StreamID OPTIONAL,
+      eventAction    RequestedActions OPTIONAL,
+      evParList      SEQUENCE OF EventParameter,
+      ...
+   }
+
+   RequestedActions ::= SEQUENCE
+   {
+      keepActive        BOOLEAN OPTIONAL,
+      eventDM           EventDM OPTIONAL,
+      secondEvent          SecondEventsDescriptor OPTIONAL,
+      signalsDescriptor    SignalsDescriptor OPTIONAL,
+      ...
+   }
+
+   EventDM ::= CHOICE
+   {  digitMapName   DigitMapName,
+      digitMapValue  DigitMapValue
+   }
+
+   SecondEventsDescriptor ::= SEQUENCE
+   {
+      requestID         RequestID OPTIONAL,
+      eventList         SEQUENCE OF SecondRequestedEvent,
+      ...
+   }
+
+   SecondRequestedEvent ::= SEQUENCE
+   {
+      pkgdName          PkgdName,
+      streamID          StreamID OPTIONAL,
+      eventAction       SecondRequestedActions OPTIONAL,
+      evParList         SEQUENCE OF EventParameter,
+      ...
+   }
+
+   SecondRequestedActions ::= SEQUENCE
+   {
+      keepActive           BOOLEAN OPTIONAL,
+      eventDM              EventDM OPTIONAL,
+      signalsDescriptor    SignalsDescriptor OPTIONAL,
+      ...
+   }
+
+   EventBufferDescriptor ::= SEQUENCE OF EventSpec
+
+   EventSpec ::= SEQUENCE
+   {
+
+
+
+Groves, et al.              Standards Track                   [Page 105]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      eventName      EventName,
+      streamID       StreamID OPTIONAL,
+      eventParList   SEQUENCE OF EventParameter,
+      ...
+   }
+
+   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  NotifyCompletion OPTIONAL,
+      keepActive        BOOLEAN OPTIONAL,
+      sigParList        SEQUENCE OF SigParameter,
+      ...
+   }
+
+   SignalType ::= ENUMERATED
+   {
+      brief(0),
+      onOff(1),
+      timeOut(2),
+      ...
+   }
+
+   SignalName ::= PkgdName
+
+   NotifyCompletion ::= BIT STRING
+   {
+      onTimeOut(0), onInterruptByEvent(1),
+      onInterruptByNewSignalDescr(2), otherReason(3)
+   }
+
+
+
+Groves, et al.              Standards Track                   [Page 106]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   SigParameter ::= SEQUENCE
+   {
+      sigParameterName     Name,
+      value                Value,
+      -- For use of extraInfo see the comment related to PropertyParm
+      extraInfo CHOICE
+      {
+         relation Relation,
+         range    BOOLEAN,
+         sublist  BOOLEAN
+
+      } OPTIONAL,
+      ...
+   }
+
+   -- For an AuditCapReply with all events, the RequestID SHALL be ALL.
+   -- ALL is represented by 0xffffffff.
+
+   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   OPTIONAL,
+      digitMapValue  DigitMapValue  OPTIONAL
+   }
+
+
+
+
+Groves, et al.              Standards Track                   [Page 107]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   DigitMapName ::= Name
+
+   DigitMapValue ::= SEQUENCE
+   {
+      startTimer     INTEGER(0..99) OPTIONAL,
+      shortTimer     INTEGER(0..99) OPTIONAL,
+      longTimer      INTEGER(0..99) OPTIONAL,
+      digitMapBody      IA5String,
+   -- Units are seconds for start, short and long timers, and
+   -- hundreds of milliseconds for duration timer.  Thus start,
+   -- short, and long range from 1 to 99 seconds and duration
+   -- from 100 ms to 9.9 s
+      -- See 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,
+   -- A serviceChangeReason consists of a numeric reason code
+   -- and an optional text description.
+   -- The serviceChangeReason SHALL be a string consisting of
+   -- a decimal reason code, optionally followed by a single
+   -- space character and a textual description string.
+   -- This string is first BER-encoded as an IA5String.
+   -- The result of this BER-encoding is then encoded as
+   -- an ASN.1 OCTET STRING type, "double wrapping" the
+   -- value as was done for package elements.
+      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..4)),
+
+
+
+Groves, et al.              Standards Track                   [Page 108]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      ...
+   }
+
+   ServiceChangeResParm ::= SEQUENCE
+   {
+      serviceChangeMgcId      MId OPTIONAL,
+      serviceChangeAddress    ServiceChangeAddress OPTIONAL,
+      serviceChangeVersion    INTEGER(0..99) OPTIONAL,
+      serviceChangeProfile    ServiceChangeProfile OPTIONAL,
+      timestamp               TimeNotation OPTIONAL,
+      ...
+   }
+
+   ServiceChangeMethod ::= ENUMERATED
+
+   {
+      failover(0),
+      forced(1),
+      graceful(2),
+      restart(3),
+      disconnected(4),
+      handOff(5),
+      ...
+   }
+
+   ServiceChangeProfile ::= SEQUENCE
+   {
+      profileName    IA5String(SIZE (1..67))
+      -- 64 characters for name, 1 for "/", 2 for version to match ABNF
+   }
+
+   PackagesDescriptor ::= SEQUENCE OF PackagesItem
+
+   PackagesItem ::= SEQUENCE
+   {
+      packageName       Name,
+      packageVersion    INTEGER(0..99),
+      ...
+   }
+
+   StatisticsDescriptor ::= SEQUENCE OF StatisticsParameter
+
+   StatisticsParameter ::= SEQUENCE
+   {
+      statName       PkgdName,
+      statValue      Value OPTIONAL
+   }
+
+
+
+
+Groves, et al.              Standards Track                   [Page 109]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   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
+   {  t35CountryCode1   INTEGER(0..255),
+      t35CountryCode2   INTEGER(0..255),      -- country, as per T.35
+      t35Extension      INTEGER(0..255),      -- assigned nationally
+      manufacturerCode     INTEGER(0..65535), -- assigned nationally
+      ...
+   }
+
+   TimeNotation ::= SEQUENCE
+   {
+      date     IA5String(SIZE(8)),  -- yyyymmdd format
+      time     IA5String(SIZE(8))   -- hhmmssss format
+      -- per ISO 8601:1988
+   }
+
+   Value ::= SEQUENCE OF OCTET STRING
+
+   END
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 110]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+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 subclause 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
+     DOT = %x2E ; "."
+     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
+     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.
+
+     ; Total length of pathNAME must not exceed 64 chars.
+     pathNAME = ["*"] NAME *("/" / "*"/ ALPHA / DIGIT /"_" / "$" )
+                            ["@" pathDomainName ]
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 111]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+     ; ABNF allows two or more consecutive "." although it is
+     ; meaningless in a path domain name.
+     pathDomainName       = (ALPHA / DIGIT / "*" )
+                            *63(ALPHA / DIGIT / "-"
+     NAME = ALPHA *63(ALPHA / DIGIT / "_" )
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 112]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+ANNEX B - Text encoding of the protocol
+
+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 RFC 2234.
+
+      Note 1 - This syntax specification does not enforce all
+      restrictions on element inclusions and values.  Some additional
+      restrictions are stated in comments and other restrictions appear
+      in the text of this RFC.  These additional restrictions are part
+      of the protocol even though not enforced by this specification.
+
+      Note 2 - The syntax is context-dependent.  For example, "Add" can
+      be the AddToken or a NAME depending on the context in which it
+      occurs.
+
+   Everything in the ABNF and text encoding is case insensitive.  This
+   includes TerminationIDs, digitmap Ids etc.  SDP is case sensitive as
+   per RFC 2327.
+
+   ; NOTE -- The ABNF in this section uses the VALUE construct (or lists
+   ; of VALUE constructs) to encode various package element values
+   ; (properties, signal parameters, etc.).  The types of these values
+   ; vary and are specified the relevant package definition.  Several
+   ; such types are described in section 12.2.
+   ;
+   ; The ABNF specification for VALUE allows a quotedString form or a
+   ; collection of SafeChars.  The encoding of package element values
+   ; into ABNF VALUES is specified below.  If a type's encoding allows
+   ; characters other than SafeChars, the quotedString form MUST be used
+   ; for all values of that type, even for specific values that consist
+   ; only of SafeChars.
+   ;
+
+
+
+
+Groves, et al.              Standards Track                   [Page 113]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   ; String:  A string MUST use the quotedString form of VALUE and can
+   ; contain anything allowable in the quotedString form.
+   ;
+   ; Integer, Double, and Unsigned Integer:  Decimal values can be
+   ; encoded using characters 0-9.  Hexadecimal values must be prefixed
+   ; with '0x' and can use characters 0-9,a-f,A-F.  An octal format is
+   ; not supported.  Negative integers start with '-' and MUST be
+   ; Decimal.  The SafeChar form of VALUE MUST be used.
+   ;
+   ; Character:  A UTF-8 encoding of a single letter surrounded by
+   ; double quotes.
+   ;
+   ; Enumeration:  An enumeration MUST use the SafeChar form of VALUE
+   ; and can contain anything allowable in the SafeChar form.
+   ;
+   ; Boolean:  Boolean values are encoded as "on" and "off" and are
+   ; case insensitive.  The SafeChar form of VALUE MUST be used.
+   ;
+   ; Future types:  Any defined types MUST fit within
+   ; the ABNF specification of VALUE.  Specifically, if a type's
+   ; encoding allows characters other than SafeChars, the quotedString
+   ; form MUST be used for all values of that type, even for specific
+   ; values that consist only of SafeChars.
+   ;
+   ; Note that there is no way to use the double quote character within
+   ; a value.
+   ;
+   ; Note that SDP disallows whitespace at the beginning of a line,
+   ; Megaco ABNF allows whitespace before the beginning of the SDP in
+   ; the Local/Remote descriptor.  Parsers should accept whitespace
+   ; between the LBRKT following the Local/Remote token and the
+   ; beginning of the SDP.
+
+   megacoMessage        = LWSP [authenticationHeader SEP ] message
+
+   authenticationHeader = AuthToken EQUAL SecurityParmIndex COLON
+                          SequenceNum COLON AuthData
+
+   SecurityParmIndex    = "0x" 8(HEXDIG)
+   SequenceNum          = "0x" 8(HEXDIG)
+   AuthData             = "0x" 24*64(HEXDIG)
+
+   message            = MegacopToken SLASH Version SEP mId SEP
+   messageBody
+   ; The version of the protocol defined here is equal to 1.
+
+   messageBody          = ( errorDescriptor / transactionList )
+
+
+
+
+Groves, et al.              Standards Track                   [Page 114]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   transactionList      = 1*( transactionRequest / transactionReply /
+                          transactionPending / transactionResponseAck )
+   ;Use of response acks is dependent on underlying transport
+
+
+   transactionPending   = PendingToken EQUAL TransactionID LBRKT
+   RBRKT
+
+   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 )
+
+   ; "O-" indicates an optional command
+   ; "W-" indicates a wildcarded response to a command
+   commandRequestList = ["O-"] ["W-"] commandRequest
+                        *(COMMA ["O-"] ["W-"]commandRequest)
+
+   commandRequest      = ( ammRequest / subtractRequest / auditRequest /
+                           notifyRequest / serviceChangeRequest)
+
+   transactionReply     = ReplyToken EQUAL TransactionID LBRKT
+                     [ ImmAckRequiredToken COMMA]
+                   ( errorDescriptor / actionReplyList ) RBRKT
+
+   actionReplyList      = actionReply *(COMMA actionReply )
+
+
+
+
+Groves, et al.              Standards Track                   [Page 115]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   actionReply          = CtxToken EQUAL ContextID LBRKT
+                     ( errorDescriptor / commandReply ) /
+            (commandReply COMMA errorDescriptor) ) RBRKT
+
+   commandReply      = (( contextProperties [COMMA commandReplyList] ) /
+                           commandReplyList )
+
+
+   commandReplyList     = commandReplys *(COMMA commandReplys )
+
+   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      =  SubtractToken EQUAL TerminationID
+                           [ LBRKT auditDescriptor RBRKT]
+
+   auditRequest         =  (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 )
+
+   auditReturnParameter = (mediaDescriptor / modemDescriptor /
+                           muxDescriptor / eventsDescriptor /
+                           signalsDescriptor / digitMapDescriptor /
+
+
+
+Groves, et al.              Standards Track                   [Page 116]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                      observedEventsDescriptor / eventBufferDescriptor /
+                           statisticsDescriptor / packagesDescriptor /
+                            errorDescriptor / auditItem)
+
+   auditDescriptor      = AuditToken LBRKT [ auditItem
+                          *(COMMA auditItem) ] RBRKT
+
+   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
+
+   ;The values 0x0, 0xFFFFFFFE and 0xFFFFFFFF are reserved.
+   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".."255"
+   ; this production, while occurring in RFC2373, is not referenced
+   ; IPv6prefix           = hexpart SLASH 1*2DIGIT
+   hexpart           = hexseq "::" [ hexseq ] / "::" [ hexseq ] / hexseq
+
+
+
+Groves, et al.              Standards Track                   [Page 117]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   hexseq               = hex4 *( ":" hex4)
+   hex4                 = 1*4HEXDIG
+
+   portNumber           = UINT16
+
+   ; Addressing structure of mtpAddress:
+   ; 25 - 15            0
+   ;    |  PC        | NI |
+   ;    24 - 14 bits    2 bits
+   ; Note: 14 bits are defined for international use.
+   ; Two national options exist where the point code is 16 or 24 bits.
+   ; To octet align the mtpAddress the MSBs shall be encoded as 0s.
+   ; An octet shall be represented by 2 hex digits.
+   mtpAddress           = MTPToken LBRKT 4*8 (HEXDIG) RBRKT
+
+   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 one terminationStateDescriptor
+   ; and either streamParm(s) or streamDescriptor(s) but not both
+   mediaParm            = (streamParm / streamDescriptor /
+                           terminationStateDescriptor)
+
+   ; at-most-once per item
+   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 except for propertyParm
+   localParm = ( streamMode / propertyParm / reservedValueMode
+                  / reservedGroupMode )
+
+
+
+Groves, et al.              Standards Track                   [Page 118]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   reservedValueMode    = ReservedValueToken EQUAL ( "ON" / "OFF" )
+   reservedGroupMode    = ReservedGroupToken EQUAL ( "ON" / "OFF" )
+
+   streamMode           = ModeToken EQUAL streamModes
+
+   streamModes     = (SendonlyToken / RecvonlyToken / SendrecvToken /
+                          InactiveToken / LoopbackToken )
+
+   propertyParm         = pkgdName parmValue
+   parmValue            = (EQUAL alternativeValue/ INEQUAL VALUE)
+   alternativeValue     = ( VALUE
+                  / LSBRKT VALUE *(COMMA VALUE) RSBRKT
+                   ; sublist (i.e., A AND B AND ...)
+                  / LBRKT VALUE *(COMMA VALUE) RBRKT
+                   ; alternatives (i.e., A OR B OR ...)
+                  /  LSBRKT VALUE COLON VALUE RSBRKT )
+                   ; range
+
+   INEQUAL              = LWSP (">" / "<" / "#" ) LWSP
+   LSBRKT               = LWSP "[" LWSP
+   RSBRKT               = LWSP "]" LWSP
+
+   ; Note - The octet zero is not among the permitted characters in
+   ; octet string.  As the current definition is limited to SDP, and a
+   ; zero octet would not be a legal character in SDP, this is not a
+   ; concern.
+
+   localDescriptor      = LocalToken LBRKT octetString RBRKT
+
+   remoteDescriptor     = RemoteToken LBRKT octetString RBRKT
+
+   eventBufferDescriptor= EventBufferToken [ LBRKT eventSpec
+                          *( COMMA eventSpec) RBRKT ]
+
+   eventSpec      = pkgdName [ LBRKT eventSpecParameter
+                *(COMMA eventSpecParameter) RBRKT ]
+   eventSpecParameter   = (eventStream / eventOther)
+
+   eventBufferControl     = BufferToken EQUAL ( "OFF" / LockStepToken )
+
+   terminationStateDescriptor = TerminationStateToken LBRKT
+              terminationStateParm *( COMMA terminationStateParm ) RBRKT
+
+   ; at-most-once per item except for propertyParm
+   terminationStateParm = (propertyParm / serviceStates /
+                           eventBufferControl )
+
+
+
+
+Groves, et al.              Standards Track                   [Page 119]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   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 items in package
+                / ("*" SLASH "*") ; all items supported by the MG
+   PackageName          = NAME
+   ItemID               = NAME
+
+   eventsDescriptor     = EventsToken [ EQUAL RequestID LBRKT
+                        requestedEvent *( COMMA requestedEvent ) RBRKT ]
+
+   requestedEvent       = pkgdName [ LBRKT eventParameter
+                          *( COMMA eventParameter ) RBRKT ]
+
+   ; 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
+
+
+
+
+Groves, et al.              Standards Track                   [Page 120]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   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
+
+   ;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 (LBRKT
+            notificationReason *(COMMA notificationReason) RBRKT)
+
+   notificationReason   = ( TimeOutToken / InterruptByEventToken
+                        / InterruptByNewSignalsDescrToken
+                        / OtherReasonToken )
+   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 ]
+
+
+
+Groves, et al.              Standards Track                   [Page 121]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   ;at-most-once eventStream, every eventParameterName at most once
+   observedEventParameter = eventStream / eventOther
+
+   ; For an AuditCapReply with all events, the RequestID should be ALL.
+   RequestID            = ( UINT32 / "*" )
+
+   modemDescriptor      = ModemToken (( EQUAL modemType) /
+                      (LSBRKT modemType *(COMMA modemType) RSBRKT))
+                     [ LBRKT propertyParm *(COMMA propertyParm) RBRKT ]
+
+
+   ; at-most-once except for extensionParameter
+   modemType            = (V32bisToken / V22bisToken / V18Token /
+                           V22Token / V32Token / V34Token / V90Token /
+                         V91Token / SynchISDNToken / extensionParameter)
+
+   digitMapDescriptor  = DigitMapToken EQUAL
+                        ( ( LBRKT digitMapValue RBRKT ) /
+                        (digitMapName [ LBRKT digitMapValue RBRKT ]) )
+   digitMapName        = NAME
+   digitMapValue       = ["T" COLON Timer COMMA] ["S" COLON Timer COMMA]
+                         ["L" COLON Timer COMMA] digitMap
+   Timer               = 1*2DIGIT
+   ; Units are seconds for T, S, and L timers, and hundreds of
+   ; milliseconds for Z timer.  Thus T, S, and L range from 1 to 99
+   ; seconds and Z from 100 ms to 9.9 s
+   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   ;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, and DigitMapToken and PackagesToken are not allowed
+   ;in AuditCapabilities command
+   auditItem            = ( MuxToken / ModemToken / MediaToken /
+                           SignalsToken / EventBufferToken /
+                           DigitMapToken / StatsToken / EventsToken /
+                           ObservedEventsToken / PackagesToken )
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 122]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   serviceChangeDescriptor = ServicesToken LBRKT serviceChangeParm
+                            *(COMMA serviceChangeParm) RBRKT
+
+   ; each parameter at-most-once
+   ; at most one of either serviceChangeAddress or serviceChangeMgcId
+   ; but not both
+   ; serviceChangeMethod and serviceChangeReason are REQUIRED
+   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
+   ; at most one of either serviceChangeAddress or serviceChangeMgcId
+   ; but not both
+   servChgReplyParm     = (serviceChangeAddress / serviceChangeMgcId /
+                          serviceChangeProfile / serviceChangeVersion /
+                          TimeStamp)
+   serviceChangeMethod  = MethodToken EQUAL (FailoverToken /
+                          ForcedToken / GracefulToken / RestartToken /
+                          DisconnectedToken / HandOffToken /
+                          extensionParameter)
+   ; A serviceChangeReason consists of a numeric reason code
+   ; and an optional text description.
+   ; A serviceChangeReason MUST be encoded using the quotedString
+   ; form of VALUE.
+   ; The quotedString SHALL contain a decimal reason code,
+   ; optionally followed by a single space character and a
+   ; textual description string.
+
+
+   serviceChangeReason  = ReasonToken  EQUAL VALUE
+   serviceChangeDelay   = DelayToken   EQUAL UINT32
+   serviceChangeAddress = ServiceChangeAddressToken EQUAL ( mId /
+                          portNumber )
+   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)
+   packagesItem         = NAME "-" UINT16
+
+
+
+Groves, et al.              Standards Track                   [Page 123]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   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 topologyTriple
+                          *(COMMA topologyTriple) RBRKT
+   topologyTriple       = terminationA COMMA
+                          terminationB COMMA topologyDirection
+   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 )
+   ; Note - The double-quote character is not allowed in quotedString.
+   quotedString         = DQUOTE *(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 ; ","
+
+
+
+Groves, et al.              Standards Track                   [Page 124]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   DOT                  = %x2E           ; "."
+   SLASH                = %x2F           ; "/"
+   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            = ";" / "[" / "]" / "{" / "}" / ":" / "," / "#" /
+                          "<" / ">" / "="
+
+   ; New Tokens added to sigParameter must take the format of SPA*
+   ; * may be of any form i.e., SPAM
+   ; New Tokens added to eventParameter must take the form of EPA*
+   ; * may be of any form i.e., EPAD
+
+   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")
+   DisconnectedToken          = ("Disconnected"          / "DC")
+   DelayToken                 = ("Delay"                 / "DL")
+   DurationToken              = ("Duration"              / "DR")
+   EmbedToken                 = ("Embed"                 / "EM")
+   EmergencyToken             = ("Emergency"             / "EG")
+   ErrorToken                 = ("Error"                 / "ER")
+   EventBufferToken           = ("EventBuffer"           / "EB")
+   EventsToken                = ("Events"                / "E")
+   FailoverToken              = ("Failover"              / "FL")
+   ForcedToken                = ("Forced"                / "FO")
+   GracefulToken              = ("Graceful"              / "GR")
+   H221Token                  = ("H221" )
+   H223Token                  = ("H223" )
+   H226Token                  = ("H226" )
+
+
+
+Groves, et al.              Standards Track                   [Page 125]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   HandOffToken               = ("HandOff"               / "HO")
+   ImmAckRequiredToken        = ("ImmAckRequired"        / "IA")
+   InactiveToken              = ("Inactive"              / "IN")
+   IsolateToken               = ("Isolate"               / "IS")
+   InSvcToken                 = ("InService"             / "IV")
+   InterruptByEventToken      = ("IntByEvent"            / "IBE")
+   InterruptByNewSignalsDescrToken
+                              = ("IntBySigDescr"         / "IBS")
+   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")
+   OtherReasonToken           = ("OtherReason"           / "OR")
+   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")
+
+
+
+Groves, et al.              Standards Track                   [Page 126]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   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")
+   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")
+   VersionToken               = ("Version"               / "V")
+
+B.3   Hexadecimal octet coding
+
+   Hexadecimal octet coding is a means for representing a string of
+   octets as a string of hexadecimal digits, with two digits
+   representing each octet.  This octet encoding should be used when
+   encoding octet strings in the text version of the protocol.  For each
+   octet, the 8-bit sequence is encoded as two hexadecimal digits.  Bit
+   0 is the first transmitted; bit 7 is the last.  Bits 7-4 are encoded
+   as the first hexadecimal digit, with Bit 7 as MSB and Bit 4 as LSB.
+   Bits 3-0 are encoded as the second hexadecimal digit, with Bit 3 as
+   MSB and Bit 0 as LSB. Examples:
+
+        Octet bit pattern                   Hexadecimal coding
+        00011011                            D8
+        11100100                            27
+        10000011 10100010 11001000 00001001 C1451390
+
+B.4   Hexadecimal octet sequence
+
+   A hexadecimal octet sequence is an even number of hexadecimal digits,
+   terminated by a <CR> character.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 127]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+ANNEX C - Tags for media stream properties
+
+   Parameters for Local, Remote and LocalControl descriptors are
+   specified as tag-value pairs if binary encoding is used for the
+   protocol.  This annex contains the property names (PropertyID), the
+   tags (Property tag), type of the property (Type) and the values
+   (Value).  Values presented in the Value field when the field contains
+   references shall be regarded as "information".  The reference
+   contains the normative values.  If a value field does not contain a
+   reference, then the values in that field can be considered as
+   "normative".
+
+   Tags are given as hexadecimal numbers in this annex.  When setting
+   the value of a property, a MGC may underspecify the value according
+   to one of the mechanisms specified in 7.1.1.
+
+   It is optional to support the properties in this Annex or any of its
+   sub-sections.  For example, only three properties from C.3 and only
+   five properties from C.8 might be implemented.
+
+   For type "enumeration" the value is represented by the value in
+   brackets, e.g., Send(0), Receive(1).  Annex C properties with the
+   types "N bits" or "M Octets" should be treated as octet strings when
+   encoding the protocol.  Properties with "N bit integer" shall be
+   treated as an integers.  "String" shall be treated as an IA5String
+   when encoding the protocol.
+
+   When a type is smaller than one octet, the value shall be stored in
+   the low-order bits of an octet string of size 1.
+
+C.1   General media attributes
+
+   PropertyID    Property Type          Value
+                 tag
+
+   Media         1001     Enumeration   Audio(0), Video(1), Data(2)
+
+   Transmission  1002     Enumeration   Send(0), Receive(1),
+   mode                                 Send&Receive(2)
+
+   Number of     1003     Unsigned      0-255
+   Channels               integer
+
+   Sampling      1004     Unsigned      0-2^32
+   rate                   integer
+
+   Bitrate       1005     Integer       (0..4294967295)NOTE - Units of
+                                        100 bit/s.
+
+
+
+Groves, et al.              Standards Track                   [Page 128]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   ACodec        1006     Octet string  Audio Codec Type:
+                                        Ref.: ITU-T Q.765
+                                        Non-ITU-T codecs are defined
+                                        with the appropriate standards
+                                        organization under a defined
+                                        Organizational Identifier.
+
+   Samplepp      1007     Unsigned      Maximum samples or frames per
+                          integer       packet: 0..65535
+
+   Silencesupp   1008     Boolean       Silence Suppression: True/False
+
+   Encrypttype   1009     Octet string  Ref.: ITU-T H.245
+
+   Encryptkey    100A     Octet string  Encryption key
+                          size          Ref.: ITU-T H.235
+                          (0..65535)
+
+   Echocanc      100B                    Not Used.  See H.248.1 E.13 for
+                                        an example of possible Echo
+                                        Control properties.
+
+   Gain          100C     Unsigned      Gain in dB: 0..65535
+                          integer
+
+   Jitterbuff    100D     Unsigned      Jitter buffer size in ms:
+                          integer       0..65535
+
+   PropDelay     100E     Unsigned      Propagation Delay: 0..65535
+                          integer       Maximum propagation delay in
+                                        milliseconds for the bearer
+                                        connection between two media
+                                        gateways.  The maximum delay
+                                        will be dependent on the bearer
+                                        technology.
+
+   RTPpayload    100F     Integer       Payload type in RTP Profile for
+                                        Audio and Video Conferences
+                                        with Minimal Control
+                                        Ref.: RFC 1890
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 129]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+C.2   Mux properties
+
+   PropertyID Property tag Type         Value
+
+   H222       2001         Octet string H222LogicalChannelParameters
+                                         Ref.: ITU-T H.245
+
+   H223       2002         Octet string H223LogicalChannelParameters
+                                         Ref.: ITU-T H.245
+
+   V76        2003         Octet string V76LogicalChannelParameters
+                                         Ref.: ITU-T H.245
+
+   H2250      2004         Octet string H2250LogicalChannelParameters
+                                         Ref.: ITU-T H.245
+
+C.3   General bearer properties
+
+   PropertyID Property   Type        Value
+              tag
+
+   Mediatx    3001       Enumeration Media Transport TypeTDM
+                                      Circuit(0), ATM(1), FR(2),
+                                      Ipv4(3), Ipv6(4), ...
+
+   BIR        3002       4 octets    Value depends on transport
+                                      technology
+
+   NSAP       3003       1-20 octets See NSAP.
+                                      Ref.: Annex A/X.213
+
+C.4   General ATM properties
+
+   PropertyID Property Type              Value
+              tag
+
+   AESA       4001     20 octets         ATM End System Address
+
+   VPVC       4002     4 octets: VPCI    VPCI/VCI
+                        in first two
+                        least             Ref.: ITU-T Q.2931
+                        significant
+                        octets, VCI in
+                        second two
+                        octets
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 130]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   SC         4003     Enumeration       Service Category: CBR(0),
+                                          nrt-VBR1(1), nrt  VBR2(2),
+                                          nrt-VBR3(3), rt-VBR1(4),
+                                          rt  VBR2(5), rt-VBR3(6),
+                                          UBR1(7), UBR2(8), ABR(9).
+                                          Ref.: ATM Forum UNI 4.0
+
+   BCOB       4004     5-bit integer     Broadband Bearer Class
+                                          Ref.: ITU-T Q.2961.2
+
+   BBTC       4005     7-bit integer     Broadband Transfer Capability
+                                          Ref.: ITU-T Q.2961.1
+
+   ATC        4006     Enumeration       I.371 ATM Traffic
+                                          CapabilityDBR(0), SBR1(1),
+                                          SBR2(2), SBR3(3), ABT/IT(4),
+                                          ABT/DT(5), ABR(6)
+                                          Ref.: ITU-T I.371
+
+   STC        4007     2 bits            Susceptibility to clipping:
+                                          Bits
+                                          2 1
+                                          ---
+                                          0 0     not susceptible to
+                                                  clipping
+                                          0 1     susceptible to
+                                                  clipping
+                                          Ref.: ITU-T Q.2931
+
+   UPCC       4008     2 bits            User Plane Connection
+                                          configuration:
+                                          Bits
+                                          2 1
+                                          ---
+                                          0 0     point-to-point
+                                          0 1     point-to-multipoint
+                                          Ref.: ITU-T Q.2931
+
+   PCR0       4009     24-bit integer    Peak Cell Rate (For CLP = 0)
+                                          Ref.: ITU-T Q.2931
+
+   SCR0       400A     24-bit integer    Sustainable Cell Rate (For
+                                          CLP = 0)
+                                          Ref.: ITU-T Q.2961.1
+
+   MBS0       400B     24-bit integer    Maximum Burst Size (For CLP =
+                                          0)
+                                          Ref.: ITU-T Q.2961.1
+
+
+
+Groves, et al.              Standards Track                   [Page 131]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   PCR1       400C     24-bit integer    Peak Cell Rate (For CLP = 0 +
+                                          1)
+                                          Ref.: ITU-T Q.2931
+
+   SCR1       400D     24-bit integer    Sustainable Cell Rate (For
+                                          CLP = 0 + 1)
+                                          Ref.: ITU-T Q.2961.1
+
+   MBS1       400E     24-bit integer    Maximum Burst Size (For CLP =
+                                          0 + 1)
+                                          Ref.: ITU-T Q.2961.1
+
+   BEI        400F     Boolean           Best Effort Indicator
+                                          Value 1 indicates that BEI is
+                                          to be included in the ATM
+                                          signaling; value 0 indicates
+                                          that BEI is not to be
+                                          included in the ATM
+                                          signaling.
+                                          Ref.: ATM Forum UNI 4.0
+
+   TI         4010     Boolean           Tagging Indicator
+                                          Value 0 indicates that
+                                          tagging is not allowed; value
+                                          1 indicates that tagging is
+                                          requested.
+                                          Ref.: ITU-T Q.2961.1
+
+   FD         4011     Boolean           Frame Discard
+                                          Value 0 indicates that no
+                                          frame discard is allowed;
+                                          value 1 indicates that frame
+                                          discard is allowed.
+                                          Ref.: ATM Forum UNI 4.0
+
+   A2PCDV     4012     24-bit integer    Acceptable 2-point CDV
+                                          Ref.: ITU-T Q.2965.2
+
+   C2PCDV     4013     24-bit integer    Cumulative 2-point CDV
+                                          Ref.: ITU-T Q.2965.2
+
+   APPCDV     4014     24-bit integer    Acceptable P-P CDV
+                                          Ref.: ATM Forum UNI 4.0
+
+   CPPCDV     4015     24-bit integer    Cumulative P-P CDV
+                                          Ref.: ATM Forum UNI 4.0
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 132]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   ACLR       4016     8-bit integer     Acceptable Cell Loss Ratio
+                                          Ref.: ITU-T Q.2965.2, ATM
+                                          Forum UNI 4.0
+
+   MEETD      4017     16-bit integer    Maximum End-to-end transit
+                                          delay
+                                          Ref.: ITU-T Q.2965.2, ATM
+                                          Forum UNI 4.0
+
+   CEETD      4018     16-bit integer    Cumulative End-to-end transit
+                                          delay
+                                          Ref.: ITU-T Q.2965.2, ATM
+                                          Forum UNI 4.0
+
+   QosClass   4019     Integer 0-5          QoS Class
+
+                                            QoS Class     Meaning
+
+                                            0             Default QoS
+                                                           associated
+                                                           with the ATC
+                                                           as defined
+                                                           in ITU-T
+                                                           Q.2961.2
+
+                                            1             Stringent
+
+                                            2             Tolerant
+
+                                            3             Bi-level
+
+                                            4             Unbounded
+
+                                            5             Stringent
+                                                           Bi-level
+                                          Ref.: ITU-T Q.2965.1
+
+   AALtype    401A     1 octet           AAL Type
+                                          Bits
+                                          8 7 6 5 4 3 2 1
+                                          ---------------
+                                          0 0 0 0 0 0 0 0   AAL for
+                                                            voice
+                                          0 0 0 0 0 0 0 1   AAL type 1
+                                          0 0 0 0 0 0 1 0   AAL type 2
+                                          0 0 0 0 0 0 1 1   AAL type
+                                                            3/4
+                                          0 0 0 0 0 1 0 1   AAL type 5
+
+
+
+Groves, et al.              Standards Track                   [Page 133]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                          0 0 0 1 0 0 0 0   user-
+                                                            defined AAL
+                                          Ref.: ITU-T Q.2931
+
+C.5   Frame Relay
+
+   PropertyID         Property    Type          Value
+                      tag
+
+   DLCI               5001        Unsigned      Data link connection
+                                  integer       id
+
+   CID                5002        Unsigned      sub-channel id
+                                  integer
+
+   SID/Noiselevel     5003        Unsigned      silence insertion
+                                  integer       descriptor
+
+   Primary Payload    5004        Unsigned      Primary Payload Type
+   type                           integer       Covers FAX and codecs
+
+C.6   IP
+
+   PropertyID Property tag Type                Value
+
+   IPv4       6001         32 bits Ipv4Address Ipv4Address
+                                                Ref.: IETF RFC 791
+
+   IPv6       6002         128 bits            IPv6 Address
+                                                Ref.: IETF RFC 2460
+
+   Port       6003         Unsigned integer    0..65535
+
+   Porttype   6004         Enumerated          TCP(0), UDP(1), SCTP(2)
+
+
+C.7   ATM AAL2
+
+   PropertyID Property Type                   Value
+              tag
+
+   AESA       7001     20 octets              AAL2 service endpoint
+                                                address as defined in
+                                                the referenced
+                                                Recommendation.
+                                                ESEANSEA
+                                                Ref.: ITU-T Q.2630.1
+
+
+
+
+Groves, et al.              Standards Track                   [Page 134]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   BIR        See C.3  4 octets               Served user generated
+                                                reference as defined in
+                                                the referenced
+                                                Recommendation.
+                                                SUGR
+                                                Ref.: ITU-T Q.2630.1
+
+   ALC        7002     12 octets              AAL2 link
+                                                characteristics as
+                                                defined in the
+                                                referenced
+                                                Recommendation.
+                                                Maximum/Average CPS-SDU
+                                                bit rate;
+                                                Maximum/Average CPS-SDU
+                                                size
+                                                Ref.: ITU-T Q.2630.1
+
+   SSCS       7003     I.366.2: Audio (8      Service specific
+                        octets); Multirate (3  convergence sublayer
+                        octets), or I.366.1:   information as defined
+                        SAR-assured (14        in:
+                        octets);SAR-unassured  - ITU-T Q.2630.1,and
+                        (7 octets).            used in:
+                                                - ITU-T I.366.2:
+                                                Audio/Multirate;
+                                                - ITU-T I.366.1: SAR-
+                                                assured/unassured.
+                                                Ref.: ITU-T Q.2630.1,
+                                                I.366.1 and I.366.2
+
+   SUT        7004     1..254 octets          Served user transport
+                                                parameter as defined in
+                                                the referenced
+                                                Recommendation.
+                                                Ref.: ITU-T Q.2630.1
+
+   TCI        7005     Boolean                Test connection
+                                                indicator as defined in
+                                                the referenced
+                                                Recommendation.
+                                                Ref.: ITU-T Q.2630.1
+
+   Timer_CU   7006     32-bit integer         Timer-CU
+                                                Milliseconds to hold
+                                                partially filled cell
+                                                before sending.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 135]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   MaxCPSSDU  7007     8-bit integer          Maximum Common Part
+                                                Sublayer Service Data
+                                                Unit
+                                                Ref.: ITU-T Q.2630.1
+
+   CID        7008     8 bits                 subchannel id: 0-255
+                                                Ref.: ITU-T I.363.2
+C.8   ATM AAL1
+
+   PropertyID Property   Type        Value
+              tag
+
+   BIR        See table  4-29 octets GIT (Generic Identifier
+              in C.3                 Transport)
+                                      Ref.: ITU-T Q.2941.1
+
+   AAL1ST     8001       1 octet     AAL1 Subtype
+                                      Bits
+                                      8 7 6 5 4 3 2 1
+                                      ---------------
+                                      0 0 0 0 0 0 0 0     null
+                                      0 0 0 0 0 0 0 1     voiceband
+                                      signal transport on 64 kbit/s
+                                      0 0 0 0 0 0 1 0     circuit
+                                      transport
+                                      0 0 0 0 0 1 0 0     high-quality
+                                      audio signal transport
+                                      0 0 0 0 0 1 0 1     video signal
+                                      transport
+                                      Ref.: ITU-T Q.2931
+
+   CBRR       8002       1 octet     CBR Rate
+                                      Bits
+                                      8 7 6 5 4 3 2 1
+                                      ---------------
+                                      0 0 0 0 0 0 0 1       64 kbit/s
+                                      0 0 0 0 0 1 0 0     1544 kbit/s
+                                      0 0 0 0 0 1 0 1     6312 kbit/s
+                                      0 0 0 0 0 1 1 0   32 064 kbit/s
+                                      0 0 0 0 0 1 1 1   44 736 kbit/s
+                                      0 0 0 0 1 0 0 0   97 728 kbit/s
+                                      0 0 0 1 0 0 0 0     2048 kbit/s
+                                      0 0 0 1 0 0 0 1     8448 kbit/s
+                                      0 0 0 1 0 0 1 0   34 368 kbit/s
+                                      0 0 0 1 0 0 1 1  139 264 kbit/s
+                                      0 1 0 0 0 0 0 0   n x 64 kbit/s
+                                      0 1 0 0 0 0 0 1    n x 8 kbit/s
+                                      Ref.: ITU-T Q.2931
+
+
+
+Groves, et al.              Standards Track                   [Page 136]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   MULT       See table              Multiplier, or n x 64k/8k/300
+              in C.9                 Ref.: ITU-T Q.2931
+
+   SCRI       8003       1 octet     Source Clock Frequency Recovery
+                                      Method
+                                      Bits
+                                      8 7 6 5 4 3 2 1
+                                      ---------------
+                                      0 0 0 0 0 0 0 0     null
+                                      0 0 0 0 0 0 0 1     SRTS
+                                      0 0 0 0 0 0 1 0     ACM
+                                      Ref.: ITU-T Q.2931
+
+   ECM        8004       1 octet     Error Correction Method
+                                      Bits
+                                      8 7 6 5 4 3 2 1
+                                      ---------------
+                                      0 0 0 0 0 0 0 0     null
+                                      0 0 0 0 0 0 0 1     FEC - Loss
+                                      0 0 0 0 0 0 1 0     FEC - Delay
+                                      Ref.: ITU-T Q.2931
+
+   SDTB       8005       16-bit      Structured Data Transfer
+                         integer     Blocksize
+                                      Block size of SDT CBR service
+                                      Ref.: ITU-T I.363.1
+
+   PFCI       8006       8-bit       Partially filled cells identifier
+                         integer     1-47
+                                      Ref.: ITU-T I.363.1
+
+C.9   Bearer capabilities
+
+   The table entries referencing Recommendation Q.931 refer to the
+   encoding in the bearer capability information element of Q.931, not
+   to the low layer information element.
+
+   PropertyID    Tag    Type      Value
+
+   TMR           9001   1 octet   Transmission Medium
+                                  Requirement (Q.763)
+                                  Bits
+                                  87654321
+                                  --------
+                                  00000000  speech
+                                  00000001  spare
+                                  00000010  64 kbit/s
+                                  unrestricted
+
+
+
+Groves, et al.              Standards Track                   [Page 137]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  00000011  3.1 kHz audio
+                                  00000100  reserved for
+                                  alternate speech (service
+                                  2)/64 kbit/s unrestricted
+                                  (service 1)
+                                  00000101  reserved for
+                                  alternate 64 kbit/s
+                                  unrestricted (service
+                                  1)/speech (service 2)
+                                  00000110  64 kbit/s preferred
+
+                                  The assigned codepoints
+                                  listed below are all for
+                                  unrestricted service.
+                                  00000111  2 x 64 kbit/s
+                                  00001000  384 kbit/s
+                                  00001001  1536 kbit/s
+                                  00001010  1920 kbit/s
+                                  00001011
+                                   through
+                                  00001111  spare
+                                  00010000
+                                   through
+                                  00101010:
+                                     3 x 64 kbit/s through
+                                    29 x 64 kbit/s
+                                  except
+                                  00010011  spare
+                                  00100101  spare
+
+                                  00101011
+                                   through
+                                  11111111  spare
+                                  Ref.: ITU-T Q.763
+
+   TMRSR         9002   1 octet   Transmission Medium
+                                  Requirement Subrate
+                                  0     unspecified
+                                  1      8 kbit/s
+                                  2     16 kbit/s
+                                  3     32 kbit/s
+
+   Contcheck     9003   Boolean   Continuity Check
+                                  0     continuity check not
+                                  required on this circuit
+                                  1     continuity check
+                                  required on this circuit
+                                  Ref.: ITU-T Q.763
+
+
+
+Groves, et al.              Standards Track                   [Page 138]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   ITC           9004   5 bits    Information Transfer
+                                  Capability
+                                  Bits
+                                  5 4 3 2 1
+                                  ---------
+                                  0 0 0 0 0     Speech
+                                  0 1 0 0 0     Unrestricted
+                                  digital information
+                                  0 1 0 0 1     Restricted
+                                  digital information
+                                  1 0 0 0 0     3.1 kHz audio
+                                  1 0 0 0 1     Unrestricted
+                                  digital information with
+                                  tones/announcements
+                                  1 1 0 0 0     Video
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU-T Q.763
+
+   TransMode     9005   2 bits    Transfer Mode
+                                  Bits
+                                  2 1
+                                  ---
+                                  0 0     Circuit mode
+                                  1 0     Packet mode
+                                  Ref.: ITU-T Q.931
+
+   TransRate     9006   5 bits    Transfer Rate
+                                  Bits
+                                  5 4 3 2 1
+                                  ---------
+                                  0 0 0 0 0     This code shall
+                                  be used for packet mode calls
+                                  1 0 0 0 0      64 kbit/s
+                                  1 0 0 0 1  2 x 64 kbit/s
+                                  1 0 0 1 1     384 kbit/s
+                                  1 0 1 0 1    1536 kbit/s
+                                  1 0 1 1 1    1920 kbit/s
+                                  1 1 0 0 0  Multirate (64
+                                  kbit/s base rate)
+                                  Ref.: ITU-T Q.931
+
+   MULT          9007   7 bits    Rate Multiplier
+                                  Any value from 2 to n
+                                  (maximum number of B-
+                                  channels)
+                                  Ref.: ITU-T Q.931
+
+
+
+Groves, et al.              Standards Track                   [Page 139]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   layer1prot    9008   5 bits    User Information Layer 1
+                                  Protocol
+                                  Bits
+                                  5 4 3 2 1
+                                  ---------
+                                  0 0 0 0 1     ITU-T
+                                  standardized rate adaption
+                                  V.110 and X.30.
+                                  0 0 0 1 0     Recommendation
+                                  G.711 m-law
+                                  0 0 0 1 1     Recommendation
+                                  G.711 A-law
+                                  0 0 1 0 0     Recommendation
+                                  G.721 32 kbit/s ADPCM and
+                                  Recommendation I.460
+                                  0 0 1 0 1     Recommendations
+                                  H.221 and H.242
+                                  0 0 1 1 0     Recommendations
+                                  H.223 and H.245
+                                  0 0 1 1 1     Non-ITU-T
+                                  standardized rate adaption.
+                                  0 1 0 0 0     ITU-T
+                                  standardized rate adaption
+                                  V.120.
+                                  0 1 0 0 1     ITU-T
+                                  standardized rate adaption
+                                  X.31 HDLC flag stuffing
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU Recommendation
+                                  Q.931
+
+   syncasync     9009   Boolean   Synchronous/Asynchronous
+                                  0     Synchronous data
+                                  1     Asynchronous data
+                                  Ref.: ITU-T Q.931
+
+   negotiation   900A   Boolean   Negotiation
+                                  0     In-band negotiation
+                                  possible
+                                  1     In-band negotiation not
+                                  possible
+                                  Ref.: ITU-T Q.931
+
+   Userrate      900B   5 bits    User Rate
+                                  Bits
+                                  5 4 3 2 1
+
+
+
+Groves, et al.              Standards Track                   [Page 140]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  ---------
+                                  0 0 0 0 0     Rate is
+                                  indicated by E-bits specified
+                                  in Recommendation I.460 or
+                                  may be negotiated in-band
+                                  0 0 0 0 1     0.6 kbit/s
+                                  Recommendations V.6 and X.1
+                                  0 0 0 1 0     1.2 kbit/s
+                                  Recommendation V.6
+                                  0 0 0 1 1     2.4 kbit/s
+                                  Recommendations V.6 and X.1
+                                  0 0 1 0 0     3.6 kbit/s
+                                  Recommendation V.6
+                                  0 0 1 0 1     4.8 kbit/s
+                                  Recommendations V.6 and X.1
+                                  0 0 1 1 0     7.2 kbit/s
+                                  Recommendation V.6
+                                  0 0 1 1 1     8 kbit/s
+                                  Recommendation I.460
+                                  0 1 0 0 0     9.6 kbit/s
+                                  Recommendations V.6 and X.1
+                                  0 1 0 0 1     14.4 kbit/s
+                                  Recommendation V.6
+                                  0 1 0 1 0     16 kbit/s
+                                  Recommendation I.460
+                                  0 1 0 1 1     19.2 kbit/s
+                                  Recommendation V.6
+                                  0 1 1 0 0     32 kbit/s
+                                  Recommendation I.460
+                                  0 1 1 0 1     38.4 kbit/s
+                                  Recommendation V.110
+                                  0 1 1 1 0     48 kbit/s
+                                  Recommendations V.6 and X.1
+                                  0 1 1 1 1     56 kbit/s
+                                  Recommendation V.6
+                                  1 0 0 1 0     57.6 kbit/s
+                                  Recommendation V.14 extended
+                                  1 0 0 1 1     28.8 kbit/s
+                                  Recommendation V.110
+                                  1 0 1 0 0     24 kbit/s
+                                  Recommendation V.110
+                                  1 0 1 0 1     0.1345 kbit/s
+                                  Recommendation X.1
+                                  1 0 1 1 0     0.100 kbit/s
+                                  Recommendation X.1
+                                  1 0 1 1 1     0.075/1.2
+                                  kbit/s Recommendations V.6
+                                  and X.1
+
+
+
+Groves, et al.              Standards Track                   [Page 141]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  1 1 0 0 0     1.2/0.075
+                                  kbit/s Recommendations V.6
+                                  and X.1
+                                  1 1 0 0 1     0.050 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 0 1 0     0.075 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 0 1 1     0.110 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 1 0 0     0.150 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 1 0 1     0.200 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 1 1 0     0.300 kbit/s
+                                  Recommendations V.6 and X.1
+                                  1 1 1 1 1     12 kbit/s
+                                  Recommendation V.6
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU-T Q.931
+   INTRATE       900C   2 bits    Intermediate Rate
+                                  Bits
+                                  2 1
+                                  ---
+                                  0 0     Not used
+                                  0 1     8 kbit/s
+                                  1 0     16 kbit/s
+                                  1 1     32 kbit/s
+                                  Ref.: ITU-T Q.931
+
+   nictx         900D   Boolean   Network Independent Clock
+                                  (NIC) on transmission
+                                  0     Not required to send
+                                  data with network independent
+                                  clock
+                                  1     Required to send data
+                                  with network independent
+                                  clock
+                                  Ref.: ITU-T Q.931
+
+   nicrx         900E   Boolean   Network independent clock
+                                  (NIC) on reception
+                                  0     Cannot accept data with
+                                  network independent clock
+                                  (i.e., sender does not support
+                                  this optional procedure)
+                                  1     Can accept data with
+                                  network independent clock
+
+
+
+Groves, et al.              Standards Track                   [Page 142]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  (i.e., sender does support
+                                  this optional procedure)
+                                  Ref.: ITU-T Q.931
+
+   flowconttx    900F   Boolean   Flow Control on transmission
+                                  (Tx)
+                                  0     Not required to send
+                                  data with flow control
+                                  mechanism
+                                  1     Required to send data
+                                  with flow control mechanism
+                                  Ref.: ITU-T Q.931
+
+   flowcontrx    9010   Boolean   Flow control on reception
+                                  (Rx)
+                                  0     Cannot accept data with
+                                  flow control mechanism (i.e.,
+                                  sender does not support this
+                                  optional procedure)
+                                  1     Can accept data with
+                                  flow control mechanism (i.e.,
+                                  sender does support this
+                                  optional procedure)
+                                  Ref.: ITU-T Q.931
+
+   rateadapthdr  9011   Boolean   Rate adaption header/no
+                                  header
+                                  0     Rate adaption header
+                                  not included
+                                  1     Rate adaption header
+                                  included
+                                  Ref.: ITU-T Q.931
+
+   multiframe    9012   Boolean   Multiple frame establishment
+                                  support in data link
+                                  0     Multiple frame
+                                  establishment not supported.
+                                  Only UI frames allowed
+                                  1     Multiple frame
+                                  establishment supported
+                                  Ref.: ITU-T Q.931
+
+   OPMODE        9013   Boolean   Mode of operation
+                                  0     Bit transparent mode of
+                                  operation
+                                  1     Protocol sensitive mode
+                                  of operation
+                                  Ref.: ITU-T Q.931
+
+
+
+Groves, et al.              Standards Track                   [Page 143]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   llidnegot     9014   Boolean   Logical link identifier
+                                  negotiation
+                                  0     Default, LLI = 256 only
+                                  1     Full protocol
+                                  negotiation
+                                  Ref.: ITU-T Q.931
+
+   assign        9015   Boolean   Assignor/assignee
+                                  0     Message originator is
+                                  "default assignee"
+                                  1     Message originator is
+                                  "assignor only"
+                                  Ref.: ITU-T Q.931
+
+   inbandneg     9016   Boolean   In-band/out-band negotiation
+                                  0     Negotiation is done
+                                  with USER INFORMATION
+                                  messages on a temporary
+                                  signalling connection
+                                  1     Negotiation is done in-
+                                  band using logical link zero
+                                  Ref.: ITU-T Q.931
+
+   stopbits      9017   2 bits    Number of stop bits
+                                  Bits
+                                  2 1
+                                  ---
+                                  0 0     Not used
+                                  0 1     1 bit
+                                  1 0     1.5 bits
+                                  1 1     2 bits
+                                  Ref.: ITU-T Q.931
+
+   databits      9018   2 bits    Number of data bits excluding
+                                  parity bit if present
+                                  Bits
+                                  2 1
+                                  ---
+                                  0 0     Not used
+                                  0 1     5 bits
+                                  1 0     7 bits
+                                  1 1     8 bits
+                                  Ref.: ITU-T Q.931
+
+   parity        9019   3 bits    Parity information
+                                  Bits
+                                  3 2 1
+
+
+
+Groves, et al.              Standards Track                   [Page 144]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  ------
+                                  0 0 0     Odd
+                                  0 1 0     Even
+                                  0 1 1     None
+                                  1 0 0     Forced to 0
+                                  1 0 1     Forced to 1
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU-T Q.931
+
+   duplexmode    901A   Boolean   Mode duplex
+                                  0     Half duplex
+                                  1     Full duplex
+                                  Ref.: ITU-T Q.931
+
+   modem         901B   6 bits    Modem Type
+                                  Bits
+                                  6 5 4 3 2 1
+                                  -----------
+                                  0 0 0 0 0 0 through
+                                  0 0 0 1 0 1   National use
+                                  0 1 0 0 0 1   Rec.  V.21
+                                  0 1 0 0 1 0     Rec.  V.22
+                                  0 1 0 0 1 1     Rec.  V.22 bis
+                                  0 1 0 1 0 0     Rec.  V.23
+                                  0 1 0 1 0 1     Rec.  V.26
+                                  0 1 1 0 0 1     Rec.  V.26 bis
+                                  0 1 0 1 1 1     Rec.  V.26 ter
+                                  0 1 1 0 0 0     Rec.  V.27
+                                  0 1 1 0 0 1     Rec.  V.27 bis
+                                  0 1 1 0 1 0     Rec.  V.27 ter
+                                  0 1 1 0 1 1     Rec.  V.29
+                                  0 1 1 1 0 1     Rec.  V.32
+                                  0 1 1 1 1 0     Rec.  V.34
+                                  1 0 0 0 0 0  through
+                                  1 0 1 1 1 1    National use
+                                  1 1 0 0 0 0  through
+                                  1 1 1 1 1 1    User specified
+                                  Ref.: ITU-T Q.931
+
+   layer2prot    901C   5 bits    User information layer 2
+                                  protocol
+                                  Bits
+                                  5 4 3 2 1
+                                  ---------
+                                  0 0 0 1 0    Rec.  Q.921/I.441
+                                  0 0 1 1 0    Rec.  X.25, link
+                                  layer
+
+
+
+Groves, et al.              Standards Track                   [Page 145]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  0 1 1 0 0    LAN logical link
+                                  control (ISO/IEC 8802  2)
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU-T Q.931
+
+   layer3prot    901D   5 bits    User information layer 3
+                                  protocol
+                                  Bits
+                                  5 4 3 2 1
+                                  ---------
+                                  0 0 0 1 0     ITU-T Q.931
+                                  0 0 1 1 0     ITU-T X.25,
+                                  packet layer
+                                  0 1 0 1 1     ISO/IEC TR 9577
+                                  (Protocol identification in
+                                  the network layer)
+                                  All other values are
+                                  reserved.
+                                  Ref.: ITU-T Q.931
+
+   addlayer3prot 901E   Octet     Additional User Information
+                                  layer 3 protocol
+                                  Bits        Bits
+                                  4 3 2 1     4 3 2 1
+                                  -------     -------
+                                  1 1 0 0     1 1 0 0
+                                  Internet Protocol (RFC 791)
+                                  (ISO/IEC TR 9577)
+                                  1 1 0 0     1 1 1 1
+                                  Point-to-point Protocol (RFC
+                                  1661)
+                                  Ref.: ITU-T Q.931
+
+   DialledN      901F   30        Dialled Number
+                        octets
+
+   DiallingN     9020   30        Dialling Number
+                        octets
+
+   ECHOCI        9021             Not Used.  See H.248.1 E.13
+                                  for an example of possible
+                                  Echo Control properties.
+
+   NCI           9022   1 octet   Nature of Connection
+                                  Indicators
+                                  Bits
+                                  2 1     Satellite Indicator
+
+
+
+Groves, et al.              Standards Track                   [Page 146]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                                  ---
+                                  0 0     no satellite circuit
+                                  in the connection
+                                  0 1     one satellite circuit
+                                  in the connection
+                                  1 0     two satellite
+                                  circuits in the connection
+                                  1 1     spare
+
+                                  Bits
+                                  4 3     Continuity check
+                                  ---     indicator
+                                  0 0     continuity check not
+                                  required
+                                  0 1     continuity check
+                                  required on this circuit
+                                  1 0     continuity check
+                                  performed on a previous
+                                  circuit
+                                  1 1     spare
+
+                                  Bit
+                                  5     Echo control device
+                                  -     indicator
+                                  0     outgoing echo control
+                                  device not included
+                                  1     outgoing echo control
+                                  device included
+
+                                  Bits
+                                  8 7 6     Spare
+                                  Ref.: ITU-T Q.763
+
+   USI           9023   Octet     User Service Information
+                        string    Ref.: ITU-T Q.763 Clause 3.57
+
+C.10  AAL5 properties
+
+   PropertyID Property    Type       Value
+              tag
+
+   FMSDU      A001        32-bit     Forward Maximum CPCS-SDU Size:
+                          integer    Maximum CPCS-SDU size sent in the
+                                     direction from the calling user to
+                                     the called user.
+                                     Ref.: ITU-T Q.2931
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 147]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   BMSDU      A002        32-bit     Backwards Maximum CPCS-SDU Size:
+                          integer    Maximum CPCS-SDU size sent in the
+                                     direction from the called user to
+                                     the calling user.
+                                     Ref.: ITU-T Q.2931
+
+   SSCS       See table   See table  See table in C.7
+              in C.7      in C.7     Additional values:
+                                     VPI/VCI
+
+C.11  SDP equivalents
+
+   PropertyID Property    Type   Value
+              tag
+
+   SDP_V      B001        String Protocol Version
+                                  Ref.: RFC 2327
+
+   SDP_O      B002        String Owner/creator and session ID
+                                  Ref.: RFC 2327
+
+   SDP_S      B003        String Session name
+                                  Ref.: RFC 2327
+
+   SDP_I      B004        String Session identifier
+                                  Ref.: RFC 2327
+
+   SDP_U      B005        String URI of descriptor
+                                  Ref.: RFC 2327
+
+   SDC_E      B006        String email address
+                                  Ref.: RFC 2327
+
+   SDP_P      B007        String phone number
+                                  Ref.: RFC 2327
+
+   SDP_C      B008        String Connection information
+                                  Ref.: RFC 2327
+
+   SDP_B      B009        String Bandwidth Information
+                                  Ref.: RFC 2327
+
+   SDP_Z      B00A        String Time zone adjustment
+                                  Ref.: RFC 2327
+
+   SDP_K      B00B        String Encryption Key
+                                  Ref.: RFC 2327
+
+
+
+
+Groves, et al.              Standards Track                   [Page 148]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   SDP_A      B00C        String Zero or more session attributes
+                                  Ref.: RFC 2327
+
+   SDP_T      B00D        String Active Session Time
+                                  Ref.: RFC 2327
+
+   SDP_R      B00E        String Zero or more repeat times
+                                  Reference: RFC 2327
+
+   SDP_M      B00F        String Media type, port, transport and format
+                                  Ref.: RFC 2327
+
+C.12  H.245
+
+   PropertyID Property   Type     Value
+              tag
+
+   OLC        C001       Octet    The value of H.245
+                                   OpenLogicalChannel structure.
+                         string   Ref.: ITU-T H.245
+
+   OLCack     C002       Octet    The value of H.245
+                         string   OpenLogicalChannelAck structure.
+                                   Ref.: ITU-T H.245
+
+   OLCcnf     C003       Octet    The value of H.245
+                         string   OpenLogicalChannelConfirm structure.
+                                   Ref.: ITU-T H.245
+
+   OLCrej     C004       Octet    The value of H.245
+                         string   OpenLogicalChannelReject structure.
+                                   Ref.: ITU-T H.245
+
+   CLC        C005       Octet    The value of H.245
+                         string   CloseLogicalChannel structure.
+                                   Ref.: ITU-T H.245
+
+   CLCack     C006       Octet    The value of H.245
+                         string   CloseLogicalChannelAck structure.
+                                   Ref.: ITU-T H.245
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 149]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+ANNEX D - Transport over IP
+
+D.1   Transport over IP/UDP using Application Level Framing (ALF)
+
+   Protocol messages defined in this RFC may be transmitted over UDP.
+   When no port is provided by the peer (see 7.2.8), commands should be
+   sent to the default port number: 2944 for text-encoded operation, or
+   2945 for binary-encoded operation.  Responses must be sent to the
+   address and port from which the corresponding commands were sent.
+
+   ALF is a set of techniques that allows an application, as opposed to
+   a stack, to affect how messages are sent to the other side.  A
+   typical ALF technique is to allow an application to change the order
+   of messages sent when there is a queue after it has queued them.
+   There is no formal specification for ALF.  The procedures in Annex
+   D.1 contain a minimum suggested set of ALF behaviours
+
+   Implementors using IP/UDP with ALF should be aware of the
+   restrictions of the MTU on the maximum message size.
+
+D.1.1 Providing At-Most-Once functionality
+
+   Messages, being carried over UDP, may be subject to losses.  In the
+   absence of a timely response, commands are repeated.  Most commands
+   are not idempotent.  The state of the MG would become unpredictable
+   if, for example, Add commands were executed several times.  The
+   transmission procedures shall thus provide an "At-Most-Once"
+   functionality.
+
+   Peer protocol entities are expected to keep in memory a list of the
+   responses that they sent to recent transactions and a list of the
+   transactions that are currently outstanding.  The transaction
+   identifier of each incoming message is compared to the transaction
+   identifiers of the recent responses sent to the same MId.  If a match
+   is found, the entity does not execute the transaction, but simply
+   repeats the response.  If no match is found, the message will be
+   compared to the list of currently outstanding transactions.  If a
+   match is found in that list, indicating a duplicate transaction, the
+   entity does not execute the transaction (see D.1.4 for procedures on
+   sending TransactionPending).
+
+   The procedure uses a long timer value, noted LONG-TIMER in the
+   following.  The timer should be set larger than the maximum duration
+   of a transaction, which should take into account the maximum number
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 150]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   of repetitions, the maximum value of the repetition timer and the
+   maximum propagation delay of a packet in the network.  A suggested
+   value is 30 seconds.
+
+   The copy of the responses may be destroyed either LONG-TIMER seconds
+   after the response is issued, or when the entity receives a
+   confirmation that the response has been received, through the
+   "Response Acknowledgement parameter".  For transactions that are
+   acknowledged through this parameter, the entity shall keep a copy of
+   the transaction-id for LONG-TIMER seconds after the response is
+   issued, in order to detect and ignore duplicate copies of the
+   transaction request that could be produced by the network.
+
+D.1.2 Transaction identifiers and three-way handshake
+
+D.1.2.1  Transaction identifiers
+
+   Transaction identifiers are 32-bit integer numbers.  A Media Gateway
+   Controller may decide to use a specific number space for each of the
+   MGs that they manage, or to use the same number space for all MGs
+   that belong to some arbitrary group.  MGCs may decide to share the
+   load of managing a large MG between several independent processes.
+   These processes will share the same transaction number space.  There
+   are multiple possible implementations of this sharing, such as having
+   a centralized allocation of transaction identifiers, or
+   pre-allocating non-overlapping ranges of identifiers to different
+   processes.  The implementations shall guarantee that unique
+   transaction identifiers are allocated to all transactions that
+   originate from a logical MGC (identical mId).  MGs can simply detect
+   duplicate transactions by looking at the transaction identifier and
+   mId only.
+
+D.1.2.2  Three-way handshake
+
+   The TransactionResponse Acknowledgement parameter can be found in any
+   message.  It carries a set of "confirmed transaction-id ranges".
+   Entities may choose to delete the copies of the responses to
+   transactions whose id is included in "confirmed transaction-id
+   ranges" received in the transaction response messages.  They should
+   silently discard further commands when the transaction-id falls
+   within these ranges.
+
+   The "confirmed transaction-id ranges" values shall not be used if
+   more than LONG-TIMER seconds have elapsed since the MG issued its
+   last response to that MGC, or when a MG resumes operation.  In this
+   situation, transactions should be accepted and processed, without any
+   test on the transaction-id.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 151]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Messages that carry the "Transaction Response Acknowledgement"
+   parameter may be transmitted in any order.  The entity shall retain
+   the "confirmed transaction-id ranges" received for LONG-TIMER
+   seconds.
+
+   In the binary encoding, if only the firstAck is present in a response
+   acknowledgement (see A.2), only one transaction is acknowledged.  If
+   both firstAck and lastAck are present, then the range of transactions
+   from firstAck to lastAck is acknowledged.  In the text encoding, a
+   horizontal dash is used to indicate a range of transactions being
+   acknowledged (see B.2).
+
+D.1.3 Computing retransmission timers
+
+   It is the responsibility of the requesting entity to provide suitable
+   timeouts for all outstanding transactions, and to retry transactions
+   when timeouts have been exceeded.  Furthermore, when repeated
+   transactions fail to be acknowledged, it is the responsibility of the
+   requesting entity to seek redundant services and/or clear existing or
+   pending connections.
+
+   The specification purposely avoids specifying any value for the
+   retransmission timers.  These values are typically network dependent.
+   The retransmission timers should normally estimate the timer value by
+   measuring the time spent between the sending of a command and the
+   return of a response.  Implementations SHALL ensure that the
+   algorithm used to calculate retransmission timing performs an
+   exponentially increasing backoff of the retransmission timeout for
+   each retransmission or repetition after the first one.
+
+     NOTE - One possibility is to use the algorithm implemented in
+     TCP-IP, which uses two variables:
+
+   -  The average acknowledgement delay (AAD), estimated through an
+      exponentially smoothed average of the observed delays.
+
+   -  The average deviation (ADEV), estimated through an exponentially
+      smoothed average of the absolute value of the difference between
+      the observed delay and the current average.  The retransmission
+      timer, in TCP, is set to the sum of the average delay plus N times
+      the average deviation.  The maximum value of the timer should
+      however be bounded for the protocol defined in this
+      RFC, in order to guarantee that no repeated packet
+      would be received by the gateways after LONG-TIMER seconds.  A
+      suggested maximum value is 4 seconds.
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 152]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   After any retransmission, the entity SHOULD do the following:
+
+   -  It should double the estimated value of the average delay, AAD.
+
+   -  It should compute a random value, uniformly distributed between
+      0.5 AAD and AAD.
+
+   -  It should set the retransmission timer to the sum of that random
+      value and N times the average deviation.
+
+   This procedure has two effects.  Because it includes an exponentially
+   increasing component, it will automatically slow down the stream of
+   messages in case of congestion.  Because it includes a random
+   component, it will break the potential synchronization between
+   notifications triggered by the same external event.
+
+D.1.4 Provisional responses
+
+   Executing some transactions may require a long time.  Long execution
+   times may interact with the timer-based retransmission procedure.
+   This may result either in an inordinate number of retransmissions, or
+   in timer values that become too long to be efficient.  Entities that
+   can predict that a transaction will require a long execution time may
+   send a provisional response, "Transaction Pending".  They SHOULD send
+   this response if they receive a repetition of a transaction that is
+   still being executed.
+
+   Entities that receive a Transaction Pending shall switch to a
+   different repetition timer for repeating requests.  The root
+   Termination has a property (ProvisionalResponseTimerValue), which can
+   be set to the requested maximum number of milliseconds between
+   receipt of a command and transmission of the TransactionPending
+   response.  Upon receipt of a final response following receipt of
+   provisional responses, an immediate confirmation shall be sent, and
+   normal repetition timers shall be used thereafter.  An entity that
+   sends a provisional response, SHALL include the immAckRequired field
+   in the ensuing final response, indicating that an immediate
+   confirmation is expected.  Receipt of a Transaction Pending after
+   receipt of a reply shall be ignored.
+
+D.1.5 Repeating Requests, Responses and Acknowledgements
+
+   The protocol is organized as a set of transactions, each of which is
+   composed of a request and a response, commonly referred to as an
+   acknowledgement.  The protocol messages, being carried over UDP, may
+   be subject to losses.  In the absence of a timely response,
+   transactions are repeated.  Entities are expected to keep in memory a
+
+
+
+
+Groves, et al.              Standards Track                   [Page 153]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   list of the responses that they sent to recent transactions, i.e., a
+   list of all the responses they sent over the last LONG-TIMER seconds,
+   and a list of the transactions that are currently being executed.
+
+   The repetition mechanism is used to guard against three types of
+   possible errors:
+
+   -  transmission errors, when for example a packet is lost due to
+      noise on a line or congestion in a queue;
+
+   -  component failure, when for example an interface to a entity
+      becomes unavailable;
+
+   -  entity failure, when for example an entire entity becomes
+      unavailable.
+
+   The entities should be able to derive from the past history an
+   estimate of the packet loss rate due to transmission errors.  In a
+   properly configured system, this loss rate should be kept very low,
+   typically less than 1%.  If a Media Gateway Controller or a Media
+   Gateway has to repeat a message more than a few times, it is very
+   legitimate to assume that something else than a transmission error is
+   occurring.   For example, given a loss rate of 1%, the probability
+   that five consecutive transmission attempts fail is 1 in 100 billion,
+   an event that should occur less than once every 10 days for a Media
+   Gateway Controller that processes 1000 transactions per second.
+   (Indeed, the number of repetition that is considered excessive should
+   be a function of the prevailing packet loss rate.)  We should note
+   that the "suspicion threshold", which we will call "Max1", is
+   normally lower than the "disconnection threshold", which should be
+   set to a larger value.
+
+   A classic retransmission algorithm would simply count the number of
+   successive repetitions, and conclude that the association is broken
+   after retransmitting the packet an excessive number of times
+   (typically between 7 and 11 times.)  In order to account for the
+   possibility of an undetected or in  progress "failover", we modify
+   the classic algorithm so that if the Media Gateway receives a valid
+   ServiceChange message announcing a failover, it will start
+   transmitting outstanding commands to that new MGC.  Responses to
+   commands are still transmitted to the source address of the command.
+
+   In order to automatically adapt to network load, this RFC specifies
+   exponentially increasing timers.  If the initial timer is set to 200
+   milliseconds, the loss of a fifth retransmission will be detected
+   after about 6 seconds.  This is probably an acceptable waiting delay
+   to detect a failover.  The repetitions should continue after that
+   delay not only in order to perhaps overcome a transient connectivity
+
+
+
+Groves, et al.              Standards Track                   [Page 154]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   problem, but also in order to allow some more time for the execution
+   of a failover  (waiting a total delay of 30 seconds is probably
+   acceptable).
+
+   It is, however, important that the maximum delay of retransmissions
+   be bounded.  Prior to any retransmission, it is checked that the time
+   elapsed since the sending of the initial datagram is no greater than
+   T-MAX.  If more than T-MAX time has elapsed, the MG concludes that
+   the MGC has failed, and it begins its recovery process as described
+   in section 11.5.  If the MG retries to connect to the current MGC it
+   shall use a ServiceChange with ServiceChangeMethod set to
+   Disconnected so that the new MGC will be aware that the MG lost one
+   or more transactions.  The value T-MAX is related to the LONG-TIMER
+   value: the LONG-TIMER value is obtained by adding to T  MAX the
+   maximum propagation delay in the network.
+
+D.2   Using TCP
+
+   Protocol messages as defined in this RFC may be transmitted over TCP.
+   When no port is specified by the other side (see 7.2.8), the commands
+   should be sent to the default port.  The defined protocol has
+   messages as the unit of transfer, while TCP is a stream-oriented
+   protocol.  TPKT, according to RFC 1006, SHALL be used to delineate
+   messages within the TCP stream.
+
+   In a transaction-oriented protocol, there are still ways for
+   transaction requests or responses to be lost.  As such, it is
+   recommended that entities using TCP transport implement application
+   level timers for each request and each response, similar to those
+   specified for application level framing over UDP.
+
+D.2.1 Providing the At-Most-Once functionality
+
+   Messages, being carried over TCP, are not subject to transport
+   losses, but loss of a transaction request or its reply may
+   nonetheless be noted in real implementations.  In the absence of a
+   timely response, commands are repeated.  Most commands are not
+   idempotent.  The state of the MG would become unpredictable if, for
+   example, Add commands were executed several times.
+
+   To guard against such losses, it is recommended that entities follow
+   the procedures in D.1.1.
+
+D.2.2 Transaction identifiers and three-way handshake
+
+   For the same reasons, it is possible that transaction replies may be
+   lost even with a reliable delivery protocol such as TCP.  It is
+   recommended that entities follow the procedures in D.1.2.2.
+
+
+
+Groves, et al.              Standards Track                   [Page 155]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+D.2.3 Computing retransmission timers
+
+   With reliable delivery, the incidence of loss of a transaction
+   request or reply is expected to be very low.  Therefore, only simple
+   timer mechanisms are required.  Exponential back-off algorithms
+   should not be necessary, although they could be employed where, as in
+   an MGC, the code to do so is already required, since MGCs must
+   implement ALF/UDP as well as TCP.
+
+D.2.4 Provisional responses
+
+   As with UDP, executing some transactions may require a long time.
+   Entities that can predict that a transaction will require a long
+   execution time may send a provisional response, "Transaction
+   Pending".  They should send this response if they receive a
+   repetition of a transaction that is still being executed.
+
+   Entities that receive a Transaction Pending shall switch to a longer
+   repetition timer for that transaction.
+
+   Entities shall retain Transactions and replies until they are
+   confirmed.  The basic procedure of D.1.4 should be followed, but
+   simple timer values should be sufficient.  There is no need to send
+   an immediate confirmation upon receipt of a final response.
+
+D.2.5 Ordering of commands
+
+   TCP provides ordered delivery of transactions.  No special procedures
+   are required.  It should be noted that ALF/UDP allows sending entity
+   to modify its behaviour under congestion, and in particular, could
+   reorder transactions when congestion is encountered.  TCP could not
+   achieve the same results.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 156]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+ANNEX E - Basic packages
+
+   This annex contains definitions of some packages for use with
+   Recommendation H.248.1.
+
+E.1   Generic
+
+   PackageID: g (0x0001)
+   Version: 1
+   Extends: None
+
+   Description:
+      Generic package for commonly encountered items.
+
+E.1.1 Properties
+
+   None.
+
+E.1.2 Events
+
+   Cause
+
+      EventID: cause (0x0001)
+      Generic error event
+
+      EventsDescriptor parameters:  None
+
+      ObservedEvents Descriptor Parameters:
+
+         General Cause
+         ParameterID: Generalcause (0x0001)
+
+            This parameter groups the failures into six groups, which
+            the MGC may act upon.
+
+            Type: enumeration
+
+            Possible values:
+                     "NR" Normal Release (0x0001)
+                     "UR" Unavailable Resources (0x0002)
+                     "FT" Failure, Temporary (0x0003)
+                     "FP" Failure, Permanent (0x0004)
+                     "IW" Interworking Error (0x0005)
+                     "UN" Unsupported (0x0006)
+
+         Failure Cause
+         ParameterID: Failurecause (0x0002)
+
+
+
+
+Groves, et al.              Standards Track                   [Page 157]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            Possible values:  OCTET STRING
+
+            Description: The Failure Cause is the value generated by the
+            Released equipment, i.e., a released network connection.
+            The concerned value is defined in the appropriate bearer
+            control protocol.
+
+   Signal Completion
+
+      EventID: sc (0x0002)
+
+      Indicates the termination of a signal for which the
+      notifyCompletion parameter was set to enable reporting of a
+      completion event.  For further procedural description, see 7.1.1,
+      7.1.17 and 7.2.7.
+
+      EventsDescriptor parameters:  None
+
+      ObservedEvents Descriptor parameters:
+
+         Signal Identity
+         ParameterID: SigID (0x0001)
+
+            This parameter identifies the signal which has terminated.
+            For a signal that is contained in a signal list, the signal
+            list identity parameter should also be returned indicating
+            the appropriate list.
+
+            Type: Binary: octet (string), Text: string
+
+            Possible values: a signal which has terminated.  A signal
+            shall be identified using the pkgdName syntax without
+            wildcarding.
+
+         Termination Method
+         ParameterID: Meth (0x0002)
+
+            Indicates the means by which the signal terminated.
+
+            Type: enumeration
+
+            Possible values:
+               "TO" (0x0001) Signal timed out or otherwise completed on
+               its own
+               "EV" (0x0002) Interrupted by event
+               "SD" (0x0003) Halted by new Signals descriptor
+               "NC" (0x0004) Not completed, other cause
+
+
+
+
+Groves, et al.              Standards Track                   [Page 158]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         Signal List ID
+         ParameterID:  SLID (0x0003)
+
+            Indicates to which signal list a signal belongs.  The
+            SignalList ID is only returned in cases where the signal
+            resides in a signal list.
+
+            Type: integer
+
+            Possible values: any integer
+
+E.1.3 Signals
+
+   None.
+
+E.1.4 Statistics
+
+   None.
+
+E.2   Base Root Package
+
+   PackageID: root (0x0002)
+   Version: 1
+   Extends: None
+
+   Description:
+      This package defines Gateway wide properties.
+
+E.2.1 Properties
+
+   MaxNrOfContexts
+   PropertyID: maxNumberOfContexts (0x0001)
+
+      The value of this property gives the maximum number of contexts
+      that can exist at any time.  The NULL context is not included in
+      this number.
+
+      Type: double
+
+      Possible values: 1 and up
+
+      Defined in: TerminationState
+
+      Characteristics: read only
+
+   MaxTerminationsPerContext
+   PropertyID: maxTerminationsPerContext (0x0002)
+
+
+
+
+Groves, et al.              Standards Track                   [Page 159]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      The maximum number of allowed terminations in a context, see 6.1
+
+      Type: integer
+
+      Possible values: any integer
+
+      Defined in: TerminationState
+
+      Characteristics: read only
+
+   normalMGExecutionTime
+   PropertyId: normalMGExecutionTime (0x0003)
+
+      Settable by the MGC to indicate the interval within which the MGC
+      expects a response to any transaction from the MG (exclusive of
+      network delay)
+
+      Type: integer
+
+      Possible values: any integer, represents milliseconds
+
+      Defined in: TerminationState
+
+      Characteristics: read / write
+
+   normalMGCExecutionTime
+   PropertyId: normalMGCExecutionTime (0x0004)
+
+      Settable by the MGC to indicate the interval within which the MG
+      should expects a response to any transaction from the MGC
+      (exclusive of network delay)
+
+      Type: integer
+
+      Possible values: any integer, represents milliseconds
+
+      Defined in: TerminationState
+
+      Characteristics: read / write
+
+   MGProvisionalResponseTimerValue
+   PropertyId: MGProvisionalResponseTimerValue (0x0005)
+
+      Indicates the time within which the MGC should expect a Pending
+      Response from the MG if a Transaction cannot be completed.
+
+      Initially set to normalMGExecutionTime plus network delay, but may
+      be lowered.
+
+
+
+Groves, et al.              Standards Track                   [Page 160]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      Type: Integer
+
+      Possible Values: any integer, represents milliseconds
+
+      Defined in: TerminationState
+
+      Characteristics: read / write
+
+   MGCProvisionalResponseTimerValue
+   PropertyId: MGCProvisionalResponseTimerValue (0x0006)
+
+      Indicates the time within which the MG should expect a Pending
+      Response from the MGC if a Transaction cannot be completed.
+      Initially set to normalMGCExecutionTime plus network delay, but
+      may be lowered.
+
+      Type: Integer
+
+      Possible Values: any integer, represents milliseconds
+
+      Defined in: TerminationState
+
+      Characteristics: read / write
+
+E.2.2 Events
+
+   None.
+
+E.2.3 Signals
+
+   None.
+
+E.2.4 Statistics
+
+   None.
+
+E.2.5 Procedures
+
+   None.
+
+E.3   Tone Generator Package
+
+   PackageID: tonegen (0x0003)
+   Version: 1
+   Extends: None
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 161]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Description:
+
+      This package defines signals to generate audio tones.  This
+      package does not specify parameter values.  It is intended to be
+      extendable.  Generally, tones are defined as an individual signal
+      with a parameter, ind, representing "interdigit" time delay, and a
+      tone id to be used with playtones.  A tone id should be kept
+      consistent with any tone generation for the same tone.  MGs are
+      expected to be provisioned with the characteristics of appropriate
+      tones for the country in which the MG is located.
+
+   Designed to be extended only.
+
+E.3.1 Properties
+
+   None.
+
+E.3.2 Events
+
+   None.
+
+E.3.3 Signals
+
+   Play tone
+   SignalID: pt (0x0001)
+
+      Plays audio tone over an audio channel
+
+      Signal Type: Brief
+
+      Duration: Provisioned
+
+      Additional parameters:
+
+         Tone id list
+         ParameterID: tl (0x0001)
+
+            Type: list of tone ids
+
+            List of tones to be played in sequence.  The list SHALL
+            contain one or more tone ids.
+
+         Inter signal duration
+         ParameterID: ind (0x0002)
+
+            Type: integer
+
+            Timeout between two consecutive tones in milliseconds
+
+
+
+Groves, et al.              Standards Track                   [Page 162]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+   No tone ids are specified in this package.  Packages that extend this
+   package can add possible values for tone id as well as adding
+   individual tone signals.
+
+E.3.4 Statistics
+
+   None.
+
+E.3.5 Procedures
+
+   None.
+
+E.4   Tone Detection Package
+
+   PackageID: tonedet (0x0004)
+   Version: 1
+   Extends: None
+
+   This Package defines events for audio tone detection.  Tones are
+   selected by name (tone id).  MGs are expected to be provisioned with
+   the characteristics of appropriate tones for the country in which the
+   MG is located.
+
+   Designed to be extended only:
+      This package does not specify parameter values.  It is intended to
+      be extendable.
+
+E.4.1 Properties
+
+   None.
+
+E.4.2 Events
+
+   Start tone detected
+   EventID: std, 0x0001
+
+      Detects the start of a tone.  The characteristics of positive tone
+      detection are implementation dependent.
+
+      EventsDescriptor parameters:
+
+         Tone id list
+         ParameterID: tl (0x0001)
+
+            Type: list of tone ids
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 163]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            Possible values: The only tone id defined in this package is
+            "wild card" which is "*" in text encoding and 0x0000 in
+            binary.  Extensions to this package would add possible
+            values for tone id.  If tl is "wild card", any tone id is
+            detected.
+
+         ObservedEventsDescriptor parameters:
+
+         Tone id
+         ParameterID: tid (0x0003)
+
+            Type: enumeration
+
+            Possible values: "wildcard" as defined above is the only
+            value defined in this package.  Extensions to this package
+            would add additional possible values for tone id.
+
+         End tone detected
+         EventID: etd, 0x0002
+
+         Detects the end of a tone.
+
+         EventDescriptor parameters:
+
+            Tone id list
+            ParameterID: tl (0x0001)
+
+               Type: enumeration or list of enumerated types
+
+               Possible values: No possible values are specified in this
+               package.  Extensions to this package would add possible
+               values for tone id.
+
+         ObservedEventsDescriptor parameters:
+
+            Tone id
+            ParameterID: tid (0x0003)
+
+               Type: enumeration
+
+               Possible values: "wildcard" as defined above is the only
+               value defined in this package.  Extensions to this
+               package would add possible values for tone id.
+
+            Duration
+            ParameterId: dur (0x0002)
+
+               Type: integer, in milliseconds
+
+
+
+Groves, et al.              Standards Track                   [Page 164]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+
+               This parameter contains the duration of the tone from
+               first detection until it stopped.
+
+   Long tone detected
+   EventID: ltd, 0x0003
+
+      Detects that a tone has been playing for at least a certain amount
+      of time.
+
+      EventDescriptor parameters:
+
+         Tone id list
+         ParameterID: tl (0x0001)
+
+            Type: enumeration or list
+
+            Possible values: "wildcard" as defined above is the only
+            value defined in this package.  Extensions to this package
+            would add possible values for tone id.
+
+         Duration
+         ParameterID: dur (0x0002)
+
+            Type: integer, duration to test against
+
+            Possible values: any legal integer, expressed in
+            milliseconds
+
+      ObservedEventsDescriptor parameters:
+
+         Tone id
+         ParameterID: tid (0x0003)
+
+            Type: Enumeration
+
+            Possible values: No possible values are specified in this
+            package.  Extensions to this package would add possible
+            values for tone id.
+
+E.4.3 Signals
+
+   None.
+
+E.4.4 Statistics
+
+   None.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 165]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+E.4.5 Procedures
+
+   None.
+
+E.5   Basic DTMF Generator Package
+
+   PackageID: dg (0x0005)
+   Version: 1
+   Extends: tonegen version 1
+
+   This package defines the basic DTMF tones as signals and extends the
+   allowed values of parameter tl of playtone in tonegen.
+
+E.5.1 Properties
+
+   None.
+
+E.5.2 Events
+
+   None.
+
+E.5.3 Signals
+
+   DTMF character 0
+   SignalID: d0 (0x0010)
+
+      Generate DTMF 0 tone.  The physical characteristic of DTMF 0 is
+      defined in the gateway.
+
+      Signal Type: Brief
+
+      Duration: Provisioned
+
+      Additional parameters:
+
+         None.
+
+   Additional values:
+
+      d0 (0x0010) is defined as a tone id for playtone
+
+   The other DTMF characters are specified in exactly the same way.  A
+   table with all signal names and signal IDs is included.  Note that
+   each DTMF character is defined as both a signal and a tone id, thus
+   extending the basic tone generation package.  Also note that DTMF
+   SignalIds are different from the names used in a digit map.
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 166]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                     Signal name     Signal ID/Tone id
+
+                    DTMF character 0    d0 (0x0010)
+                    DTMF character 1    d1 (0x0011)
+                    DTMF character 2    d2 (0x0012)
+                    DTMF character 3    d3 (0x0013)
+                    DTMF character 4    d4 (0x0014)
+                    DTMF character 5    d5 (0x0015)
+                    DTMF character 6    d6 (0x0016)
+                    DTMF character 7    d7 (0x0017)
+                    DTMF character 8    d8 (0x0018)
+                    DTMF character 9    d9 (0x0019)
+                    DTMF character *    ds (0x0020)
+                    DTMF character #    do (0x0021)
+                    DTMF character A    da (0x001a)
+                    DTMF character B    db (0x001b)
+                    DTMF character C    dc (0x001c)
+                    DTMF character D    dd (0x001d)
+
+E.5.4 Statistics
+
+   None.
+
+E.5.5 Procedures
+
+   None.
+
+E.6   DTMF detection Package
+
+   PackageID: dd (0x0006)
+   Version: 1
+   Extends: tonedet version 1
+
+   This package defines the basic DTMF tones detection.  This Package
+   extends the possible values of tone id in the "start tone detected"
+   "end tone detected" and "long tone detected" events.
+
+   Additional tone id values are all tone ids described in package dg
+   (basic DTMF generator package).
+
+   The following table maps DTMF events to digit map symbols as
+   described in 7.1.14.
+
+                           DTMF Event Symbol
+
+                           d0   "0"
+                           d1   "1"
+                           d2   "2"
+
+
+
+Groves, et al.              Standards Track                   [Page 167]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                           d3   "3"
+                           d4   "4"
+                           d5   "5"
+                           d6   "6"
+                           d7   "7"
+                           d8   "8"
+                           d9   "9"
+                           da   "A" or "a"
+                           db   "B" or "b"
+                           dc   "C" or "c"
+                           dd   "D" or "d"
+                           ds   "E" or "e"
+                           do   "F" or "f"
+
+E.6.1 Properties
+
+   None.
+
+E.6.2 Events
+
+   DTMF digits
+
+      EventIds are defined with the same names as the SignalIds defined
+      in the table found in E.5.3.
+
+   DigitMap Completion Event
+   EventID: ce, 0x0004
+
+      Generated when a digit map completes as described in 7.1.14.
+
+      EventsDescriptor parameters: None.
+
+      ObservedEventsDescriptor parameters:
+
+         DigitString
+         ParameterID: ds (0x0001)
+
+            Type: string of digit map symbols (possibly empty) returned
+            as a quotedString
+
+            Possible values: a sequence of the characters "0" through
+            "9", "A" through "F", and the long duration modifier "Z".
+
+            Description: the portion of the current dial string as
+            described in 7.1.14 which matched part or all of an
+            alternative event sequence specified in the digit map.
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 168]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         Termination Method
+         ParameterID: Meth (0x0003)
+
+            Type: enumeration
+
+            Possible values:
+
+               "UM" (0x0001) Unambiguous match
+
+               "PM" (0x0002) Partial match, completion by timer expiry
+               or unmatched event
+
+               "FM" (0x0003) Full match, completion by timer expiry or
+               unmatched event
+
+            Description: indicates the reason for generation of the
+            event.  See the procedures in 7.1.14.
+
+E.6.3 Signals
+
+   None.
+
+E.6.4 Statistics
+
+   None.
+
+E.6.5 Procedures
+
+   Digit map processing is activated only if an events descriptor is
+   activated that contains a digit map completion event as defined in
+   Section E.6.2 and that digit map completion event contains an eventDM
+   field in the requested actions as defined in Section 7.1.9.  Other
+   parameters such as KeepActive or embedded events of signals
+   descriptors may also be present in the events descriptor and do not
+   affect the activation of digit map processing.
+
+E.7   Call Progress Tones Generator Package
+
+   PackageID: cg, 0x0007
+   Version: 1
+   Extends: tonegen version 1
+
+   This package defines the basic call progress tones as signals and
+   extends the allowed values of the tl parameter of playtone in
+   tonegen.
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 169]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+E.7.1 Properties
+
+   None.
+
+E.7.2 Events
+
+   None.
+
+E.7.3 Signals
+
+   Dial Tone
+   SignalID: dt (0x0030)
+
+      Generate dial tone.  The physical characteristic of dial tone is
+      available in the gateway.
+
+      Signal Type: TimeOut
+
+      Duration: Provisioned
+
+      Additional parameters:
+
+         None.
+
+   Additional values:
+
+      dt (0x0030) is defined as a tone id for playtone
+
+   The other tones of this package are defined in exactly the same way.
+   A table with all signal names and signal IDs is included.  Note that
+   each tone is defined as both a signal and a tone id, thus extending
+   the basic tone generation package.
+
+     Signal Name                 Signal ID/tone id
+
+     Dial Tone                   dt (0x0030)
+     Ringing Tone                rt (0x0031)
+     Busy Tone                   bt (0x0032)
+     Congestion Tone             ct (0x0033)
+     Special Information Tone    sit(0x0034)
+     Warning Tone                wt (0x0035)
+     Payphone Recognition Tone   prt (0x0036)
+     Call Waiting Tone           cw (0x0037)
+     Caller Waiting Tone         cr (0x0038)
+
+E.7.4 Statistics
+
+   None.
+
+
+
+Groves, et al.              Standards Track                   [Page 170]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+E.7.5 Procedures
+
+      NOTE - The required set of tone ids corresponds to those defined
+      in Recommendation E.180/Q.35.  See Recommendation E.180/Q.35 for
+      definition of the meanings of these tones.
+
+
+E.8   Call Progress Tones Detection Package
+
+   PackageID: cd (0x0008)
+   Version: 1
+   Extends: tonedet version 1
+
+   This package defines the basic call progress detection tones.  This
+   package extends the possible values of tone id in the "start tone
+   detected", "end tone detected" and "long tone detected" events.
+
+   Additional values
+
+      toneID values are defined for start tone detected, end tone
+      detected and long tone detected with the same values as those in
+      package cg (call progress tones generation package).
+
+   The required set of tone ids corresponds to Recommendation
+   E.180/Q.35.  See Recommendation E.180/Q.35 for definition of the
+   meanings of these tones.
+
+E.8.1 Properties
+
+   None.
+
+E.8.2 Events
+
+   Events are defined as in the call progress tones generator package
+   (cg) for the tones listed in the table of E.7.3.
+
+E.8.3 Signals
+
+   None.
+
+E.8.4 Statistics
+
+   None.
+
+E.8.5 Procedures
+
+   None.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 171]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+E.9   Analog Line Supervision Package
+
+   PackageID: al, 0x0009
+   Version: 1
+   Extends: None
+
+   This package defines events and signals for an analog line.
+
+   E.9.1 Properties
+
+   None.
+
+E.9.2 Events
+
+   onhook
+   EventID: on (0x0004)
+
+      Detects handset going on hook.  Whenever an events descriptor is
+      activated that requests monitoring for an on-hook event and the
+      line is already on-hook, then the MG shall behave according to the
+      setting of the "strict" parameter.
+
+      EventDescriptor parameters:
+
+         Strict Transition
+         ParameterID: strict (0x0001)
+
+            Type: enumeration
+
+            Possible values: "exact" (0x00), "state" (0x01), "failWrong"
+            (0x02)
+
+              "exact" means that only an actual hook state transition to
+              on-hook is to be recognized;
+
+              "state" means that the event is to be recognized either if
+              the hook state transition is detected or if the hook state
+              is already on-hook;
+
+              "failWrong" means that if the hook state is already
+              on-hook, the command fails and an error is reported.
+
+      ObservedEventsDescriptor parameters:
+
+         Initial State
+         ParameterID: init (0x0002)
+
+            Type: Boolean
+
+
+
+Groves, et al.              Standards Track                   [Page 172]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            Possible values:
+
+               "True" means that the event was reported because the line
+               was already on-hook when the events descriptor containing
+               this event was activated;
+
+               "False" means that the event represents an actual state
+               transition to on-hook.
+
+   offhook
+   EventID: of (0x0005)
+
+      Detects handset going off hook.  Whenever an events descriptor is
+      activated that requests monitoring for an off-hook event and the
+      line is already off-hook, then the MG shall behave according to
+      the setting of the "strict" parameter.
+
+      EventDescriptor parameters:
+
+         Strict Transition
+         ParameterID: strict (0x0001)
+
+            Type: enumeration
+
+            Possible values: "exact" (0x00), "state" (0x01), "failWrong"
+            (0x02)
+
+               "exact" means that only an actual hook state transition
+               to off-hook is to be recognized;
+
+               "state" means that the event is to be recognized either
+               if the hook state transition is detected or if the hook
+               state is already off-hook;
+
+               "failWrong" means that if the hook state is already off-
+               hook, the command fails and an error is reported.
+
+      ObservedEventsDescriptor parameters
+
+         Initial State
+         ParameterID: init (0x0002)
+
+            Type: Boolean
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 173]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            Possible values:
+
+               "True" means that the event was reported because the line
+               was already off-hook when the events descriptor
+               containing this event was activated;
+
+               "False" means that the event represents an actual state
+               transition to off-hook.
+
+   flashhook
+   EventID: fl, 0x0006
+
+      Detects handset flash.  A flash occurs when an onhook is followed
+      by an offhook between a minimum and maximum duration.
+
+      EventDescriptor parameters:
+
+         Minimum duration
+         ParameterID: mindur (0x0004)
+
+            Type: integer in milliseconds
+
+            Default value is provisioned.
+
+         Maximum duration
+         ParameterID: maxdur (0x0005)
+
+            Type: integer in milliseconds
+
+            Default value is provisioned.
+
+      ObservedEventsDescriptor parameters:
+
+         None
+
+E.9.3 Signals
+
+   ring
+   SignalID: ri, 0x0002
+
+      Applies ringing on the line
+
+      Signal Type: TimeOut
+
+      Duration: Provisioned
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 174]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      Additional parameters:
+
+         Cadence
+         ParameterID: cad (0x0006)
+
+            Type: list of integers representing durations of alternating
+            on and off segments, constituting a complete ringing cycle
+            starting with an on.  Units in milliseconds
+
+            Default is fixed or provisioned.  Restricted function MGs
+            may ignore cadence values they are incapable of generating.
+
+         Frequency
+         ParameterID: freq (0x0007)
+
+            Type: integer in Hz
+
+            Default is fixed or provisioned.  Restricted function MGs
+            may ignore frequency values they are incapable of
+            generating.
+
+E.9.4 Statistics
+
+   None.
+
+E.9.5 Procedures
+
+   If the MGC sets an EventsDescriptor containing a hook state
+   transition event (on-hook or off-hook) with the "strict" (0x0001)
+   parameter set to "failWrong", and the hook state is already what the
+   transition implies, the execution of the command containing that
+   EventsDescriptor fails.  The MG SHALL include error code 540
+   "Unexpected initial hook state" in its reponse.
+
+E.9.6 Error code
+
+   This package defines a new error code:
+
+      540 - Unexpected initial hook state
+
+   The procedure for use of this code is given in E.9.5.
+
+E.10  Basic Continuity Package
+
+   PackageID: ct (0x000a)
+   Version: 1
+   Extends: None
+
+
+
+
+Groves, et al.              Standards Track                   [Page 175]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   This package defines events and signals for continuity test.  The
+   continuity test includes provision of either a loopback or
+   transceiver functionality.
+
+E.10.1   Properties
+
+   None.
+
+E.10.2   Events
+
+   Completion
+   EventID: cmp, 0x0005
+
+      This event detects test completion of continuity test.
+
+      EventDescriptor parameters
+
+         None.
+
+      ObservedEventsDescriptor parameters
+
+         Result
+         ParameterID: res (0x0008)
+
+            Type: enumeration
+
+            Possible values: success (0x0001), failure (0x0000)
+
+E.10.3   Signals
+
+   Continuity test
+   SignalID: ct (0x0003)
+
+      Initiates sending of continuity test tone on the termination to
+      which it is applied.
+
+      Signal Type: TimeOut
+
+      Default value is provisioned
+
+      Additional parameters:
+
+         None.
+
+   Respond
+   SignalID: rsp (0x0004)
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 176]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      The signal is used to respond to a continuity test.  See E.10.5
+      for further explanation.
+
+      Signal Type: On/Off
+
+      Default duration is provisioned
+
+      Additional parameters:
+
+         None.
+
+E.10.4   Statistics
+
+   None.
+
+E.10.5   Procedures
+
+   When a MGC wants to initiate a continuity test, it sends a command to
+   the MG containing:
+
+   -  a signals descriptor with the ct signal; and
+
+   -  an events descriptor containing the cmp event.
+
+   Upon reception of a command containing the ct signal and cmp event,
+   the MG initiates the continuity test tone for the specified
+   Termination.  If the return tone is detected and any other required
+   conditions are satisfied before the signal times out, the cmp event
+   shall be generated with the value of the result parameter equal to
+   success.  In all other cases, the cmp event shall be generated with
+   the value of the result parameter equal to failure.
+
+   When a MGC wants the MG to respond to a continuity test, it sends a
+   command to the MG containing a signals descriptor with the rsp
+   signal.  Upon reception of a command with the rsp signal, the MG
+   either applies a loopback or (for 2-wire circuits) awaits reception
+   of a continuity test tone.  In the loopback case, any incoming
+   information shall be reflected back as outgoing information.  In the
+   2-wire case, any time the appropriate test tone is received, the
+   appropriate response tone should be sent.  The MGC determines when to
+   remove the rsp signal.
+
+   When a continuity test is performed on a Termination, no echo devices
+   or codecs shall be active on that Termination.
+
+   Performing voice path assurance as part of continuity testing is
+   provisioned by bilateral agreement between network operators.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 177]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      (Informative Note) Example tones and test procedure details are
+      given in Q.724 sections 7 and 8, Q.764 section 2.1.8 and Q.1902.4.
+
+E.11  Network Package
+
+   PackageID: nt (0x000b)
+   Version: 1
+   Extends: None
+
+   This package defines properties of network terminations independent
+   of network type.
+
+E.11.1   Properties
+
+   Maximum Jitter Buffer
+   PropertyID: jit (0x0007)
+
+      This property puts a maximum size on the jitter buffer.
+
+      Type: integer in milliseconds
+
+      Possible values: This property is specified in milliseconds.
+
+      Defined in: LocalControlDescriptor
+
+      Characteristics: read/write
+
+E.11.2   Events
+
+   network failure
+   EventID: netfail, 0x0005
+
+      The termination generates this event upon detection of a failure
+      due to external or internal network reasons.
+
+      EventDescriptor parameters
+
+         None.
+
+      ObservedEventsDescriptor parameters
+
+         cause
+         ParameterID: cs (0x0001)
+
+            Type: string
+
+            Possible values: any text string
+
+
+
+
+Groves, et al.              Standards Track                   [Page 178]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            This parameter may be included with the failure event to
+            provide diagnostic information on the reason of failure.
+
+   quality alert
+   EventID: qualert, 0x0006
+
+      This property allows the MG to indicate a loss of quality of the
+      network connection.  The MG may do this by measuring packet loss,
+      interarrival jitter, propagation delay and then indicating this
+      using a percentage of quality loss.
+
+      EventDescriptor parameters
+
+         Threshold
+         ParameterId: th (0x0001)
+
+            Type: integer
+
+            Possible values: 0 to 99
+
+            Description: threshold for percent of quality loss measured,
+            calculated based on a provisioned method, that could take
+            into consideration packet loss, jitter, and delay for
+            example.  Event is triggered when calculation exceeds the
+            threshold.
+
+      ObservedEventsDescriptor parameters
+
+         Threshold
+         ParameterId: th (0x0001)
+
+            Type: integer
+
+            Possible values: 0 to 99
+
+            Description: percent of quality loss measured, calculated
+            based on a provisioned method, that could take into
+            consideration packet loss, jitter, and delay for example.
+
+E.11.3   Signals
+
+   None.
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 179]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+E.11.4   Statistics
+
+   Duration
+   StatisticsID: dur (0x0001)
+
+      Description: provides duration of time the termination has been in
+      the Context.
+
+      Type: double, in milliseconds
+
+   Octets Sent
+   StatisticID: os (0x0002)
+
+      Type: double
+
+      Possible values: any 64-bit integer
+
+   Octets Received
+   StatisticID: or (0x0003)
+
+      Type: double
+
+      Possible values: any 64-bit integer
+
+E.11.5   Procedures
+
+   None.
+
+E.12  RTP Package
+
+   PackageID: rtp (0x000c)
+   Version: 1
+   Extends: Network Package version 1
+
+   This package is used to support packet-based multimedia data transfer
+   by means of the Real-time Transport Protocol (RTP) [RFC 1889].
+
+E.12.1   Properties
+
+   None.
+
+E.12.2   Events
+
+   Payload Transition
+   EventID: pltrans, 0x0001
+
+      This event detects and notifies when there is a transition of the
+      RTP payload format from one format to another.
+
+
+
+Groves, et al.              Standards Track                   [Page 180]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      EventDescriptor parameters
+
+         None.
+
+      ObservedEventsDescriptor parameters
+
+         ParameterName: rtppayload
+         ParameterID: rtppltype, 0x01
+
+         Type: list of enumerated types.
+
+         Possible values: The encoding method shall be specified by
+         using one or several valid encoding names, as defined in the
+         RTP AV Profile or registered with IANA.
+
+E.12.3   Signals
+
+   None.
+
+E.12.4   Statistics
+
+   Packets Sent
+   StatisticID: ps (0x0004)
+
+      Type: double
+
+      Possible values: any 64-bit integer
+
+   Packets Received
+   StatisticID: pr (0x0005)
+
+      Type: double
+
+      Possible values: any 64-bit integer
+
+   Packet Loss
+   StatisticID: pl (0x0006)
+
+      Describes the current rate of packet loss on an RTP stream, as
+      defined in IETF RFC 1889.  Packet loss is expressed as percentage
+      value: number of packets lost in the interval between two
+      reception reports, divided by the number of packets expected
+      during that interval.
+
+      Type: double
+
+      Possible values: a 32-bit whole number and a 32-bit fraction.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 181]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Jitter
+   StatisticID: jit (0x0007)
+
+      Requests the current value of the interarrival jitter on an RTP
+      stream as defined in IETF RFC 1889.  Jitter measures the variation
+      in interarrival time for RTP data packets.
+
+   Delay
+   StatisticID:delay (0x0008)
+
+      Requests the current value of packet propagation delay expressed
+      in timestamp units.  Same as average latency.
+
+E.12.5   Procedures
+
+   None.
+
+E.13  TDM Circuit Package
+
+      PackageID: tdmc (0x000d)
+      Version: 1
+      Extends: Network Package version 1
+
+      This package may be used by any termination that supports gain and
+      echo control.  It was originally intended for use on TDM circuits
+      but may be more widely used.
+
+
+      New versions or extensions of this package should take non-TDM use
+      into account.
+
+E.13.1   Properties
+
+      Echo Cancellation
+      PropertyID: ec (0x0008)
+
+         Type: boolean
+
+         Possible values:
+
+            "on" (when the echo cancellation is requested) and
+
+            "off" (when it is turned off.)
+
+            The default is provisioned.
+
+         Defined in: LocalControlDescriptor
+
+
+
+
+Groves, et al.              Standards Track                   [Page 182]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+         Characteristics: read/write
+
+      Gain Control
+      PropertyID: gain (0x000a)
+
+         Gain control, or usage of of signal level adaptation and
+         noise level reduction is used to adapt the level of the signal.
+         However, it is necessary, for example for modem calls, to turn
+         off this function.
+
+         Type: integer
+
+         Possible values:
+
+         The gain control parameter may either be specified as
+         "automatic" (0xffffffff), or as an explicit number of decibels
+         of gain (any other integer value).  The default is provisioned
+         in the MG.
+
+      Defined in: LocalControlDescriptor
+
+      Characteristics: read/write
+
+E.13.2   Events
+
+   None.
+
+E.13.3   Signals
+
+   None.
+
+E.13.4   Statistics
+
+   None.
+
+E.13.5   Procedures
+
+   None.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 183]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+APPENDIX I  EXAMPLE CALL FLOWS (INFORMATIVE)
+
+   All H.248.1 implementors must read the normative part of this RFC
+   carefully before implementing from it.  The examples in this appendix
+   should not be used as stand-alone explanations of how to create
+   protocol messages.
+
+   The examples in this appendix use SDP for encoding of the Local and
+   and Remote stream descriptors. SDP is defined in RFC 2327. If there
+   is is any discrepancy between the SDP in the examples, and RFC 2327,
+   the the RFC should be consulted for correctness. Audio profiles used
+   are are those defined in IETF RFC 1890, and others registered with
+   IANA.  For example, G.711 A-law is called PCMA in SDP, and is
+   assigned profile 0. G.723.1 is called G723 and is profile 4; H.263 is
+   called H263 and is profile 34. See also
+   http://www.iana.org/assignments/rtp-parameters.
+
+A.1   Residential Gateway to Residential Gateway Call
+
+   This example scenario illustrates the use of the elements of the
+   protocol to set up a Residential Gateway to Residential Gateway call
+   over an IP-based network.  For simplicity, this example assumes that
+   both Residential Gateways involved in the call are controlled by the
+   same Media Gateway Controller.
+
+A.1.1 Programming Residential GW Analog Line Terminations for Idle
+   Behavior
+
+   The following illustrates the API invocations from the Media Gateway
+   Controller and Media Gateways to get the Terminations in this
+   scenario programmed for idle behavior.  Both the originating and
+   terminating Media Gateways have idle AnalogLine Terminations
+   programmed to look for call initiation events (i.e., -offhook) by
+   using the Modify Command with the appropriate parameters.  The null
+   Context is used to indicate that the Terminations are not yet
+   involved in a Context.  The ROOT termination is used to indicate the
+   entire MG instead of a termination within the MG.
+
+   In this example, MG1 has the IP address 124.124.124.222, MG2 is
+   125.125.125.111, and the MGC is 123.123.123.4. The default Megaco
+   port is 55555 for all three.
+
+   1. An MG registers with an MGC using the ServiceChange command:
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222] Transaction = 9998 {
+       Context = - {
+
+
+
+Groves, et al.              Standards Track                   [Page 184]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+           ServiceChange = ROOT {Services {
+               Method=Restart,
+               ServiceChangeAddress=55555, Profile=ResGW/1}
+           }
+       } }
+
+   2. The MGC sends a reply:
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Reply = 9998 {
+      Context = - {ServiceChange = ROOT {
+        Services {ServiceChangeAddress=55555, Profile=ResGW/1} } } }
+
+   3. The MGC programs a Termination in the NULL context.  The
+   terminationId is A4444, the streamId is 1, the requestId in the
+   Events descriptor is 2222.  The mId is the identifier of the sender
+   of this message, in this case, it is the IP address and port
+   [123.123.123.4]:55555.  Mode for this stream is set to SendReceive.
+   "al" is the analog line supervision package.  Local and Remote are
+   assumed to be provisioned.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 9999 {
+       Context = - {
+           Modify = A4444 {
+               Media { Stream = 1 {
+                        LocalControl {
+                            Mode = SendReceive,
+                            tdmc/gain=2,  ; in dB,
+                            tdmc/ec=on
+                        },
+
+                    }
+               },
+               Events = 2222 {al/of(strict=state)}
+           }
+       } }
+
+
+   The dialplan script could have been loaded into the MG previously.
+   Its function would be to wait for the OffHook, turn on dialtone and
+   start collecting DTMF digits.  However in this example, we use the
+   digit map, which is put into place after the offhook is detected
+   (step 5 below).
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 185]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   Note that the embedded EventsDescriptor could have been used to
+   combine steps 3 and 4 with steps 8 and 9, eliminating steps 6 and 7.
+
+   4. The MG1 accepts the Modify with this reply:
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555
+
+   Reply = 9999 {
+      Context = - {Modify = A4444} }
+
+   5. A similar exchange happens between MG2 and the MGC, resulting in
+   an idle Termination called A5555.
+
+A.1.2 Collecting Originator Digits and Initiating Termination
+
+   The following builds upon the previously shown conditions.  It
+   illustrates the transactions from the Media Gateway Controller and
+   originating Media Gateway (MG1) to get the originating Termination
+   (A4444) through the stages of digit collection required to initiate a
+   connection to the terminating Media Gateway (MG2).
+
+   6. MG1 detects an offhook event from User 1 and reports it to the
+   Media Gateway Controller via the Notify Command.
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Transaction = 10000 {
+      Context = - {
+          Notify = A4444 {ObservedEvents =2222 {
+            19990729T22000000:al/of(init=false)}}
+      } }
+
+   7. And the Notify is acknowledged.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Reply = 10000 {
+
+       Context = - {Notify = A4444} }
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 186]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   8. The MGC Modifies the termination to play dial tone, to look for
+   digits according to Dialplan0 and to look for the on-hook event now.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 10001 {
+       Context = - {
+           Modify = A4444 {
+               Events = 2223 {
+                   al/on(strict=state), dd/ce {DigitMap=Dialplan0}
+               },
+               Signals {cg/dt},
+               DigitMap= Dialplan0{ (0| 00|[1-
+   7]xxx|8xxxxxxx|Fxxxxxxx|Exx|91xxxxxxxxxx|9011x.)}
+           }
+       } }
+
+   9. And the Modify is acknowledged.
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Reply = 10001 {
+       Context = - {Modify = A4444} }
+
+   10.   Next, digits are accumulated by MG1 as they are dialed by User
+   1.  Dialtone is stopped upon detection of the first digit.  When an
+   appropriate match is made of collected digits against the currently
+   programmed Dialplan for A4444, another Notify is sent to the Media
+   Gateway Controller.
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Transaction = 10002 {
+      Context = - {
+          Notify = A4444 {ObservedEvents =2223 {
+            19990729T22010001:dd/ce{ds="916135551212",Meth=UM}}}
+      } }
+
+   11.   And the Notify is acknowledged.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Reply = 10002 {
+       Context = - {Notify = A4444} }
+
+
+   12.   The controller then analyses the digits and determines that a
+   connection needs to be made from MG1 to MG2.  Both the TDM
+
+
+
+Groves, et al.              Standards Track                   [Page 187]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   termination A4444, and an RTP termination are added to a new context
+   in MG1.  Mode is ReceiveOnly since Remote descriptor values are not
+   yet specified.  Preferred codecs are in the MGC's preferred order of
+   choice.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 10003 {
+       Context = $ {
+          Add = A4444,
+          Add = $ {
+              Media {
+                Stream = 1 {
+                     LocalControl {
+                         Mode = ReceiveOnly,
+
+                         nt/jit=40 ; in ms
+                     },
+                     Local { v=0 c=IN IP4 $ m=audio $ RTP/AVP 4
+   a=ptime:30 v=0 c=IN IP4 $ m=audio $ RTP/AVP 0
+                     }
+                }
+             }
+          }
+       } }
+
+
+      NOTE - The MGC states its preferred parameter values as a series
+      of SDP blocks in  Local.  The MG fills in the Local Descriptor in
+      the Reply.
+
+   13.   MG1 acknowledges the new Termination and fills in the Local IP
+   address and UDP port.  It also makes a choice for the codec based on
+   the MGC preferences in Local.  MG1 sets the RTP port to 2222.
+
+   MG1 -> MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Reply = 10003 {
+      Context = 2000 {
+         Add = A4444,
+         Add=A4445{
+            Media {
+                Stream = 1 {
+                    Local { v=0 o=- 2890844526 2890842807 IN IP4
+   124.124.124.222 s=- t= 0 0 c=IN IP4 124.124.124.222 m=audio 2222
+   RTP/AVP 4 a=ptime:30 a=recvonly
+                    } ; RTP profile for G.723.1 is 4
+                }
+
+
+
+Groves, et al.              Standards Track                   [Page 188]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+            }
+         }
+      } }
+
+   14.   The MGC will now associate A5555 with a new Context on MG2, and
+   establish an RTP Stream (i.e., A5556 will be assigned), SendReceive
+   connection through to the originating user, User 1.  The MGC also
+   sets ring on A5555.
+
+   MGC to MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 50003 {
+       Context = $ {
+          Add = A5555  { Media {
+               Stream = 1 {
+                    LocalControl {Mode = SendReceive} }},
+         Events=1234{al/of(strict=state)},
+               Signals {al/ri}
+
+               },
+          Add  = $ {Media {
+               Stream = 1 {
+                    LocalControl {
+                       Mode = SendReceive,
+                       nt/jit=40 ; in ms
+                    },
+                    Local { v=0 c=IN IP4 $ m=audio $ RTP/AVP 4
+   a=ptime:30
+                    },
+                    Remote { v=0 c=IN IP4 124.124.124.222 m=audio 2222
+   RTP/AVP 4 a=ptime:30
+                    } ; RTP profile for G.723.1 is 4
+                }
+             }
+         }
+      } }
+
+   15.   This is acknowledged.  The stream port number is different from
+   the control port number.  In this case it is 1111 (in the SDP).
+
+   MG2 to MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Reply = 50003 {
+      Context = 5000 {
+      Add = A5555,
+         Add = A5556{
+            Media {
+               Stream = 1 {
+
+
+
+Groves, et al.              Standards Track                   [Page 189]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                   Local { v=0 o=- 7736844526 7736842807 IN IP4
+   125.125.125.111 s=- t= 0 0 c=IN IP4 125.125.125.111 m=audio 1111
+   RTP/AVP 4 }
+               } ; RTP profile for G723.1 is 4
+            }
+          }
+
+      } }
+
+   16.   The above IPAddr and UDPport need to be given to MG1 now.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 10005 {
+     Context = 2000 {
+       Modify = A4444 {
+         Signals {cg/rt}
+       },
+       Modify = A4445 {
+          Media {
+               Stream = 1 {
+                   Remote { v=0 o=- 7736844526 7736842807 IN IP4
+   125.125.125.111 s=- t= 0 0 c=IN IP4 125.125.125.111 m=audio 1111
+   RTP/AVP 4
+                   }
+               } ; RTP profile for G723.1 is 4
+           }
+       }
+     } }
+
+
+   MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Reply = 10005 {
+      Context = 2000 {Modify = A4444, Modify = A4445} }
+
+   17.   The two gateways are now connected and User 1 hears the
+   RingBack.  The MG2 now waits until User2 picks up the receiver and
+   then the two-way call is established.
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 190]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   From MG2 to MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Transaction = 50005 {
+      Context = 5000 {
+
+          Notify = A5555 {ObservedEvents =1234 {
+            19990729T22020002:al/of(init=false)}}
+      } }
+
+   From MGC to MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Reply = 50005 {
+       Context = - {Notify = A5555} }
+
+   From MGC to MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 50006 {
+      Context = 5000 {
+         Modify = A5555 {
+            Events = 1235 {al/on(strict=state)},
+            Signals { } ; to turn off ringing
+         }
+      } }
+
+   From MG2 to MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Reply = 50006 {
+    Context = 5000 {Modify = A4445} }
+
+   18.   Change mode on MG1 to SendReceive, and stop the ringback.
+
+   MGC to MG1:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 10006 {
+      Context = 2000 {
+         Modify = A4445 {
+            Media {
+               Stream = 1 {
+                  LocalControl {
+                     Mode=SendReceive
+
+                  }
+               }
+            }
+         },
+         Modify = A4444 {
+            Signals { }
+         }
+
+
+
+Groves, et al.              Standards Track                   [Page 191]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+      } }
+
+   from MG1 to MGC:
+
+   MEGACO/1 [124.124.124.222]:55555 Reply = 10006 {
+      Context = 2000 {Modify = A4445, Modify = A4444}}
+
+   19.   The MGC decides to Audit the RTP termination on MG2.
+
+   MGC -> MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 50007 {
+      Context = - {AuditValue = A5556{
+         Audit{Media, DigitMap, Events, Signals, Packages, Statistics }}
+      } }
+
+   20.   The MG2 replies.
+
+   MG2 -> MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Reply = 50007 {
+      Context = - { AuditValue = A5556 {
+             Media {
+                TerminationState { ServiceStates = InService,
+            Buffer = OFF },
+          Stream = 1 {
+                    LocalControl { Mode = SendReceive,
+                       nt/jit=40 },
+                    Local { v=0 o=- 7736844526 7736842807 IN IP4
+   125.125.125.111 s=- t= 0 0 c=IN IP4 125.125.125.111 m=audio 1111
+   RTP/AVP  4 a=ptime:30
+                   },
+                    Remote { v=0 o=- 2890844526 2890842807 IN IP4
+   124.124.124.222 s=- t= 0 0 c=IN IP4 124.124.124.222 m=audio 2222
+   RTP/AVP  4 a=ptime:30
+                    } } },
+              Events,
+           Signals,
+           DigitMap,
+          Packages {nt-1, rtp-1},
+             Statistics { rtp/ps=1200,  ; packets sent
+                          nt/os=62300, ; octets sent
+                          rtp/pr=700, ; packets received
+                          nt/or=45100, ; octets received
+                          rtp/pl=0.2,  ; % packet loss
+                          rtp/jit=20,
+                          rtp/delay=40 } ; avg latency
+          }
+
+
+
+Groves, et al.              Standards Track                   [Page 192]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+       } }
+
+   21.   When the MGC receives an onhook signal from one of the MGs, it
+   brings down the call.  In this example, the user at MG2 hangs up
+   first.
+
+   From MG2 to MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Transaction = 50008 {
+      Context = 5000 {
+          Notify = A5555 {ObservedEvents =1235 {
+             19990729T24020002:al/on(init=false)}
+          }
+      } }
+
+   From MGC to MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Reply = 50008 {
+
+       Context = - {Notify = A5555} }
+
+   22.   The MGC now sends both MGs a Subtract to take down the call.
+   Only the subtracts to MG2 are shown here.  Each termination has its
+   own set of statistics that it gathers.  An MGC may not need to
+   request both to be returned.  A5555 is a physical termination, and
+   A5556 is an RTP termination.
+
+   From MGC to MG2:
+
+   MEGACO/1 [123.123.123.4]:55555 Transaction = 50009 {
+      Context = 5000 {
+         Subtract = A5555 {Audit{Statistics}},
+         Subtract = A5556 {Audit{Statistics}}
+      } }
+
+   From MG2 to MGC:
+
+   MEGACO/1 [125.125.125.111]:55555 Reply = 50009 {
+      Context = 5000 {
+        Subtract = A5555 {
+             Statistics {
+                nt/os=45123, ; Octets Sent
+                nt/dur=40 ; in seconds
+                }
+          },
+          Subtract = A5556 {
+             Statistics {
+                rtp/ps=1245, ; packets sent
+
+
+
+Groves, et al.              Standards Track                   [Page 193]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+                nt/os=62345, ; octets sent
+                rtp/pr=780, ; packets received
+                nt/or=45123, ; octets received
+                rtp/pl=10, ;  % packets lost
+                rtp/jit=27,
+                rtp/delay=48 ; average latency
+             }
+          }
+      } }
+
+   23.   The MGC now sets up both MG1 and MG2 to be ready to detect the
+   next off-hook event.  See step 1.  Note that this could be the
+   default state of a termination in the null context, and if this were
+   the case, no message need be sent from the MGC to the MG.  Once a
+   termination returns to the null context, it goes back to the default
+   termination values for that termination.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 194]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+APPENDIX II  Changes From RFC 3015
+
+   In the following table, "source" indicates when the change was first
+   approved.  It has the following values:
+
+   IG1100: H.248 Implementor's Guide approved in November, 2000 (as TD
+   Plen-39, Christian Groves, editor).
+
+   IG0601: H.248 Implementor's Guide approved in June, 2001 (as  TD
+   Plen-15, Christian Groves, editor).
+
+   IGDUB: Draft H.248 Implementor's Guide approved at the Q.3
+   Rapporteur's meeting held near Dublin, October 2001 (as TD-28, Terry
+   Anderson, editor).
+
+   GEN0202: added at the Geneva meeting, February 2002, which consented
+   to H.248 v1 Amendment 1 (as TD Plen-36r1, Marcello Pantaleo, editor).
+
+   ITUPOST: added in post-Geneva editing by the ITU-T.
+
+   TTPOST: added in post-approval editing by the Megaco Chair, Tom
+   Taylor, who assembled this document for submission.
+
+   Section    Source                       Change
+
+   1          ITUPOST   Reference changed from H.248 to H.248.1.
+
+   2.1        ITUPOST   Reference added for error codes, changed from
+                        H.248 Annex L to H.248.8 (2002).
+
+   2.1        IG1100    Corrected Q.765 reference to Q.765.5.
+
+   2.1        GEN0202   Added reference to X.690.
+
+   2.2        GEN0202   Added reference to H.226.
+
+   2.2         IGDUB    Added informative references to Q.724, Q.764,
+                        and Q.1902.4.
+
+   4          IG0601    Added expansion of ALF.
+
+   5          TTPOST    Gave priority to IETF conventions (added at
+                        start of document).
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 195]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   6.1.1      IG0601    Added text regarding use of wildcards for
+                        context identifiers.  (This information
+                        already appeared in section 8.1.2.  The IG
+                        change subsequently disappeared.)
+
+   6.1.1      IG1100    Added ranking of priority values.
+
+   6.2         IGDUB    Deleted definition of signals.
+
+   6.2        GEN0202   Expanded text and diagrams describing
+                        multiplexing terminations.
+
+   6.2        TTPOST    Added asterisks to multiplexing diagrams to
+                        indicate centre of context.  Added Figure 6a
+                        showing cascading of multiplexes.
+
+   6.2.2      IG0601    Added text indicating that ALL does not
+                        include ROOT.
+
+   6.2.3      IG1100    Added text clarifying what must be supported
+                        to claim support of a package.
+
+   6.2.3      IG1100    Added text indicating what packages a peer can
+                        indicate support for, when some of them are
+                        extensions of others.
+
+   6.2.4      IG0601    Added text on ability of provisioning to
+                        override default values, and need for MGC to
+                        audit to learn the provisioned defaults.
+
+   6.2.4      IG0601    Added text indicating effect of omitting
+                        specific properties from Descriptors in
+                        commands modifying a termination.
+                        Contradicted original text saying that omitted
+                        properties retain their prior values (still
+                        true for entirely-omitted Descriptors).
+
+   6.2.4      GEN0202   Modified above text to restrict it to
+                        read/write properties, allow for default
+                        behaviour in place of default values if so
+                        specified in the property definition.
+
+   6.2.4       IGDUB    Trimmed definition of signals Descriptor in
+                        table and inserted cross-reference to section
+                        7.1.11.
+
+   6.2.4      IG1100    Added Topology and Error Descriptors to table.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 196]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   6.2.5       IGDUB    Specified error code to return if ROOT used
+                        inappropriately.
+
+   7.1.1      IG1100    Added qualification to explanation of effect
+                        of missing Audit Descriptor, excepting
+                        Subtract.
+
+   7.1.3      GEN0202   Changed "inputs" to "bearers" to be consistent
+                        with terminology in 6.2.
+
+   7.1.4      IG0601    Small change to make clear that more than one
+                        of Local, Remote, and LocalControl can be
+                        included in the default streamId.
+
+   7.1.7      IG0601    Default value for Mode specified to be
+                        Inactive.
+
+   7.1.7      GEN0202   Added text requiring processing of media in
+                        any of the reserved formats, where more than
+                        one has been reserved in a given stream.
+
+   7.1.8       IGDUB    Added restriction to at most one m= line per
+                        session description.
+
+   7.1.9      IG0601    Text added to omit request identifier if the
+                        EventsDescriptor is empty.  Further text added
+                        at end to indicate the effects of an empty
+                        EventsDescriptor and an empty
+                        EventBufferDescriptor.
+
+   7.1.9      IG0601    Fixed typo for destination of a Notify.
+
+   7.1.9      IG1100    Added note to say event remains active after
+                        it has been notified, so long as it is still
+                        present in the active Events Descriptor.
+
+   7.1.11      IGDUB    Added definition of signals.
+
+   7.1.11     GEN0202   Modified definition to include example of more
+                        complex signal, and added role of signal in
+                        media preparation for future signals.
+
+   7.1.11      IGDUB    The timeout completion reason was broadened to
+                        include other circumstances where the signal
+                        completed on its own.  Text added to indicate
+                        that if default signal type changed to TO,
+                        duration parameter must be provided.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 197]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   7.1.11     GEN0202   Removed reference to BR signal being "so
+                        short" it will stop on its own.  Added text
+                        indicating that if the type of a signal is
+                        changed to TO, the Duration parameter must be
+                        supplied.
+
+   7.1.11     IG1100    Deleted text discussing type of Signals List.
+
+   7.1.12     GEN0202   Improved wording of introductory paragraph and
+                        added text making content of returned
+                        Descriptor clear.
+
+   7.1.14.2   GEN0202   Added text indicating that when the start
+                        timer is set to 0, initial digit timing is
+                        disabled and the MG waits indefinitely for
+                        digits.
+
+   7.1.14.2   GEN0202   Added text pointing out that default digit
+                        timer values should be provisioned, but can be
+                        overridden in the digit map.
+
+   7.1.14.3   GEN0202   Changed result of long-short digit timer
+                        conflict from undefined to long.
+
+   7.1.14.6   IG1100    Clarified that the digit map is provided by
+                        the eventDM parameter, which must be present.
+
+   7.1.14.7   GEN0202   Added text clarifying that events covered by
+                        the digit map completion event have no side-
+                        effects unless separately enabled.
+
+   7.1.14.8   IG0601    Added requirement that the event specification
+                        include the eventDM parameter.
+
+   7.1.17      IGDUB    Added text to indicate timestamp is optional
+                        and to include observed event parameters in
+                        reported content.
+
+   7.1.17     GEN0202   Deleted provision that time is expressed in
+                        UTC (since intention was to use format, not
+                        time zone).
+
+   7.1.18      IGDUB    Added text indicating error to return if
+                        topology option not supported.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 198]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   7.1.18     IG1100    Added text clarifying effect of not mentioning
+              TTPOST    a termination in a topology Descriptor, and
+                        default topology for a new termination.  (This
+                        text got lost between the Dublin meeting and
+                        the production of H.248 Amendment 1 out of the
+                        Geneva 02/02 meeting.  It has been added back
+                        to the present document.)
+
+   7.1.19     IG1100    New section to describe Error Descriptor.
+              GEN0202   Slightly edited in Geneva 02/02 meeting.
+              ITUPOST   Reference for error code documentation updated
+                        to H.248.8.
+
+   7.1.19     IG0601    Added paragraph giving guidance on level at
+                        which errors should be reported.
+
+   7.2        IG1100    Noted possibility of Error Descriptor in reply
+                        to any command.
+
+   7.2.1      IG1100    Added EventBufferDescriptor as Add parameter.
+
+   7.2.1      IG1100    Removed restriction on use of CHOOSE wildcard.
+
+   7.2.2      IG1100    Added EventBufferDescriptor as Modify
+                        parameter.
+
+   7.2.2      GEN0202   Added text on side-effects of Modify of a
+                        multiplexing termination.
+
+   7.2.3      IG1100    Added prohibition against subtracting from the
+                        NULL context.
+
+   7.2.3      GEN0202   Added text on side-effects of Subtract of a
+                        multiplexing termination.
+
+   7.2.3       IGDUB    Added text clarifying effect of empty
+                        AuditDescriptor in Subtract.
+
+   7.2.4      IG1100    Added EventBufferDescriptor as Move parameter.
+
+   7.2.4      GEN0202   Removed misleading statement that Move acts as
+                        subtract from original context.
+
+   7.2.4      IG1100    Clarified effect of Move on properties of the
+                        moved termination.
+
+   7.2.4      GEN0202   Added text on side-effects of Move of a
+                        multiplexing termination.
+
+
+
+Groves, et al.              Standards Track                   [Page 199]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   7.2.5      IG1100    Added examples showing W- wildcard usage.
+
+   7.2.5      IG1100    Noted that returning a list of all contextIDs
+                        requires that they be returned one per
+                        ActionReply.
+
+   7.2.5      IG1100    Added table entry (ALL, specific) to determine
+                        context in which termination currently
+                        resides.
+
+   7.2.6      GEN0202   Added table similar to that in 7.2.5.
+
+   7.2.7      IG0601    Added TerminationID to API.
+
+   7.2.7       IGDUB    Indicated timestamp was optional in Notify, to
+                        accord with syntax.
+
+   7.2.7      IG1100    Noted possibility of sending Error Descriptor
+                        in Notify.
+
+   7.2.8      IG0601    Added text to description of Forced method to
+                        indicate that Forced on ROOT indicates a cold
+                        restart (all context state lost).
+
+   7.2.8       IGDUB    Amplified explanation of Disconnected method
+                        to emphasize return to the previously
+                        controlling MGC.
+
+   7.2.8      IG0601    Added text for MG use of Failover method when
+                        it detects MGC failure.
+
+   7.2.8      IG1100    Added notes discouraging use of
+                        ServiceChangeAddress and warning that it could
+                        be either a full address or just a port
+                        number.
+
+   7.2.8      IG0601    Added text indicating that timestamp does not
+                        necessarily represent absolute time, only
+                        local clock reading.
+
+   7.2.8       IGDUB    Corrected "gateway" to "MGC" in discussion of
+                        returned ServiceChangeMgcId parameter.
+
+   7.3        IG0601    Removed error code documentation to Annex L
+              ITUPOST   (now H.248.8).
+
+   8          IG1100    Added requirement that an Action be non-empty.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 200]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   8          GEN0202   Added context properties and context property
+                        audit requests to commands as potential
+                        contents of actions.
+
+   8.1.2      GEN0202   Added prohibition on using partial contextIDs
+                        with ALL wildcards.
+
+   8.2.2      IG1100    Added text clarifying when in transaction
+                        processing the requested actions have been
+                        completed and a reply can be sent.
+
+   8.2.2      IG1100    Added ALL as allowed contextID in
+                        TransactionReply.
+
+   8.2.2      GEN0202   Provided general reference to section 7.1.19
+                        for generation of error Descriptors.
+
+   8.2.2      IG0601    Corrected Actions to Commands when discussing
+                        partially-understood action.
+
+   8.3        IG0601    Added text specifying that the same MId value
+                        must be used by a given entity throughout the
+                        life of a control association.
+
+   8.3        IG0601    Added text expanding on independence of
+                        transactions from messages.
+
+   9          ITUPOST   Indicated that additional transports may be
+                        defined in separate Recommendations as well as
+                        annexes to the primary specification.
+
+   9          IG0601    Gave specific example of "request source
+                        address" for IP.
+
+   9.1        IG1100    Deleted restriction to one outstanding Notify
+                        command on a termination at one time, since
+                        this is transport-specific.
+
+   9.1        IG0601    Restored restriction, but noted that it
+                        applied only to transport not guaranteeing
+                        ordered delivery.
+
+   10.2       IG1100    Corrected length of synthesized address field
+                        from 10 to 20 hex digits and indicated that
+                        calculation should be over entire message, not
+                        just one transaction.
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 201]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   11.2       IG1100    Corrected text in first two paragraphs
+                        describing use of ServiceChangeMgcId
+                        parameter.
+
+   11.2       IG1100    Corrected "Transaction Accept" to "Transaction
+                        Reply".
+
+   11.4       IG0601    Noted that support of redundant MGs requires
+              GEN0202   use of a reliable transport and support in the
+                        MGC.  Added more explanation in Geneva.
+
+   11.5       IG0601    Added text clarifying procedure if MG unable
+                        to establish a control relationship with any
+                        of its eligible MGCs.
+
+   11.5        IGDUB    Added text indicating that when trying to
+                        reestablish contact with the previously
+                        controlling MGC the MG uses the Disconnected
+                        method.
+
+   11.5       IG1100    Clarified handoff procedure.
+
+   11.5       GEN0202   Changed text on replies to transactions in
+                        progress during handoff.  Replies now
+                        discarded when the service relationship with
+                        the old MGC has ended, rather than sent to the
+                        new MGC.  The new MGC could still send replies
+                        to requests sent to the old MGC.
+
+   12.1.1     GEN0202   Added optional package designation as
+                        "designed to be extended only".
+
+   12.1.1     IG1100    Made prohibition on overloading of identifiers
+                        in extended packages transitive through all
+                        ancestors of the extended package.
+
+   12.1.2      IGDUB    Clarified the set of types allowed for
+                        properties.
+
+   12.1.2     GEN0202   Added requirement to specify the base type of
+                        a sub-list.
+
+   12.1.2     GEN0202   Provided requirements for content of the
+                        "Possible Values" template item, including
+                        specification of default values or behaviour.
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 202]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   12.1.4     GEN0202   Added requirement to specify the default
+                        signal type, and specify a default duration
+                        for TO signals.  Also noted that duration is
+                        meaningless for BR, and that the signal type
+                        might be dependent on the values of other
+                        signal parameters.
+
+   12.2       GEN0202   Fixed section title (covers only event and
+                        signal parameters, not properties or
+                        statistics).
+
+   12.2       IG1100    Reserved SPA and EPA prefixes, so they are not
+                        to be used for signal and event parameter
+                        tokens.
+
+   12.2       IG0601    Expanded list of reserved prefixes.
+
+   12.2        IGDUB    Clarified the set of types allowed for signal
+                        and event parameters.
+
+   12.2       GEN0202   Added requirement to specify the base type of
+                        a sub-list.
+
+   12.2       GEN0202   Provided requirements for content of the
+                        "Possible Values" template item, including
+                        specification of default values or behaviour.
+
+   12.4        IGDUB    Corrected to indicate identifiers must start
+                        with alphabetic rather than alphanumeric
+                        character.
+
+   13.1       IG0601    Changed private range of binary package
+                        identifiers to convenient hex values.
+
+   A          GEN0202   Removed versions from X.680 and X.690
+                        references.
+
+   A.2         IGDUB    Added note warning that the syntax alone does
+                        not provide a complete description of the
+                        constraints, but must be supplemented by a
+                        reading of the text and comments.
+
+   A.2        IG0601    Added description of double wrapping of
+                        parameters declared as OCTET STRING.
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 203]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   A.2        GEN0202   Some editing of double wrapping description to
+                        use ASN.1, BER in their proper places.  Added
+                        possibility of encoding strings as UTF8String,
+                        but only if they contain non-ASCII characters.
+
+   A.2         IGDUB    Added line in table on double wrapping of true
+                        octet strings.
+
+   A.2        IG1100    Corrected and expanded comments describing
+                        mtpAddress form of MId.  Fixed maximum length
+                        of mtpAddress both here and in
+                        ServiceChangeAddress.
+
+   A.2        IG0601   Inserted missing lines in IP4Address
+                        production.
+
+   A.2        IG0601    Modified TransactionResponseAck to allow
+                        acknowledgement of multiple ranges of
+                        transactionIds.
+
+   A.2        IG0601    Corrected numerical value of CHOOSE as a
+                        context identifier.
+
+   A.2         IGDUB    Added missing extension marker in
+                        TopologyRequest.
+
+   A.2        IG1100    AuditReply and AuditResult modified to bring
+                        binary functionality into line with text
+                        functionality.
+
+   A.2        IG0601    Removed OPTIONAL tag from terminationID in
+                        NotifyReply.
+
+   A.2        IG0601    Added extraInfo substructure to EventParameter
+                        and SigParameter.
+
+   A.2        IG0601    Modified MediaDescriptor to make it optional
+                        to specify a stream.
+
+   A.2        IG0601    Added OPTIONAL tags to reserveValue and
+                        reserveGroup.
+
+   A.2         IGDUB    Added to comments for pkgdName to indicate
+                        applicability to event names, signal names,
+                        and statisticIds as well as property.
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 204]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   A.2        IG0601    RequestID made optional in EventsDescriptor
+                        and SecondEventsDescriptor and comment added
+                        saying it must be present if events are
+                        present.
+
+   A.2        IG1100    Added OPTIONAL tags on RequestActions and
+                        SecondRequestedActions keepActive BOOLEANs.
+
+   A.2        IG1100    Added comment to indicate requestID value to
+                        use in an AuditCapReply.
+
+   A.2        GEN0202   Added comment to DigitMapValue indicating time
+                        units for timers.
+
+   A.2        IG0601    Added comment indicating coding of Value for
+              GEN0202   ServiceChangeReason.  Cleaned up in Geneva to
+                        use ASN.1 and BER in their proper places.
+
+   A.2        IG0601    Inserted missing extension marker in
+                        ServiceChangeParm production.
+
+   A.2        IG0601    Aligned definition of mtpAddress in
+                        ServiceChangeAddress with that in MId.
+
+   A.2        IG0601    Added timestamp to ServiceChangeResParm.
+
+   A.2         IGDUB    Changed type of profileName in
+                        ServiceChangeProfile to IA5String.
+
+   A.2        IG0601    Made returned value optional in
+                        statisticsParameter, to support
+                        auditCapability result.
+
+   A.2        GEN0202   Added reference to ISO 8601:1988 for
+                        TimeNotation.
+
+   A.2        IG1100    Value production modified to support the
+                        sublist parameter type.
+
+   A.3        IG1100    Corrected ABNF for digitStringlisT, replacing
+                        "/" with "|".
+
+   A.3        IG1100    Added parentheses to digitMapRange production.
+
+   A.3        IG1100    Replaced more abbreviated syntax for pathName
+                        with fuller definition and constraints copied
+                        from B.2.
+
+
+
+
+Groves, et al.              Standards Track                   [Page 205]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   B.2         IGDUB    Added note warning that the syntax alone does
+                        not provide a complete description of the
+                        constraints, but must be supplemented by a
+                        reading of the text and comments.
+
+   B.2        IG0601    Added note warning that the interpretation of
+                        symbols is context-dependent.
+
+   B.2        IG1100    Added comment to indicate case insensitivity
+                        of protocol (excepting SDP) and ABNF.
+
+   B.2        IG0601    Expanded upon and capitalized this comment.
+
+   B.2        IG0601    Lengthy note added on the coding of the VALUE
+                        construct.
+
+   B.2         IGDUB    Deleted sentence in note suggesting that
+                        packages could add new types for properties,
+                        parameters, or statistics.
+
+   B.2        IG0601    Added note indicating that parsers should
+                        allow for white space preceding the first line
+                        of SDP in Local or Remote.
+
+   B.2         IGDUB    Added comments identifying the O- and W- tags.
+
+   B.2        IG1100    Moved wildcard tag up from individual commands
+                        to commandRequestList.
+
+   B.2        GEN0202   Added additional error case to actionReply.
+
+   B.2        IG0601    Modified syntax of auditOther to allow return
+                        of terminationID only.
+
+   B.2         IGDUB    Corrected upper limit for V4hex.
+
+   B.2        IG1100    Corrected and expanded comments describing
+                        mtpAddress form of MId.
+
+   B.2        IG0601    Modified comment to mediaParm to make
+                        streamParms and StreamDescriptor mutually
+                        exclusive.
+
+   B.2        GEN0202   Modified comment further to indicate at most
+                        one instance of terminationStateDescriptor.
+
+   B.2        GEN0202   Expanded comment for streamParm to indicate
+                        the restriction on repetition is per item.
+
+
+
+Groves, et al.              Standards Track                   [Page 206]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   B.2        IG0601    Modified "at most once" comments to localParm,
+                        terminationStateParm, and modemType, to allow
+                        multiple instances of propertyParm in the
+                        first two cases and extensionParameter in the
+                        last one.
+
+   B.2        IG0601    Added note before description of Local and
+                        Remote, pointing out that the octet value x00
+                        is not allowed in octetString.
+
+   B.2        IG0601    Syntax for eventsDescriptor, embedFirst, and
+                        eventBufferDescriptor modified to make
+                        contents beyond token optional.
+
+   B.2         IGDUB    Replaced "event" by "item" in comment to
+                        pkgdName because pkgdName applies to
+                        properties, signals, and statistics as well.
+
+   B.2        IG0601    Corrected placement of EQUAL in eventDM
+                        production.
+
+   B.2        IG1100    Added comment and syntax to indicate requestID
+                        value to use in an AuditCapReply.
+
+   B.2        IG1100    Corrected Modem Descriptor to allow package
+                        items as properties.
+
+   B.2        IG0601    Comment to modemType changed to allow multiple
+                        instances of extensionParameter.
+
+   B.2        GEN0202   Comment added to indicate units for Timer.
+
+   B.2        IG1100    Added parentheses to digitMapRange production.
+
+   B.2        IG1100    Added comment to serviceChangeParm,
+                        restricting each parameter to one appearance.
+
+   B.2        IG0601    Added comments making serviceChangeMgcId and
+                        serviceChangeAddress mutually exclusive in
+                        ServiceChangeParm and servChgReplyParm.
+
+   B.2         IGDUB    Added comment to serviceChangeParm indicating
+                        that ServiceChangeMethod and
+                        ServiceChangeReason are required.
+
+   B.2        IG0601    Added Timestamp to servChgReplyParm.
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 207]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   B.2        IG0601    Added comment indicating coding of Value for
+                        ServiceChangeReason.
+
+   B.2        IG0601    Modified ServiceChangeAddress to use MId
+                        definition for full address.
+
+   B.2        IG1100    Made returned value optional in
+                        statisticsParameter, to support
+                        auditCapability result.
+
+   B.2        IG1100    Changed topologyDescriptor to allow multiple
+                        triples.
+
+   B.2        IG0601    Added comment forbidding use of a double quote
+                        within a quotedString value.
+
+   B.2        IG1100    Reserved prefixes for new tokens added to
+                        signalParameter and eventParameter, to avoid
+                        collision with package names.
+
+   B.2        IG1100    EmbedToken and EmergencyToken changed to
+                        remove clash with EventBufferToken.
+
+   B.3        IG1100    New section describing hexadecimal octet
+                        encoding.
+
+   B.4        IG1100    New section describing hex octet sequence.
+
+   C          IG1100    Added permission to use Annex C properties in
+                        LocalControl as well as in Local and Remote.
+
+   C          IG0601    Added text making support of all properties of
+                        Annex C optional.
+
+   C           IGDUB    Added directions to reconcile tabulated
+                        formats with allowed types for properties.
+
+   C.1        IG1100    Corrected Q.765 reference to Q.765.5 for
+                        ACodec.
+
+   C.1        IG1100    Deprecated Echocanc codepoint in favour of
+                        package-defined property.
+
+   C.4        ITUPOST   Updated references from Q.2961 to Q.2961.1.
+
+   C.4         IGDUB    Added details on format of VPVC.
+
+   C.9        IG1100    Renamed USI to layer1prot.
+
+
+
+Groves, et al.              Standards Track                   [Page 208]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   C.9        IG1100    Deprecated ECHOCI codepoint in favour of
+                        package-defined property.
+
+   C.9        IG1100    Added new USI property.
+
+   C.11       IG1100    Added m= line tag.
+
+   D.1        IG0601    Added explanation of ALF.
+
+   D.1.5       IGDUB    Expanded text indicating that when trying to
+                        reestablish contact with the previously
+                        controlling MGC the MG uses the Disconnected
+                        method.
+
+   E.1.2      GEN0202   Added missing EventsDescriptor parameters
+                        lines.
+
+   E.1.2      GEN0202   For the Signal Completion event:
+                        - corrected the description of how it is
+                        enabled
+                        - heavily edited the description of the Signal
+                        Identity observed event parameter and added a
+                        type.
+
+   E.1.2       IGDUB    The timeout completion reason for the Signal
+                        Completion event was broadened to include
+                        other circumstances where the signal completed
+                        on its own.
+
+   E.1.2      IG1100    Added signal list ID observed event parameter
+                        to the Signal Completion event.
+
+   E.2.1      IG0601    Added missing read only, read-write
+                        specifications.
+
+   E.2.1      IG0601    Split ProvisionalResponseTimer properties into
+                        one for MG, one for MGC.
+
+   E.3        GEN0202   Added "Designed to be extended only" to
+                        tonegen package description.
+
+   E.4        GEN0202   Added "Designed to be extended only" to
+                        tonedet package description.
+
+   E.4.2      GEN0202   Added type for tone ID observed parameter for
+                        Long Tone Detected event.
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 209]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   E.6.2      IG1100    Corrected binary identifier for digit map
+                        completion event to avoid clash with base
+                        package.
+
+   E.6.2      IG1100    Removed procedural text.
+
+   E.6.5      IG1100    Added procedural text indicating where to find
+                        the applicable digit map and indicating the
+                        error to return if the parameter is missing.
+
+   E.6.5      IG0601    Further modified procedural text.
+
+   E.7.3      IG1100    Corrected text identifier for payphone
+                        recognition tone to avoid clash with base
+                        package.
+
+   E.10.5      IGDUB    Provided informative references for tones and
+                        procedures for continuity check.
+
+   E.13       GEN0202   Added note that TDM package could also apply
+                        to other transports.
+
+   E.13.1     IG1100    Changed default for echo cancellation from
+                        "on" to provisioned.
+
+   E.13.1     IG0601    Corrected type for gain property.
+
+   Appendix   TTPOST    Included a number of corrections which were
+      I                 not picked up in H.248.1 Amendment 1 but which
+                        do appear in H.248.1 v2.
+
+Intellectual Property Rights
+
+   The ITU draws attention to the possibility that the practice or
+   implementation of this RFC may involve the use of a claimed
+   Intellectual Property Right.  The ITU takes no position concerning
+   the evidence, validity or applicability of claimed Intellectual
+   Property Rights, whether asserted by ITU members or others outside of
+   the Recommendation development process.
+
+   As of the date of approval of this RFC, the ITU had received notice
+   of intellectual property, protected by patents, which may be required
+   to implement this RFC.  However, implementors are cautioned that this
+   may not represent the latest information and are therefore strongly
+   urged to consult the TSB patent database.
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 210]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   The IETF has also received notice of intellectual property claims
+   relating to Megaco/H.248.1.  Please consult the IETF IPR
+   announcements at http://www.ietf.org/ipr.html.
+
+Acknowledgments
+
+   Megaco/H.248.1 is the result of hard work by many people in both the
+   IETF and in ITU-T Study Group 16.  This section records those who
+   played a prominent role in ITU-T meetings, on the Megaco list, or
+   both.
+
+   Megaco/H.248 owes a large initial debt to the MGCP protocol (RFC
+   2705), and thus to its authors, Mauricio Arango, Andrew Dugan, Ike
+   Elliott, Christian Huitema, and Scott Pickett.  Flemming Andreasen
+   does not appear on this list of authors, but was a major contributor
+   to the development of both MGCP and Megaco/H.248.1.  RFC 3435 has an
+   extensive acknowledgement of many other people who worked on media
+   gateway control before Megaco got started.
+
+   The authors of the first Megaco RFCs (2805, then 3015) were Fernando
+   Cuervo, Nancy Greene, Abdallah Rayhan, Christian Huitema, Brian
+   Rosen, and John Segers.  Christian Groves conceived and was editor of
+   Annex C.  The people most active on the Megaco list in the period
+   leading up to the completion of RFC 2885 were Brian Rosen, Tom
+   Taylor, Nancy Greene, Christian Huitema, Matt Holdrege, Chip Sharp,
+   John Segers, Michael Thomas, Henry Sinnreich, and Paul Sijben.  The
+   people who sacrificed sleep and meals to complete the massive amount
+   of work required in the decisive Study Group 16 meeting of February,
+   2000, were Michael Brown, Ranga Dendi, Larry Forni, Glen Freundlich,
+   Christian Groves, Alf Heidemark, Steve Magnell, Selvam Rengasami,
+   Rich Rubin, Klaus Sambor, John Segers, Chip Sharp, Tom Taylor, and
+   Stephen Terrill.
+
+   The most active people on the Megaco list in the period since the
+   February 2000 have been Tom Taylor, Brian Rosen, Christian Groves,
+   Madhu Babu Brahmanapally, Troy Cauble, Terry Anderson, Chuong Nguyen,
+   and Kevin Boyle, but many other people have been regular
+   contributors.  Brian Rosen did tremendous service in putting together
+   the Megaco interoperability tests.  On the Study Group 16 side, the
+   editorial team for the final revised document in February, 2002
+   included Christian Groves, Marcello Pantaleo, Terry Anderson, Peter
+   Leis, Kevin Boyle, and Tom Taylor.
+
+   Tom Taylor as Megaco Chair managed the day to day operation of the
+   Megaco list, with Brian Rosen taking an equal share of the burden for
+   most of the last three years.  Glen Freundlich as the Study Group 16
+   Rapporteur ran the ITU-T meetings and ensured that all of the work at
+   hand was completed.  Without Glen's determination the Megaco/H.248
+
+
+
+Groves, et al.              Standards Track                   [Page 211]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+   standard would have taken at least half a year longer to produce.
+   Christian Groves filled in ably as Rapporteur when Glen could no
+   longer take part.
+
+Authors' Addresses
+
+   Terry L. Anderson
+   24 Hill St
+   Bernardsville, NJ 07924
+   USA
+
+   EMail: tlatla@verizon.net
+
+
+   Christian Groves
+   Ericsson AsiaPacificLab Australia
+   37/360 Elizabeth St
+   Melbourne, Victoria 3000
+   Australia
+
+   EMail: Christian.Groves@ericsson.com.au
+
+
+   Marcello Pantaleo
+   Ericsson Eurolab Deuschland
+   Ericsson Allee 1
+   52134 Herzogenrath, Germany
+
+   EMail: Marcello.Pantaleo@eed.ericsson.se
+
+
+   Tom Taylor
+   Nortel Networks
+   1852 Lorraine Ave,
+   Ottawa, Ontario
+   Canada K1H 6Z8
+
+   Phone: +1 613 736 0961
+   EMail: taylor@nortelnetworks.com
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 212]
+
+RFC 3525                Gateway Control Protocol               June 2003
+
+
+Full Copyright Statement
+
+   Copyright (C) The Internet Society (2003).  All Rights Reserved.
+
+   This document and translations of it may be copied and furnished to
+   others, and derivative works that comment on or otherwise explain it
+   or assist in its implementation may be prepared, copied, published
+   and distributed, in whole or in part, without restriction of any
+   kind, provided that the above copyright notice and this paragraph are
+   included on all such copies and derivative works.  However, this
+   document itself may not be modified in any way, such as by removing
+   the copyright notice or references to the Internet Society or other
+   Internet organizations, except as needed for the purpose of
+   developing Internet standards in which case the procedures for
+   copyrights defined in the Internet Standards process must be
+   followed, or as required to translate it into languages other than
+   English.
+
+   The limited permissions granted above are perpetual and will not be
+   revoked by the Internet Society or its successors or assigns.
+
+   This document and the information contained herein is provided on an
+   "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
+   TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
+   BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
+   HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
+   MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+
+Acknowledgement
+
+   Funding for the RFC Editor function is currently provided by the
+   Internet Society.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Groves, et al.              Standards Track                   [Page 213]
+
