[NETFILTER]: H.323 helper: move some function prototypes to ip_conntrack_h323.h
authorJing Min Zhao <zhaojingmin@users.sourceforge.net>
Thu, 6 Apr 2006 21:13:42 +0000 (14:13 -0700)
committerDavid S. Miller <davem@sunset.davemloft.net>
Mon, 10 Apr 2006 05:25:35 +0000 (22:25 -0700)
Move prototypes of NAT callbacks to ip_conntrack_h323.h. Because the
use of typedefs as arguments, some header files need to be moved as
well.

Signed-off-by: Jing Min Zhao <zhaojingmin@users.sourceforge.net>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/netfilter_ipv4/ip_conntrack_h323.h
include/linux/netfilter_ipv4/ip_conntrack_helper_h323_asn1.h [new file with mode: 0644]
include/linux/netfilter_ipv4/ip_conntrack_helper_h323_types.h [new file with mode: 0644]
net/ipv4/netfilter/ip_conntrack_helper_h323.c
net/ipv4/netfilter/ip_conntrack_helper_h323_asn1.c
net/ipv4/netfilter/ip_conntrack_helper_h323_asn1.h [deleted file]
net/ipv4/netfilter/ip_conntrack_helper_h323_types.h [deleted file]
net/ipv4/netfilter/ip_nat_helper_h323.c

index 0987cea538403cd8a31d54219e788a7e15fc3b40..eace86bd2adbe0462abe44d5c1d6b7d5fc2523b0 100644 (file)
@@ -3,6 +3,8 @@
 
 #ifdef __KERNEL__
 
+#include <linux/netfilter_ipv4/ip_conntrack_helper_h323_asn1.h>
+
 #define RAS_PORT 1719
 #define Q931_PORT 1720
 #define H323_RTP_CHANNEL_MAX 4 /* Audio, video, FAX and other */
@@ -25,6 +27,56 @@ struct ip_ct_h323_master {
        };
 };
 
+struct ip_conntrack_expect;
+
+extern int get_h225_addr(unsigned char *data, TransportAddress * addr,
+                        u_int32_t * ip, u_int16_t * port);
+extern void ip_conntrack_h245_expect(struct ip_conntrack *new,
+                                    struct ip_conntrack_expect *this);
+extern void ip_conntrack_q931_expect(struct ip_conntrack *new,
+                                    struct ip_conntrack_expect *this);
+extern int (*set_h245_addr_hook) (struct sk_buff ** pskb,
+                                 unsigned char **data, int dataoff,
+                                 H245_TransportAddress * addr,
+                                 u_int32_t ip, u_int16_t port);
+extern int (*set_h225_addr_hook) (struct sk_buff ** pskb,
+                                 unsigned char **data, int dataoff,
+                                 TransportAddress * addr,
+                                 u_int32_t ip, u_int16_t port);
+extern int (*set_sig_addr_hook) (struct sk_buff ** pskb,
+                                struct ip_conntrack * ct,
+                                enum ip_conntrack_info ctinfo,
+                                unsigned char **data,
+                                TransportAddress * addr, int count);
+extern int (*set_ras_addr_hook) (struct sk_buff ** pskb,
+                                struct ip_conntrack * ct,
+                                enum ip_conntrack_info ctinfo,
+                                unsigned char **data,
+                                TransportAddress * addr, int count);
+extern int (*nat_rtp_rtcp_hook) (struct sk_buff ** pskb,
+                                struct ip_conntrack * ct,
+                                enum ip_conntrack_info ctinfo,
+                                unsigned char **data, int dataoff,
+                                H245_TransportAddress * addr,
+                                u_int16_t port, u_int16_t rtp_port,
+                                struct ip_conntrack_expect * rtp_exp,
+                                struct ip_conntrack_expect * rtcp_exp);
+extern int (*nat_t120_hook) (struct sk_buff ** pskb, struct ip_conntrack * ct,
+                            enum ip_conntrack_info ctinfo,
+                            unsigned char **data, int dataoff,
+                            H245_TransportAddress * addr, u_int16_t port,
+                            struct ip_conntrack_expect * exp);
+extern int (*nat_h245_hook) (struct sk_buff ** pskb, struct ip_conntrack * ct,
+                            enum ip_conntrack_info ctinfo,
+                            unsigned char **data, int dataoff,
+                            TransportAddress * addr, u_int16_t port,
+                            struct ip_conntrack_expect * exp);
+extern int (*nat_q931_hook) (struct sk_buff ** pskb, struct ip_conntrack * ct,
+                            enum ip_conntrack_info ctinfo,
+                            unsigned char **data, TransportAddress * addr,
+                            int idx, u_int16_t port,
+                            struct ip_conntrack_expect * exp);
+
 #endif
 
 #endif
diff --git a/include/linux/netfilter_ipv4/ip_conntrack_helper_h323_asn1.h b/include/linux/netfilter_ipv4/ip_conntrack_helper_h323_asn1.h
new file mode 100644 (file)
index 0000000..0bd8280
--- /dev/null
@@ -0,0 +1,98 @@
+/****************************************************************************
+ * ip_conntrack_helper_h323_asn1.h - BER and PER decoding library for H.323
+ *                                  conntrack/NAT module.
+ *
+ * Copyright (c) 2006 by Jing Min Zhao <zhaojingmin@hotmail.com>
+ *
+ * This source code is licensed under General Public License version 2.
+ *
+ *
+ * This library is based on H.225 version 4, H.235 version 2 and H.245
+ * version 7. It is extremely optimized to decode only the absolutely
+ * necessary objects in a signal for Linux kernel NAT module use, so don't
+ * expect it to be a full ASN.1 library.
+ *
+ * Features:
+ *
+ * 1. Small. The total size of code plus data is less than 20 KB (IA32).
+ * 2. Fast. Decoding Netmeeting's Setup signal 1 million times on a PIII 866
+ *    takes only 3.9 seconds.
+ * 3. No memory allocation. It uses a static object. No need to initialize or
+ *    cleanup.
+ * 4. Thread safe.
+ * 5. Support embedded architectures that has no misaligned memory access
+ *    support.
+ *
+ * Limitations:
+ *
+ * 1. At most 30 faststart entries. Actually this is limited by ethernet's MTU.
+ *    If a Setup signal contains more than 30 faststart, the packet size will
+ *    very likely exceed the MTU size, then the TPKT will be fragmented. I
+ *    don't know how to handle this in a Netfilter module. Anybody can help?
+ *    Although I think 30 is enough for most of the cases.
+ * 2. IPv4 addresses only.
+ *
+ ****************************************************************************/
+
+#ifndef _IP_CONNTRACK_HELPER_H323_ASN1_H_
+#define _IP_CONNTRACK_HELPER_H323_ASN1_H_
+
+/*****************************************************************************
+ * H.323 Types
+ ****************************************************************************/
+#include "ip_conntrack_helper_h323_types.h"
+
+typedef struct {
+       enum {
+               Q931_NationalEscape = 0x00,
+               Q931_Alerting = 0x01,
+               Q931_CallProceeding = 0x02,
+               Q931_Connect = 0x07,
+               Q931_ConnectAck = 0x0F,
+               Q931_Progress = 0x03,
+               Q931_Setup = 0x05,
+               Q931_SetupAck = 0x0D,
+               Q931_Resume = 0x26,
+               Q931_ResumeAck = 0x2E,
+               Q931_ResumeReject = 0x22,
+               Q931_Suspend = 0x25,
+               Q931_SuspendAck = 0x2D,
+               Q931_SuspendReject = 0x21,
+               Q931_UserInformation = 0x20,
+               Q931_Disconnect = 0x45,
+               Q931_Release = 0x4D,
+               Q931_ReleaseComplete = 0x5A,
+               Q931_Restart = 0x46,
+               Q931_RestartAck = 0x4E,
+               Q931_Segment = 0x60,
+               Q931_CongestionCtrl = 0x79,
+               Q931_Information = 0x7B,
+               Q931_Notify = 0x6E,
+               Q931_Status = 0x7D,
+               Q931_StatusEnquiry = 0x75,
+               Q931_Facility = 0x62
+       } MessageType;
+       H323_UserInformation UUIE;
+} Q931;
+
+/*****************************************************************************
+ * Decode Functions Return Codes
+ ****************************************************************************/
+
+#define H323_ERROR_NONE 0      /* Decoded successfully */
+#define H323_ERROR_STOP 1      /* Decoding stopped, not really an error */
+#define H323_ERROR_BOUND -1
+#define H323_ERROR_RANGE -2
+
+
+/*****************************************************************************
+ * Decode Functions
+ ****************************************************************************/
+
+int DecodeRasMessage(unsigned char *buf, size_t sz, RasMessage * ras);
+int DecodeQ931(unsigned char *buf, size_t sz, Q931 * q931);
+int DecodeMultimediaSystemControlMessage(unsigned char *buf, size_t sz,
+                                        MultimediaSystemControlMessage *
+                                        mscm);
+
+#endif
diff --git a/include/linux/netfilter_ipv4/ip_conntrack_helper_h323_types.h b/include/linux/netfilter_ipv4/ip_conntrack_helper_h323_types.h
new file mode 100644 (file)
index 0000000..cc98f7a
--- /dev/null
@@ -0,0 +1,938 @@
+/* Generated by Jing Min Zhao's ASN.1 parser, Mar 15 2006
+ *
+ * Copyright (c) 2006 Jing Min Zhao <zhaojingmin@users.sourceforge.net>
+ *
+ * This source code is licensed under General Public License version 2.
+ */
+
+typedef struct TransportAddress_ipAddress {    /* SEQUENCE */
+       int options;            /* No use */
+       unsigned ip;
+} TransportAddress_ipAddress;
+
+typedef struct TransportAddress {      /* CHOICE */
+       enum {
+               eTransportAddress_ipAddress,
+               eTransportAddress_ipSourceRoute,
+               eTransportAddress_ipxAddress,
+               eTransportAddress_ip6Address,
+               eTransportAddress_netBios,
+               eTransportAddress_nsap,
+               eTransportAddress_nonStandardAddress,
+       } choice;
+       union {
+               TransportAddress_ipAddress ipAddress;
+       };
+} TransportAddress;
+
+typedef struct DataProtocolCapability {        /* CHOICE */
+       enum {
+               eDataProtocolCapability_nonStandard,
+               eDataProtocolCapability_v14buffered,
+               eDataProtocolCapability_v42lapm,
+               eDataProtocolCapability_hdlcFrameTunnelling,
+               eDataProtocolCapability_h310SeparateVCStack,
+               eDataProtocolCapability_h310SingleVCStack,
+               eDataProtocolCapability_transparent,
+               eDataProtocolCapability_segmentationAndReassembly,
+               eDataProtocolCapability_hdlcFrameTunnelingwSAR,
+               eDataProtocolCapability_v120,
+               eDataProtocolCapability_separateLANStack,
+               eDataProtocolCapability_v76wCompression,
+               eDataProtocolCapability_tcp,
+               eDataProtocolCapability_udp,
+       } choice;
+} DataProtocolCapability;
+
+typedef struct DataApplicationCapability_application { /* CHOICE */
+       enum {
+               eDataApplicationCapability_application_nonStandard,
+               eDataApplicationCapability_application_t120,
+               eDataApplicationCapability_application_dsm_cc,
+               eDataApplicationCapability_application_userData,
+               eDataApplicationCapability_application_t84,
+               eDataApplicationCapability_application_t434,
+               eDataApplicationCapability_application_h224,
+               eDataApplicationCapability_application_nlpid,
+               eDataApplicationCapability_application_dsvdControl,
+               eDataApplicationCapability_application_h222DataPartitioning,
+               eDataApplicationCapability_application_t30fax,
+               eDataApplicationCapability_application_t140,
+               eDataApplicationCapability_application_t38fax,
+               eDataApplicationCapability_application_genericDataCapability,
+       } choice;
+       union {
+               DataProtocolCapability t120;
+       };
+} DataApplicationCapability_application;
+
+typedef struct DataApplicationCapability {     /* SEQUENCE */
+       int options;            /* No use */
+       DataApplicationCapability_application application;
+} DataApplicationCapability;
+
+typedef struct DataType {      /* CHOICE */
+       enum {
+               eDataType_nonStandard,
+               eDataType_nullData,
+               eDataType_videoData,
+               eDataType_audioData,
+               eDataType_data,
+               eDataType_encryptionData,
+               eDataType_h235Control,
+               eDataType_h235Media,
+               eDataType_multiplexedStream,
+       } choice;
+       union {
+               DataApplicationCapability data;
+       };
+} DataType;
+
+typedef struct UnicastAddress_iPAddress {      /* SEQUENCE */
+       int options;            /* No use */
+       unsigned network;
+} UnicastAddress_iPAddress;
+
+typedef struct UnicastAddress {        /* CHOICE */
+       enum {
+               eUnicastAddress_iPAddress,
+               eUnicastAddress_iPXAddress,
+               eUnicastAddress_iP6Address,
+               eUnicastAddress_netBios,
+               eUnicastAddress_iPSourceRouteAddress,
+               eUnicastAddress_nsap,
+               eUnicastAddress_nonStandardAddress,
+       } choice;
+       union {
+               UnicastAddress_iPAddress iPAddress;
+       };
+} UnicastAddress;
+
+typedef struct H245_TransportAddress { /* CHOICE */
+       enum {
+               eH245_TransportAddress_unicastAddress,
+               eH245_TransportAddress_multicastAddress,
+       } choice;
+       union {
+               UnicastAddress unicastAddress;
+       };
+} H245_TransportAddress;
+
+typedef struct H2250LogicalChannelParameters { /* SEQUENCE */
+       enum {
+               eH2250LogicalChannelParameters_nonStandard = (1 << 31),
+               eH2250LogicalChannelParameters_associatedSessionID =
+                   (1 << 30),
+               eH2250LogicalChannelParameters_mediaChannel = (1 << 29),
+               eH2250LogicalChannelParameters_mediaGuaranteedDelivery =
+                   (1 << 28),
+               eH2250LogicalChannelParameters_mediaControlChannel =
+                   (1 << 27),
+               eH2250LogicalChannelParameters_mediaControlGuaranteedDelivery
+                   = (1 << 26),
+               eH2250LogicalChannelParameters_silenceSuppression = (1 << 25),
+               eH2250LogicalChannelParameters_destination = (1 << 24),
+               eH2250LogicalChannelParameters_dynamicRTPPayloadType =
+                   (1 << 23),
+               eH2250LogicalChannelParameters_mediaPacketization = (1 << 22),
+               eH2250LogicalChannelParameters_transportCapability =
+                   (1 << 21),
+               eH2250LogicalChannelParameters_redundancyEncoding = (1 << 20),
+               eH2250LogicalChannelParameters_source = (1 << 19),
+       } options;
+       H245_TransportAddress mediaChannel;
+       H245_TransportAddress mediaControlChannel;
+} H2250LogicalChannelParameters;
+
+typedef struct OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters {        /* CHOICE */
+       enum {
+               eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h222LogicalChannelParameters,
+               eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h223LogicalChannelParameters,
+               eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_v76LogicalChannelParameters,
+               eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters,
+               eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_none,
+       } choice;
+       union {
+               H2250LogicalChannelParameters h2250LogicalChannelParameters;
+       };
+} OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters;
+
+typedef struct OpenLogicalChannel_forwardLogicalChannelParameters {    /* SEQUENCE */
+       enum {
+               eOpenLogicalChannel_forwardLogicalChannelParameters_portNumber
+                   = (1 << 31),
+               eOpenLogicalChannel_forwardLogicalChannelParameters_forwardLogicalChannelDependency
+                   = (1 << 30),
+               eOpenLogicalChannel_forwardLogicalChannelParameters_replacementFor
+                   = (1 << 29),
+       } options;
+       DataType dataType;
+       OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters
+           multiplexParameters;
+} OpenLogicalChannel_forwardLogicalChannelParameters;
+
+typedef struct OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters {        /* CHOICE */
+       enum {
+               eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h223LogicalChannelParameters,
+               eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_v76LogicalChannelParameters,
+               eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters,
+       } choice;
+       union {
+               H2250LogicalChannelParameters h2250LogicalChannelParameters;
+       };
+} OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters;
+
+typedef struct OpenLogicalChannel_reverseLogicalChannelParameters {    /* SEQUENCE */
+       enum {
+               eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters
+                   = (1 << 31),
+               eOpenLogicalChannel_reverseLogicalChannelParameters_reverseLogicalChannelDependency
+                   = (1 << 30),
+               eOpenLogicalChannel_reverseLogicalChannelParameters_replacementFor
+                   = (1 << 29),
+       } options;
+       OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters
+           multiplexParameters;
+} OpenLogicalChannel_reverseLogicalChannelParameters;
+
+typedef struct NetworkAccessParameters_networkAddress {        /* CHOICE */
+       enum {
+               eNetworkAccessParameters_networkAddress_q2931Address,
+               eNetworkAccessParameters_networkAddress_e164Address,
+               eNetworkAccessParameters_networkAddress_localAreaAddress,
+       } choice;
+       union {
+               H245_TransportAddress localAreaAddress;
+       };
+} NetworkAccessParameters_networkAddress;
+
+typedef struct NetworkAccessParameters {       /* SEQUENCE */
+       enum {
+               eNetworkAccessParameters_distribution = (1 << 31),
+               eNetworkAccessParameters_externalReference = (1 << 30),
+               eNetworkAccessParameters_t120SetupProcedure = (1 << 29),
+       } options;
+       NetworkAccessParameters_networkAddress networkAddress;
+} NetworkAccessParameters;
+
+typedef struct OpenLogicalChannel {    /* SEQUENCE */
+       enum {
+               eOpenLogicalChannel_reverseLogicalChannelParameters =
+                   (1 << 31),
+               eOpenLogicalChannel_separateStack = (1 << 30),
+               eOpenLogicalChannel_encryptionSync = (1 << 29),
+       } options;
+       OpenLogicalChannel_forwardLogicalChannelParameters
+           forwardLogicalChannelParameters;
+       OpenLogicalChannel_reverseLogicalChannelParameters
+           reverseLogicalChannelParameters;
+       NetworkAccessParameters separateStack;
+} OpenLogicalChannel;
+
+typedef struct Setup_UUIE_fastStart {  /* SEQUENCE OF */
+       int count;
+       OpenLogicalChannel item[30];
+} Setup_UUIE_fastStart;
+
+typedef struct Setup_UUIE {    /* SEQUENCE */
+       enum {
+               eSetup_UUIE_h245Address = (1 << 31),
+               eSetup_UUIE_sourceAddress = (1 << 30),
+               eSetup_UUIE_destinationAddress = (1 << 29),
+               eSetup_UUIE_destCallSignalAddress = (1 << 28),
+               eSetup_UUIE_destExtraCallInfo = (1 << 27),
+               eSetup_UUIE_destExtraCRV = (1 << 26),
+               eSetup_UUIE_callServices = (1 << 25),
+               eSetup_UUIE_sourceCallSignalAddress = (1 << 24),
+               eSetup_UUIE_remoteExtensionAddress = (1 << 23),
+               eSetup_UUIE_callIdentifier = (1 << 22),
+               eSetup_UUIE_h245SecurityCapability = (1 << 21),
+               eSetup_UUIE_tokens = (1 << 20),
+               eSetup_UUIE_cryptoTokens = (1 << 19),
+               eSetup_UUIE_fastStart = (1 << 18),
+               eSetup_UUIE_mediaWaitForConnect = (1 << 17),
+               eSetup_UUIE_canOverlapSend = (1 << 16),
+               eSetup_UUIE_endpointIdentifier = (1 << 15),
+               eSetup_UUIE_multipleCalls = (1 << 14),
+               eSetup_UUIE_maintainConnection = (1 << 13),
+               eSetup_UUIE_connectionParameters = (1 << 12),
+               eSetup_UUIE_language = (1 << 11),
+               eSetup_UUIE_presentationIndicator = (1 << 10),
+               eSetup_UUIE_screeningIndicator = (1 << 9),
+               eSetup_UUIE_serviceControl = (1 << 8),
+               eSetup_UUIE_symmetricOperationRequired = (1 << 7),
+               eSetup_UUIE_capacity = (1 << 6),
+               eSetup_UUIE_circuitInfo = (1 << 5),
+               eSetup_UUIE_desiredProtocols = (1 << 4),
+               eSetup_UUIE_neededFeatures = (1 << 3),
+               eSetup_UUIE_desiredFeatures = (1 << 2),
+               eSetup_UUIE_supportedFeatures = (1 << 1),
+               eSetup_UUIE_parallelH245Control = (1 << 0),
+       } options;
+       TransportAddress h245Address;
+       TransportAddress destCallSignalAddress;
+       TransportAddress sourceCallSignalAddress;
+       Setup_UUIE_fastStart fastStart;
+} Setup_UUIE;
+
+typedef struct CallProceeding_UUIE_fastStart { /* SEQUENCE OF */
+       int count;
+       OpenLogicalChannel item[30];
+} CallProceeding_UUIE_fastStart;
+
+typedef struct CallProceeding_UUIE {   /* SEQUENCE */
+       enum {
+               eCallProceeding_UUIE_h245Address = (1 << 31),
+               eCallProceeding_UUIE_callIdentifier = (1 << 30),
+               eCallProceeding_UUIE_h245SecurityMode = (1 << 29),
+               eCallProceeding_UUIE_tokens = (1 << 28),
+               eCallProceeding_UUIE_cryptoTokens = (1 << 27),
+               eCallProceeding_UUIE_fastStart = (1 << 26),
+               eCallProceeding_UUIE_multipleCalls = (1 << 25),
+               eCallProceeding_UUIE_maintainConnection = (1 << 24),
+               eCallProceeding_UUIE_fastConnectRefused = (1 << 23),
+               eCallProceeding_UUIE_featureSet = (1 << 22),
+       } options;
+       TransportAddress h245Address;
+       CallProceeding_UUIE_fastStart fastStart;
+} CallProceeding_UUIE;
+
+typedef struct Connect_UUIE_fastStart {        /* SEQUENCE OF */
+       int count;
+       OpenLogicalChannel item[30];
+} Connect_UUIE_fastStart;
+
+typedef struct Connect_UUIE {  /* SEQUENCE */
+       enum {
+               eConnect_UUIE_h245Address = (1 << 31),
+               eConnect_UUIE_callIdentifier = (1 << 30),
+               eConnect_UUIE_h245SecurityMode = (1 << 29),
+               eConnect_UUIE_tokens = (1 << 28),
+               eConnect_UUIE_cryptoTokens = (1 << 27),
+               eConnect_UUIE_fastStart = (1 << 26),
+               eConnect_UUIE_multipleCalls = (1 << 25),
+               eConnect_UUIE_maintainConnection = (1 << 24),
+               eConnect_UUIE_language = (1 << 23),
+               eConnect_UUIE_connectedAddress = (1 << 22),
+               eConnect_UUIE_presentationIndicator = (1 << 21),
+               eConnect_UUIE_screeningIndicator = (1 << 20),
+               eConnect_UUIE_fastConnectRefused = (1 << 19),
+               eConnect_UUIE_serviceControl = (1 << 18),
+               eConnect_UUIE_capacity = (1 << 17),
+               eConnect_UUIE_featureSet = (1 << 16),
+       } options;
+       TransportAddress h245Address;
+       Connect_UUIE_fastStart fastStart;
+} Connect_UUIE;
+
+typedef struct Alerting_UUIE_fastStart {       /* SEQUENCE OF */
+       int count;
+       OpenLogicalChannel item[30];
+} Alerting_UUIE_fastStart;
+
+typedef struct Alerting_UUIE { /* SEQUENCE */
+       enum {
+               eAlerting_UUIE_h245Address = (1 << 31),
+               eAlerting_UUIE_callIdentifier = (1 << 30),
+               eAlerting_UUIE_h245SecurityMode = (1 << 29),
+               eAlerting_UUIE_tokens = (1 << 28),
+               eAlerting_UUIE_cryptoTokens = (1 << 27),
+               eAlerting_UUIE_fastStart = (1 << 26),
+               eAlerting_UUIE_multipleCalls = (1 << 25),
+               eAlerting_UUIE_maintainConnection = (1 << 24),
+               eAlerting_UUIE_alertingAddress = (1 << 23),
+               eAlerting_UUIE_presentationIndicator = (1 << 22),
+               eAlerting_UUIE_screeningIndicator = (1 << 21),
+               eAlerting_UUIE_fastConnectRefused = (1 << 20),
+               eAlerting_UUIE_serviceControl = (1 << 19),
+               eAlerting_UUIE_capacity = (1 << 18),
+               eAlerting_UUIE_featureSet = (1 << 17),
+       } options;
+       TransportAddress h245Address;
+       Alerting_UUIE_fastStart fastStart;
+} Alerting_UUIE;
+
+typedef struct Information_UUIE_fastStart {    /* SEQUENCE OF */
+       int count;
+       OpenLogicalChannel item[30];
+} Information_UUIE_fastStart;
+
+typedef struct Information_UUIE {      /* SEQUENCE */
+       enum {
+               eInformation_UUIE_callIdentifier = (1 << 31),
+               eInformation_UUIE_tokens = (1 << 30),
+               eInformation_UUIE_cryptoTokens = (1 << 29),
+               eInformation_UUIE_fastStart = (1 << 28),
+               eInformation_UUIE_fastConnectRefused = (1 << 27),
+               eInformation_UUIE_circuitInfo = (1 << 26),
+       } options;
+       Information_UUIE_fastStart fastStart;
+} Information_UUIE;
+
+typedef struct FacilityReason {        /* CHOICE */
+       enum {
+               eFacilityReason_routeCallToGatekeeper,
+               eFacilityReason_callForwarded,
+               eFacilityReason_routeCallToMC,
+               eFacilityReason_undefinedReason,
+               eFacilityReason_conferenceListChoice,
+               eFacilityReason_startH245,
+               eFacilityReason_noH245,
+               eFacilityReason_newTokens,
+               eFacilityReason_featureSetUpdate,
+               eFacilityReason_forwardedElements,
+               eFacilityReason_transportedInformation,
+       } choice;
+} FacilityReason;
+
+typedef struct Facility_UUIE_fastStart {       /* SEQUENCE OF */
+       int count;
+       OpenLogicalChannel item[30];
+} Facility_UUIE_fastStart;
+
+typedef struct Facility_UUIE { /* SEQUENCE */
+       enum {
+               eFacility_UUIE_alternativeAddress = (1 << 31),
+               eFacility_UUIE_alternativeAliasAddress = (1 << 30),
+               eFacility_UUIE_conferenceID = (1 << 29),
+               eFacility_UUIE_callIdentifier = (1 << 28),
+               eFacility_UUIE_destExtraCallInfo = (1 << 27),
+               eFacility_UUIE_remoteExtensionAddress = (1 << 26),
+               eFacility_UUIE_tokens = (1 << 25),
+               eFacility_UUIE_cryptoTokens = (1 << 24),
+               eFacility_UUIE_conferences = (1 << 23),
+               eFacility_UUIE_h245Address = (1 << 22),
+               eFacility_UUIE_fastStart = (1 << 21),
+               eFacility_UUIE_multipleCalls = (1 << 20),
+               eFacility_UUIE_maintainConnection = (1 << 19),
+               eFacility_UUIE_fastConnectRefused = (1 << 18),
+               eFacility_UUIE_serviceControl = (1 << 17),
+               eFacility_UUIE_circuitInfo = (1 << 16),
+               eFacility_UUIE_featureSet = (1 << 15),
+               eFacility_UUIE_destinationInfo = (1 << 14),
+               eFacility_UUIE_h245SecurityMode = (1 << 13),
+       } options;
+       FacilityReason reason;
+       TransportAddress h245Address;
+       Facility_UUIE_fastStart fastStart;
+} Facility_UUIE;
+
+typedef struct Progress_UUIE_fastStart {       /* SEQUENCE OF */
+       int count;
+       OpenLogicalChannel item[30];
+} Progress_UUIE_fastStart;
+
+typedef struct Progress_UUIE { /* SEQUENCE */
+       enum {
+               eProgress_UUIE_h245Address = (1 << 31),
+               eProgress_UUIE_h245SecurityMode = (1 << 30),
+               eProgress_UUIE_tokens = (1 << 29),
+               eProgress_UUIE_cryptoTokens = (1 << 28),
+               eProgress_UUIE_fastStart = (1 << 27),
+               eProgress_UUIE_multipleCalls = (1 << 26),
+               eProgress_UUIE_maintainConnection = (1 << 25),
+               eProgress_UUIE_fastConnectRefused = (1 << 24),
+       } options;
+       TransportAddress h245Address;
+       Progress_UUIE_fastStart fastStart;
+} Progress_UUIE;
+
+typedef struct H323_UU_PDU_h323_message_body { /* CHOICE */
+       enum {
+               eH323_UU_PDU_h323_message_body_setup,
+               eH323_UU_PDU_h323_message_body_callProceeding,
+               eH323_UU_PDU_h323_message_body_connect,
+               eH323_UU_PDU_h323_message_body_alerting,
+               eH323_UU_PDU_h323_message_body_information,
+               eH323_UU_PDU_h323_message_body_releaseComplete,
+               eH323_UU_PDU_h323_message_body_facility,
+               eH323_UU_PDU_h323_message_body_progress,
+               eH323_UU_PDU_h323_message_body_empty,
+               eH323_UU_PDU_h323_message_body_status,
+               eH323_UU_PDU_h323_message_body_statusInquiry,
+               eH323_UU_PDU_h323_message_body_setupAcknowledge,
+               eH323_UU_PDU_h323_message_body_notify,
+       } choice;
+       union {
+               Setup_UUIE setup;
+               CallProceeding_UUIE callProceeding;
+               Connect_UUIE connect;
+               Alerting_UUIE alerting;
+               Information_UUIE information;
+               Facility_UUIE facility;
+               Progress_UUIE progress;
+       };
+} H323_UU_PDU_h323_message_body;
+
+typedef struct RequestMessage {        /* CHOICE */
+       enum {
+               eRequestMessage_nonStandard,
+               eRequestMessage_masterSlaveDetermination,
+               eRequestMessage_terminalCapabilitySet,
+               eRequestMessage_openLogicalChannel,
+               eRequestMessage_closeLogicalChannel,
+               eRequestMessage_requestChannelClose,
+               eRequestMessage_multiplexEntrySend,
+               eRequestMessage_requestMultiplexEntry,
+               eRequestMessage_requestMode,
+               eRequestMessage_roundTripDelayRequest,
+               eRequestMessage_maintenanceLoopRequest,
+               eRequestMessage_communicationModeRequest,
+               eRequestMessage_conferenceRequest,
+               eRequestMessage_multilinkRequest,
+               eRequestMessage_logicalChannelRateRequest,
+       } choice;
+       union {
+               OpenLogicalChannel openLogicalChannel;
+       };
+} RequestMessage;
+
+typedef struct OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters {     /* CHOICE */
+       enum {
+               eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_h222LogicalChannelParameters,
+               eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters,
+       } choice;
+       union {
+               H2250LogicalChannelParameters h2250LogicalChannelParameters;
+       };
+} OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters;
+
+typedef struct OpenLogicalChannelAck_reverseLogicalChannelParameters { /* SEQUENCE */
+       enum {
+               eOpenLogicalChannelAck_reverseLogicalChannelParameters_portNumber
+                   = (1 << 31),
+               eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters
+                   = (1 << 30),
+               eOpenLogicalChannelAck_reverseLogicalChannelParameters_replacementFor
+                   = (1 << 29),
+       } options;
+       OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters
+           multiplexParameters;
+} OpenLogicalChannelAck_reverseLogicalChannelParameters;
+
+typedef struct H2250LogicalChannelAckParameters {      /* SEQUENCE */
+       enum {
+               eH2250LogicalChannelAckParameters_nonStandard = (1 << 31),
+               eH2250LogicalChannelAckParameters_sessionID = (1 << 30),
+               eH2250LogicalChannelAckParameters_mediaChannel = (1 << 29),
+               eH2250LogicalChannelAckParameters_mediaControlChannel =
+                   (1 << 28),
+               eH2250LogicalChannelAckParameters_dynamicRTPPayloadType =
+                   (1 << 27),
+               eH2250LogicalChannelAckParameters_flowControlToZero =
+                   (1 << 26),
+               eH2250LogicalChannelAckParameters_portNumber = (1 << 25),
+       } options;
+       H245_TransportAddress mediaChannel;
+       H245_TransportAddress mediaControlChannel;
+} H2250LogicalChannelAckParameters;
+
+typedef struct OpenLogicalChannelAck_forwardMultiplexAckParameters {   /* CHOICE */
+       enum {
+               eOpenLogicalChannelAck_forwardMultiplexAckParameters_h2250LogicalChannelAckParameters,
+       } choice;
+       union {
+               H2250LogicalChannelAckParameters
+                   h2250LogicalChannelAckParameters;
+       };
+} OpenLogicalChannelAck_forwardMultiplexAckParameters;
+
+typedef struct OpenLogicalChannelAck { /* SEQUENCE */
+       enum {
+               eOpenLogicalChannelAck_reverseLogicalChannelParameters =
+                   (1 << 31),
+               eOpenLogicalChannelAck_separateStack = (1 << 30),
+               eOpenLogicalChannelAck_forwardMultiplexAckParameters =
+                   (1 << 29),
+               eOpenLogicalChannelAck_encryptionSync = (1 << 28),
+       } options;
+       OpenLogicalChannelAck_reverseLogicalChannelParameters
+           reverseLogicalChannelParameters;
+       OpenLogicalChannelAck_forwardMultiplexAckParameters
+           forwardMultiplexAckParameters;
+} OpenLogicalChannelAck;
+
+typedef struct ResponseMessage {       /* CHOICE */
+       enum {
+               eResponseMessage_nonStandard,
+               eResponseMessage_masterSlaveDeterminationAck,
+               eResponseMessage_masterSlaveDeterminationReject,
+               eResponseMessage_terminalCapabilitySetAck,
+               eResponseMessage_terminalCapabilitySetReject,
+               eResponseMessage_openLogicalChannelAck,
+               eResponseMessage_openLogicalChannelReject,
+               eResponseMessage_closeLogicalChannelAck,
+               eResponseMessage_requestChannelCloseAck,
+               eResponseMessage_requestChannelCloseReject,
+               eResponseMessage_multiplexEntrySendAck,
+               eResponseMessage_multiplexEntrySendReject,
+               eResponseMessage_requestMultiplexEntryAck,
+               eResponseMessage_requestMultiplexEntryReject,
+               eResponseMessage_requestModeAck,
+               eResponseMessage_requestModeReject,
+               eResponseMessage_roundTripDelayResponse,
+               eResponseMessage_maintenanceLoopAck,
+               eResponseMessage_maintenanceLoopReject,
+               eResponseMessage_communicationModeResponse,
+               eResponseMessage_conferenceResponse,
+               eResponseMessage_multilinkResponse,
+               eResponseMessage_logicalChannelRateAcknowledge,
+               eResponseMessage_logicalChannelRateReject,
+       } choice;
+       union {
+               OpenLogicalChannelAck openLogicalChannelAck;
+       };
+} ResponseMessage;
+
+typedef struct MultimediaSystemControlMessage {        /* CHOICE */
+       enum {
+               eMultimediaSystemControlMessage_request,
+               eMultimediaSystemControlMessage_response,
+               eMultimediaSystemControlMessage_command,
+               eMultimediaSystemControlMessage_indication,
+       } choice;
+       union {
+               RequestMessage request;
+               ResponseMessage response;
+       };
+} MultimediaSystemControlMessage;
+
+typedef struct H323_UU_PDU_h245Control {       /* SEQUENCE OF */
+       int count;
+       MultimediaSystemControlMessage item[4];
+} H323_UU_PDU_h245Control;
+
+typedef struct H323_UU_PDU {   /* SEQUENCE */
+       enum {
+               eH323_UU_PDU_nonStandardData = (1 << 31),
+               eH323_UU_PDU_h4501SupplementaryService = (1 << 30),
+               eH323_UU_PDU_h245Tunneling = (1 << 29),
+               eH323_UU_PDU_h245Control = (1 << 28),
+               eH323_UU_PDU_nonStandardControl = (1 << 27),
+               eH323_UU_PDU_callLinkage = (1 << 26),
+               eH323_UU_PDU_tunnelledSignallingMessage = (1 << 25),
+               eH323_UU_PDU_provisionalRespToH245Tunneling = (1 << 24),
+               eH323_UU_PDU_stimulusControl = (1 << 23),
+               eH323_UU_PDU_genericData = (1 << 22),
+       } options;
+       H323_UU_PDU_h323_message_body h323_message_body;
+       H323_UU_PDU_h245Control h245Control;
+} H323_UU_PDU;
+
+typedef struct H323_UserInformation {  /* SEQUENCE */
+       enum {
+               eH323_UserInformation_user_data = (1 << 31),
+       } options;
+       H323_UU_PDU h323_uu_pdu;
+} H323_UserInformation;
+
+typedef struct GatekeeperRequest {     /* SEQUENCE */
+       enum {
+               eGatekeeperRequest_nonStandardData = (1 << 31),
+               eGatekeeperRequest_gatekeeperIdentifier = (1 << 30),
+               eGatekeeperRequest_callServices = (1 << 29),
+               eGatekeeperRequest_endpointAlias = (1 << 28),
+               eGatekeeperRequest_alternateEndpoints = (1 << 27),
+               eGatekeeperRequest_tokens = (1 << 26),
+               eGatekeeperRequest_cryptoTokens = (1 << 25),
+               eGatekeeperRequest_authenticationCapability = (1 << 24),
+               eGatekeeperRequest_algorithmOIDs = (1 << 23),
+               eGatekeeperRequest_integrity = (1 << 22),
+               eGatekeeperRequest_integrityCheckValue = (1 << 21),
+               eGatekeeperRequest_supportsAltGK = (1 << 20),
+               eGatekeeperRequest_featureSet = (1 << 19),
+               eGatekeeperRequest_genericData = (1 << 18),
+       } options;
+       TransportAddress rasAddress;
+} GatekeeperRequest;
+
+typedef struct GatekeeperConfirm {     /* SEQUENCE */
+       enum {
+               eGatekeeperConfirm_nonStandardData = (1 << 31),
+               eGatekeeperConfirm_gatekeeperIdentifier = (1 << 30),
+               eGatekeeperConfirm_alternateGatekeeper = (1 << 29),
+               eGatekeeperConfirm_authenticationMode = (1 << 28),
+               eGatekeeperConfirm_tokens = (1 << 27),
+               eGatekeeperConfirm_cryptoTokens = (1 << 26),
+               eGatekeeperConfirm_algorithmOID = (1 << 25),
+               eGatekeeperConfirm_integrity = (1 << 24),
+               eGatekeeperConfirm_integrityCheckValue = (1 << 23),
+               eGatekeeperConfirm_featureSet = (1 << 22),
+               eGatekeeperConfirm_genericData = (1 << 21),
+       } options;
+       TransportAddress rasAddress;
+} GatekeeperConfirm;
+
+typedef struct RegistrationRequest_callSignalAddress { /* SEQUENCE OF */
+       int count;
+       TransportAddress item[10];
+} RegistrationRequest_callSignalAddress;
+
+typedef struct RegistrationRequest_rasAddress {        /* SEQUENCE OF */
+       int count;
+       TransportAddress item[10];
+} RegistrationRequest_rasAddress;
+
+typedef struct RegistrationRequest {   /* SEQUENCE */
+       enum {
+               eRegistrationRequest_nonStandardData = (1 << 31),
+               eRegistrationRequest_terminalAlias = (1 << 30),
+               eRegistrationRequest_gatekeeperIdentifier = (1 << 29),
+               eRegistrationRequest_alternateEndpoints = (1 << 28),
+               eRegistrationRequest_timeToLive = (1 << 27),
+               eRegistrationRequest_tokens = (1 << 26),
+               eRegistrationRequest_cryptoTokens = (1 << 25),
+               eRegistrationRequest_integrityCheckValue = (1 << 24),
+               eRegistrationRequest_keepAlive = (1 << 23),
+               eRegistrationRequest_endpointIdentifier = (1 << 22),
+               eRegistrationRequest_willSupplyUUIEs = (1 << 21),
+               eRegistrationRequest_maintainConnection = (1 << 20),
+               eRegistrationRequest_alternateTransportAddresses = (1 << 19),
+               eRegistrationRequest_additiveRegistration = (1 << 18),
+               eRegistrationRequest_terminalAliasPattern = (1 << 17),
+               eRegistrationRequest_supportsAltGK = (1 << 16),
+               eRegistrationRequest_usageReportingCapability = (1 << 15),
+               eRegistrationRequest_multipleCalls = (1 << 14),
+               eRegistrationRequest_supportedH248Packages = (1 << 13),
+               eRegistrationRequest_callCreditCapability = (1 << 12),
+               eRegistrationRequest_capacityReportingCapability = (1 << 11),
+               eRegistrationRequest_capacity = (1 << 10),
+               eRegistrationRequest_featureSet = (1 << 9),
+               eRegistrationRequest_genericData = (1 << 8),
+       } options;
+       RegistrationRequest_callSignalAddress callSignalAddress;
+       RegistrationRequest_rasAddress rasAddress;
+       unsigned timeToLive;
+} RegistrationRequest;
+
+typedef struct RegistrationConfirm_callSignalAddress { /* SEQUENCE OF */
+       int count;
+       TransportAddress item[10];
+} RegistrationConfirm_callSignalAddress;
+
+typedef struct RegistrationConfirm {   /* SEQUENCE */
+       enum {
+               eRegistrationConfirm_nonStandardData = (1 << 31),
+               eRegistrationConfirm_terminalAlias = (1 << 30),
+               eRegistrationConfirm_gatekeeperIdentifier = (1 << 29),
+               eRegistrationConfirm_alternateGatekeeper = (1 << 28),
+               eRegistrationConfirm_timeToLive = (1 << 27),
+               eRegistrationConfirm_tokens = (1 << 26),
+               eRegistrationConfirm_cryptoTokens = (1 << 25),
+               eRegistrationConfirm_integrityCheckValue = (1 << 24),
+               eRegistrationConfirm_willRespondToIRR = (1 << 23),
+               eRegistrationConfirm_preGrantedARQ = (1 << 22),
+               eRegistrationConfirm_maintainConnection = (1 << 21),
+               eRegistrationConfirm_serviceControl = (1 << 20),
+               eRegistrationConfirm_supportsAdditiveRegistration = (1 << 19),
+               eRegistrationConfirm_terminalAliasPattern = (1 << 18),
+               eRegistrationConfirm_supportedPrefixes = (1 << 17),
+               eRegistrationConfirm_usageSpec = (1 << 16),
+               eRegistrationConfirm_featureServerAlias = (1 << 15),
+               eRegistrationConfirm_capacityReportingSpec = (1 << 14),
+               eRegistrationConfirm_featureSet = (1 << 13),
+               eRegistrationConfirm_genericData = (1 << 12),
+       } options;
+       RegistrationConfirm_callSignalAddress callSignalAddress;
+       unsigned timeToLive;
+} RegistrationConfirm;
+
+typedef struct UnregistrationRequest_callSignalAddress {       /* SEQUENCE OF */
+       int count;
+       TransportAddress item[10];
+} UnregistrationRequest_callSignalAddress;
+
+typedef struct UnregistrationRequest { /* SEQUENCE */
+       enum {
+               eUnregistrationRequest_endpointAlias = (1 << 31),
+               eUnregistrationRequest_nonStandardData = (1 << 30),
+               eUnregistrationRequest_endpointIdentifier = (1 << 29),
+               eUnregistrationRequest_alternateEndpoints = (1 << 28),
+               eUnregistrationRequest_gatekeeperIdentifier = (1 << 27),
+               eUnregistrationRequest_tokens = (1 << 26),
+               eUnregistrationRequest_cryptoTokens = (1 << 25),
+               eUnregistrationRequest_integrityCheckValue = (1 << 24),
+               eUnregistrationRequest_reason = (1 << 23),
+               eUnregistrationRequest_endpointAliasPattern = (1 << 22),
+               eUnregistrationRequest_supportedPrefixes = (1 << 21),
+               eUnregistrationRequest_alternateGatekeeper = (1 << 20),
+               eUnregistrationRequest_genericData = (1 << 19),
+       } options;
+       UnregistrationRequest_callSignalAddress callSignalAddress;
+} UnregistrationRequest;
+
+typedef struct AdmissionRequest {      /* SEQUENCE */
+       enum {
+               eAdmissionRequest_callModel = (1 << 31),
+               eAdmissionRequest_destinationInfo = (1 << 30),
+               eAdmissionRequest_destCallSignalAddress = (1 << 29),
+               eAdmissionRequest_destExtraCallInfo = (1 << 28),
+               eAdmissionRequest_srcCallSignalAddress = (1 << 27),
+               eAdmissionRequest_nonStandardData = (1 << 26),
+               eAdmissionRequest_callServices = (1 << 25),
+               eAdmissionRequest_canMapAlias = (1 << 24),
+               eAdmissionRequest_callIdentifier = (1 << 23),
+               eAdmissionRequest_srcAlternatives = (1 << 22),
+               eAdmissionRequest_destAlternatives = (1 << 21),
+               eAdmissionRequest_gatekeeperIdentifier = (1 << 20),
+               eAdmissionRequest_tokens = (1 << 19),
+               eAdmissionRequest_cryptoTokens = (1 << 18),
+               eAdmissionRequest_integrityCheckValue = (1 << 17),
+               eAdmissionRequest_transportQOS = (1 << 16),
+               eAdmissionRequest_willSupplyUUIEs = (1 << 15),
+               eAdmissionRequest_callLinkage = (1 << 14),
+               eAdmissionRequest_gatewayDataRate = (1 << 13),
+               eAdmissionRequest_capacity = (1 << 12),
+               eAdmissionRequest_circuitInfo = (1 << 11),
+               eAdmissionRequest_desiredProtocols = (1 << 10),
+               eAdmissionRequest_desiredTunnelledProtocol = (1 << 9),
+               eAdmissionRequest_featureSet = (1 << 8),
+               eAdmissionRequest_genericData = (1 << 7),
+       } options;
+       TransportAddress destCallSignalAddress;
+       TransportAddress srcCallSignalAddress;
+} AdmissionRequest;
+
+typedef struct AdmissionConfirm {      /* SEQUENCE */
+       enum {
+               eAdmissionConfirm_irrFrequency = (1 << 31),
+               eAdmissionConfirm_nonStandardData = (1 << 30),
+               eAdmissionConfirm_destinationInfo = (1 << 29),
+               eAdmissionConfirm_destExtraCallInfo = (1 << 28),
+               eAdmissionConfirm_destinationType = (1 << 27),
+               eAdmissionConfirm_remoteExtensionAddress = (1 << 26),
+               eAdmissionConfirm_alternateEndpoints = (1 << 25),
+               eAdmissionConfirm_tokens = (1 << 24),
+               eAdmissionConfirm_cryptoTokens = (1 << 23),
+               eAdmissionConfirm_integrityCheckValue = (1 << 22),
+               eAdmissionConfirm_transportQOS = (1 << 21),
+               eAdmissionConfirm_willRespondToIRR = (1 << 20),
+               eAdmissionConfirm_uuiesRequested = (1 << 19),
+               eAdmissionConfirm_language = (1 << 18),
+               eAdmissionConfirm_alternateTransportAddresses = (1 << 17),
+               eAdmissionConfirm_useSpecifiedTransport = (1 << 16),
+               eAdmissionConfirm_circuitInfo = (1 << 15),
+               eAdmissionConfirm_usageSpec = (1 << 14),
+               eAdmissionConfirm_supportedProtocols = (1 << 13),
+               eAdmissionConfirm_serviceControl = (1 << 12),
+               eAdmissionConfirm_multipleCalls = (1 << 11),
+               eAdmissionConfirm_featureSet = (1 << 10),
+               eAdmissionConfirm_genericData = (1 << 9),
+       } options;
+       TransportAddress destCallSignalAddress;
+} AdmissionConfirm;
+
+typedef struct LocationRequest {       /* SEQUENCE */
+       enum {
+               eLocationRequest_endpointIdentifier = (1 << 31),
+               eLocationRequest_nonStandardData = (1 << 30),
+               eLocationRequest_sourceInfo = (1 << 29),
+               eLocationRequest_canMapAlias = (1 << 28),
+               eLocationRequest_gatekeeperIdentifier = (1 << 27),
+               eLocationRequest_tokens = (1 << 26),
+               eLocationRequest_cryptoTokens = (1 << 25),
+               eLocationRequest_integrityCheckValue = (1 << 24),
+               eLocationRequest_desiredProtocols = (1 << 23),
+               eLocationRequest_desiredTunnelledProtocol = (1 << 22),
+               eLocationRequest_featureSet = (1 << 21),
+               eLocationRequest_genericData = (1 << 20),
+               eLocationRequest_hopCount = (1 << 19),
+               eLocationRequest_circuitInfo = (1 << 18),
+       } options;
+       TransportAddress replyAddress;
+} LocationRequest;
+
+typedef struct LocationConfirm {       /* SEQUENCE */
+       enum {
+               eLocationConfirm_nonStandardData = (1 << 31),
+               eLocationConfirm_destinationInfo = (1 << 30),
+               eLocationConfirm_destExtraCallInfo = (1 << 29),
+               eLocationConfirm_destinationType = (1 << 28),
+               eLocationConfirm_remoteExtensionAddress = (1 << 27),
+               eLocationConfirm_alternateEndpoints = (1 << 26),
+               eLocationConfirm_tokens = (1 << 25),
+               eLocationConfirm_cryptoTokens = (1 << 24),
+               eLocationConfirm_integrityCheckValue = (1 << 23),
+               eLocationConfirm_alternateTransportAddresses = (1 << 22),
+               eLocationConfirm_supportedProtocols = (1 << 21),
+               eLocationConfirm_multipleCalls = (1 << 20),
+               eLocationConfirm_featureSet = (1 << 19),
+               eLocationConfirm_genericData = (1 << 18),
+               eLocationConfirm_circuitInfo = (1 << 17),
+               eLocationConfirm_serviceControl = (1 << 16),
+       } options;
+       TransportAddress callSignalAddress;
+       TransportAddress rasAddress;
+} LocationConfirm;
+
+typedef struct InfoRequestResponse_callSignalAddress { /* SEQUENCE OF */
+       int count;
+       TransportAddress item[10];
+} InfoRequestResponse_callSignalAddress;
+
+typedef struct InfoRequestResponse {   /* SEQUENCE */
+       enum {
+               eInfoRequestResponse_nonStandardData = (1 << 31),
+               eInfoRequestResponse_endpointAlias = (1 << 30),
+               eInfoRequestResponse_perCallInfo = (1 << 29),
+               eInfoRequestResponse_tokens = (1 << 28),
+               eInfoRequestResponse_cryptoTokens = (1 << 27),
+               eInfoRequestResponse_integrityCheckValue = (1 << 26),
+               eInfoRequestResponse_needResponse = (1 << 25),
+               eInfoRequestResponse_capacity = (1 << 24),
+               eInfoRequestResponse_irrStatus = (1 << 23),
+               eInfoRequestResponse_unsolicited = (1 << 22),
+               eInfoRequestResponse_genericData = (1 << 21),
+       } options;
+       TransportAddress rasAddress;
+       InfoRequestResponse_callSignalAddress callSignalAddress;
+} InfoRequestResponse;
+
+typedef struct RasMessage {    /* CHOICE */
+       enum {
+               eRasMessage_gatekeeperRequest,
+               eRasMessage_gatekeeperConfirm,
+               eRasMessage_gatekeeperReject,
+               eRasMessage_registrationRequest,
+               eRasMessage_registrationConfirm,
+               eRasMessage_registrationReject,
+               eRasMessage_unregistrationRequest,
+               eRasMessage_unregistrationConfirm,
+               eRasMessage_unregistrationReject,
+               eRasMessage_admissionRequest,
+               eRasMessage_admissionConfirm,
+               eRasMessage_admissionReject,
+               eRasMessage_bandwidthRequest,
+               eRasMessage_bandwidthConfirm,
+               eRasMessage_bandwidthReject,
+               eRasMessage_disengageRequest,
+               eRasMessage_disengageConfirm,
+               eRasMessage_disengageReject,
+               eRasMessage_locationRequest,
+               eRasMessage_locationConfirm,
+               eRasMessage_locationReject,
+               eRasMessage_infoRequest,
+               eRasMessage_infoRequestResponse,
+               eRasMessage_nonStandardMessage,
+               eRasMessage_unknownMessageResponse,
+               eRasMessage_requestInProgress,
+               eRasMessage_resourcesAvailableIndicate,
+               eRasMessage_resourcesAvailableConfirm,
+               eRasMessage_infoRequestAck,
+               eRasMessage_infoRequestNak,
+               eRasMessage_serviceControlIndication,
+               eRasMessage_serviceControlResponse,
+       } choice;
+       union {
+               GatekeeperRequest gatekeeperRequest;
+               GatekeeperConfirm gatekeeperConfirm;
+               RegistrationRequest registrationRequest;
+               RegistrationConfirm registrationConfirm;
+               UnregistrationRequest unregistrationRequest;
+               AdmissionRequest admissionRequest;
+               AdmissionConfirm admissionConfirm;
+               LocationRequest locationRequest;
+               LocationConfirm locationConfirm;
+               InfoRequestResponse infoRequestResponse;
+       };
+} RasMessage;
index daeb1395faa4db85096a108489b70645d9c9955b..fc817fd46caa87020e06b5882b86d63aa7378f18 100644 (file)
@@ -54,8 +54,6 @@
 #include <linux/netfilter_ipv4/ip_conntrack_h323.h>
 #include <linux/moduleparam.h>
 
-#include "ip_conntrack_helper_h323_asn1.h"
-
 #if 0
 #define DEBUGP printk
 #else
index afa525129b51a8ac0a6a53109a3d2c00c692410b..48078002e45075292624ea748bc2386b8e841728 100644 (file)
@@ -15,7 +15,7 @@
 #else
 #include <stdio.h>
 #endif
-#include "ip_conntrack_helper_h323_asn1.h"
+#include <linux/netfilter_ipv4/ip_conntrack_helper_h323_asn1.h>
 
 /* Trace Flag */
 #ifndef H323_TRACE
diff --git a/net/ipv4/netfilter/ip_conntrack_helper_h323_asn1.h b/net/ipv4/netfilter/ip_conntrack_helper_h323_asn1.h
deleted file mode 100644 (file)
index 0bd8280..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/****************************************************************************
- * ip_conntrack_helper_h323_asn1.h - BER and PER decoding library for H.323
- *                                  conntrack/NAT module.
- *
- * Copyright (c) 2006 by Jing Min Zhao <zhaojingmin@hotmail.com>
- *
- * This source code is licensed under General Public License version 2.
- *
- *
- * This library is based on H.225 version 4, H.235 version 2 and H.245
- * version 7. It is extremely optimized to decode only the absolutely
- * necessary objects in a signal for Linux kernel NAT module use, so don't
- * expect it to be a full ASN.1 library.
- *
- * Features:
- *
- * 1. Small. The total size of code plus data is less than 20 KB (IA32).
- * 2. Fast. Decoding Netmeeting's Setup signal 1 million times on a PIII 866
- *    takes only 3.9 seconds.
- * 3. No memory allocation. It uses a static object. No need to initialize or
- *    cleanup.
- * 4. Thread safe.
- * 5. Support embedded architectures that has no misaligned memory access
- *    support.
- *
- * Limitations:
- *
- * 1. At most 30 faststart entries. Actually this is limited by ethernet's MTU.
- *    If a Setup signal contains more than 30 faststart, the packet size will
- *    very likely exceed the MTU size, then the TPKT will be fragmented. I
- *    don't know how to handle this in a Netfilter module. Anybody can help?
- *    Although I think 30 is enough for most of the cases.
- * 2. IPv4 addresses only.
- *
- ****************************************************************************/
-
-#ifndef _IP_CONNTRACK_HELPER_H323_ASN1_H_
-#define _IP_CONNTRACK_HELPER_H323_ASN1_H_
-
-/*****************************************************************************
- * H.323 Types
- ****************************************************************************/
-#include "ip_conntrack_helper_h323_types.h"
-
-typedef struct {
-       enum {
-               Q931_NationalEscape = 0x00,
-               Q931_Alerting = 0x01,
-               Q931_CallProceeding = 0x02,
-               Q931_Connect = 0x07,
-               Q931_ConnectAck = 0x0F,
-               Q931_Progress = 0x03,
-               Q931_Setup = 0x05,
-               Q931_SetupAck = 0x0D,
-               Q931_Resume = 0x26,
-               Q931_ResumeAck = 0x2E,
-               Q931_ResumeReject = 0x22,
-               Q931_Suspend = 0x25,
-               Q931_SuspendAck = 0x2D,
-               Q931_SuspendReject = 0x21,
-               Q931_UserInformation = 0x20,
-               Q931_Disconnect = 0x45,
-               Q931_Release = 0x4D,
-               Q931_ReleaseComplete = 0x5A,
-               Q931_Restart = 0x46,
-               Q931_RestartAck = 0x4E,
-               Q931_Segment = 0x60,
-               Q931_CongestionCtrl = 0x79,
-               Q931_Information = 0x7B,
-               Q931_Notify = 0x6E,
-               Q931_Status = 0x7D,
-               Q931_StatusEnquiry = 0x75,
-               Q931_Facility = 0x62
-       } MessageType;
-       H323_UserInformation UUIE;
-} Q931;
-
-/*****************************************************************************
- * Decode Functions Return Codes
- ****************************************************************************/
-
-#define H323_ERROR_NONE 0      /* Decoded successfully */
-#define H323_ERROR_STOP 1      /* Decoding stopped, not really an error */
-#define H323_ERROR_BOUND -1
-#define H323_ERROR_RANGE -2
-
-
-/*****************************************************************************
- * Decode Functions
- ****************************************************************************/
-
-int DecodeRasMessage(unsigned char *buf, size_t sz, RasMessage * ras);
-int DecodeQ931(unsigned char *buf, size_t sz, Q931 * q931);
-int DecodeMultimediaSystemControlMessage(unsigned char *buf, size_t sz,
-                                        MultimediaSystemControlMessage *
-                                        mscm);
-
-#endif
diff --git a/net/ipv4/netfilter/ip_conntrack_helper_h323_types.h b/net/ipv4/netfilter/ip_conntrack_helper_h323_types.h
deleted file mode 100644 (file)
index cc98f7a..0000000
+++ /dev/null
@@ -1,938 +0,0 @@
-/* Generated by Jing Min Zhao's ASN.1 parser, Mar 15 2006
- *
- * Copyright (c) 2006 Jing Min Zhao <zhaojingmin@users.sourceforge.net>
- *
- * This source code is licensed under General Public License version 2.
- */
-
-typedef struct TransportAddress_ipAddress {    /* SEQUENCE */
-       int options;            /* No use */
-       unsigned ip;
-} TransportAddress_ipAddress;
-
-typedef struct TransportAddress {      /* CHOICE */
-       enum {
-               eTransportAddress_ipAddress,
-               eTransportAddress_ipSourceRoute,
-               eTransportAddress_ipxAddress,
-               eTransportAddress_ip6Address,
-               eTransportAddress_netBios,
-               eTransportAddress_nsap,
-               eTransportAddress_nonStandardAddress,
-       } choice;
-       union {
-               TransportAddress_ipAddress ipAddress;
-       };
-} TransportAddress;
-
-typedef struct DataProtocolCapability {        /* CHOICE */
-       enum {
-               eDataProtocolCapability_nonStandard,
-               eDataProtocolCapability_v14buffered,
-               eDataProtocolCapability_v42lapm,
-               eDataProtocolCapability_hdlcFrameTunnelling,
-               eDataProtocolCapability_h310SeparateVCStack,
-               eDataProtocolCapability_h310SingleVCStack,
-               eDataProtocolCapability_transparent,
-               eDataProtocolCapability_segmentationAndReassembly,
-               eDataProtocolCapability_hdlcFrameTunnelingwSAR,
-               eDataProtocolCapability_v120,
-               eDataProtocolCapability_separateLANStack,
-               eDataProtocolCapability_v76wCompression,
-               eDataProtocolCapability_tcp,
-               eDataProtocolCapability_udp,
-       } choice;
-} DataProtocolCapability;
-
-typedef struct DataApplicationCapability_application { /* CHOICE */
-       enum {
-               eDataApplicationCapability_application_nonStandard,
-               eDataApplicationCapability_application_t120,
-               eDataApplicationCapability_application_dsm_cc,
-               eDataApplicationCapability_application_userData,
-               eDataApplicationCapability_application_t84,
-               eDataApplicationCapability_application_t434,
-               eDataApplicationCapability_application_h224,
-               eDataApplicationCapability_application_nlpid,
-               eDataApplicationCapability_application_dsvdControl,
-               eDataApplicationCapability_application_h222DataPartitioning,
-               eDataApplicationCapability_application_t30fax,
-               eDataApplicationCapability_application_t140,
-               eDataApplicationCapability_application_t38fax,
-               eDataApplicationCapability_application_genericDataCapability,
-       } choice;
-       union {
-               DataProtocolCapability t120;
-       };
-} DataApplicationCapability_application;
-
-typedef struct DataApplicationCapability {     /* SEQUENCE */
-       int options;            /* No use */
-       DataApplicationCapability_application application;
-} DataApplicationCapability;
-
-typedef struct DataType {      /* CHOICE */
-       enum {
-               eDataType_nonStandard,
-               eDataType_nullData,
-               eDataType_videoData,
-               eDataType_audioData,
-               eDataType_data,
-               eDataType_encryptionData,
-               eDataType_h235Control,
-               eDataType_h235Media,
-               eDataType_multiplexedStream,
-       } choice;
-       union {
-               DataApplicationCapability data;
-       };
-} DataType;
-
-typedef struct UnicastAddress_iPAddress {      /* SEQUENCE */
-       int options;            /* No use */
-       unsigned network;
-} UnicastAddress_iPAddress;
-
-typedef struct UnicastAddress {        /* CHOICE */
-       enum {
-               eUnicastAddress_iPAddress,
-               eUnicastAddress_iPXAddress,
-               eUnicastAddress_iP6Address,
-               eUnicastAddress_netBios,
-               eUnicastAddress_iPSourceRouteAddress,
-               eUnicastAddress_nsap,
-               eUnicastAddress_nonStandardAddress,
-       } choice;
-       union {
-               UnicastAddress_iPAddress iPAddress;
-       };
-} UnicastAddress;
-
-typedef struct H245_TransportAddress { /* CHOICE */
-       enum {
-               eH245_TransportAddress_unicastAddress,
-               eH245_TransportAddress_multicastAddress,
-       } choice;
-       union {
-               UnicastAddress unicastAddress;
-       };
-} H245_TransportAddress;
-
-typedef struct H2250LogicalChannelParameters { /* SEQUENCE */
-       enum {
-               eH2250LogicalChannelParameters_nonStandard = (1 << 31),
-               eH2250LogicalChannelParameters_associatedSessionID =
-                   (1 << 30),
-               eH2250LogicalChannelParameters_mediaChannel = (1 << 29),
-               eH2250LogicalChannelParameters_mediaGuaranteedDelivery =
-                   (1 << 28),
-               eH2250LogicalChannelParameters_mediaControlChannel =
-                   (1 << 27),
-               eH2250LogicalChannelParameters_mediaControlGuaranteedDelivery
-                   = (1 << 26),
-               eH2250LogicalChannelParameters_silenceSuppression = (1 << 25),
-               eH2250LogicalChannelParameters_destination = (1 << 24),
-               eH2250LogicalChannelParameters_dynamicRTPPayloadType =
-                   (1 << 23),
-               eH2250LogicalChannelParameters_mediaPacketization = (1 << 22),
-               eH2250LogicalChannelParameters_transportCapability =
-                   (1 << 21),
-               eH2250LogicalChannelParameters_redundancyEncoding = (1 << 20),
-               eH2250LogicalChannelParameters_source = (1 << 19),
-       } options;
-       H245_TransportAddress mediaChannel;
-       H245_TransportAddress mediaControlChannel;
-} H2250LogicalChannelParameters;
-
-typedef struct OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters {        /* CHOICE */
-       enum {
-               eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h222LogicalChannelParameters,
-               eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h223LogicalChannelParameters,
-               eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_v76LogicalChannelParameters,
-               eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters,
-               eOpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters_none,
-       } choice;
-       union {
-               H2250LogicalChannelParameters h2250LogicalChannelParameters;
-       };
-} OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters;
-
-typedef struct OpenLogicalChannel_forwardLogicalChannelParameters {    /* SEQUENCE */
-       enum {
-               eOpenLogicalChannel_forwardLogicalChannelParameters_portNumber
-                   = (1 << 31),
-               eOpenLogicalChannel_forwardLogicalChannelParameters_forwardLogicalChannelDependency
-                   = (1 << 30),
-               eOpenLogicalChannel_forwardLogicalChannelParameters_replacementFor
-                   = (1 << 29),
-       } options;
-       DataType dataType;
-       OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters
-           multiplexParameters;
-} OpenLogicalChannel_forwardLogicalChannelParameters;
-
-typedef struct OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters {        /* CHOICE */
-       enum {
-               eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h223LogicalChannelParameters,
-               eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_v76LogicalChannelParameters,
-               eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters,
-       } choice;
-       union {
-               H2250LogicalChannelParameters h2250LogicalChannelParameters;
-       };
-} OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters;
-
-typedef struct OpenLogicalChannel_reverseLogicalChannelParameters {    /* SEQUENCE */
-       enum {
-               eOpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters
-                   = (1 << 31),
-               eOpenLogicalChannel_reverseLogicalChannelParameters_reverseLogicalChannelDependency
-                   = (1 << 30),
-               eOpenLogicalChannel_reverseLogicalChannelParameters_replacementFor
-                   = (1 << 29),
-       } options;
-       OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters
-           multiplexParameters;
-} OpenLogicalChannel_reverseLogicalChannelParameters;
-
-typedef struct NetworkAccessParameters_networkAddress {        /* CHOICE */
-       enum {
-               eNetworkAccessParameters_networkAddress_q2931Address,
-               eNetworkAccessParameters_networkAddress_e164Address,
-               eNetworkAccessParameters_networkAddress_localAreaAddress,
-       } choice;
-       union {
-               H245_TransportAddress localAreaAddress;
-       };
-} NetworkAccessParameters_networkAddress;
-
-typedef struct NetworkAccessParameters {       /* SEQUENCE */
-       enum {
-               eNetworkAccessParameters_distribution = (1 << 31),
-               eNetworkAccessParameters_externalReference = (1 << 30),
-               eNetworkAccessParameters_t120SetupProcedure = (1 << 29),
-       } options;
-       NetworkAccessParameters_networkAddress networkAddress;
-} NetworkAccessParameters;
-
-typedef struct OpenLogicalChannel {    /* SEQUENCE */
-       enum {
-               eOpenLogicalChannel_reverseLogicalChannelParameters =
-                   (1 << 31),
-               eOpenLogicalChannel_separateStack = (1 << 30),
-               eOpenLogicalChannel_encryptionSync = (1 << 29),
-       } options;
-       OpenLogicalChannel_forwardLogicalChannelParameters
-           forwardLogicalChannelParameters;
-       OpenLogicalChannel_reverseLogicalChannelParameters
-           reverseLogicalChannelParameters;
-       NetworkAccessParameters separateStack;
-} OpenLogicalChannel;
-
-typedef struct Setup_UUIE_fastStart {  /* SEQUENCE OF */
-       int count;
-       OpenLogicalChannel item[30];
-} Setup_UUIE_fastStart;
-
-typedef struct Setup_UUIE {    /* SEQUENCE */
-       enum {
-               eSetup_UUIE_h245Address = (1 << 31),
-               eSetup_UUIE_sourceAddress = (1 << 30),
-               eSetup_UUIE_destinationAddress = (1 << 29),
-               eSetup_UUIE_destCallSignalAddress = (1 << 28),
-               eSetup_UUIE_destExtraCallInfo = (1 << 27),
-               eSetup_UUIE_destExtraCRV = (1 << 26),
-               eSetup_UUIE_callServices = (1 << 25),
-               eSetup_UUIE_sourceCallSignalAddress = (1 << 24),
-               eSetup_UUIE_remoteExtensionAddress = (1 << 23),
-               eSetup_UUIE_callIdentifier = (1 << 22),
-               eSetup_UUIE_h245SecurityCapability = (1 << 21),
-               eSetup_UUIE_tokens = (1 << 20),
-               eSetup_UUIE_cryptoTokens = (1 << 19),
-               eSetup_UUIE_fastStart = (1 << 18),
-               eSetup_UUIE_mediaWaitForConnect = (1 << 17),
-               eSetup_UUIE_canOverlapSend = (1 << 16),
-               eSetup_UUIE_endpointIdentifier = (1 << 15),
-               eSetup_UUIE_multipleCalls = (1 << 14),
-               eSetup_UUIE_maintainConnection = (1 << 13),
-               eSetup_UUIE_connectionParameters = (1 << 12),
-               eSetup_UUIE_language = (1 << 11),
-               eSetup_UUIE_presentationIndicator = (1 << 10),
-               eSetup_UUIE_screeningIndicator = (1 << 9),
-               eSetup_UUIE_serviceControl = (1 << 8),
-               eSetup_UUIE_symmetricOperationRequired = (1 << 7),
-               eSetup_UUIE_capacity = (1 << 6),
-               eSetup_UUIE_circuitInfo = (1 << 5),
-               eSetup_UUIE_desiredProtocols = (1 << 4),
-               eSetup_UUIE_neededFeatures = (1 << 3),
-               eSetup_UUIE_desiredFeatures = (1 << 2),
-               eSetup_UUIE_supportedFeatures = (1 << 1),
-               eSetup_UUIE_parallelH245Control = (1 << 0),
-       } options;
-       TransportAddress h245Address;
-       TransportAddress destCallSignalAddress;
-       TransportAddress sourceCallSignalAddress;
-       Setup_UUIE_fastStart fastStart;
-} Setup_UUIE;
-
-typedef struct CallProceeding_UUIE_fastStart { /* SEQUENCE OF */
-       int count;
-       OpenLogicalChannel item[30];
-} CallProceeding_UUIE_fastStart;
-
-typedef struct CallProceeding_UUIE {   /* SEQUENCE */
-       enum {
-               eCallProceeding_UUIE_h245Address = (1 << 31),
-               eCallProceeding_UUIE_callIdentifier = (1 << 30),
-               eCallProceeding_UUIE_h245SecurityMode = (1 << 29),
-               eCallProceeding_UUIE_tokens = (1 << 28),
-               eCallProceeding_UUIE_cryptoTokens = (1 << 27),
-               eCallProceeding_UUIE_fastStart = (1 << 26),
-               eCallProceeding_UUIE_multipleCalls = (1 << 25),
-               eCallProceeding_UUIE_maintainConnection = (1 << 24),
-               eCallProceeding_UUIE_fastConnectRefused = (1 << 23),
-               eCallProceeding_UUIE_featureSet = (1 << 22),
-       } options;
-       TransportAddress h245Address;
-       CallProceeding_UUIE_fastStart fastStart;
-} CallProceeding_UUIE;
-
-typedef struct Connect_UUIE_fastStart {        /* SEQUENCE OF */
-       int count;
-       OpenLogicalChannel item[30];
-} Connect_UUIE_fastStart;
-
-typedef struct Connect_UUIE {  /* SEQUENCE */
-       enum {
-               eConnect_UUIE_h245Address = (1 << 31),
-               eConnect_UUIE_callIdentifier = (1 << 30),
-               eConnect_UUIE_h245SecurityMode = (1 << 29),
-               eConnect_UUIE_tokens = (1 << 28),
-               eConnect_UUIE_cryptoTokens = (1 << 27),
-               eConnect_UUIE_fastStart = (1 << 26),
-               eConnect_UUIE_multipleCalls = (1 << 25),
-               eConnect_UUIE_maintainConnection = (1 << 24),
-               eConnect_UUIE_language = (1 << 23),
-               eConnect_UUIE_connectedAddress = (1 << 22),
-               eConnect_UUIE_presentationIndicator = (1 << 21),
-               eConnect_UUIE_screeningIndicator = (1 << 20),
-               eConnect_UUIE_fastConnectRefused = (1 << 19),
-               eConnect_UUIE_serviceControl = (1 << 18),
-               eConnect_UUIE_capacity = (1 << 17),
-               eConnect_UUIE_featureSet = (1 << 16),
-       } options;
-       TransportAddress h245Address;
-       Connect_UUIE_fastStart fastStart;
-} Connect_UUIE;
-
-typedef struct Alerting_UUIE_fastStart {       /* SEQUENCE OF */
-       int count;
-       OpenLogicalChannel item[30];
-} Alerting_UUIE_fastStart;
-
-typedef struct Alerting_UUIE { /* SEQUENCE */
-       enum {
-               eAlerting_UUIE_h245Address = (1 << 31),
-               eAlerting_UUIE_callIdentifier = (1 << 30),
-               eAlerting_UUIE_h245SecurityMode = (1 << 29),
-               eAlerting_UUIE_tokens = (1 << 28),
-               eAlerting_UUIE_cryptoTokens = (1 << 27),
-               eAlerting_UUIE_fastStart = (1 << 26),
-               eAlerting_UUIE_multipleCalls = (1 << 25),
-               eAlerting_UUIE_maintainConnection = (1 << 24),
-               eAlerting_UUIE_alertingAddress = (1 << 23),
-               eAlerting_UUIE_presentationIndicator = (1 << 22),
-               eAlerting_UUIE_screeningIndicator = (1 << 21),
-               eAlerting_UUIE_fastConnectRefused = (1 << 20),
-               eAlerting_UUIE_serviceControl = (1 << 19),
-               eAlerting_UUIE_capacity = (1 << 18),
-               eAlerting_UUIE_featureSet = (1 << 17),
-       } options;
-       TransportAddress h245Address;
-       Alerting_UUIE_fastStart fastStart;
-} Alerting_UUIE;
-
-typedef struct Information_UUIE_fastStart {    /* SEQUENCE OF */
-       int count;
-       OpenLogicalChannel item[30];
-} Information_UUIE_fastStart;
-
-typedef struct Information_UUIE {      /* SEQUENCE */
-       enum {
-               eInformation_UUIE_callIdentifier = (1 << 31),
-               eInformation_UUIE_tokens = (1 << 30),
-               eInformation_UUIE_cryptoTokens = (1 << 29),
-               eInformation_UUIE_fastStart = (1 << 28),
-               eInformation_UUIE_fastConnectRefused = (1 << 27),
-               eInformation_UUIE_circuitInfo = (1 << 26),
-       } options;
-       Information_UUIE_fastStart fastStart;
-} Information_UUIE;
-
-typedef struct FacilityReason {        /* CHOICE */
-       enum {
-               eFacilityReason_routeCallToGatekeeper,
-               eFacilityReason_callForwarded,
-               eFacilityReason_routeCallToMC,
-               eFacilityReason_undefinedReason,
-               eFacilityReason_conferenceListChoice,
-               eFacilityReason_startH245,
-               eFacilityReason_noH245,
-               eFacilityReason_newTokens,
-               eFacilityReason_featureSetUpdate,
-               eFacilityReason_forwardedElements,
-               eFacilityReason_transportedInformation,
-       } choice;
-} FacilityReason;
-
-typedef struct Facility_UUIE_fastStart {       /* SEQUENCE OF */
-       int count;
-       OpenLogicalChannel item[30];
-} Facility_UUIE_fastStart;
-
-typedef struct Facility_UUIE { /* SEQUENCE */
-       enum {
-               eFacility_UUIE_alternativeAddress = (1 << 31),
-               eFacility_UUIE_alternativeAliasAddress = (1 << 30),
-               eFacility_UUIE_conferenceID = (1 << 29),
-               eFacility_UUIE_callIdentifier = (1 << 28),
-               eFacility_UUIE_destExtraCallInfo = (1 << 27),
-               eFacility_UUIE_remoteExtensionAddress = (1 << 26),
-               eFacility_UUIE_tokens = (1 << 25),
-               eFacility_UUIE_cryptoTokens = (1 << 24),
-               eFacility_UUIE_conferences = (1 << 23),
-               eFacility_UUIE_h245Address = (1 << 22),
-               eFacility_UUIE_fastStart = (1 << 21),
-               eFacility_UUIE_multipleCalls = (1 << 20),
-               eFacility_UUIE_maintainConnection = (1 << 19),
-               eFacility_UUIE_fastConnectRefused = (1 << 18),
-               eFacility_UUIE_serviceControl = (1 << 17),
-               eFacility_UUIE_circuitInfo = (1 << 16),
-               eFacility_UUIE_featureSet = (1 << 15),
-               eFacility_UUIE_destinationInfo = (1 << 14),
-               eFacility_UUIE_h245SecurityMode = (1 << 13),
-       } options;
-       FacilityReason reason;
-       TransportAddress h245Address;
-       Facility_UUIE_fastStart fastStart;
-} Facility_UUIE;
-
-typedef struct Progress_UUIE_fastStart {       /* SEQUENCE OF */
-       int count;
-       OpenLogicalChannel item[30];
-} Progress_UUIE_fastStart;
-
-typedef struct Progress_UUIE { /* SEQUENCE */
-       enum {
-               eProgress_UUIE_h245Address = (1 << 31),
-               eProgress_UUIE_h245SecurityMode = (1 << 30),
-               eProgress_UUIE_tokens = (1 << 29),
-               eProgress_UUIE_cryptoTokens = (1 << 28),
-               eProgress_UUIE_fastStart = (1 << 27),
-               eProgress_UUIE_multipleCalls = (1 << 26),
-               eProgress_UUIE_maintainConnection = (1 << 25),
-               eProgress_UUIE_fastConnectRefused = (1 << 24),
-       } options;
-       TransportAddress h245Address;
-       Progress_UUIE_fastStart fastStart;
-} Progress_UUIE;
-
-typedef struct H323_UU_PDU_h323_message_body { /* CHOICE */
-       enum {
-               eH323_UU_PDU_h323_message_body_setup,
-               eH323_UU_PDU_h323_message_body_callProceeding,
-               eH323_UU_PDU_h323_message_body_connect,
-               eH323_UU_PDU_h323_message_body_alerting,
-               eH323_UU_PDU_h323_message_body_information,
-               eH323_UU_PDU_h323_message_body_releaseComplete,
-               eH323_UU_PDU_h323_message_body_facility,
-               eH323_UU_PDU_h323_message_body_progress,
-               eH323_UU_PDU_h323_message_body_empty,
-               eH323_UU_PDU_h323_message_body_status,
-               eH323_UU_PDU_h323_message_body_statusInquiry,
-               eH323_UU_PDU_h323_message_body_setupAcknowledge,
-               eH323_UU_PDU_h323_message_body_notify,
-       } choice;
-       union {
-               Setup_UUIE setup;
-               CallProceeding_UUIE callProceeding;
-               Connect_UUIE connect;
-               Alerting_UUIE alerting;
-               Information_UUIE information;
-               Facility_UUIE facility;
-               Progress_UUIE progress;
-       };
-} H323_UU_PDU_h323_message_body;
-
-typedef struct RequestMessage {        /* CHOICE */
-       enum {
-               eRequestMessage_nonStandard,
-               eRequestMessage_masterSlaveDetermination,
-               eRequestMessage_terminalCapabilitySet,
-               eRequestMessage_openLogicalChannel,
-               eRequestMessage_closeLogicalChannel,
-               eRequestMessage_requestChannelClose,
-               eRequestMessage_multiplexEntrySend,
-               eRequestMessage_requestMultiplexEntry,
-               eRequestMessage_requestMode,
-               eRequestMessage_roundTripDelayRequest,
-               eRequestMessage_maintenanceLoopRequest,
-               eRequestMessage_communicationModeRequest,
-               eRequestMessage_conferenceRequest,
-               eRequestMessage_multilinkRequest,
-               eRequestMessage_logicalChannelRateRequest,
-       } choice;
-       union {
-               OpenLogicalChannel openLogicalChannel;
-       };
-} RequestMessage;
-
-typedef struct OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters {     /* CHOICE */
-       enum {
-               eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_h222LogicalChannelParameters,
-               eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters_h2250LogicalChannelParameters,
-       } choice;
-       union {
-               H2250LogicalChannelParameters h2250LogicalChannelParameters;
-       };
-} OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters;
-
-typedef struct OpenLogicalChannelAck_reverseLogicalChannelParameters { /* SEQUENCE */
-       enum {
-               eOpenLogicalChannelAck_reverseLogicalChannelParameters_portNumber
-                   = (1 << 31),
-               eOpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters
-                   = (1 << 30),
-               eOpenLogicalChannelAck_reverseLogicalChannelParameters_replacementFor
-                   = (1 << 29),
-       } options;
-       OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters
-           multiplexParameters;
-} OpenLogicalChannelAck_reverseLogicalChannelParameters;
-
-typedef struct H2250LogicalChannelAckParameters {      /* SEQUENCE */
-       enum {
-               eH2250LogicalChannelAckParameters_nonStandard = (1 << 31),
-               eH2250LogicalChannelAckParameters_sessionID = (1 << 30),
-               eH2250LogicalChannelAckParameters_mediaChannel = (1 << 29),
-               eH2250LogicalChannelAckParameters_mediaControlChannel =
-                   (1 << 28),
-               eH2250LogicalChannelAckParameters_dynamicRTPPayloadType =
-                   (1 << 27),
-               eH2250LogicalChannelAckParameters_flowControlToZero =
-                   (1 << 26),
-               eH2250LogicalChannelAckParameters_portNumber = (1 << 25),
-       } options;
-       H245_TransportAddress mediaChannel;
-       H245_TransportAddress mediaControlChannel;
-} H2250LogicalChannelAckParameters;
-
-typedef struct OpenLogicalChannelAck_forwardMultiplexAckParameters {   /* CHOICE */
-       enum {
-               eOpenLogicalChannelAck_forwardMultiplexAckParameters_h2250LogicalChannelAckParameters,
-       } choice;
-       union {
-               H2250LogicalChannelAckParameters
-                   h2250LogicalChannelAckParameters;
-       };
-} OpenLogicalChannelAck_forwardMultiplexAckParameters;
-
-typedef struct OpenLogicalChannelAck { /* SEQUENCE */
-       enum {
-               eOpenLogicalChannelAck_reverseLogicalChannelParameters =
-                   (1 << 31),
-               eOpenLogicalChannelAck_separateStack = (1 << 30),
-               eOpenLogicalChannelAck_forwardMultiplexAckParameters =
-                   (1 << 29),
-               eOpenLogicalChannelAck_encryptionSync = (1 << 28),
-       } options;
-       OpenLogicalChannelAck_reverseLogicalChannelParameters
-           reverseLogicalChannelParameters;
-       OpenLogicalChannelAck_forwardMultiplexAckParameters
-           forwardMultiplexAckParameters;
-} OpenLogicalChannelAck;
-
-typedef struct ResponseMessage {       /* CHOICE */
-       enum {
-               eResponseMessage_nonStandard,
-               eResponseMessage_masterSlaveDeterminationAck,
-               eResponseMessage_masterSlaveDeterminationReject,
-               eResponseMessage_terminalCapabilitySetAck,
-               eResponseMessage_terminalCapabilitySetReject,
-               eResponseMessage_openLogicalChannelAck,
-               eResponseMessage_openLogicalChannelReject,
-               eResponseMessage_closeLogicalChannelAck,
-               eResponseMessage_requestChannelCloseAck,
-               eResponseMessage_requestChannelCloseReject,
-               eResponseMessage_multiplexEntrySendAck,
-               eResponseMessage_multiplexEntrySendReject,
-               eResponseMessage_requestMultiplexEntryAck,
-               eResponseMessage_requestMultiplexEntryReject,
-               eResponseMessage_requestModeAck,
-               eResponseMessage_requestModeReject,
-               eResponseMessage_roundTripDelayResponse,
-               eResponseMessage_maintenanceLoopAck,
-               eResponseMessage_maintenanceLoopReject,
-               eResponseMessage_communicationModeResponse,
-               eResponseMessage_conferenceResponse,
-               eResponseMessage_multilinkResponse,
-               eResponseMessage_logicalChannelRateAcknowledge,
-               eResponseMessage_logicalChannelRateReject,
-       } choice;
-       union {
-               OpenLogicalChannelAck openLogicalChannelAck;
-       };
-} ResponseMessage;
-
-typedef struct MultimediaSystemControlMessage {        /* CHOICE */
-       enum {
-               eMultimediaSystemControlMessage_request,
-               eMultimediaSystemControlMessage_response,
-               eMultimediaSystemControlMessage_command,
-               eMultimediaSystemControlMessage_indication,
-       } choice;
-       union {
-               RequestMessage request;
-               ResponseMessage response;
-       };
-} MultimediaSystemControlMessage;
-
-typedef struct H323_UU_PDU_h245Control {       /* SEQUENCE OF */
-       int count;
-       MultimediaSystemControlMessage item[4];
-} H323_UU_PDU_h245Control;
-
-typedef struct H323_UU_PDU {   /* SEQUENCE */
-       enum {
-               eH323_UU_PDU_nonStandardData = (1 << 31),
-               eH323_UU_PDU_h4501SupplementaryService = (1 << 30),
-               eH323_UU_PDU_h245Tunneling = (1 << 29),
-               eH323_UU_PDU_h245Control = (1 << 28),
-               eH323_UU_PDU_nonStandardControl = (1 << 27),
-               eH323_UU_PDU_callLinkage = (1 << 26),
-               eH323_UU_PDU_tunnelledSignallingMessage = (1 << 25),
-               eH323_UU_PDU_provisionalRespToH245Tunneling = (1 << 24),
-               eH323_UU_PDU_stimulusControl = (1 << 23),
-               eH323_UU_PDU_genericData = (1 << 22),
-       } options;
-       H323_UU_PDU_h323_message_body h323_message_body;
-       H323_UU_PDU_h245Control h245Control;
-} H323_UU_PDU;
-
-typedef struct H323_UserInformation {  /* SEQUENCE */
-       enum {
-               eH323_UserInformation_user_data = (1 << 31),
-       } options;
-       H323_UU_PDU h323_uu_pdu;
-} H323_UserInformation;
-
-typedef struct GatekeeperRequest {     /* SEQUENCE */
-       enum {
-               eGatekeeperRequest_nonStandardData = (1 << 31),
-               eGatekeeperRequest_gatekeeperIdentifier = (1 << 30),
-               eGatekeeperRequest_callServices = (1 << 29),
-               eGatekeeperRequest_endpointAlias = (1 << 28),
-               eGatekeeperRequest_alternateEndpoints = (1 << 27),
-               eGatekeeperRequest_tokens = (1 << 26),
-               eGatekeeperRequest_cryptoTokens = (1 << 25),
-               eGatekeeperRequest_authenticationCapability = (1 << 24),
-               eGatekeeperRequest_algorithmOIDs = (1 << 23),
-               eGatekeeperRequest_integrity = (1 << 22),
-               eGatekeeperRequest_integrityCheckValue = (1 << 21),
-               eGatekeeperRequest_supportsAltGK = (1 << 20),
-               eGatekeeperRequest_featureSet = (1 << 19),
-               eGatekeeperRequest_genericData = (1 << 18),
-       } options;
-       TransportAddress rasAddress;
-} GatekeeperRequest;
-
-typedef struct GatekeeperConfirm {     /* SEQUENCE */
-       enum {
-               eGatekeeperConfirm_nonStandardData = (1 << 31),
-               eGatekeeperConfirm_gatekeeperIdentifier = (1 << 30),
-               eGatekeeperConfirm_alternateGatekeeper = (1 << 29),
-               eGatekeeperConfirm_authenticationMode = (1 << 28),
-               eGatekeeperConfirm_tokens = (1 << 27),
-               eGatekeeperConfirm_cryptoTokens = (1 << 26),
-               eGatekeeperConfirm_algorithmOID = (1 << 25),
-               eGatekeeperConfirm_integrity = (1 << 24),
-               eGatekeeperConfirm_integrityCheckValue = (1 << 23),
-               eGatekeeperConfirm_featureSet = (1 << 22),
-               eGatekeeperConfirm_genericData = (1 << 21),
-       } options;
-       TransportAddress rasAddress;
-} GatekeeperConfirm;
-
-typedef struct RegistrationRequest_callSignalAddress { /* SEQUENCE OF */
-       int count;
-       TransportAddress item[10];
-} RegistrationRequest_callSignalAddress;
-
-typedef struct RegistrationRequest_rasAddress {        /* SEQUENCE OF */
-       int count;
-       TransportAddress item[10];
-} RegistrationRequest_rasAddress;
-
-typedef struct RegistrationRequest {   /* SEQUENCE */
-       enum {
-               eRegistrationRequest_nonStandardData = (1 << 31),
-               eRegistrationRequest_terminalAlias = (1 << 30),
-               eRegistrationRequest_gatekeeperIdentifier = (1 << 29),
-               eRegistrationRequest_alternateEndpoints = (1 << 28),
-               eRegistrationRequest_timeToLive = (1 << 27),
-               eRegistrationRequest_tokens = (1 << 26),
-               eRegistrationRequest_cryptoTokens = (1 << 25),
-               eRegistrationRequest_integrityCheckValue = (1 << 24),
-               eRegistrationRequest_keepAlive = (1 << 23),
-               eRegistrationRequest_endpointIdentifier = (1 << 22),
-               eRegistrationRequest_willSupplyUUIEs = (1 << 21),
-               eRegistrationRequest_maintainConnection = (1 << 20),
-               eRegistrationRequest_alternateTransportAddresses = (1 << 19),
-               eRegistrationRequest_additiveRegistration = (1 << 18),
-               eRegistrationRequest_terminalAliasPattern = (1 << 17),
-               eRegistrationRequest_supportsAltGK = (1 << 16),
-               eRegistrationRequest_usageReportingCapability = (1 << 15),
-               eRegistrationRequest_multipleCalls = (1 << 14),
-               eRegistrationRequest_supportedH248Packages = (1 << 13),
-               eRegistrationRequest_callCreditCapability = (1 << 12),
-               eRegistrationRequest_capacityReportingCapability = (1 << 11),
-               eRegistrationRequest_capacity = (1 << 10),
-               eRegistrationRequest_featureSet = (1 << 9),
-               eRegistrationRequest_genericData = (1 << 8),
-       } options;
-       RegistrationRequest_callSignalAddress callSignalAddress;
-       RegistrationRequest_rasAddress rasAddress;
-       unsigned timeToLive;
-} RegistrationRequest;
-
-typedef struct RegistrationConfirm_callSignalAddress { /* SEQUENCE OF */
-       int count;
-       TransportAddress item[10];
-} RegistrationConfirm_callSignalAddress;
-
-typedef struct RegistrationConfirm {   /* SEQUENCE */
-       enum {
-               eRegistrationConfirm_nonStandardData = (1 << 31),
-               eRegistrationConfirm_terminalAlias = (1 << 30),
-               eRegistrationConfirm_gatekeeperIdentifier = (1 << 29),
-               eRegistrationConfirm_alternateGatekeeper = (1 << 28),
-               eRegistrationConfirm_timeToLive = (1 << 27),
-               eRegistrationConfirm_tokens = (1 << 26),
-               eRegistrationConfirm_cryptoTokens = (1 << 25),
-               eRegistrationConfirm_integrityCheckValue = (1 << 24),
-               eRegistrationConfirm_willRespondToIRR = (1 << 23),
-               eRegistrationConfirm_preGrantedARQ = (1 << 22),
-               eRegistrationConfirm_maintainConnection = (1 << 21),
-               eRegistrationConfirm_serviceControl = (1 << 20),
-               eRegistrationConfirm_supportsAdditiveRegistration = (1 << 19),
-               eRegistrationConfirm_terminalAliasPattern = (1 << 18),
-               eRegistrationConfirm_supportedPrefixes = (1 << 17),
-               eRegistrationConfirm_usageSpec = (1 << 16),
-               eRegistrationConfirm_featureServerAlias = (1 << 15),
-               eRegistrationConfirm_capacityReportingSpec = (1 << 14),
-               eRegistrationConfirm_featureSet = (1 << 13),
-               eRegistrationConfirm_genericData = (1 << 12),
-       } options;
-       RegistrationConfirm_callSignalAddress callSignalAddress;
-       unsigned timeToLive;
-} RegistrationConfirm;
-
-typedef struct UnregistrationRequest_callSignalAddress {       /* SEQUENCE OF */
-       int count;
-       TransportAddress item[10];
-} UnregistrationRequest_callSignalAddress;
-
-typedef struct UnregistrationRequest { /* SEQUENCE */
-       enum {
-               eUnregistrationRequest_endpointAlias = (1 << 31),
-               eUnregistrationRequest_nonStandardData = (1 << 30),
-               eUnregistrationRequest_endpointIdentifier = (1 << 29),
-               eUnregistrationRequest_alternateEndpoints = (1 << 28),
-               eUnregistrationRequest_gatekeeperIdentifier = (1 << 27),
-               eUnregistrationRequest_tokens = (1 << 26),
-               eUnregistrationRequest_cryptoTokens = (1 << 25),
-               eUnregistrationRequest_integrityCheckValue = (1 << 24),
-               eUnregistrationRequest_reason = (1 << 23),
-               eUnregistrationRequest_endpointAliasPattern = (1 << 22),
-               eUnregistrationRequest_supportedPrefixes = (1 << 21),
-               eUnregistrationRequest_alternateGatekeeper = (1 << 20),
-               eUnregistrationRequest_genericData = (1 << 19),
-       } options;
-       UnregistrationRequest_callSignalAddress callSignalAddress;
-} UnregistrationRequest;
-
-typedef struct AdmissionRequest {      /* SEQUENCE */
-       enum {
-               eAdmissionRequest_callModel = (1 << 31),
-               eAdmissionRequest_destinationInfo = (1 << 30),
-               eAdmissionRequest_destCallSignalAddress = (1 << 29),
-               eAdmissionRequest_destExtraCallInfo = (1 << 28),
-               eAdmissionRequest_srcCallSignalAddress = (1 << 27),
-               eAdmissionRequest_nonStandardData = (1 << 26),
-               eAdmissionRequest_callServices = (1 << 25),
-               eAdmissionRequest_canMapAlias = (1 << 24),
-               eAdmissionRequest_callIdentifier = (1 << 23),
-               eAdmissionRequest_srcAlternatives = (1 << 22),
-               eAdmissionRequest_destAlternatives = (1 << 21),
-               eAdmissionRequest_gatekeeperIdentifier = (1 << 20),
-               eAdmissionRequest_tokens = (1 << 19),
-               eAdmissionRequest_cryptoTokens = (1 << 18),
-               eAdmissionRequest_integrityCheckValue = (1 << 17),
-               eAdmissionRequest_transportQOS = (1 << 16),
-               eAdmissionRequest_willSupplyUUIEs = (1 << 15),
-               eAdmissionRequest_callLinkage = (1 << 14),
-               eAdmissionRequest_gatewayDataRate = (1 << 13),
-               eAdmissionRequest_capacity = (1 << 12),
-               eAdmissionRequest_circuitInfo = (1 << 11),
-               eAdmissionRequest_desiredProtocols = (1 << 10),
-               eAdmissionRequest_desiredTunnelledProtocol = (1 << 9),
-               eAdmissionRequest_featureSet = (1 << 8),
-               eAdmissionRequest_genericData = (1 << 7),
-       } options;
-       TransportAddress destCallSignalAddress;
-       TransportAddress srcCallSignalAddress;
-} AdmissionRequest;
-
-typedef struct AdmissionConfirm {      /* SEQUENCE */
-       enum {
-               eAdmissionConfirm_irrFrequency = (1 << 31),
-               eAdmissionConfirm_nonStandardData = (1 << 30),
-               eAdmissionConfirm_destinationInfo = (1 << 29),
-               eAdmissionConfirm_destExtraCallInfo = (1 << 28),
-               eAdmissionConfirm_destinationType = (1 << 27),
-               eAdmissionConfirm_remoteExtensionAddress = (1 << 26),
-               eAdmissionConfirm_alternateEndpoints = (1 << 25),
-               eAdmissionConfirm_tokens = (1 << 24),
-               eAdmissionConfirm_cryptoTokens = (1 << 23),
-               eAdmissionConfirm_integrityCheckValue = (1 << 22),
-               eAdmissionConfirm_transportQOS = (1 << 21),
-               eAdmissionConfirm_willRespondToIRR = (1 << 20),
-               eAdmissionConfirm_uuiesRequested = (1 << 19),
-               eAdmissionConfirm_language = (1 << 18),
-               eAdmissionConfirm_alternateTransportAddresses = (1 << 17),
-               eAdmissionConfirm_useSpecifiedTransport = (1 << 16),
-               eAdmissionConfirm_circuitInfo = (1 << 15),
-               eAdmissionConfirm_usageSpec = (1 << 14),
-               eAdmissionConfirm_supportedProtocols = (1 << 13),
-               eAdmissionConfirm_serviceControl = (1 << 12),
-               eAdmissionConfirm_multipleCalls = (1 << 11),
-               eAdmissionConfirm_featureSet = (1 << 10),
-               eAdmissionConfirm_genericData = (1 << 9),
-       } options;
-       TransportAddress destCallSignalAddress;
-} AdmissionConfirm;
-
-typedef struct LocationRequest {       /* SEQUENCE */
-       enum {
-               eLocationRequest_endpointIdentifier = (1 << 31),
-               eLocationRequest_nonStandardData = (1 << 30),
-               eLocationRequest_sourceInfo = (1 << 29),
-               eLocationRequest_canMapAlias = (1 << 28),
-               eLocationRequest_gatekeeperIdentifier = (1 << 27),
-               eLocationRequest_tokens = (1 << 26),
-               eLocationRequest_cryptoTokens = (1 << 25),
-               eLocationRequest_integrityCheckValue = (1 << 24),
-               eLocationRequest_desiredProtocols = (1 << 23),
-               eLocationRequest_desiredTunnelledProtocol = (1 << 22),
-               eLocationRequest_featureSet = (1 << 21),
-               eLocationRequest_genericData = (1 << 20),
-               eLocationRequest_hopCount = (1 << 19),
-               eLocationRequest_circuitInfo = (1 << 18),
-       } options;
-       TransportAddress replyAddress;
-} LocationRequest;
-
-typedef struct LocationConfirm {       /* SEQUENCE */
-       enum {
-               eLocationConfirm_nonStandardData = (1 << 31),
-               eLocationConfirm_destinationInfo = (1 << 30),
-               eLocationConfirm_destExtraCallInfo = (1 << 29),
-               eLocationConfirm_destinationType = (1 << 28),
-               eLocationConfirm_remoteExtensionAddress = (1 << 27),
-               eLocationConfirm_alternateEndpoints = (1 << 26),
-               eLocationConfirm_tokens = (1 << 25),
-               eLocationConfirm_cryptoTokens = (1 << 24),
-               eLocationConfirm_integrityCheckValue = (1 << 23),
-               eLocationConfirm_alternateTransportAddresses = (1 << 22),
-               eLocationConfirm_supportedProtocols = (1 << 21),
-               eLocationConfirm_multipleCalls = (1 << 20),
-               eLocationConfirm_featureSet = (1 << 19),
-               eLocationConfirm_genericData = (1 << 18),
-               eLocationConfirm_circuitInfo = (1 << 17),
-               eLocationConfirm_serviceControl = (1 << 16),
-       } options;
-       TransportAddress callSignalAddress;
-       TransportAddress rasAddress;
-} LocationConfirm;
-
-typedef struct InfoRequestResponse_callSignalAddress { /* SEQUENCE OF */
-       int count;
-       TransportAddress item[10];
-} InfoRequestResponse_callSignalAddress;
-
-typedef struct InfoRequestResponse {   /* SEQUENCE */
-       enum {
-               eInfoRequestResponse_nonStandardData = (1 << 31),
-               eInfoRequestResponse_endpointAlias = (1 << 30),
-               eInfoRequestResponse_perCallInfo = (1 << 29),
-               eInfoRequestResponse_tokens = (1 << 28),
-               eInfoRequestResponse_cryptoTokens = (1 << 27),
-               eInfoRequestResponse_integrityCheckValue = (1 << 26),
-               eInfoRequestResponse_needResponse = (1 << 25),
-               eInfoRequestResponse_capacity = (1 << 24),
-               eInfoRequestResponse_irrStatus = (1 << 23),
-               eInfoRequestResponse_unsolicited = (1 << 22),
-               eInfoRequestResponse_genericData = (1 << 21),
-       } options;
-       TransportAddress rasAddress;
-       InfoRequestResponse_callSignalAddress callSignalAddress;
-} InfoRequestResponse;
-
-typedef struct RasMessage {    /* CHOICE */
-       enum {
-               eRasMessage_gatekeeperRequest,
-               eRasMessage_gatekeeperConfirm,
-               eRasMessage_gatekeeperReject,
-               eRasMessage_registrationRequest,
-               eRasMessage_registrationConfirm,
-               eRasMessage_registrationReject,
-               eRasMessage_unregistrationRequest,
-               eRasMessage_unregistrationConfirm,
-               eRasMessage_unregistrationReject,
-               eRasMessage_admissionRequest,
-               eRasMessage_admissionConfirm,
-               eRasMessage_admissionReject,
-               eRasMessage_bandwidthRequest,
-               eRasMessage_bandwidthConfirm,
-               eRasMessage_bandwidthReject,
-               eRasMessage_disengageRequest,
-               eRasMessage_disengageConfirm,
-               eRasMessage_disengageReject,
-               eRasMessage_locationRequest,
-               eRasMessage_locationConfirm,
-               eRasMessage_locationReject,
-               eRasMessage_infoRequest,
-               eRasMessage_infoRequestResponse,
-               eRasMessage_nonStandardMessage,
-               eRasMessage_unknownMessageResponse,
-               eRasMessage_requestInProgress,
-               eRasMessage_resourcesAvailableIndicate,
-               eRasMessage_resourcesAvailableConfirm,
-               eRasMessage_infoRequestAck,
-               eRasMessage_infoRequestNak,
-               eRasMessage_serviceControlIndication,
-               eRasMessage_serviceControlResponse,
-       } choice;
-       union {
-               GatekeeperRequest gatekeeperRequest;
-               GatekeeperConfirm gatekeeperConfirm;
-               RegistrationRequest registrationRequest;
-               RegistrationConfirm registrationConfirm;
-               UnregistrationRequest unregistrationRequest;
-               AdmissionRequest admissionRequest;
-               AdmissionConfirm admissionConfirm;
-               LocationRequest locationRequest;
-               LocationConfirm locationConfirm;
-               InfoRequestResponse infoRequestResponse;
-       };
-} RasMessage;
index a0bc883928c09d4b7a5531af474820ce12ead663..6f19c20b34cf576bb976afeb2e7f5945ce6e60aa 100644 (file)
 #include <linux/netfilter_ipv4/ip_conntrack_h323.h>
 #include <linux/netfilter_ipv4/ip_conntrack_helper.h>
 
-#include "ip_conntrack_helper_h323_asn1.h"
-
 #if 0
 #define DEBUGP printk
 #else
 #define DEBUGP(format, args...)
 #endif
 
-extern int get_h245_addr(unsigned char *data, H245_TransportAddress * addr,
-                        u_int32_t * ip, u_int16_t * port);
-extern int get_h225_addr(unsigned char *data, TransportAddress * addr,
-                        u_int32_t * ip, u_int16_t * port);
-extern void ip_conntrack_h245_expect(struct ip_conntrack *new,
-                                    struct ip_conntrack_expect *this);
-extern void ip_conntrack_q931_expect(struct ip_conntrack *new,
-                                    struct ip_conntrack_expect *this);
-extern int (*set_h245_addr_hook) (struct sk_buff ** pskb,
-                                 unsigned char **data, int dataoff,
-                                 H245_TransportAddress * addr,
-                                 u_int32_t ip, u_int16_t port);
-extern int (*set_h225_addr_hook) (struct sk_buff ** pskb,
-                                 unsigned char **data, int dataoff,
-                                 TransportAddress * addr,
-                                 u_int32_t ip, u_int16_t port);
-extern int (*set_sig_addr_hook) (struct sk_buff ** pskb,
-                                struct ip_conntrack * ct,
-                                enum ip_conntrack_info ctinfo,
-                                unsigned char **data,
-                                TransportAddress * addr, int count);
-extern int (*set_ras_addr_hook) (struct sk_buff ** pskb,
-                                struct ip_conntrack * ct,
-                                enum ip_conntrack_info ctinfo,
-                                unsigned char **data,
-                                TransportAddress * addr, int count);
-extern int (*nat_rtp_rtcp_hook) (struct sk_buff ** pskb,
-                                struct ip_conntrack * ct,
-                                enum ip_conntrack_info ctinfo,
-                                unsigned char **data, int dataoff,
-                                H245_TransportAddress * addr,
-                                u_int16_t port, u_int16_t rtp_port,
-                                struct ip_conntrack_expect * rtp_exp,
-                                struct ip_conntrack_expect * rtcp_exp);
-extern int (*nat_t120_hook) (struct sk_buff ** pskb, struct ip_conntrack * ct,
-                            enum ip_conntrack_info ctinfo,
-                            unsigned char **data, int dataoff,
-                            H245_TransportAddress * addr, u_int16_t port,
-                            struct ip_conntrack_expect * exp);
-extern int (*nat_h245_hook) (struct sk_buff ** pskb, struct ip_conntrack * ct,
-                            enum ip_conntrack_info ctinfo,
-                            unsigned char **data, int dataoff,
-                            TransportAddress * addr, u_int16_t port,
-                            struct ip_conntrack_expect * exp);
-extern int (*nat_q931_hook) (struct sk_buff ** pskb, struct ip_conntrack * ct,
-                            enum ip_conntrack_info ctinfo,
-                            unsigned char **data, TransportAddress * addr,
-                            int idx, u_int16_t port,
-                            struct ip_conntrack_expect * exp);
-
-
 /****************************************************************************/
 static int set_addr(struct sk_buff **pskb,
                    unsigned char **data, int dataoff,