MEGACO (Media Gateway Control) protocol decoder

diff --git a/examples/Makefile.am b/examples/Makefile.am
index 76f23f6..a89d25e 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -6,11 +6,18 @@
 	rfc3280-PKIX1Explicit88.asn1	\
 	rfc3280-PKIX1Implicit88.asn1
 
-all: $(ASN1_FILES_1)
+ASN1_SOURCE_2 = rfc3525.txt
+ASN1_FILES_2 =				\
+	rfc3525-MEDIA-GATEWAY-CONTROL.asn1
+
+all: $(ASN1_FILES_1) $(ASN1_FILES_2)
 
 $(ASN1_FILES_1): crfc2asn1.pl $(ASN1_SOURCE_1)
 	./crfc2asn1.pl $(ASN1_SOURCE_1)
 
+$(ASN1_FILES_2): crfc2asn1.pl $(ASN1_SOURCE_2)
+	./crfc2asn1.pl $(ASN1_SOURCE_2)
+
 EXTRA_DIST = $(srcdir)/rfc*.txt					\
 	$(srcdir)/sample.source.PKIX1/README			\
 	$(srcdir)/sample.source.PKIX1/config.h			\
diff --git a/examples/Makefile.in b/examples/Makefile.in
index e835a86..267dd21 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -67,8 +67,6 @@
 CCDEPMODE = @CCDEPMODE@
 CFLAGS = @CFLAGS@
 CONFIGURE_DEPENDS = @CONFIGURE_DEPENDS@
-CPLUSPLUS_FOUND_FALSE = @CPLUSPLUS_FOUND_FALSE@
-CPLUSPLUS_FOUND_TRUE = @CPLUSPLUS_FOUND_TRUE@
 CPP = @CPP@
 CPPFLAGS = @CPPFLAGS@
 CXX = @CXX@
@@ -170,6 +168,10 @@
 	rfc3280-PKIX1Explicit88.asn1	\
 	rfc3280-PKIX1Implicit88.asn1
 
+ASN1_SOURCE_2 = rfc3525.txt
+ASN1_FILES_2 = \
+	rfc3525-MEDIA-GATEWAY-CONTROL.asn1
+
 EXTRA_DIST = $(srcdir)/rfc*.txt					\
 	$(srcdir)/sample.source.PKIX1/README			\
 	$(srcdir)/sample.source.PKIX1/config.h			\
@@ -367,11 +369,14 @@
 	uninstall-dist_binSCRIPTS uninstall-info-am
 
 
-all: $(ASN1_FILES_1)
+all: $(ASN1_FILES_1) $(ASN1_FILES_2)
 
 $(ASN1_FILES_1): crfc2asn1.pl $(ASN1_SOURCE_1)
 	./crfc2asn1.pl $(ASN1_SOURCE_1)
 
+$(ASN1_FILES_2): crfc2asn1.pl $(ASN1_SOURCE_2)
+	./crfc2asn1.pl $(ASN1_SOURCE_2)
+
 clean-local:
 	cd sample.source.PKIX1 && make distclean
 	cd sample.source.TAP3 && make distclean
diff --git a/examples/README b/examples/README
index 5f554f2..7d1e230 100644
--- a/examples/README
+++ b/examples/README
@@ -1,5 +1,5 @@
 
-This directory contains a examples of ASN.1 converters.
+This directory contains a few examples.
 
 1. The ./sample.source.PKIX1 directory contains the X.509 Certificate decoder.
 
@@ -10,8 +10,13 @@
    ISO 13522 MHEG-5/ITU-T T.172 (Multimedia Hypermedia Experts Group,
    Multimedia Presentations). Read the README file in that directory.
 
+3. The ./sample.source.MEGACO directory contains the decoder for
+   Media Gateway Control Protocol data units as specified in rfc3525.txt.
+
 The crfc2asn1.pl script can be used to extract ASN.1 data from RFC texts.
-For instance, it is used to extract X.509 ASN.1 modules from PKIX1 RFCs.
+For instance, it is used to extract X.509 ASN.1 modules from PKIX1 RFC
+and MEGACO ASN.1 module from rfc3525.txt.
+
 To regenerate the .asn1 files from the original RFC texts, do `rm *.asn1; make`.
 
 The clyx2asn1.pl script can be used to extract ASN.1 data from LyX editor files.
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]
+
diff --git a/examples/sample.source.MEGACO/Makefile b/examples/sample.source.MEGACO/Makefile
new file mode 100644
index 0000000..e250b52
--- /dev/null
+++ b/examples/sample.source.MEGACO/Makefile
@@ -0,0 +1,322 @@
+ASN_MODULE_SOURCES=	\
+	MegacoMessage.c	\
+	AuthenticationHeader.c	\
+	SecurityParmIndex.c	\
+	SequenceNum.c	\
+	AuthData.c	\
+	Message.c	\
+	MId.c	\
+	DomainName.c	\
+	IP4Address.c	\
+	IP6Address.c	\
+	PathName.c	\
+	Transaction.c	\
+	TransactionId.c	\
+	TransactionRequest.c	\
+	TransactionPending.c	\
+	TransactionReply.c	\
+	TransactionResponseAck.c	\
+	TransactionAck.c	\
+	ErrorDescriptor.c	\
+	ErrorCode.c	\
+	ErrorText.c	\
+	ContextID.c	\
+	ActionRequest.c	\
+	ActionReply.c	\
+	ContextRequest.c	\
+	ContextAttrAuditRequest.c	\
+	CommandRequest.c	\
+	Command.c	\
+	CommandReply.c	\
+	TopologyRequest.c	\
+	AmmRequest.c	\
+	AmmDescriptor.c	\
+	AmmsReply.c	\
+	SubtractRequest.c	\
+	AuditRequest.c	\
+	AuditReply.c	\
+	AuditResult.c	\
+	TerminationAudit.c	\
+	AuditReturnParameter.c	\
+	AuditDescriptor.c	\
+	NotifyRequest.c	\
+	NotifyReply.c	\
+	ObservedEventsDescriptor.c	\
+	ObservedEvent.c	\
+	EventName.c	\
+	EventParameter.c	\
+	ServiceChangeRequest.c	\
+	ServiceChangeReply.c	\
+	ServiceChangeResult.c	\
+	WildcardField.c	\
+	TerminationID.c	\
+	TerminationIDList.c	\
+	MediaDescriptor.c	\
+	StreamDescriptor.c	\
+	StreamParms.c	\
+	LocalControlDescriptor.c	\
+	StreamMode.c	\
+	PropertyParm.c	\
+	Name.c	\
+	PkgdName.c	\
+	Relation.c	\
+	LocalRemoteDescriptor.c	\
+	PropertyGroup.c	\
+	TerminationStateDescriptor.c	\
+	EventBufferControl.c	\
+	ServiceState.c	\
+	MuxDescriptor.c	\
+	MuxType.c	\
+	StreamID.c	\
+	EventsDescriptor.c	\
+	RequestedEvent.c	\
+	RequestedActions.c	\
+	EventDM.c	\
+	SecondEventsDescriptor.c	\
+	SecondRequestedEvent.c	\
+	SecondRequestedActions.c	\
+	EventBufferDescriptor.c	\
+	EventSpec.c	\
+	SignalsDescriptor.c	\
+	SignalRequest.c	\
+	SeqSigList.c	\
+	Signal.c	\
+	SignalType.c	\
+	SignalName.c	\
+	NotifyCompletion.c	\
+	SigParameter.c	\
+	RequestID.c	\
+	ModemDescriptor.c	\
+	ModemType.c	\
+	DigitMapDescriptor.c	\
+	DigitMapName.c	\
+	DigitMapValue.c	\
+	ServiceChangeParm.c	\
+	ServiceChangeAddress.c	\
+	ServiceChangeResParm.c	\
+	ServiceChangeMethod.c	\
+	ServiceChangeProfile.c	\
+	PackagesDescriptor.c	\
+	PackagesItem.c	\
+	StatisticsDescriptor.c	\
+	StatisticsParameter.c	\
+	NonStandardData.c	\
+	NonStandardIdentifier.c	\
+	H221NonStandard.c	\
+	TimeNotation.c	\
+	Value.c
+
+ASN_MODULE_HEADERS=	\
+	MegacoMessage.h	\
+	AuthenticationHeader.h	\
+	SecurityParmIndex.h	\
+	SequenceNum.h	\
+	AuthData.h	\
+	Message.h	\
+	MId.h	\
+	DomainName.h	\
+	IP4Address.h	\
+	IP6Address.h	\
+	PathName.h	\
+	Transaction.h	\
+	TransactionId.h	\
+	TransactionRequest.h	\
+	TransactionPending.h	\
+	TransactionReply.h	\
+	TransactionResponseAck.h	\
+	TransactionAck.h	\
+	ErrorDescriptor.h	\
+	ErrorCode.h	\
+	ErrorText.h	\
+	ContextID.h	\
+	ActionRequest.h	\
+	ActionReply.h	\
+	ContextRequest.h	\
+	ContextAttrAuditRequest.h	\
+	CommandRequest.h	\
+	Command.h	\
+	CommandReply.h	\
+	TopologyRequest.h	\
+	AmmRequest.h	\
+	AmmDescriptor.h	\
+	AmmsReply.h	\
+	SubtractRequest.h	\
+	AuditRequest.h	\
+	AuditReply.h	\
+	AuditResult.h	\
+	TerminationAudit.h	\
+	AuditReturnParameter.h	\
+	AuditDescriptor.h	\
+	NotifyRequest.h	\
+	NotifyReply.h	\
+	ObservedEventsDescriptor.h	\
+	ObservedEvent.h	\
+	EventName.h	\
+	EventParameter.h	\
+	ServiceChangeRequest.h	\
+	ServiceChangeReply.h	\
+	ServiceChangeResult.h	\
+	WildcardField.h	\
+	TerminationID.h	\
+	TerminationIDList.h	\
+	MediaDescriptor.h	\
+	StreamDescriptor.h	\
+	StreamParms.h	\
+	LocalControlDescriptor.h	\
+	StreamMode.h	\
+	PropertyParm.h	\
+	Name.h	\
+	PkgdName.h	\
+	Relation.h	\
+	LocalRemoteDescriptor.h	\
+	PropertyGroup.h	\
+	TerminationStateDescriptor.h	\
+	EventBufferControl.h	\
+	ServiceState.h	\
+	MuxDescriptor.h	\
+	MuxType.h	\
+	StreamID.h	\
+	EventsDescriptor.h	\
+	RequestedEvent.h	\
+	RequestedActions.h	\
+	EventDM.h	\
+	SecondEventsDescriptor.h	\
+	SecondRequestedEvent.h	\
+	SecondRequestedActions.h	\
+	EventBufferDescriptor.h	\
+	EventSpec.h	\
+	SignalsDescriptor.h	\
+	SignalRequest.h	\
+	SeqSigList.h	\
+	Signal.h	\
+	SignalType.h	\
+	SignalName.h	\
+	NotifyCompletion.h	\
+	SigParameter.h	\
+	RequestID.h	\
+	ModemDescriptor.h	\
+	ModemType.h	\
+	DigitMapDescriptor.h	\
+	DigitMapName.h	\
+	DigitMapValue.h	\
+	ServiceChangeParm.h	\
+	ServiceChangeAddress.h	\
+	ServiceChangeResParm.h	\
+	ServiceChangeMethod.h	\
+	ServiceChangeProfile.h	\
+	PackagesDescriptor.h	\
+	PackagesItem.h	\
+	StatisticsDescriptor.h	\
+	StatisticsParameter.h	\
+	NonStandardData.h	\
+	NonStandardIdentifier.h	\
+	H221NonStandard.h	\
+	TimeNotation.h	\
+	Value.h
+
+ASN_MODULE_HEADERS+=BOOLEAN.h
+ASN_MODULE_SOURCES+=BOOLEAN.c
+ASN_MODULE_HEADERS+=ENUMERATED.h
+ASN_MODULE_SOURCES+=ENUMERATED.c
+ASN_MODULE_HEADERS+=INTEGER.h
+ASN_MODULE_HEADERS+=NativeEnumerated.h
+ASN_MODULE_HEADERS+=IA5String.h
+ASN_MODULE_SOURCES+=IA5String.c
+ASN_MODULE_SOURCES+=INTEGER.c
+ASN_MODULE_HEADERS+=NULL.h
+ASN_MODULE_SOURCES+=NULL.c
+ASN_MODULE_SOURCES+=NativeEnumerated.c
+ASN_MODULE_HEADERS+=NativeInteger.h
+ASN_MODULE_SOURCES+=NativeInteger.c
+ASN_MODULE_HEADERS+=OBJECT_IDENTIFIER.h
+ASN_MODULE_SOURCES+=OBJECT_IDENTIFIER.c
+ASN_MODULE_HEADERS+=asn_SEQUENCE_OF.h
+ASN_MODULE_SOURCES+=asn_SEQUENCE_OF.c
+ASN_MODULE_HEADERS+=asn_SET_OF.h
+ASN_MODULE_SOURCES+=asn_SET_OF.c
+ASN_MODULE_HEADERS+=constr_CHOICE.h
+ASN_MODULE_SOURCES+=constr_CHOICE.c
+ASN_MODULE_HEADERS+=constr_SEQUENCE.h
+ASN_MODULE_SOURCES+=constr_SEQUENCE.c
+ASN_MODULE_HEADERS+=constr_SEQUENCE_OF.h
+ASN_MODULE_SOURCES+=constr_SEQUENCE_OF.c
+ASN_MODULE_HEADERS+=constr_SET_OF.h
+ASN_MODULE_SOURCES+=constr_SET_OF.c
+ASN_MODULE_HEADERS+=asn_application.h
+ASN_MODULE_HEADERS+=asn_system.h
+ASN_MODULE_HEADERS+=asn_codecs.h
+ASN_MODULE_HEADERS+=asn_internal.h
+ASN_MODULE_HEADERS+=OCTET_STRING.h
+ASN_MODULE_SOURCES+=OCTET_STRING.c
+ASN_MODULE_HEADERS+=BIT_STRING.h
+ASN_MODULE_SOURCES+=BIT_STRING.c
+ASN_MODULE_SOURCES+=asn_codecs_prim.c
+ASN_MODULE_HEADERS+=asn_codecs_prim.h
+ASN_MODULE_HEADERS+=ber_tlv_length.h
+ASN_MODULE_SOURCES+=ber_tlv_length.c
+ASN_MODULE_HEADERS+=ber_tlv_tag.h
+ASN_MODULE_SOURCES+=ber_tlv_tag.c
+ASN_MODULE_HEADERS+=ber_decoder.h
+ASN_MODULE_SOURCES+=ber_decoder.c
+ASN_MODULE_HEADERS+=der_encoder.h
+ASN_MODULE_SOURCES+=der_encoder.c
+ASN_MODULE_HEADERS+=constr_TYPE.h
+ASN_MODULE_SOURCES+=constr_TYPE.c
+ASN_MODULE_HEADERS+=constraints.h
+ASN_MODULE_SOURCES+=constraints.c
+ASN_MODULE_HEADERS+=xer_support.h
+ASN_MODULE_SOURCES+=xer_support.c
+ASN_MODULE_HEADERS+=xer_decoder.h
+ASN_MODULE_SOURCES+=xer_decoder.c
+ASN_MODULE_HEADERS+=xer_encoder.h
+ASN_MODULE_SOURCES+=xer_encoder.c
+ASN_MODULE_HEADERS+=per_support.h
+ASN_MODULE_SOURCES+=per_support.c
+ASN_MODULE_HEADERS+=per_decoder.h
+ASN_MODULE_SOURCES+=per_decoder.c
+ASN_MODULE_HEADERS+=per_encoder.h
+ASN_MODULE_SOURCES+=per_encoder.c
+
+
+lib_LTLIBRARIES=libsomething.la
+libsomething_la_SOURCES=$(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)
+
+# This file may be used as an input for make(3)
+# Remove the lines below to convert it into a pure .am file
+TARGET = megacoDump
+CFLAGS += -I. -DHAVE_CONFIG_H
+OBJS=${ASN_MODULE_SOURCES:.c=.o} $(TARGET).o
+
+all: MegacoMessage.c $(TARGET)
+
+$(TARGET): ${OBJS}
+	$(CC) $(CFLAGS) -o $(TARGET) ${OBJS} $(LDFLAGS) $(LIBS)
+
+.SUFFIXES:
+.SUFFIXES: .c .o
+
+.c.o:
+	$(CC) $(CFLAGS) -o $@ -c $<
+
+clean:
+	rm -f $(TARGET)
+	rm -f $(OBJS)
+
+regen: regenerate-from-asn1-source
+
+regenerate-from-asn1-source:
+	../../asn1c/asn1c -fcompound-names -S ../../skeletons ../rfc3525-MEDIA-GATEWAY-CONTROL.asn1
+
+
+MegacoMessage.c: regenerate.Makefile
+	./regenerate.Makefile
+	@touch MegacoMessage.c
+	make
+
+ASN_CONVERTER=../../skeletons/converter-sample.c
+$(TARGET).o: $(ASN_CONVERTER)
+	$(CC) $(CFLAGS) -DPDU=MegacoMessage -o $(TARGET).o -c $(ASN_CONVERTER)
+
+distclean: clean
+	rm -f $(ASN_MODULE_SOURCES) $(ASN_MODULE_HEADERS)
+	rm -f Makefile.am.sample
diff --git a/examples/sample.source.MEGACO/README b/examples/sample.source.MEGACO/README
new file mode 100644
index 0000000..fb1bfd9
--- /dev/null
+++ b/examples/sample.source.MEGACO/README
@@ -0,0 +1,20 @@
+
+GENERAL INFORMATION
+===================
+
+The MEGACO (Media Gateway Control Protocol) PDU decoder.
+Invoking `make` will compile the ASN.1 specifications from the rfc3525.txt
+in the above directory.
+
+The ../../skeletons/converter-sample.c will supply the missing
+"int main()" routine which drives the decoding process.
+
+megacoDump USAGE
+==============
+
+	./megacoDump MegacoMessage.ber	# Print as XML (BASIC-XER)
+
+The full list of recognized command line options may be obtained with
+
+	> ./megacoDump -h
+
diff --git a/examples/sample.source.MEGACO/config.h b/examples/sample.source.MEGACO/config.h
new file mode 100644
index 0000000..2dda929
--- /dev/null
+++ b/examples/sample.source.MEGACO/config.h
@@ -0,0 +1,10 @@
+
+extern int opt_debug;
+
+#define	ASN_DEBUG(fmt, args...)	do {		\
+		if(opt_debug < 2) break;	\
+		fprintf(stderr, fmt, ##args);	\
+		fprintf(stderr, " (%s:%d)\n",	\
+			__FILE__, __LINE__);	\
+	} while(0)
+