aboutsummaryrefslogtreecommitdiffstats
path: root/net/ieee80211/softmac/ieee80211softmac_auth.c
blob: 4cef39e171d007cf4570f28ae793070f5ccaf5ff (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
/*
 * This file contains the softmac's authentication logic.
 *
 * Copyright (c) 2005, 2006 Johannes Berg <johannes@sipsolutions.net>
 *                          Joseph Jezak <josejx@gentoo.org>
 *                          Larry Finger <Larry.Finger@lwfinger.net>
 *                          Danny van Dyk <kugelfang@gentoo.org>
 *                          Michael Buesch <mbuesch@freenet.de>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 *
 * The full GNU General Public License is included in this distribution in the
 * file called COPYING.
 */

#include "ieee80211softmac_priv.h"

static void ieee80211softmac_auth_queue(void *data);

/* Queues an auth request to the desired AP */
int
ieee80211softmac_auth_req(struct ieee80211softmac_device *mac, 
	struct ieee80211softmac_network *net)
{
	struct ieee80211softmac_auth_queue_item *auth;
	unsigned long flags;
	
	if (net->authenticating || net->authenticated)
		return 0;
	net->authenticating = 1;

	/* Add the network if it's not already added */
	ieee80211softmac_add_network(mac, net);

	dprintk(KERN_NOTICE PFX "Queueing Authentication Request to "MAC_FMT"\n", MAC_ARG(net->bssid));
	/* Queue the auth request */
	auth = (struct ieee80211softmac_auth_queue_item *)
		kmalloc(sizeof(struct ieee80211softmac_auth_queue_item), GFP_KERNEL);
	if(auth == NULL)
		return -ENOMEM;

	auth->net = net;
	auth->mac = mac;
	auth->retry = IEEE80211SOFTMAC_AUTH_RETRY_LIMIT;
	auth->state = IEEE80211SOFTMAC_AUTH_OPEN_REQUEST;
	INIT_WORK(&auth->work, &ieee80211softmac_auth_queue, (void *)auth);
	
	/* Lock (for list) */
	spin_lock_irqsave(&mac->lock, flags);

	/* add to list */
	list_add_tail(&auth->list, &mac->auth_queue);
	schedule_work(&auth->work);
	spin_unlock_irqrestore(&mac->lock, flags);
	
	return 0;
}


/* Sends an auth request to the desired AP and handles timeouts */
static void
ieee80211softmac_auth_queue(void *data)
{
	struct ieee80211softmac_device *mac;
	struct ieee80211softmac_auth_queue_item *auth;
	struct ieee80211softmac_network *net;
	unsigned long flags;

	auth = (struct ieee80211softmac_auth_queue_item *)data;
	net = auth->net;
	mac = auth->mac;

	if(auth->retry > 0) {
		/* Switch to correct channel for this network */
		mac->set_channel(mac->dev, net->channel);
		
		/* Lock and set flags */
		spin_lock_irqsave(&mac->lock, flags);
		if (unlikely(!mac->running)) {
			/* Prevent reschedule on workqueue flush */
			spin_unlock_irqrestore(&mac->lock, flags);
			return;
		}
		net->authenticated = 0;
		/* add a timeout call so we eventually give up waiting for an auth reply */
		schedule_delayed_work(&auth->work, IEEE80211SOFTMAC_AUTH_TIMEOUT);
		auth->retry--;
		spin_unlock_irqrestore(&mac->lock, flags);
		if (ieee80211softmac_send_mgt_frame(mac, auth->net, IEEE80211_STYPE_AUTH, auth->state))
			dprintk(KERN_NOTICE PFX "Sending Authentication Request to "MAC_FMT" failed (this shouldn't happen, wait for the timeout).\n", MAC_ARG(net->bssid));
		else
			dprintk(KERN_NOTICE PFX "Sent Authentication Request to "MAC_FMT".\n", MAC_ARG(net->bssid));
		return;
	}

	printkl(KERN_WARNING PFX "Authentication timed out with "MAC_FMT"\n", MAC_ARG(net->bssid));
	/* Remove this item from the queue */
	spin_lock_irqsave(&mac->lock, flags);
	net->authenticating = 0;
	ieee80211softmac_call_events_locked(mac, IEEE80211SOFTMAC_EVENT_AUTH_TIMEOUT, net);
	cancel_delayed_work(&auth->work); /* just to make sure... */
	list_del(&auth->list);
	spin_unlock_irqrestore(&mac->lock, flags);
	/* Free it */
	kfree(auth);
}

/* Sends a response to an auth challenge (for shared key auth). */
static void
ieee80211softmac_auth_challenge_response(void *_aq)
{
	struct ieee80211softmac_auth_queue_item *aq = _aq;

	/* Send our response */
	ieee80211softmac_send_mgt_frame(aq->mac, aq->net, IEEE80211_STYPE_AUTH, aq->state);
}

/* Handle the auth response from the AP
 * This should be registered with ieee80211 as handle_auth 
 */
int 
ieee80211softmac_auth_resp(struct net_device *dev, struct ieee80211_auth *auth)
{	

	struct list_head *list_ptr;
	struct ieee80211softmac_device *mac = ieee80211_priv(dev);
	struct ieee80211softmac_auth_queue_item *aq = NULL;
	struct ieee80211softmac_network *net = NULL;
	unsigned long flags;
	u8 * data;
	
	if (unlikely(!mac->running))
		return -ENODEV;

	/* Find correct auth queue item */
	spin_lock_irqsave(&mac->lock, flags);
	list_for_each(list_ptr, &mac->auth_queue) {
		aq = list_entry(list_ptr, struct ieee80211softmac_auth_queue_item, list);
		net = aq->net;
		if (!memcmp(net->bssid, auth->header.addr2, ETH_ALEN))
			break;
		else
			aq = NULL;
	}
	spin_unlock_irqrestore(&mac->lock, flags);
	
	/* Make sure that we've got an auth queue item for this request */
	if(aq == NULL)
	{
		printkl(KERN_DEBUG PFX "Authentication response received from "MAC_FMT" but no queue item exists.\n", MAC_ARG(auth->header.addr2));
		/* Error #? */
		return -1;
	}			
	
	/* Check for out of order authentication */
	if(!net->authenticating)
	{
		printkl(KERN_DEBUG PFX "Authentication response received from "MAC_FMT" but did not request authentication.\n",MAC_ARG(auth->header.addr2));
		return -1;
	}

	/* Parse the auth packet */
	switch(auth->algorithm) {
	case WLAN_AUTH_OPEN:
		/* Check the status code of the response */

		switch(auth->status) {
		case WLAN_STATUS_SUCCESS:
			/* Update the status to Authenticated */
			spin_lock_irqsave(&mac->lock, flags);
		        net->authenticating = 0;
			net->authenticated = 1;
			spin_unlock_irqrestore(&mac->lock, flags);
			
			/* Send event */
			printkl(KERN_NOTICE PFX "Open Authentication completed with "MAC_FMT"\n", MAC_ARG(net->bssid));
			ieee80211softmac_call_events(mac, IEEE80211SOFTMAC_EVENT_AUTHENTICATED, net);
			break;
		default:
			/* Lock and reset flags */
			spin_lock_irqsave(&mac->lock, flags);
			net->authenticated = 0;
			net->authenticating = 0;
			spin_unlock_irqrestore(&mac->lock, flags);
			
			printkl(KERN_NOTICE PFX "Open Authentication with "MAC_FMT" failed, error code: %i\n", 
				MAC_ARG(net->bssid), le16_to_cpup(&auth->status));
			/* Count the error? */
			break;
		}
		goto free_aq;
		break;
	case WLAN_AUTH_SHARED_KEY:
		/* Figure out where we are in the process */
		switch(auth->transaction) {
		case IEEE80211SOFTMAC_AUTH_SHARED_CHALLENGE:
			/* Check to make sure we have a challenge IE */
			data = (u8 *)auth->info_element;
			if (*data++ != MFIE_TYPE_CHALLENGE) {
				printkl(KERN_NOTICE PFX "Shared Key Authentication failed due to a missing challenge.\n");
				break;	
			}
			/* Save the challenge */
			spin_lock_irqsave(&mac->lock, flags);
			net->challenge_len = *data++; 	
			if (net->challenge_len > WLAN_AUTH_CHALLENGE_LEN)
				net->challenge_len = WLAN_AUTH_CHALLENGE_LEN;
			if (net->challenge != NULL)
				kfree(net->challenge);
			net->challenge = kmalloc(net->challenge_len, GFP_ATOMIC);
			memcpy(net->challenge, data, net->challenge_len);
			aq->state = IEEE80211SOFTMAC_AUTH_SHARED_RESPONSE; 

			/* We reuse the work struct from the auth request here.
			 * It is safe to do so as each one is per-request, and
			 * at this point (dealing with authentication response)
			 * we have obviously already sent the initial auth
			 * request. */
			cancel_delayed_work(&aq->work);
			INIT_WORK(&aq->work, &ieee80211softmac_auth_challenge_response, (void *)aq);
			schedule_work(&aq->work);
			spin_unlock_irqrestore(&mac->lock, flags);
			return 0;
		case IEEE80211SOFTMAC_AUTH_SHARED_PASS:
			kfree(net->challenge);
			net->challenge = NULL;
			net->challenge_len = 0;
			/* Check the status code of the response */
			switch(auth->status) {
			case WLAN_STATUS_SUCCESS:
				/* Update the status to Authenticated */	
				spin_lock_irqsave(&mac->lock, flags);
				net->authenticating = 0;
				net->authenticated = 1;
				spin_unlock_irqrestore(&mac->lock, flags);
				printkl(KERN_NOTICE PFX "Shared Key Authentication completed with "MAC_FMT"\n", 
					MAC_ARG(net->bssid));
				ieee80211softmac_call_events(mac, IEEE80211SOFTMAC_EVENT_AUTHENTICATED, net);
				break;
			default:
				printkl(KERN_NOTICE PFX "Shared Key Authentication with "MAC_FMT" failed, error code: %i\n", 
					MAC_ARG(net->bssid), le16_to_cpup(&auth->status));
				/* Lock and reset flags */
				spin_lock_irqsave(&mac->lock, flags);
 				net->authenticating = 0;
 				net->authenticated = 0;
				spin_unlock_irqrestore(&mac->lock, flags);
				/* Count the error? */
				break;
			}
			goto free_aq;
			break;
		default:
			printkl(KERN_WARNING PFX "Unhandled Authentication Step: %i\n", auth->transaction);
			break;
		}
		goto free_aq;
		break;
	default:
		/* ERROR */	
		goto free_aq;
		break;
	}
	return 0;
free_aq:
	/* Cancel the timeout */
	spin_lock_irqsave(&mac->lock, flags);
	cancel_delayed_work(&aq->work);
	/* Remove this item from the queue */
	list_del(&aq->list);
	spin_unlock_irqrestore(&mac->lock, flags);

	/* Free it */
	kfree(aq);
	return 0;
}

/*
 * Handle deauthorization
 */
static void
ieee80211softmac_deauth_from_net(struct ieee80211softmac_device *mac,
	struct ieee80211softmac_network *net)
{
	struct ieee80211softmac_auth_queue_item *aq = NULL;
	struct list_head *list_ptr;
	unsigned long flags;

	/* deauthentication implies disassociation */
	ieee80211softmac_disassoc(mac);

	/* Lock and reset status flags */
	spin_lock_irqsave(&mac->lock, flags);
	net->authenticating = 0;
	net->authenticated = 0;
	
	/* Find correct auth queue item, if it exists */
	list_for_each(list_ptr, &mac->auth_queue) {
		aq = list_entry(list_ptr, struct ieee80211softmac_auth_queue_item, list);
		if (!memcmp(net->bssid, aq->net->bssid, ETH_ALEN))
			break;
		else
			aq = NULL;
	}
	
	/* Cancel pending work */
	if(aq != NULL)
		/* Not entirely safe?  What about running work? */
		cancel_delayed_work(&aq->work);

	/* Free our network ref */
	ieee80211softmac_del_network_locked(mac, net);
	if(net->challenge != NULL)
		kfree(net->challenge);
	kfree(net);
	
	/* can't transmit data right now... */
	netif_carrier_off(mac->dev);
	spin_unlock_irqrestore(&mac->lock, flags);
}

/* 
 * Sends a deauth request to the desired AP
 */
int 
ieee80211softmac_deauth_req(struct ieee80211softmac_device *mac, 
	struct ieee80211softmac_network *net, int reason)
{
	int ret;
	
	/* Make sure the network is authenticated */
	if (!net->authenticated)
	{
		printkl(KERN_DEBUG PFX "Can't send deauthentication packet, network is not authenticated.\n");
		/* Error okay? */
		return -EPERM;
	}
	
	/* Send the de-auth packet */
	if((ret = ieee80211softmac_send_mgt_frame(mac, net, IEEE80211_STYPE_DEAUTH, reason)))
		return ret;
	
	ieee80211softmac_deauth_from_net(mac, net);
	return 0;
}
 
/*
 * This should be registered with ieee80211 as handle_deauth
 */
int 
ieee80211softmac_deauth_resp(struct net_device *dev, struct ieee80211_deauth *deauth)
{
	
	struct ieee80211softmac_network *net = NULL;
	struct ieee80211softmac_device *mac = ieee80211_priv(dev);
	
	if (unlikely(!mac->running))
		return -ENODEV;

	if (!deauth) {
		dprintk("deauth without deauth packet. eek!\n");
		return 0;
	}

	net = ieee80211softmac_get_network_by_bssid(mac, deauth->header.addr2);
	
	if (net == NULL) {
		printkl(KERN_DEBUG PFX "Received deauthentication packet from "MAC_FMT", but that network is unknown.\n",
			MAC_ARG(deauth->header.addr2));
		return 0;
	}

	/* Make sure the network is authenticated */
	if(!net->authenticated)
	{
		printkl(KERN_DEBUG PFX "Can't perform deauthentication, network is not authenticated.\n");
		/* Error okay? */
		return -EPERM;
	}

	ieee80211softmac_deauth_from_net(mac, net);

	/* let's try to re-associate */
	schedule_work(&mac->associnfo.work);
	return 0;
}
9 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927
/* Generated by Jing Min Zhao's ASN.1 parser, Apr 20 2006
 *
 * Copyright (c) 2006 Jing Min Zhao <zhaojingmin@users.sourceforge.net>
 *
 * This source code is licensed under General Public License version 2.
 */

static field_t _TransportAddress_ipAddress[] = {	/* SEQUENCE */
	{FNAME("ip") OCTSTR, FIXD, 4, 0, DECODE,
	 offsetof(TransportAddress_ipAddress, ip), NULL},
	{FNAME("port") INT, WORD, 0, 0, SKIP, 0, NULL},
};

static field_t _TransportAddress_ipSourceRoute_route[] = {	/* SEQUENCE OF */
	{FNAME("item") OCTSTR, FIXD, 4, 0, SKIP, 0, NULL},
};

static field_t _TransportAddress_ipSourceRoute_routing[] = {	/* CHOICE */
	{FNAME("strict") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("loose") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _TransportAddress_ipSourceRoute[] = {	/* SEQUENCE */
	{FNAME("ip") OCTSTR, FIXD, 4, 0, SKIP, 0, NULL},
	{FNAME("port") INT, WORD, 0, 0, SKIP, 0, NULL},
	{FNAME("route") SEQOF, SEMI, 0, 0, SKIP, 0,
	 _TransportAddress_ipSourceRoute_route},
	{FNAME("routing") CHOICE, 1, 2, 2, SKIP | EXT, 0,
	 _TransportAddress_ipSourceRoute_routing},
};

static field_t _TransportAddress_ipxAddress[] = {	/* SEQUENCE */
	{FNAME("node") OCTSTR, FIXD, 6, 0, SKIP, 0, NULL},
	{FNAME("netnum") OCTSTR, FIXD, 4, 0, SKIP, 0, NULL},
	{FNAME("port") OCTSTR, FIXD, 2, 0, SKIP, 0, NULL},
};

static field_t _TransportAddress_ip6Address[] = {	/* SEQUENCE */
	{FNAME("ip") OCTSTR, FIXD, 16, 0, DECODE,
	 offsetof(TransportAddress_ip6Address, ip6), NULL},
	{FNAME("port") INT, WORD, 0, 0, SKIP, 0, NULL},
};

static field_t _H221NonStandard[] = {	/* SEQUENCE */
	{FNAME("t35CountryCode") INT, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("t35Extension") INT, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("manufacturerCode") INT, WORD, 0, 0, SKIP, 0, NULL},
};

static field_t _NonStandardIdentifier[] = {	/* CHOICE */
	{FNAME("object") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("h221NonStandard") SEQ, 0, 3, 3, SKIP | EXT, 0,
	 _H221NonStandard},
};

static field_t _NonStandardParameter[] = {	/* SEQUENCE */
	{FNAME("nonStandardIdentifier") CHOICE, 1, 2, 2, SKIP | EXT, 0,
	 _NonStandardIdentifier},
	{FNAME("data") OCTSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _TransportAddress[] = {	/* CHOICE */
	{FNAME("ipAddress") SEQ, 0, 2, 2, DECODE,
	 offsetof(TransportAddress, ipAddress), _TransportAddress_ipAddress},
	{FNAME("ipSourceRoute") SEQ, 0, 4, 4, SKIP | EXT, 0,
	 _TransportAddress_ipSourceRoute},
	{FNAME("ipxAddress") SEQ, 0, 3, 3, SKIP, 0,
	 _TransportAddress_ipxAddress},
	{FNAME("ip6Address") SEQ, 0, 2, 2, DECODE | EXT,
	offsetof(TransportAddress, ip6Address), _TransportAddress_ip6Address},
	{FNAME("netBios") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
	{FNAME("nsap") OCTSTR, 5, 1, 0, SKIP, 0, NULL},
	{FNAME("nonStandardAddress") SEQ, 0, 2, 2, SKIP, 0,
	 _NonStandardParameter},
};

static field_t _AliasAddress[] = {	/* CHOICE */
	{FNAME("dialedDigits") NUMDGT, 7, 1, 0, SKIP, 0, NULL},
	{FNAME("h323-ID") BMPSTR, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("url-ID") IA5STR, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("transportID") CHOICE, 3, 7, 7, SKIP | EXT, 0, NULL},
	{FNAME("email-ID") IA5STR, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("partyNumber") CHOICE, 3, 5, 5, SKIP | EXT, 0, NULL},
	{FNAME("mobileUIM") CHOICE, 1, 2, 2, SKIP | EXT, 0, NULL},
};

static field_t _Setup_UUIE_sourceAddress[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
};

static field_t _VendorIdentifier[] = {	/* SEQUENCE */
	{FNAME("vendor") SEQ, 0, 3, 3, SKIP | EXT, 0, _H221NonStandard},
	{FNAME("productId") OCTSTR, BYTE, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("versionId") OCTSTR, BYTE, 1, 0, SKIP | OPT, 0, NULL},
};

static field_t _GatekeeperInfo[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
};

static field_t _H310Caps[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("dataRatesSupported") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("supportedPrefixes") SEQOF, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _H320Caps[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("dataRatesSupported") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("supportedPrefixes") SEQOF, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _H321Caps[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("dataRatesSupported") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("supportedPrefixes") SEQOF, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _H322Caps[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("dataRatesSupported") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("supportedPrefixes") SEQOF, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _H323Caps[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("dataRatesSupported") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("supportedPrefixes") SEQOF, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _H324Caps[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("dataRatesSupported") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("supportedPrefixes") SEQOF, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _VoiceCaps[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("dataRatesSupported") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("supportedPrefixes") SEQOF, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _T120OnlyCaps[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("dataRatesSupported") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("supportedPrefixes") SEQOF, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _SupportedProtocols[] = {	/* CHOICE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP, 0,
	 _NonStandardParameter},
	{FNAME("h310") SEQ, 1, 1, 3, SKIP | EXT, 0, _H310Caps},
	{FNAME("h320") SEQ, 1, 1, 3, SKIP | EXT, 0, _H320Caps},
	{FNAME("h321") SEQ, 1, 1, 3, SKIP | EXT, 0, _H321Caps},
	{FNAME("h322") SEQ, 1, 1, 3, SKIP | EXT, 0, _H322Caps},
	{FNAME("h323") SEQ, 1, 1, 3, SKIP | EXT, 0, _H323Caps},
	{FNAME("h324") SEQ, 1, 1, 3, SKIP | EXT, 0, _H324Caps},
	{FNAME("voice") SEQ, 1, 1, 3, SKIP | EXT, 0, _VoiceCaps},
	{FNAME("t120-only") SEQ, 1, 1, 3, SKIP | EXT, 0, _T120OnlyCaps},
	{FNAME("nonStandardProtocol") SEQ, 2, 3, 3, SKIP | EXT, 0, NULL},
	{FNAME("t38FaxAnnexbOnly") SEQ, 2, 5, 5, SKIP | EXT, 0, NULL},
};

static field_t _GatewayInfo_protocol[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 4, 9, 11, SKIP | EXT, 0, _SupportedProtocols},
};

static field_t _GatewayInfo[] = {	/* SEQUENCE */
	{FNAME("protocol") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _GatewayInfo_protocol},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
};

static field_t _McuInfo[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("protocol") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
};

static field_t _TerminalInfo[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
};

static field_t _EndpointType[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("vendor") SEQ, 2, 3, 3, SKIP | EXT | OPT, 0,
	 _VendorIdentifier},
	{FNAME("gatekeeper") SEQ, 1, 1, 1, SKIP | EXT | OPT, 0,
	 _GatekeeperInfo},
	{FNAME("gateway") SEQ, 2, 2, 2, SKIP | EXT | OPT, 0, _GatewayInfo},
	{FNAME("mcu") SEQ, 1, 1, 2, SKIP | EXT | OPT, 0, _McuInfo},
	{FNAME("terminal") SEQ, 1, 1, 1, SKIP | EXT | OPT, 0, _TerminalInfo},
	{FNAME("mc") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("undefinedNode") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("set") BITSTR, FIXD, 32, 0, SKIP | OPT, 0, NULL},
	{FNAME("supportedTunnelledProtocols") SEQOF, SEMI, 0, 0, SKIP | OPT,
	 0, NULL},
};

static field_t _Setup_UUIE_destinationAddress[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
};

static field_t _Setup_UUIE_destExtraCallInfo[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
};

static field_t _Setup_UUIE_destExtraCRV[] = {	/* SEQUENCE OF */
	{FNAME("item") INT, WORD, 0, 0, SKIP, 0, NULL},
};

static field_t _Setup_UUIE_conferenceGoal[] = {	/* CHOICE */
	{FNAME("create") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("join") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("invite") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("capability-negotiation") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("callIndependentSupplementaryService") NUL, FIXD, 0, 0, SKIP,
	 0, NULL},
};

static field_t _Q954Details[] = {	/* SEQUENCE */
	{FNAME("conferenceCalling") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("threePartyService") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _QseriesOptions[] = {	/* SEQUENCE */
	{FNAME("q932Full") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("q951Full") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("q952Full") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("q953Full") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("q955Full") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("q956Full") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("q957Full") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("q954Info") SEQ, 0, 2, 2, SKIP | EXT, 0, _Q954Details},
};

static field_t _CallType[] = {	/* CHOICE */
	{FNAME("pointToPoint") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("oneToN") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("nToOne") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("nToN") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _H245_NonStandardIdentifier_h221NonStandard[] = {	/* SEQUENCE */
	{FNAME("t35CountryCode") INT, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("t35Extension") INT, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("manufacturerCode") INT, WORD, 0, 0, SKIP, 0, NULL},
};

static field_t _H245_NonStandardIdentifier[] = {	/* CHOICE */
	{FNAME("object") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("h221NonStandard") SEQ, 0, 3, 3, SKIP, 0,
	 _H245_NonStandardIdentifier_h221NonStandard},
};

static field_t _H245_NonStandardParameter[] = {	/* SEQUENCE */
	{FNAME("nonStandardIdentifier") CHOICE, 1, 2, 2, SKIP, 0,
	 _H245_NonStandardIdentifier},
	{FNAME("data") OCTSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _H261VideoCapability[] = {	/* SEQUENCE */
	{FNAME("qcifMPI") INT, 2, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("cifMPI") INT, 2, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("temporalSpatialTradeOffCapability") BOOL, FIXD, 0, 0, SKIP, 0,
	 NULL},
	{FNAME("maxBitRate") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("stillImageTransmission") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("videoBadMBsCap") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _H262VideoCapability[] = {	/* SEQUENCE */
	{FNAME("profileAndLevel-SPatML") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("profileAndLevel-MPatLL") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("profileAndLevel-MPatML") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("profileAndLevel-MPatH-14") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("profileAndLevel-MPatHL") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("profileAndLevel-SNRatLL") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("profileAndLevel-SNRatML") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("profileAndLevel-SpatialatH-14") BOOL, FIXD, 0, 0, SKIP, 0,
	 NULL},
	{FNAME("profileAndLevel-HPatML") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("profileAndLevel-HPatH-14") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("profileAndLevel-HPatHL") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("videoBitRate") INT, CONS, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("vbvBufferSize") INT, CONS, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("samplesPerLine") INT, WORD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("linesPerFrame") INT, WORD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("framesPerSecond") INT, 4, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("luminanceSampleRate") INT, CONS, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("videoBadMBsCap") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _H263VideoCapability[] = {	/* SEQUENCE */
	{FNAME("sqcifMPI") INT, 5, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("qcifMPI") INT, 5, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("cifMPI") INT, 5, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("cif4MPI") INT, 5, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("cif16MPI") INT, 5, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("maxBitRate") INT, CONS, 1, 0, SKIP, 0, NULL},
	{FNAME("unrestrictedVector") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("arithmeticCoding") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("advancedPrediction") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("pbFrames") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("temporalSpatialTradeOffCapability") BOOL, FIXD, 0, 0, SKIP, 0,
	 NULL},
	{FNAME("hrd-B") INT, CONS, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("bppMaxKb") INT, WORD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("slowSqcifMPI") INT, WORD, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("slowQcifMPI") INT, WORD, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("slowCifMPI") INT, WORD, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("slowCif4MPI") INT, WORD, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("slowCif16MPI") INT, WORD, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("errorCompensation") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("enhancementLayerInfo") SEQ, 3, 4, 4, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("h263Options") SEQ, 5, 29, 31, SKIP | EXT | OPT, 0, NULL},
};

static field_t _IS11172VideoCapability[] = {	/* SEQUENCE */
	{FNAME("constrainedBitstream") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("videoBitRate") INT, CONS, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("vbvBufferSize") INT, CONS, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("samplesPerLine") INT, WORD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("linesPerFrame") INT, WORD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("pictureRate") INT, 4, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("luminanceSampleRate") INT, CONS, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("videoBadMBsCap") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _VideoCapability[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP, 0,
	 _H245_NonStandardParameter},
	{FNAME("h261VideoCapability") SEQ, 2, 5, 6, SKIP | EXT, 0,
	 _H261VideoCapability},
	{FNAME("h262VideoCapability") SEQ, 6, 17, 18, SKIP | EXT, 0,
	 _H262VideoCapability},
	{FNAME("h263VideoCapability") SEQ, 7, 13, 21, SKIP | EXT, 0,
	 _H263VideoCapability},
	{FNAME("is11172VideoCapability") SEQ, 6, 7, 8, SKIP | EXT, 0,
	 _IS11172VideoCapability},
	{FNAME("genericVideoCapability") SEQ, 5, 6, 6, SKIP | EXT, 0, NULL},
};

static field_t _AudioCapability_g7231[] = {	/* SEQUENCE */
	{FNAME("maxAl-sduAudioFrames") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("silenceSuppression") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _IS11172AudioCapability[] = {	/* SEQUENCE */
	{FNAME("audioLayer1") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioLayer2") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioLayer3") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioSampling32k") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioSampling44k1") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioSampling48k") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("singleChannel") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("twoChannels") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("bitRate") INT, WORD, 1, 0, SKIP, 0, NULL},
};

static field_t _IS13818AudioCapability[] = {	/* SEQUENCE */
	{FNAME("audioLayer1") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioLayer2") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioLayer3") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioSampling16k") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioSampling22k05") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioSampling24k") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioSampling32k") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioSampling44k1") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("audioSampling48k") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("singleChannel") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("twoChannels") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("threeChannels2-1") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("threeChannels3-0") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("fourChannels2-0-2-0") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("fourChannels2-2") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("fourChannels3-1") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("fiveChannels3-0-2-0") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("fiveChannels3-2") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("lowFrequencyEnhancement") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("multilingual") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("bitRate") INT, WORD, 1, 0, SKIP, 0, NULL},
};

static field_t _AudioCapability[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP, 0,
	 _H245_NonStandardParameter},
	{FNAME("g711Alaw64k") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g711Alaw56k") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g711Ulaw64k") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g711Ulaw56k") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g722-64k") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g722-56k") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g722-48k") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g7231") SEQ, 0, 2, 2, SKIP, 0, _AudioCapability_g7231},
	{FNAME("g728") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g729") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g729AnnexA") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("is11172AudioCapability") SEQ, 0, 9, 9, SKIP | EXT, 0,
	 _IS11172AudioCapability},
	{FNAME("is13818AudioCapability") SEQ, 0, 21, 21, SKIP | EXT, 0,
	 _IS13818AudioCapability},
	{FNAME("g729wAnnexB") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g729AnnexAwAnnexB") INT, BYTE, 1, 0, SKIP, 0, NULL},
	{FNAME("g7231AnnexCCapability") SEQ, 1, 3, 3, SKIP | EXT, 0, NULL},
	{FNAME("gsmFullRate") SEQ, 0, 3, 3, SKIP | EXT, 0, NULL},
	{FNAME("gsmHalfRate") SEQ, 0, 3, 3, SKIP | EXT, 0, NULL},
	{FNAME("gsmEnhancedFullRate") SEQ, 0, 3, 3, SKIP | EXT, 0, NULL},
	{FNAME("genericAudioCapability") SEQ, 5, 6, 6, SKIP | EXT, 0, NULL},
	{FNAME("g729Extensions") SEQ, 1, 8, 8, SKIP | EXT, 0, NULL},
};

static field_t _DataProtocolCapability[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP, 0,
	 _H245_NonStandardParameter},
	{FNAME("v14buffered") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("v42lapm") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("hdlcFrameTunnelling") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("h310SeparateVCStack") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("h310SingleVCStack") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("transparent") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("segmentationAndReassembly") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("hdlcFrameTunnelingwSAR") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("v120") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("separateLANStack") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("v76wCompression") CHOICE, 2, 3, 3, SKIP | EXT, 0, NULL},
	{FNAME("tcp") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("udp") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _T84Profile_t84Restricted[] = {	/* SEQUENCE */
	{FNAME("qcif") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("cif") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("ccir601Seq") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("ccir601Prog") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("hdtvSeq") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("hdtvProg") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("g3FacsMH200x100") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("g3FacsMH200x200") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("g4FacsMMR200x100") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("g4FacsMMR200x200") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("jbig200x200Seq") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("jbig200x200Prog") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("jbig300x300Seq") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("jbig300x300Prog") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("digPhotoLow") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("digPhotoMedSeq") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("digPhotoMedProg") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("digPhotoHighSeq") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("digPhotoHighProg") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _T84Profile[] = {	/* CHOICE */
	{FNAME("t84Unrestricted") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("t84Restricted") SEQ, 0, 19, 19, SKIP | EXT, 0,
	 _T84Profile_t84Restricted},
};

static field_t _DataApplicationCapability_application_t84[] = {	/* SEQUENCE */
	{FNAME("t84Protocol") CHOICE, 3, 7, 14, SKIP | EXT, 0,
	 _DataProtocolCapability},
	{FNAME("t84Profile") CHOICE, 1, 2, 2, SKIP, 0, _T84Profile},
};

static field_t _DataApplicationCapability_application_nlpid[] = {	/* SEQUENCE */
	{FNAME("nlpidProtocol") CHOICE, 3, 7, 14, SKIP | EXT, 0,
	 _DataProtocolCapability},
	{FNAME("nlpidData") OCTSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _DataApplicationCapability_application[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP, 0,
	 _H245_NonStandardParameter},
	{FNAME("t120") CHOICE, 3, 7, 14, DECODE | EXT,
	 offsetof(DataApplicationCapability_application, t120),
	 _DataProtocolCapability},
	{FNAME("dsm-cc") CHOICE, 3, 7, 14, SKIP | EXT, 0,
	 _DataProtocolCapability},
	{FNAME("userData") CHOICE, 3, 7, 14, SKIP | EXT, 0,
	 _DataProtocolCapability},
	{FNAME("t84") SEQ, 0, 2, 2, SKIP, 0,
	 _DataApplicationCapability_application_t84},
	{FNAME("t434") CHOICE, 3, 7, 14, SKIP | EXT, 0,
	 _DataProtocolCapability},
	{FNAME("h224") CHOICE, 3, 7, 14, SKIP | EXT, 0,
	 _DataProtocolCapability},
	{FNAME("nlpid") SEQ, 0, 2, 2, SKIP, 0,
	 _DataApplicationCapability_application_nlpid},
	{FNAME("dsvdControl") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("h222DataPartitioning") CHOICE, 3, 7, 14, SKIP | EXT, 0,
	 _DataProtocolCapability},
	{FNAME("t30fax") CHOICE, 3, 7, 14, SKIP | EXT, 0, NULL},
	{FNAME("t140") CHOICE, 3, 7, 14, SKIP | EXT, 0, NULL},
	{FNAME("t38fax") SEQ, 0, 2, 2, SKIP, 0, NULL},
	{FNAME("genericDataCapability") SEQ, 5, 6, 6, SKIP | EXT, 0, NULL},
};

static field_t _DataApplicationCapability[] = {	/* SEQUENCE */
	{FNAME("application") CHOICE, 4, 10, 14, DECODE | EXT,
	 offsetof(DataApplicationCapability, application),
	 _DataApplicationCapability_application},
	{FNAME("maxBitRate") INT, CONS, 0, 0, SKIP, 0, NULL},
};

static field_t _EncryptionMode[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP, 0,
	 _H245_NonStandardParameter},
	{FNAME("h233Encryption") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _DataType[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP, 0,
	 _H245_NonStandardParameter},
	{FNAME("nullData") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("videoData") CHOICE, 3, 5, 6, SKIP | EXT, 0, _VideoCapability},
	{FNAME("audioData") CHOICE, 4, 14, 22, SKIP | EXT, 0,
	 _AudioCapability},
	{FNAME("data") SEQ, 0, 2, 2, DECODE | EXT, offsetof(DataType, data),
	 _DataApplicationCapability},
	{FNAME("encryptionData") CHOICE, 1, 2, 2, SKIP | EXT, 0,
	 _EncryptionMode},
	{FNAME("h235Control") SEQ, 0, 2, 2, SKIP, 0, NULL},
	{FNAME("h235Media") SEQ, 0, 2, 2, SKIP | EXT, 0, NULL},
	{FNAME("multiplexedStream") SEQ, 0, 2, 2, SKIP | EXT, 0, NULL},
};

static field_t _H222LogicalChannelParameters[] = {	/* SEQUENCE */
	{FNAME("resourceID") INT, WORD, 0, 0, SKIP, 0, NULL},
	{FNAME("subChannelID") INT, WORD, 0, 0, SKIP, 0, NULL},
	{FNAME("pcr-pid") INT, WORD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("programDescriptors") OCTSTR, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("streamDescriptors") OCTSTR, SEMI, 0, 0, SKIP | OPT, 0, NULL},
};

static field_t _H223LogicalChannelParameters_adaptationLayerType_al3[] = {	/* SEQUENCE */
	{FNAME("controlFieldOctets") INT, 2, 0, 0, SKIP, 0, NULL},
	{FNAME("sendBufferSize") INT, CONS, 0, 0, SKIP, 0, NULL},
};

static field_t _H223LogicalChannelParameters_adaptationLayerType[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP, 0,
	 _H245_NonStandardParameter},
	{FNAME("al1Framed") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("al1NotFramed") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("al2WithoutSequenceNumbers") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("al2WithSequenceNumbers") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("al3") SEQ, 0, 2, 2, SKIP, 0,
	 _H223LogicalChannelParameters_adaptationLayerType_al3},
	{FNAME("al1M") SEQ, 0, 7, 8, SKIP | EXT, 0, NULL},
	{FNAME("al2M") SEQ, 0, 2, 2, SKIP | EXT, 0, NULL},
	{FNAME("al3M") SEQ, 0, 5, 6, SKIP | EXT, 0, NULL},
};

static field_t _H223LogicalChannelParameters[] = {	/* SEQUENCE */
	{FNAME("adaptationLayerType") CHOICE, 3, 6, 9, SKIP | EXT, 0,
	 _H223LogicalChannelParameters_adaptationLayerType},
	{FNAME("segmentableFlag") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _CRCLength[] = {	/* CHOICE */
	{FNAME("crc8bit") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("crc16bit") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("crc32bit") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _V76HDLCParameters[] = {	/* SEQUENCE */
	{FNAME("crcLength") CHOICE, 2, 3, 3, SKIP | EXT, 0, _CRCLength},
	{FNAME("n401") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("loopbackTestProcedure") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _V76LogicalChannelParameters_suspendResume[] = {	/* CHOICE */
	{FNAME("noSuspendResume") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("suspendResumewAddress") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("suspendResumewoAddress") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _V76LogicalChannelParameters_mode_eRM_recovery[] = {	/* CHOICE */
	{FNAME("rej") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("sREJ") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("mSREJ") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _V76LogicalChannelParameters_mode_eRM[] = {	/* SEQUENCE */
	{FNAME("windowSize") INT, 7, 1, 0, SKIP, 0, NULL},
	{FNAME("recovery") CHOICE, 2, 3, 3, SKIP | EXT, 0,
	 _V76LogicalChannelParameters_mode_eRM_recovery},
};

static field_t _V76LogicalChannelParameters_mode[] = {	/* CHOICE */
	{FNAME("eRM") SEQ, 0, 2, 2, SKIP | EXT, 0,
	 _V76LogicalChannelParameters_mode_eRM},
	{FNAME("uNERM") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _V75Parameters[] = {	/* SEQUENCE */
	{FNAME("audioHeaderPresent") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _V76LogicalChannelParameters[] = {	/* SEQUENCE */
	{FNAME("hdlcParameters") SEQ, 0, 3, 3, SKIP | EXT, 0,
	 _V76HDLCParameters},
	{FNAME("suspendResume") CHOICE, 2, 3, 3, SKIP | EXT, 0,
	 _V76LogicalChannelParameters_suspendResume},
	{FNAME("uIH") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("mode") CHOICE, 1, 2, 2, SKIP | EXT, 0,
	 _V76LogicalChannelParameters_mode},
	{FNAME("v75Parameters") SEQ, 0, 1, 1, SKIP | EXT, 0, _V75Parameters},
};

static field_t _H2250LogicalChannelParameters_nonStandard[] = {	/* SEQUENCE OF */
	{FNAME("item") SEQ, 0, 2, 2, SKIP, 0, _H245_NonStandardParameter},
};

static field_t _UnicastAddress_iPAddress[] = {	/* SEQUENCE */
	{FNAME("network") OCTSTR, FIXD, 4, 0, DECODE,
	 offsetof(UnicastAddress_iPAddress, network), NULL},
	{FNAME("tsapIdentifier") INT, WORD, 0, 0, SKIP, 0, NULL},
};

static field_t _UnicastAddress_iPXAddress[] = {	/* SEQUENCE */
	{FNAME("node") OCTSTR, FIXD, 6, 0, SKIP, 0, NULL},
	{FNAME("netnum") OCTSTR, FIXD, 4, 0, SKIP, 0, NULL},
	{FNAME("tsapIdentifier") OCTSTR, FIXD, 2, 0, SKIP, 0, NULL},
};

static field_t _UnicastAddress_iP6Address[] = {	/* SEQUENCE */
	{FNAME("network") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
	{FNAME("tsapIdentifier") INT, WORD, 0, 0, SKIP, 0, NULL},
};

static field_t _UnicastAddress_iPSourceRouteAddress_routing[] = {	/* CHOICE */
	{FNAME("strict") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("loose") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _UnicastAddress_iPSourceRouteAddress_route[] = {	/* SEQUENCE OF */
	{FNAME("item") OCTSTR, FIXD, 4, 0, SKIP, 0, NULL},
};

static field_t _UnicastAddress_iPSourceRouteAddress[] = {	/* SEQUENCE */
	{FNAME("routing") CHOICE, 1, 2, 2, SKIP, 0,
	 _UnicastAddress_iPSourceRouteAddress_routing},
	{FNAME("network") OCTSTR, FIXD, 4, 0, SKIP, 0, NULL},
	{FNAME("tsapIdentifier") INT, WORD, 0, 0, SKIP, 0, NULL},
	{FNAME("route") SEQOF, SEMI, 0, 0, SKIP, 0,
	 _UnicastAddress_iPSourceRouteAddress_route},
};

static field_t _UnicastAddress[] = {	/* CHOICE */
	{FNAME("iPAddress") SEQ, 0, 2, 2, DECODE | EXT,
	 offsetof(UnicastAddress, iPAddress), _UnicastAddress_iPAddress},
	{FNAME("iPXAddress") SEQ, 0, 3, 3, SKIP | EXT, 0,
	 _UnicastAddress_iPXAddress},
	{FNAME("iP6Address") SEQ, 0, 2, 2, SKIP | EXT, 0,
	 _UnicastAddress_iP6Address},
	{FNAME("netBios") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
	{FNAME("iPSourceRouteAddress") SEQ, 0, 4, 4, SKIP | EXT, 0,
	 _UnicastAddress_iPSourceRouteAddress},
	{FNAME("nsap") OCTSTR, 5, 1, 0, SKIP, 0, NULL},
	{FNAME("nonStandardAddress") SEQ, 0, 2, 2, SKIP, 0, NULL},
};

static field_t _MulticastAddress_iPAddress[] = {	/* SEQUENCE */
	{FNAME("network") OCTSTR, FIXD, 4, 0, SKIP, 0, NULL},
	{FNAME("tsapIdentifier") INT, WORD, 0, 0, SKIP, 0, NULL},
};

static field_t _MulticastAddress_iP6Address[] = {	/* SEQUENCE */
	{FNAME("network") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
	{FNAME("tsapIdentifier") INT, WORD, 0, 0, SKIP, 0, NULL},
};

static field_t _MulticastAddress[] = {	/* CHOICE */
	{FNAME("iPAddress") SEQ, 0, 2, 2, SKIP | EXT, 0,
	 _MulticastAddress_iPAddress},
	{FNAME("iP6Address") SEQ, 0, 2, 2, SKIP | EXT, 0,
	 _MulticastAddress_iP6Address},
	{FNAME("nsap") OCTSTR, 5, 1, 0, SKIP, 0, NULL},
	{FNAME("nonStandardAddress") SEQ, 0, 2, 2, SKIP, 0, NULL},
};

static field_t _H245_TransportAddress[] = {	/* CHOICE */
	{FNAME("unicastAddress") CHOICE, 3, 5, 7, DECODE | EXT,
	 offsetof(H245_TransportAddress, unicastAddress), _UnicastAddress},
	{FNAME("multicastAddress") CHOICE, 1, 2, 4, SKIP | EXT, 0,
	 _MulticastAddress},
};

static field_t _H2250LogicalChannelParameters[] = {	/* SEQUENCE */
	{FNAME("nonStandard") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _H2250LogicalChannelParameters_nonStandard},
	{FNAME("sessionID") INT, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("associatedSessionID") INT, 8, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("mediaChannel") CHOICE, 1, 2, 2, DECODE | EXT | OPT,
	 offsetof(H2250LogicalChannelParameters, mediaChannel),
	 _H245_TransportAddress},
	{FNAME("mediaGuaranteedDelivery") BOOL, FIXD, 0, 0, SKIP | OPT, 0,
	 NULL},
	{FNAME("mediaControlChannel") CHOICE, 1, 2, 2, DECODE | EXT | OPT,
	 offsetof(H2250LogicalChannelParameters, mediaControlChannel),
	 _H245_TransportAddress},
	{FNAME("mediaControlGuaranteedDelivery") BOOL, FIXD, 0, 0, STOP | OPT,
	 0, NULL},
	{FNAME("silenceSuppression") BOOL, FIXD, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("destination") SEQ, 0, 2, 2, STOP | EXT | OPT, 0, NULL},
	{FNAME("dynamicRTPPayloadType") INT, 5, 96, 0, STOP | OPT, 0, NULL},
	{FNAME("mediaPacketization") CHOICE, 0, 1, 2, STOP | EXT | OPT, 0,
	 NULL},
	{FNAME("transportCapability") SEQ, 3, 3, 3, STOP | EXT | OPT, 0,
	 NULL},
	{FNAME("redundancyEncoding") SEQ, 1, 2, 2, STOP | EXT | OPT, 0, NULL},
	{FNAME("source") SEQ, 0, 2, 2, SKIP | EXT | OPT, 0, NULL},
};

static field_t _OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters[] = {	/* CHOICE */
	{FNAME("h222LogicalChannelParameters") SEQ, 3, 5, 5, SKIP | EXT, 0,
	 _H222LogicalChannelParameters},
	{FNAME("h223LogicalChannelParameters") SEQ, 0, 2, 2, SKIP | EXT, 0,
	 _H223LogicalChannelParameters},
	{FNAME("v76LogicalChannelParameters") SEQ, 0, 5, 5, SKIP | EXT, 0,
	 _V76LogicalChannelParameters},
	{FNAME("h2250LogicalChannelParameters") SEQ, 10, 11, 14, DECODE | EXT,
	 offsetof
	 (OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters,
	  h2250LogicalChannelParameters), _H2250LogicalChannelParameters},
	{FNAME("none") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _OpenLogicalChannel_forwardLogicalChannelParameters[] = {	/* SEQUENCE */
	{FNAME("portNumber") INT, WORD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("dataType") CHOICE, 3, 6, 9, DECODE | EXT,
	 offsetof(OpenLogicalChannel_forwardLogicalChannelParameters,
		  dataType), _DataType},
	{FNAME("multiplexParameters") CHOICE, 2, 3, 5, DECODE | EXT,
	 offsetof(OpenLogicalChannel_forwardLogicalChannelParameters,
		  multiplexParameters),
	 _OpenLogicalChannel_forwardLogicalChannelParameters_multiplexParameters},
	{FNAME("forwardLogicalChannelDependency") INT, WORD, 1, 0, SKIP | OPT,
	 0, NULL},
	{FNAME("replacementFor") INT, WORD, 1, 0, SKIP | OPT, 0, NULL},
};

static field_t _OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters[] = {	/* CHOICE */
	{FNAME("h223LogicalChannelParameters") SEQ, 0, 2, 2, SKIP | EXT, 0,
	 _H223LogicalChannelParameters},
	{FNAME("v76LogicalChannelParameters") SEQ, 0, 5, 5, SKIP | EXT, 0,
	 _V76LogicalChannelParameters},
	{FNAME("h2250LogicalChannelParameters") SEQ, 10, 11, 14, DECODE | EXT,
	 offsetof
	 (OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters,
	  h2250LogicalChannelParameters), _H2250LogicalChannelParameters},
};

static field_t _OpenLogicalChannel_reverseLogicalChannelParameters[] = {	/* SEQUENCE */
	{FNAME("dataType") CHOICE, 3, 6, 9, SKIP | EXT, 0, _DataType},
	{FNAME("multiplexParameters") CHOICE, 1, 2, 3, DECODE | EXT | OPT,
	 offsetof(OpenLogicalChannel_reverseLogicalChannelParameters,
		  multiplexParameters),
	 _OpenLogicalChannel_reverseLogicalChannelParameters_multiplexParameters},
	{FNAME("reverseLogicalChannelDependency") INT, WORD, 1, 0, SKIP | OPT,
	 0, NULL},
	{FNAME("replacementFor") INT, WORD, 1, 0, SKIP | OPT, 0, NULL},
};

static field_t _NetworkAccessParameters_distribution[] = {	/* CHOICE */
	{FNAME("unicast") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("multicast") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _Q2931Address_address[] = {	/* CHOICE */
	{FNAME("internationalNumber") NUMSTR, 4, 1, 0, SKIP, 0, NULL},
	{FNAME("nsapAddress") OCTSTR, 5, 1, 0, SKIP, 0, NULL},
};

static field_t _Q2931Address[] = {	/* SEQUENCE */
	{FNAME("address") CHOICE, 1, 2, 2, SKIP | EXT, 0,
	 _Q2931Address_address},
	{FNAME("subaddress") OCTSTR, 5, 1, 0, SKIP | OPT, 0, NULL},
};

static field_t _NetworkAccessParameters_networkAddress[] = {	/* CHOICE */
	{FNAME("q2931Address") SEQ, 1, 2, 2, SKIP | EXT, 0, _Q2931Address},
	{FNAME("e164Address") NUMDGT, 7, 1, 0, SKIP, 0, NULL},
	{FNAME("localAreaAddress") CHOICE, 1, 2, 2, DECODE | EXT,
	 offsetof(NetworkAccessParameters_networkAddress, localAreaAddress),
	 _H245_TransportAddress},
};

static field_t _NetworkAccessParameters[] = {	/* SEQUENCE */
	{FNAME("distribution") CHOICE, 1, 2, 2, SKIP | EXT | OPT, 0,
	 _NetworkAccessParameters_distribution},
	{FNAME("networkAddress") CHOICE, 2, 3, 3, DECODE | EXT,
	 offsetof(NetworkAccessParameters, networkAddress),
	 _NetworkAccessParameters_networkAddress},
	{FNAME("associateConference") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("externalReference") OCTSTR, 8, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("t120SetupProcedure") CHOICE, 2, 3, 3, SKIP | EXT | OPT, 0,
	 NULL},
};

static field_t _OpenLogicalChannel[] = {	/* SEQUENCE */
	{FNAME("forwardLogicalChannelNumber") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("forwardLogicalChannelParameters") SEQ, 1, 3, 5, DECODE | EXT,
	 offsetof(OpenLogicalChannel, forwardLogicalChannelParameters),
	 _OpenLogicalChannel_forwardLogicalChannelParameters},
	{FNAME("reverseLogicalChannelParameters") SEQ, 1, 2, 4,
	 DECODE | EXT | OPT, offsetof(OpenLogicalChannel,
				      reverseLogicalChannelParameters),
	 _OpenLogicalChannel_reverseLogicalChannelParameters},
	{FNAME("separateStack") SEQ, 2, 4, 5, DECODE | EXT | OPT,
	 offsetof(OpenLogicalChannel, separateStack),
	 _NetworkAccessParameters},
	{FNAME("encryptionSync") SEQ, 2, 4, 4, STOP | EXT | OPT, 0, NULL},
};

static field_t _Setup_UUIE_fastStart[] = {	/* SEQUENCE OF */
	{FNAME("item") SEQ, 1, 3, 5, DECODE | OPEN | EXT,
	 sizeof(OpenLogicalChannel), _OpenLogicalChannel}
	,
};

static field_t _Setup_UUIE[] = {	/* SEQUENCE */
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("h245Address") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(Setup_UUIE, h245Address), _TransportAddress},
	{FNAME("sourceAddress") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _Setup_UUIE_sourceAddress},
	{FNAME("sourceInfo") SEQ, 6, 8, 10, SKIP | EXT, 0, _EndpointType},
	{FNAME("destinationAddress") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _Setup_UUIE_destinationAddress},
	{FNAME("destCallSignalAddress") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(Setup_UUIE, destCallSignalAddress), _TransportAddress},
	{FNAME("destExtraCallInfo") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _Setup_UUIE_destExtraCallInfo},
	{FNAME("destExtraCRV") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _Setup_UUIE_destExtraCRV},
	{FNAME("activeMC") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("conferenceID") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
	{FNAME("conferenceGoal") CHOICE, 2, 3, 5, SKIP | EXT, 0,
	 _Setup_UUIE_conferenceGoal},
	{FNAME("callServices") SEQ, 0, 8, 8, SKIP | EXT | OPT, 0,
	 _QseriesOptions},
	{FNAME("callType") CHOICE, 2, 4, 4, SKIP | EXT, 0, _CallType},
	{FNAME("sourceCallSignalAddress") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(Setup_UUIE, sourceCallSignalAddress), _TransportAddress},
	{FNAME("remoteExtensionAddress") CHOICE, 1, 2, 7, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("callIdentifier") SEQ, 0, 1, 1, SKIP | EXT, 0, NULL},
	{FNAME("h245SecurityCapability") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("fastStart") SEQOF, SEMI, 0, 30, DECODE | OPT,
	 offsetof(Setup_UUIE, fastStart), _Setup_UUIE_fastStart},
	{FNAME("mediaWaitForConnect") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("canOverlapSend") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("endpointIdentifier") BMPSTR, 7, 1, 0, STOP | OPT, 0, NULL},
	{FNAME("multipleCalls") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("maintainConnection") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("connectionParameters") SEQ, 0, 3, 3, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("language") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("presentationIndicator") CHOICE, 2, 3, 3, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("screeningIndicator") ENUM, 2, 0, 0, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("serviceControl") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("symmetricOperationRequired") NUL, FIXD, 0, 0, SKIP | OPT, 0,
	 NULL},
	{FNAME("capacity") SEQ, 2, 2, 2, SKIP | EXT | OPT, 0, NULL},
	{FNAME("circuitInfo") SEQ, 3, 3, 3, SKIP | EXT | OPT, 0, NULL},
	{FNAME("desiredProtocols") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("neededFeatures") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("desiredFeatures") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("supportedFeatures") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("parallelH245Control") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("additionalSourceAddresses") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 NULL},
};

static field_t _CallProceeding_UUIE_fastStart[] = {	/* SEQUENCE OF */
	{FNAME("item") SEQ, 1, 3, 5, DECODE | OPEN | EXT,
	 sizeof(OpenLogicalChannel), _OpenLogicalChannel}
	,
};

static field_t _CallProceeding_UUIE[] = {	/* SEQUENCE */
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("destinationInfo") SEQ, 6, 8, 10, SKIP | EXT, 0,
	 _EndpointType},
	{FNAME("h245Address") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(CallProceeding_UUIE, h245Address), _TransportAddress},
	{FNAME("callIdentifier") SEQ, 0, 1, 1, SKIP | EXT, 0, NULL},
	{FNAME("h245SecurityMode") CHOICE, 2, 4, 4, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("fastStart") SEQOF, SEMI, 0, 30, DECODE | OPT,
	 offsetof(CallProceeding_UUIE, fastStart),
	 _CallProceeding_UUIE_fastStart},
	{FNAME("multipleCalls") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("maintainConnection") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("fastConnectRefused") NUL, FIXD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, SKIP | EXT | OPT, 0, NULL},
};

static field_t _Connect_UUIE_fastStart[] = {	/* SEQUENCE OF */
	{FNAME("item") SEQ, 1, 3, 5, DECODE | OPEN | EXT,
	 sizeof(OpenLogicalChannel), _OpenLogicalChannel}
	,
};

static field_t _Connect_UUIE[] = {	/* SEQUENCE */
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("h245Address") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(Connect_UUIE, h245Address), _TransportAddress},
	{FNAME("destinationInfo") SEQ, 6, 8, 10, SKIP | EXT, 0,
	 _EndpointType},
	{FNAME("conferenceID") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
	{FNAME("callIdentifier") SEQ, 0, 1, 1, SKIP | EXT, 0, NULL},
	{FNAME("h245SecurityMode") CHOICE, 2, 4, 4, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("fastStart") SEQOF, SEMI, 0, 30, DECODE | OPT,
	 offsetof(Connect_UUIE, fastStart), _Connect_UUIE_fastStart},
	{FNAME("multipleCalls") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("maintainConnection") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("language") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("connectedAddress") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("presentationIndicator") CHOICE, 2, 3, 3, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("screeningIndicator") ENUM, 2, 0, 0, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("fastConnectRefused") NUL, FIXD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("serviceControl") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("capacity") SEQ, 2, 2, 2, SKIP | EXT | OPT, 0, NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, SKIP | EXT | OPT, 0, NULL},
};

static field_t _Alerting_UUIE_fastStart[] = {	/* SEQUENCE OF */
	{FNAME("item") SEQ, 1, 3, 5, DECODE | OPEN | EXT,
	 sizeof(OpenLogicalChannel), _OpenLogicalChannel}
	,
};

static field_t _Alerting_UUIE[] = {	/* SEQUENCE */
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("destinationInfo") SEQ, 6, 8, 10, SKIP | EXT, 0,
	 _EndpointType},
	{FNAME("h245Address") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(Alerting_UUIE, h245Address), _TransportAddress},
	{FNAME("callIdentifier") SEQ, 0, 1, 1, SKIP | EXT, 0, NULL},
	{FNAME("h245SecurityMode") CHOICE, 2, 4, 4, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("fastStart") SEQOF, SEMI, 0, 30, DECODE | OPT,
	 offsetof(Alerting_UUIE, fastStart), _Alerting_UUIE_fastStart},
	{FNAME("multipleCalls") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("maintainConnection") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("alertingAddress") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("presentationIndicator") CHOICE, 2, 3, 3, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("screeningIndicator") ENUM, 2, 0, 0, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("fastConnectRefused") NUL, FIXD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("serviceControl") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("capacity") SEQ, 2, 2, 2, SKIP | EXT | OPT, 0, NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, SKIP | EXT | OPT, 0, NULL},
};

static field_t _Information_UUIE_fastStart[] = {	/* SEQUENCE OF */
	{FNAME("item") SEQ, 1, 3, 5, DECODE | OPEN | EXT,
	 sizeof(OpenLogicalChannel), _OpenLogicalChannel}
	,
};

static field_t _Information_UUIE[] = {	/* SEQUENCE */
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("callIdentifier") SEQ, 0, 1, 1, SKIP | EXT, 0, NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("fastStart") SEQOF, SEMI, 0, 30, DECODE | OPT,
	 offsetof(Information_UUIE, fastStart), _Information_UUIE_fastStart},
	{FNAME("fastConnectRefused") NUL, FIXD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("circuitInfo") SEQ, 3, 3, 3, SKIP | EXT | OPT, 0, NULL},
};

static field_t _ReleaseCompleteReason[] = {	/* CHOICE */
	{FNAME("noBandwidth") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("gatekeeperResources") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("unreachableDestination") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("destinationRejection") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("invalidRevision") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("noPermission") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("unreachableGatekeeper") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("gatewayResources") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("badFormatAddress") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("adaptiveBusy") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("inConf") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("undefinedReason") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("facilityCallDeflection") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("securityDenied") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("calledPartyNotRegistered") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("callerNotRegistered") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("newConnectionNeeded") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("nonStandardReason") SEQ, 0, 2, 2, SKIP, 0, NULL},
	{FNAME("replaceWithConferenceInvite") OCTSTR, FIXD, 16, 0, SKIP, 0,
	 NULL},
	{FNAME("genericDataReason") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("neededFeatureNotSupported") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("tunnelledSignallingRejected") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _ReleaseComplete_UUIE[] = {	/* SEQUENCE */
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("reason") CHOICE, 4, 12, 22, SKIP | EXT | OPT, 0,
	 _ReleaseCompleteReason},
	{FNAME("callIdentifier") SEQ, 0, 1, 1, SKIP | EXT, 0, NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("busyAddress") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("presentationIndicator") CHOICE, 2, 3, 3, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("screeningIndicator") ENUM, 2, 0, 0, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("capacity") SEQ, 2, 2, 2, SKIP | EXT | OPT, 0, NULL},
	{FNAME("serviceControl") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, SKIP | EXT | OPT, 0, NULL},
};

static field_t _Facility_UUIE_alternativeAliasAddress[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
};

static field_t _FacilityReason[] = {	/* CHOICE */
	{FNAME("routeCallToGatekeeper") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("callForwarded") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("routeCallToMC") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("undefinedReason") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("conferenceListChoice") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("startH245") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("noH245") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("newTokens") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("featureSetUpdate") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("forwardedElements") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("transportedInformation") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _Facility_UUIE_fastStart[] = {	/* SEQUENCE OF */
	{FNAME("item") SEQ, 1, 3, 5, DECODE | OPEN | EXT,
	 sizeof(OpenLogicalChannel), _OpenLogicalChannel}
	,
};

static field_t _Facility_UUIE[] = {	/* SEQUENCE */
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("alternativeAddress") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(Facility_UUIE, alternativeAddress), _TransportAddress},
	{FNAME("alternativeAliasAddress") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _Facility_UUIE_alternativeAliasAddress},
	{FNAME("conferenceID") OCTSTR, FIXD, 16, 0, SKIP | OPT, 0, NULL},
	{FNAME("reason") CHOICE, 2, 4, 11, DECODE | EXT,
	 offsetof(Facility_UUIE, reason), _FacilityReason},
	{FNAME("callIdentifier") SEQ, 0, 1, 1, SKIP | EXT, 0, NULL},
	{FNAME("destExtraCallInfo") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("remoteExtensionAddress") CHOICE, 1, 2, 7, SKIP | EXT | OPT, 0,
	 NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("conferences") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("h245Address") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(Facility_UUIE, h245Address), _TransportAddress},
	{FNAME("fastStart") SEQOF, SEMI, 0, 30, DECODE | OPT,
	 offsetof(Facility_UUIE, fastStart), _Facility_UUIE_fastStart},
	{FNAME("multipleCalls") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("maintainConnection") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("fastConnectRefused") NUL, FIXD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("serviceControl") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("circuitInfo") SEQ, 3, 3, 3, SKIP | EXT | OPT, 0, NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, SKIP | EXT | OPT, 0, NULL},
	{FNAME("destinationInfo") SEQ, 6, 8, 10, SKIP | EXT | OPT, 0, NULL},
	{FNAME("h245SecurityMode") CHOICE, 2, 4, 4, SKIP | EXT | OPT, 0,
	 NULL},
};

static field_t _CallIdentifier[] = {	/* SEQUENCE */
	{FNAME("guid") OCTSTR, FIXD, 16, 0, SKIP, 0, NULL},
};

static field_t _SecurityServiceMode[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP, 0, _NonStandardParameter},
	{FNAME("none") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("default") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _SecurityCapabilities[] = {	/* SEQUENCE */
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("encryption") CHOICE, 2, 3, 3, SKIP | EXT, 0,
	 _SecurityServiceMode},
	{FNAME("authenticaton") CHOICE, 2, 3, 3, SKIP | EXT, 0,
	 _SecurityServiceMode},
	{FNAME("integrity") CHOICE, 2, 3, 3, SKIP | EXT, 0,
	 _SecurityServiceMode},
};

static field_t _H245Security[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP, 0, _NonStandardParameter},
	{FNAME("noSecurity") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("tls") SEQ, 1, 4, 4, SKIP | EXT, 0, _SecurityCapabilities},
	{FNAME("ipsec") SEQ, 1, 4, 4, SKIP | EXT, 0, _SecurityCapabilities},
};

static field_t _DHset[] = {	/* SEQUENCE */
	{FNAME("halfkey") BITSTR, WORD, 0, 0, SKIP, 0, NULL},
	{FNAME("modSize") BITSTR, WORD, 0, 0, SKIP, 0, NULL},
	{FNAME("generator") BITSTR, WORD, 0, 0, SKIP, 0, NULL},
};

static field_t _TypedCertificate[] = {	/* SEQUENCE */
	{FNAME("type") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("certificate") OCTSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _H235_NonStandardParameter[] = {	/* SEQUENCE */
	{FNAME("nonStandardIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("data") OCTSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _ClearToken[] = {	/* SEQUENCE */
	{FNAME("tokenOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("timeStamp") INT, CONS, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("password") BMPSTR, 7, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("dhkey") SEQ, 0, 3, 3, SKIP | EXT | OPT, 0, _DHset},
	{FNAME("challenge") OCTSTR, 7, 8, 0, SKIP | OPT, 0, NULL},
	{FNAME("random") INT, UNCO, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("certificate") SEQ, 0, 2, 2, SKIP | EXT | OPT, 0,
	 _TypedCertificate},
	{FNAME("generalID") BMPSTR, 7, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("nonStandard") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _H235_NonStandardParameter},
	{FNAME("eckasdhkey") CHOICE, 1, 2, 2, SKIP | EXT | OPT, 0, NULL},
	{FNAME("sendersID") BMPSTR, 7, 1, 0, SKIP | OPT, 0, NULL},
};

static field_t _Progress_UUIE_tokens[] = {	/* SEQUENCE OF */
	{FNAME("item") SEQ, 8, 9, 11, SKIP | EXT, 0, _ClearToken},
};

static field_t _Params[] = {	/* SEQUENCE */
	{FNAME("ranInt") INT, UNCO, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("iv8") OCTSTR, FIXD, 8, 0, SKIP | OPT, 0, NULL},
	{FNAME("iv16") OCTSTR, FIXD, 16, 0, SKIP | OPT, 0, NULL},
};

static field_t _CryptoH323Token_cryptoEPPwdHash_token[] = {	/* SEQUENCE */
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("hash") BITSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoH323Token_cryptoEPPwdHash[] = {	/* SEQUENCE */
	{FNAME("alias") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
	{FNAME("timeStamp") INT, CONS, 1, 0, SKIP, 0, NULL},
	{FNAME("token") SEQ, 0, 3, 3, SKIP, 0,
	 _CryptoH323Token_cryptoEPPwdHash_token},
};

static field_t _CryptoH323Token_cryptoGKPwdHash_token[] = {	/* SEQUENCE */
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("hash") BITSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoH323Token_cryptoGKPwdHash[] = {	/* SEQUENCE */
	{FNAME("gatekeeperId") BMPSTR, 7, 1, 0, SKIP, 0, NULL},
	{FNAME("timeStamp") INT, CONS, 1, 0, SKIP, 0, NULL},
	{FNAME("token") SEQ, 0, 3, 3, SKIP, 0,
	 _CryptoH323Token_cryptoGKPwdHash_token},
};

static field_t _CryptoH323Token_cryptoEPPwdEncr[] = {	/* SEQUENCE */
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("encryptedData") OCTSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoH323Token_cryptoGKPwdEncr[] = {	/* SEQUENCE */
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("encryptedData") OCTSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoH323Token_cryptoEPCert[] = {	/* SEQUENCE */
	{FNAME("toBeSigned") SEQ, 8, 9, 11, SKIP | OPEN | EXT, 0, NULL},
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("signature") BITSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoH323Token_cryptoGKCert[] = {	/* SEQUENCE */
	{FNAME("toBeSigned") SEQ, 8, 9, 11, SKIP | OPEN | EXT, 0, NULL},
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("signature") BITSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoH323Token_cryptoFastStart[] = {	/* SEQUENCE */
	{FNAME("toBeSigned") SEQ, 8, 9, 11, SKIP | OPEN | EXT, 0, NULL},
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("signature") BITSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoToken_cryptoEncryptedToken_token[] = {	/* SEQUENCE */
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("encryptedData") OCTSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoToken_cryptoEncryptedToken[] = {	/* SEQUENCE */
	{FNAME("tokenOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("token") SEQ, 0, 3, 3, SKIP, 0,
	 _CryptoToken_cryptoEncryptedToken_token},
};

static field_t _CryptoToken_cryptoSignedToken_token[] = {	/* SEQUENCE */
	{FNAME("toBeSigned") SEQ, 8, 9, 11, SKIP | OPEN | EXT, 0, NULL},
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("signature") BITSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoToken_cryptoSignedToken[] = {	/* SEQUENCE */
	{FNAME("tokenOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("token") SEQ, 0, 4, 4, SKIP, 0,
	 _CryptoToken_cryptoSignedToken_token},
};

static field_t _CryptoToken_cryptoHashedToken_token[] = {	/* SEQUENCE */
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("hash") BITSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoToken_cryptoHashedToken[] = {	/* SEQUENCE */
	{FNAME("tokenOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("hashedVals") SEQ, 8, 9, 11, SKIP | EXT, 0, _ClearToken},
	{FNAME("token") SEQ, 0, 3, 3, SKIP, 0,
	 _CryptoToken_cryptoHashedToken_token},
};

static field_t _CryptoToken_cryptoPwdEncr[] = {	/* SEQUENCE */
	{FNAME("algorithmOID") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("paramS") SEQ, 2, 2, 3, SKIP | EXT, 0, _Params},
	{FNAME("encryptedData") OCTSTR, SEMI, 0, 0, SKIP, 0, NULL},
};

static field_t _CryptoToken[] = {	/* CHOICE */
	{FNAME("cryptoEncryptedToken") SEQ, 0, 2, 2, SKIP, 0,
	 _CryptoToken_cryptoEncryptedToken},
	{FNAME("cryptoSignedToken") SEQ, 0, 2, 2, SKIP, 0,
	 _CryptoToken_cryptoSignedToken},
	{FNAME("cryptoHashedToken") SEQ, 0, 3, 3, SKIP, 0,
	 _CryptoToken_cryptoHashedToken},
	{FNAME("cryptoPwdEncr") SEQ, 0, 3, 3, SKIP, 0,
	 _CryptoToken_cryptoPwdEncr},
};

static field_t _CryptoH323Token[] = {	/* CHOICE */
	{FNAME("cryptoEPPwdHash") SEQ, 0, 3, 3, SKIP, 0,
	 _CryptoH323Token_cryptoEPPwdHash},
	{FNAME("cryptoGKPwdHash") SEQ, 0, 3, 3, SKIP, 0,
	 _CryptoH323Token_cryptoGKPwdHash},
	{FNAME("cryptoEPPwdEncr") SEQ, 0, 3, 3, SKIP, 0,
	 _CryptoH323Token_cryptoEPPwdEncr},
	{FNAME("cryptoGKPwdEncr") SEQ, 0, 3, 3, SKIP, 0,
	 _CryptoH323Token_cryptoGKPwdEncr},
	{FNAME("cryptoEPCert") SEQ, 0, 4, 4, SKIP, 0,
	 _CryptoH323Token_cryptoEPCert},
	{FNAME("cryptoGKCert") SEQ, 0, 4, 4, SKIP, 0,
	 _CryptoH323Token_cryptoGKCert},
	{FNAME("cryptoFastStart") SEQ, 0, 4, 4, SKIP, 0,
	 _CryptoH323Token_cryptoFastStart},
	{FNAME("nestedcryptoToken") CHOICE, 2, 4, 4, SKIP | EXT, 0,
	 _CryptoToken},
};

static field_t _Progress_UUIE_cryptoTokens[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 3, 8, 8, SKIP | EXT, 0, _CryptoH323Token},
};

static field_t _Progress_UUIE_fastStart[] = {	/* SEQUENCE OF */
	{FNAME("item") SEQ, 1, 3, 5, DECODE | OPEN | EXT,
	 sizeof(OpenLogicalChannel), _OpenLogicalChannel}
	,
};

static field_t _Progress_UUIE[] = {	/* SEQUENCE */
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("destinationInfo") SEQ, 6, 8, 10, SKIP | EXT, 0,
	 _EndpointType},
	{FNAME("h245Address") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(Progress_UUIE, h245Address), _TransportAddress},
	{FNAME("callIdentifier") SEQ, 0, 1, 1, SKIP | EXT, 0,
	 _CallIdentifier},
	{FNAME("h245SecurityMode") CHOICE, 2, 4, 4, SKIP | EXT | OPT, 0,
	 _H245Security},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _Progress_UUIE_tokens},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _Progress_UUIE_cryptoTokens},
	{FNAME("fastStart") SEQOF, SEMI, 0, 30, DECODE | OPT,
	 offsetof(Progress_UUIE, fastStart), _Progress_UUIE_fastStart},
	{FNAME("multipleCalls") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("maintainConnection") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("fastConnectRefused") NUL, FIXD, 0, 0, SKIP | OPT, 0, NULL},
};

static field_t _H323_UU_PDU_h323_message_body[] = {	/* CHOICE */
	{FNAME("setup") SEQ, 7, 13, 39, DECODE | EXT,
	 offsetof(H323_UU_PDU_h323_message_body, setup), _Setup_UUIE},
	{FNAME("callProceeding") SEQ, 1, 3, 12, DECODE | EXT,
	 offsetof(H323_UU_PDU_h323_message_body, callProceeding),
	 _CallProceeding_UUIE},
	{FNAME("connect") SEQ, 1, 4, 19, DECODE | EXT,
	 offsetof(H323_UU_PDU_h323_message_body, connect), _Connect_UUIE},
	{FNAME("alerting") SEQ, 1, 3, 17, DECODE | EXT,
	 offsetof(H323_UU_PDU_h323_message_body, alerting), _Alerting_UUIE},
	{FNAME("information") SEQ, 0, 1, 7, DECODE | EXT,
	 offsetof(H323_UU_PDU_h323_message_body, information),
	 _Information_UUIE},
	{FNAME("releaseComplete") SEQ, 1, 2, 11, SKIP | EXT, 0,
	 _ReleaseComplete_UUIE},
	{FNAME("facility") SEQ, 3, 5, 21, DECODE | EXT,
	 offsetof(H323_UU_PDU_h323_message_body, facility), _Facility_UUIE},
	{FNAME("progress") SEQ, 5, 8, 11, DECODE | EXT,
	 offsetof(H323_UU_PDU_h323_message_body, progress), _Progress_UUIE},
	{FNAME("empty") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("status") SEQ, 2, 4, 4, SKIP | EXT, 0, NULL},
	{FNAME("statusInquiry") SEQ, 2, 4, 4, SKIP | EXT, 0, NULL},
	{FNAME("setupAcknowledge") SEQ, 2, 4, 4, SKIP | EXT, 0, NULL},
	{FNAME("notify") SEQ, 2, 4, 4, SKIP | EXT, 0, NULL},
};

static field_t _RequestMessage[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("masterSlaveDetermination") SEQ, 0, 2, 2, STOP | EXT, 0, NULL},
	{FNAME("terminalCapabilitySet") SEQ, 3, 5, 5, STOP | EXT, 0, NULL},
	{FNAME("openLogicalChannel") SEQ, 1, 3, 5, DECODE | EXT,
	 offsetof(RequestMessage, openLogicalChannel), _OpenLogicalChannel},
	{FNAME("closeLogicalChannel") SEQ, 0, 2, 3, STOP | EXT, 0, NULL},
	{FNAME("requestChannelClose") SEQ, 0, 1, 3, STOP | EXT, 0, NULL},
	{FNAME("multiplexEntrySend") SEQ, 0, 2, 2, STOP | EXT, 0, NULL},
	{FNAME("requestMultiplexEntry") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("requestMode") SEQ, 0, 2, 2, STOP | EXT, 0, NULL},
	{FNAME("roundTripDelayRequest") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("maintenanceLoopRequest") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("communicationModeRequest") SEQ, 0, 0, 0, STOP | EXT, 0, NULL},
	{FNAME("conferenceRequest") CHOICE, 3, 8, 16, STOP | EXT, 0, NULL},
	{FNAME("multilinkRequest") CHOICE, 3, 5, 5, STOP | EXT, 0, NULL},
	{FNAME("logicalChannelRateRequest") SEQ, 0, 3, 3, STOP | EXT, 0,
	 NULL},
};

static field_t _OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters[] = {	/* CHOICE */
	{FNAME("h222LogicalChannelParameters") SEQ, 3, 5, 5, SKIP | EXT, 0,
	 _H222LogicalChannelParameters},
	{FNAME("h2250LogicalChannelParameters") SEQ, 10, 11, 14, DECODE | EXT,
	 offsetof
	 (OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters,
	  h2250LogicalChannelParameters), _H2250LogicalChannelParameters},
};

static field_t _OpenLogicalChannelAck_reverseLogicalChannelParameters[] = {	/* SEQUENCE */
	{FNAME("reverseLogicalChannelNumber") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("portNumber") INT, WORD, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("multiplexParameters") CHOICE, 0, 1, 2, DECODE | EXT | OPT,
	 offsetof(OpenLogicalChannelAck_reverseLogicalChannelParameters,
		  multiplexParameters),
	 _OpenLogicalChannelAck_reverseLogicalChannelParameters_multiplexParameters},
	{FNAME("replacementFor") INT, WORD, 1, 0, SKIP | OPT, 0, NULL},
};

static field_t _H2250LogicalChannelAckParameters_nonStandard[] = {	/* SEQUENCE OF */
	{FNAME("item") SEQ, 0, 2, 2, SKIP, 0, _H245_NonStandardParameter},
};

static field_t _H2250LogicalChannelAckParameters[] = {	/* SEQUENCE */
	{FNAME("nonStandard") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _H2250LogicalChannelAckParameters_nonStandard},
	{FNAME("sessionID") INT, 8, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("mediaChannel") CHOICE, 1, 2, 2, DECODE | EXT | OPT,
	 offsetof(H2250LogicalChannelAckParameters, mediaChannel),
	 _H245_TransportAddress},
	{FNAME("mediaControlChannel") CHOICE, 1, 2, 2, DECODE | EXT | OPT,
	 offsetof(H2250LogicalChannelAckParameters, mediaControlChannel),
	 _H245_TransportAddress},
	{FNAME("dynamicRTPPayloadType") INT, 5, 96, 0, SKIP | OPT, 0, NULL},
	{FNAME("flowControlToZero") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("portNumber") INT, WORD, 0, 0, SKIP | OPT, 0, NULL},
};

static field_t _OpenLogicalChannelAck_forwardMultiplexAckParameters[] = {	/* CHOICE */
	{FNAME("h2250LogicalChannelAckParameters") SEQ, 5, 5, 7, DECODE | EXT,
	 offsetof(OpenLogicalChannelAck_forwardMultiplexAckParameters,
		  h2250LogicalChannelAckParameters),
	 _H2250LogicalChannelAckParameters},
};

static field_t _OpenLogicalChannelAck[] = {	/* SEQUENCE */
	{FNAME("forwardLogicalChannelNumber") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("reverseLogicalChannelParameters") SEQ, 2, 3, 4,
	 DECODE | EXT | OPT, offsetof(OpenLogicalChannelAck,
				      reverseLogicalChannelParameters),
	 _OpenLogicalChannelAck_reverseLogicalChannelParameters},
	{FNAME("separateStack") SEQ, 2, 4, 5, SKIP | EXT | OPT, 0, NULL},
	{FNAME("forwardMultiplexAckParameters") CHOICE, 0, 1, 1,
	 DECODE | EXT | OPT, offsetof(OpenLogicalChannelAck,
				      forwardMultiplexAckParameters),
	 _OpenLogicalChannelAck_forwardMultiplexAckParameters},
	{FNAME("encryptionSync") SEQ, 2, 4, 4, STOP | EXT | OPT, 0, NULL},
};

static field_t _ResponseMessage[] = {	/* CHOICE */
	{FNAME("nonStandard") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("masterSlaveDeterminationAck") SEQ, 0, 1, 1, STOP | EXT, 0,
	 NULL},
	{FNAME("masterSlaveDeterminationReject") SEQ, 0, 1, 1, STOP | EXT, 0,
	 NULL},
	{FNAME("terminalCapabilitySetAck") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("terminalCapabilitySetReject") SEQ, 0, 2, 2, STOP | EXT, 0,
	 NULL},
	{FNAME("openLogicalChannelAck") SEQ, 1, 2, 5, DECODE | EXT,
	 offsetof(ResponseMessage, openLogicalChannelAck),
	 _OpenLogicalChannelAck},
	{FNAME("openLogicalChannelReject") SEQ, 0, 2, 2, STOP | EXT, 0, NULL},
	{FNAME("closeLogicalChannelAck") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("requestChannelCloseAck") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("requestChannelCloseReject") SEQ, 0, 2, 2, STOP | EXT, 0,
	 NULL},
	{FNAME("multiplexEntrySendAck") SEQ, 0, 2, 2, STOP | EXT, 0, NULL},
	{FNAME("multiplexEntrySendReject") SEQ, 0, 2, 2, STOP | EXT, 0, NULL},
	{FNAME("requestMultiplexEntryAck") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("requestMultiplexEntryReject") SEQ, 0, 2, 2, STOP | EXT, 0,
	 NULL},
	{FNAME("requestModeAck") SEQ, 0, 2, 2, STOP | EXT, 0, NULL},
	{FNAME("requestModeReject") SEQ, 0, 2, 2, STOP | EXT, 0, NULL},
	{FNAME("roundTripDelayResponse") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("maintenanceLoopAck") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("maintenanceLoopReject") SEQ, 0, 2, 2, STOP | EXT, 0, NULL},
	{FNAME("communicationModeResponse") CHOICE, 0, 1, 1, STOP | EXT, 0,
	 NULL},
	{FNAME("conferenceResponse") CHOICE, 3, 8, 16, STOP | EXT, 0, NULL},
	{FNAME("multilinkResponse") CHOICE, 3, 5, 5, STOP | EXT, 0, NULL},
	{FNAME("logicalChannelRateAcknowledge") SEQ, 0, 3, 3, STOP | EXT, 0,
	 NULL},
	{FNAME("logicalChannelRateReject") SEQ, 1, 4, 4, STOP | EXT, 0, NULL},
};

static field_t _MultimediaSystemControlMessage[] = {	/* CHOICE */
	{FNAME("request") CHOICE, 4, 11, 15, DECODE | EXT,
	 offsetof(MultimediaSystemControlMessage, request), _RequestMessage},
	{FNAME("response") CHOICE, 5, 19, 24, DECODE | EXT,
	 offsetof(MultimediaSystemControlMessage, response),
	 _ResponseMessage},
	{FNAME("command") CHOICE, 3, 7, 12, STOP | EXT, 0, NULL},
	{FNAME("indication") CHOICE, 4, 14, 23, STOP | EXT, 0, NULL},
};

static field_t _H323_UU_PDU_h245Control[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 2, 4, 4, DECODE | OPEN | EXT,
	 sizeof(MultimediaSystemControlMessage),
	 _MultimediaSystemControlMessage}
	,
};

static field_t _H323_UU_PDU[] = {	/* SEQUENCE */
	{FNAME("h323-message-body") CHOICE, 3, 7, 13, DECODE | EXT,
	 offsetof(H323_UU_PDU, h323_message_body),
	 _H323_UU_PDU_h323_message_body},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("h4501SupplementaryService") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 NULL},
	{FNAME("h245Tunneling") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("h245Control") SEQOF, SEMI, 0, 4, DECODE | OPT,
	 offsetof(H323_UU_PDU, h245Control), _H323_UU_PDU_h245Control},
	{FNAME("nonStandardControl") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("callLinkage") SEQ, 2, 2, 2, STOP | EXT | OPT, 0, NULL},
	{FNAME("tunnelledSignallingMessage") SEQ, 2, 4, 4, STOP | EXT | OPT,
	 0, NULL},
	{FNAME("provisionalRespToH245Tunneling") NUL, FIXD, 0, 0, STOP | OPT,
	 0, NULL},
	{FNAME("stimulusControl") SEQ, 3, 3, 3, STOP | EXT | OPT, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
};

static field_t _H323_UserInformation[] = {	/* SEQUENCE */
	{FNAME("h323-uu-pdu") SEQ, 1, 2, 11, DECODE | EXT,
	 offsetof(H323_UserInformation, h323_uu_pdu), _H323_UU_PDU},
	{FNAME("user-data") SEQ, 0, 2, 2, STOP | EXT | OPT, 0, NULL},
};

static field_t _GatekeeperRequest[] = {	/* SEQUENCE */
	{FNAME("requestSeqNum") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("rasAddress") CHOICE, 3, 7, 7, DECODE | EXT,
	 offsetof(GatekeeperRequest, rasAddress), _TransportAddress},
	{FNAME("endpointType") SEQ, 6, 8, 10, STOP | EXT, 0, NULL},
	{FNAME("gatekeeperIdentifier") BMPSTR, 7, 1, 0, STOP | OPT, 0, NULL},
	{FNAME("callServices") SEQ, 0, 8, 8, STOP | EXT | OPT, 0, NULL},
	{FNAME("endpointAlias") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("alternateEndpoints") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("authenticationCapability") SEQOF, SEMI, 0, 0, STOP | OPT, 0,
	 NULL},
	{FNAME("algorithmOIDs") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrity") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrityCheckValue") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("supportsAltGK") NUL, FIXD, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, STOP | EXT | OPT, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
};

static field_t _GatekeeperConfirm[] = {	/* SEQUENCE */
	{FNAME("requestSeqNum") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("gatekeeperIdentifier") BMPSTR, 7, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("rasAddress") CHOICE, 3, 7, 7, DECODE | EXT,
	 offsetof(GatekeeperConfirm, rasAddress), _TransportAddress},
	{FNAME("alternateGatekeeper") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("authenticationMode") CHOICE, 3, 7, 8, STOP | EXT | OPT, 0,
	 NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("algorithmOID") OID, BYTE, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrity") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrityCheckValue") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, STOP | EXT | OPT, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
};

static field_t _RegistrationRequest_callSignalAddress[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 3, 7, 7, DECODE | EXT,
	 sizeof(TransportAddress), _TransportAddress}
	,
};

static field_t _RegistrationRequest_rasAddress[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 3, 7, 7, DECODE | EXT,
	 sizeof(TransportAddress), _TransportAddress}
	,
};

static field_t _RegistrationRequest_terminalAlias[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
};

static field_t _RegistrationRequest[] = {	/* SEQUENCE */
	{FNAME("requestSeqNum") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("discoveryComplete") BOOL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("callSignalAddress") SEQOF, SEMI, 0, 10, DECODE,
	 offsetof(RegistrationRequest, callSignalAddress),
	 _RegistrationRequest_callSignalAddress},
	{FNAME("rasAddress") SEQOF, SEMI, 0, 10, DECODE,
	 offsetof(RegistrationRequest, rasAddress),
	 _RegistrationRequest_rasAddress},
	{FNAME("terminalType") SEQ, 6, 8, 10, SKIP | EXT, 0, _EndpointType},
	{FNAME("terminalAlias") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _RegistrationRequest_terminalAlias},
	{FNAME("gatekeeperIdentifier") BMPSTR, 7, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("endpointVendor") SEQ, 2, 3, 3, SKIP | EXT, 0,
	 _VendorIdentifier},
	{FNAME("alternateEndpoints") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("timeToLive") INT, CONS, 1, 0, DECODE | OPT,
	 offsetof(RegistrationRequest, timeToLive), NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrityCheckValue") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("keepAlive") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("endpointIdentifier") BMPSTR, 7, 1, 0, STOP | OPT, 0, NULL},
	{FNAME("willSupplyUUIEs") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("maintainConnection") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("alternateTransportAddresses") SEQ, 1, 1, 1, STOP | EXT | OPT,
	 0, NULL},
	{FNAME("additiveRegistration") NUL, FIXD, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("terminalAliasPattern") SEQOF, SEMI, 0, 0, STOP | OPT, 0,
	 NULL},
	{FNAME("supportsAltGK") NUL, FIXD, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("usageReportingCapability") SEQ, 3, 4, 4, STOP | EXT | OPT, 0,
	 NULL},
	{FNAME("multipleCalls") BOOL, FIXD, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("supportedH248Packages") SEQOF, SEMI, 0, 0, STOP | OPT, 0,
	 NULL},
	{FNAME("callCreditCapability") SEQ, 2, 2, 2, STOP | EXT | OPT, 0,
	 NULL},
	{FNAME("capacityReportingCapability") SEQ, 0, 1, 1, STOP | EXT | OPT,
	 0, NULL},
	{FNAME("capacity") SEQ, 2, 2, 2, STOP | EXT | OPT, 0, NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, STOP | EXT | OPT, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
};

static field_t _RegistrationConfirm_callSignalAddress[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 3, 7, 7, DECODE | EXT,
	 sizeof(TransportAddress), _TransportAddress}
	,
};

static field_t _RegistrationConfirm_terminalAlias[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
};

static field_t _RegistrationConfirm[] = {	/* SEQUENCE */
	{FNAME("requestSeqNum") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("protocolIdentifier") OID, BYTE, 0, 0, SKIP, 0, NULL},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("callSignalAddress") SEQOF, SEMI, 0, 10, DECODE,
	 offsetof(RegistrationConfirm, callSignalAddress),
	 _RegistrationConfirm_callSignalAddress},
	{FNAME("terminalAlias") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _RegistrationConfirm_terminalAlias},
	{FNAME("gatekeeperIdentifier") BMPSTR, 7, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("endpointIdentifier") BMPSTR, 7, 1, 0, SKIP, 0, NULL},
	{FNAME("alternateGatekeeper") SEQOF, SEMI, 0, 0, SKIP | OPT, 0, NULL},
	{FNAME("timeToLive") INT, CONS, 1, 0, DECODE | OPT,
	 offsetof(RegistrationConfirm, timeToLive), NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrityCheckValue") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("willRespondToIRR") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("preGrantedARQ") SEQ, 0, 4, 8, STOP | EXT | OPT, 0, NULL},
	{FNAME("maintainConnection") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("serviceControl") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("supportsAdditiveRegistration") NUL, FIXD, 0, 0, STOP | OPT, 0,
	 NULL},
	{FNAME("terminalAliasPattern") SEQOF, SEMI, 0, 0, STOP | OPT, 0,
	 NULL},
	{FNAME("supportedPrefixes") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("usageSpec") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("featureServerAlias") CHOICE, 1, 2, 7, STOP | EXT | OPT, 0,
	 NULL},
	{FNAME("capacityReportingSpec") SEQ, 0, 1, 1, STOP | EXT | OPT, 0,
	 NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, STOP | EXT | OPT, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
};

static field_t _UnregistrationRequest_callSignalAddress[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 3, 7, 7, DECODE | EXT,
	 sizeof(TransportAddress), _TransportAddress}
	,
};

static field_t _UnregistrationRequest[] = {	/* SEQUENCE */
	{FNAME("requestSeqNum") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("callSignalAddress") SEQOF, SEMI, 0, 10, DECODE,
	 offsetof(UnregistrationRequest, callSignalAddress),
	 _UnregistrationRequest_callSignalAddress},
	{FNAME("endpointAlias") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("endpointIdentifier") BMPSTR, 7, 1, 0, STOP | OPT, 0, NULL},
	{FNAME("alternateEndpoints") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("gatekeeperIdentifier") BMPSTR, 7, 1, 0, STOP | OPT, 0, NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrityCheckValue") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("reason") CHOICE, 2, 4, 5, STOP | EXT | OPT, 0, NULL},
	{FNAME("endpointAliasPattern") SEQOF, SEMI, 0, 0, STOP | OPT, 0,
	 NULL},
	{FNAME("supportedPrefixes") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("alternateGatekeeper") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
};

static field_t _CallModel[] = {	/* CHOICE */
	{FNAME("direct") NUL, FIXD, 0, 0, SKIP, 0, NULL},
	{FNAME("gatekeeperRouted") NUL, FIXD, 0, 0, SKIP, 0, NULL},
};

static field_t _AdmissionRequest_destinationInfo[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
};

static field_t _AdmissionRequest_destExtraCallInfo[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
};

static field_t _AdmissionRequest_srcInfo[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
};

static field_t _AdmissionRequest[] = {	/* SEQUENCE */
	{FNAME("requestSeqNum") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("callType") CHOICE, 2, 4, 4, SKIP | EXT, 0, _CallType},
	{FNAME("callModel") CHOICE, 1, 2, 2, SKIP | EXT | OPT, 0, _CallModel},
	{FNAME("endpointIdentifier") BMPSTR, 7, 1, 0, SKIP, 0, NULL},
	{FNAME("destinationInfo") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _AdmissionRequest_destinationInfo},
	{FNAME("destCallSignalAddress") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(AdmissionRequest, destCallSignalAddress),
	 _TransportAddress},
	{FNAME("destExtraCallInfo") SEQOF, SEMI, 0, 0, SKIP | OPT, 0,
	 _AdmissionRequest_destExtraCallInfo},
	{FNAME("srcInfo") SEQOF, SEMI, 0, 0, SKIP, 0,
	 _AdmissionRequest_srcInfo},
	{FNAME("srcCallSignalAddress") CHOICE, 3, 7, 7, DECODE | EXT | OPT,
	 offsetof(AdmissionRequest, srcCallSignalAddress), _TransportAddress},
	{FNAME("bandWidth") INT, CONS, 0, 0, STOP, 0, NULL},
	{FNAME("callReferenceValue") INT, WORD, 0, 0, STOP, 0, NULL},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("callServices") SEQ, 0, 8, 8, STOP | EXT | OPT, 0, NULL},
	{FNAME("conferenceID") OCTSTR, FIXD, 16, 0, STOP, 0, NULL},
	{FNAME("activeMC") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("answerCall") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("canMapAlias") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("callIdentifier") SEQ, 0, 1, 1, STOP | EXT, 0, NULL},
	{FNAME("srcAlternatives") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("destAlternatives") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("gatekeeperIdentifier") BMPSTR, 7, 1, 0, STOP | OPT, 0, NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrityCheckValue") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("transportQOS") CHOICE, 2, 3, 3, STOP | EXT | OPT, 0, NULL},
	{FNAME("willSupplyUUIEs") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("callLinkage") SEQ, 2, 2, 2, STOP | EXT | OPT, 0, NULL},
	{FNAME("gatewayDataRate") SEQ, 2, 3, 3, STOP | EXT | OPT, 0, NULL},
	{FNAME("capacity") SEQ, 2, 2, 2, STOP | EXT | OPT, 0, NULL},
	{FNAME("circuitInfo") SEQ, 3, 3, 3, STOP | EXT | OPT, 0, NULL},
	{FNAME("desiredProtocols") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("desiredTunnelledProtocol") SEQ, 1, 2, 2, STOP | EXT | OPT, 0,
	 NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, STOP | EXT | OPT, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
};

static field_t _AdmissionConfirm[] = {	/* SEQUENCE */
	{FNAME("requestSeqNum") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("bandWidth") INT, CONS, 0, 0, SKIP, 0, NULL},
	{FNAME("callModel") CHOICE, 1, 2, 2, SKIP | EXT, 0, _CallModel},
	{FNAME("destCallSignalAddress") CHOICE, 3, 7, 7, DECODE | EXT,
	 offsetof(AdmissionConfirm, destCallSignalAddress),
	 _TransportAddress},
	{FNAME("irrFrequency") INT, WORD, 1, 0, STOP | OPT, 0, NULL},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("destinationInfo") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("destExtraCallInfo") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("destinationType") SEQ, 6, 8, 10, STOP | EXT | OPT, 0, NULL},
	{FNAME("remoteExtensionAddress") SEQOF, SEMI, 0, 0, STOP | OPT, 0,
	 NULL},
	{FNAME("alternateEndpoints") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrityCheckValue") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("transportQOS") CHOICE, 2, 3, 3, STOP | EXT | OPT, 0, NULL},
	{FNAME("willRespondToIRR") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("uuiesRequested") SEQ, 0, 9, 13, STOP | EXT, 0, NULL},
	{FNAME("language") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("alternateTransportAddresses") SEQ, 1, 1, 1, STOP | EXT | OPT,
	 0, NULL},
	{FNAME("useSpecifiedTransport") CHOICE, 1, 2, 2, STOP | EXT | OPT, 0,
	 NULL},
	{FNAME("circuitInfo") SEQ, 3, 3, 3, STOP | EXT | OPT, 0, NULL},
	{FNAME("usageSpec") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("supportedProtocols") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("serviceControl") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("multipleCalls") BOOL, FIXD, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, STOP | EXT | OPT, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
};

static field_t _LocationRequest_destinationInfo[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 1, 2, 7, SKIP | EXT, 0, _AliasAddress},
};

static field_t _LocationRequest[] = {	/* SEQUENCE */
	{FNAME("requestSeqNum") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("endpointIdentifier") BMPSTR, 7, 1, 0, SKIP | OPT, 0, NULL},
	{FNAME("destinationInfo") SEQOF, SEMI, 0, 0, SKIP, 0,
	 _LocationRequest_destinationInfo},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("replyAddress") CHOICE, 3, 7, 7, DECODE | EXT,
	 offsetof(LocationRequest, replyAddress), _TransportAddress},
	{FNAME("sourceInfo") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("canMapAlias") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("gatekeeperIdentifier") BMPSTR, 7, 1, 0, STOP | OPT, 0, NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrityCheckValue") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("desiredProtocols") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("desiredTunnelledProtocol") SEQ, 1, 2, 2, STOP | EXT | OPT, 0,
	 NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, STOP | EXT | OPT, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("hopCount") INT, 8, 1, 0, STOP | OPT, 0, NULL},
	{FNAME("circuitInfo") SEQ, 3, 3, 3, STOP | EXT | OPT, 0, NULL},
};

static field_t _LocationConfirm[] = {	/* SEQUENCE */
	{FNAME("requestSeqNum") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("callSignalAddress") CHOICE, 3, 7, 7, DECODE | EXT,
	 offsetof(LocationConfirm, callSignalAddress), _TransportAddress},
	{FNAME("rasAddress") CHOICE, 3, 7, 7, DECODE | EXT,
	 offsetof(LocationConfirm, rasAddress), _TransportAddress},
	{FNAME("nonStandardData") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("destinationInfo") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("destExtraCallInfo") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("destinationType") SEQ, 6, 8, 10, STOP | EXT | OPT, 0, NULL},
	{FNAME("remoteExtensionAddress") SEQOF, SEMI, 0, 0, STOP | OPT, 0,
	 NULL},
	{FNAME("alternateEndpoints") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrityCheckValue") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("alternateTransportAddresses") SEQ, 1, 1, 1, STOP | EXT | OPT,
	 0, NULL},
	{FNAME("supportedProtocols") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("multipleCalls") BOOL, FIXD, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("featureSet") SEQ, 3, 4, 4, STOP | EXT | OPT, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("circuitInfo") SEQ, 3, 3, 3, STOP | EXT | OPT, 0, NULL},
	{FNAME("serviceControl") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
};

static field_t _InfoRequestResponse_callSignalAddress[] = {	/* SEQUENCE OF */
	{FNAME("item") CHOICE, 3, 7, 7, DECODE | EXT,
	 sizeof(TransportAddress), _TransportAddress}
	,
};

static field_t _InfoRequestResponse[] = {	/* SEQUENCE */
	{FNAME("nonStandardData") SEQ, 0, 2, 2, SKIP | OPT, 0,
	 _NonStandardParameter},
	{FNAME("requestSeqNum") INT, WORD, 1, 0, SKIP, 0, NULL},
	{FNAME("endpointType") SEQ, 6, 8, 10, SKIP | EXT, 0, _EndpointType},
	{FNAME("endpointIdentifier") BMPSTR, 7, 1, 0, SKIP, 0, NULL},
	{FNAME("rasAddress") CHOICE, 3, 7, 7, DECODE | EXT,
	 offsetof(InfoRequestResponse, rasAddress), _TransportAddress},
	{FNAME("callSignalAddress") SEQOF, SEMI, 0, 10, DECODE,
	 offsetof(InfoRequestResponse, callSignalAddress),
	 _InfoRequestResponse_callSignalAddress},
	{FNAME("endpointAlias") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("perCallInfo") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("tokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("cryptoTokens") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
	{FNAME("integrityCheckValue") SEQ, 0, 2, 2, STOP | OPT, 0, NULL},
	{FNAME("needResponse") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("capacity") SEQ, 2, 2, 2, STOP | EXT | OPT, 0, NULL},
	{FNAME("irrStatus") CHOICE, 2, 4, 4, STOP | EXT | OPT, 0, NULL},
	{FNAME("unsolicited") BOOL, FIXD, 0, 0, STOP, 0, NULL},
	{FNAME("genericData") SEQOF, SEMI, 0, 0, STOP | OPT, 0, NULL},
};

static field_t _RasMessage[] = {	/* CHOICE */
	{FNAME("gatekeeperRequest") SEQ, 4, 8, 18, DECODE | EXT,
	 offsetof(RasMessage, gatekeeperRequest), _GatekeeperRequest},
	{FNAME("gatekeeperConfirm") SEQ, 2, 5, 14, DECODE | EXT,
	 offsetof(RasMessage, gatekeeperConfirm), _GatekeeperConfirm},
	{FNAME("gatekeeperReject") SEQ, 2, 5, 11, STOP | EXT, 0, NULL},
	{FNAME("registrationRequest") SEQ, 3, 10, 31, DECODE | EXT,
	 offsetof(RasMessage, registrationRequest), _RegistrationRequest},
	{FNAME("registrationConfirm") SEQ, 3, 7, 24, DECODE | EXT,
	 offsetof(RasMessage, registrationConfirm), _RegistrationConfirm},
	{FNAME("registrationReject") SEQ, 2, 5, 11, STOP | EXT, 0, NULL},
	{FNAME("unregistrationRequest") SEQ, 3, 5, 15, DECODE | EXT,
	 offsetof(RasMessage, unregistrationRequest), _UnregistrationRequest},
	{FNAME("unregistrationConfirm") SEQ, 1, 2, 6, STOP | EXT, 0, NULL},
	{FNAME("unregistrationReject") SEQ, 1, 3, 8, STOP | EXT, 0, NULL},
	{FNAME("admissionRequest") SEQ, 7, 16, 34, DECODE | EXT,
	 offsetof(RasMessage, admissionRequest), _AdmissionRequest},
	{FNAME("admissionConfirm") SEQ, 2, 6, 27, DECODE | EXT,
	 offsetof(RasMessage, admissionConfirm), _AdmissionConfirm},
	{FNAME("admissionReject") SEQ, 1, 3, 11, STOP | EXT, 0, NULL},
	{FNAME("bandwidthRequest") SEQ, 2, 7, 18, STOP | EXT, 0, NULL},
	{FNAME("bandwidthConfirm") SEQ, 1, 3, 8, STOP | EXT, 0, NULL},
	{FNAME("bandwidthReject") SEQ, 1, 4, 9, STOP | EXT, 0, NULL},
	{FNAME("disengageRequest") SEQ, 1, 6, 19, STOP | EXT, 0, NULL},
	{FNAME("disengageConfirm") SEQ, 1, 2, 9, STOP | EXT, 0, NULL},
	{FNAME("disengageReject") SEQ, 1, 3, 8, STOP | EXT, 0, NULL},
	{FNAME("locationRequest") SEQ, 2, 5, 17, DECODE | EXT,
	 offsetof(RasMessage, locationRequest), _LocationRequest},
	{FNAME("locationConfirm") SEQ, 1, 4, 19, DECODE | EXT,
	 offsetof(RasMessage, locationConfirm), _LocationConfirm},
	{FNAME("locationReject") SEQ, 1, 3, 10, STOP | EXT, 0, NULL},
	{FNAME("infoRequest") SEQ, 2, 4, 15, STOP | EXT, 0, NULL},
	{FNAME("infoRequestResponse") SEQ, 3, 8, 16, DECODE | EXT,
	 offsetof(RasMessage, infoRequestResponse), _InfoRequestResponse},
	{FNAME("nonStandardMessage") SEQ, 0, 2, 7, STOP | EXT, 0, NULL},
	{FNAME("unknownMessageResponse") SEQ, 0, 1, 5, STOP | EXT, 0, NULL},
	{FNAME("requestInProgress") SEQ, 4, 6, 6, STOP | EXT, 0, NULL},
	{FNAME("resourcesAvailableIndicate") SEQ, 4, 9, 11, STOP | EXT, 0,
	 NULL},
	{FNAME("resourcesAvailableConfirm") SEQ, 4, 6, 7, STOP | EXT, 0,
	 NULL},
	{FNAME("infoRequestAck") SEQ, 4, 5, 5, STOP | EXT, 0, NULL},
	{FNAME("infoRequestNak") SEQ, 5, 7, 7, STOP | EXT, 0, NULL},
	{FNAME("serviceControlIndication") SEQ, 8, 10, 10, STOP | EXT, 0,
	 NULL},
	{FNAME("serviceControlResponse") SEQ, 7, 8, 8, STOP | EXT, 0, NULL},
};