1478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
2478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996
3478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *	The Regents of the University of California.  All rights reserved.
4478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
5478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Redistribution and use in source and binary forms, with or without
6478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * modification, are permitted provided that: (1) source code distributions
7478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * retain the above copyright notice and this paragraph in its entirety, (2)
8478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * distributions including binary code include the above copyright notice and
9478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * this paragraph in its entirety in the documentation or other materials
10478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * provided with the distribution, and (3) all advertising materials mentioning
11478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * features or use of this software display the following acknowledgement:
12478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ``This product includes software developed by the University of California,
13478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
14478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * the University nor the names of its contributors may be used to endorse
15478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * or promote products derived from this software without specific prior
16478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * written permission.
17478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
21511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.71 2007-11-18 02:03:52 guy Exp $ (LBL)
22478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
23478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
24478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
25478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ATM support:
26478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
27478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Copyright (c) 1997 Yen Yen Lim and North Dakota State University
28478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * All rights reserved.
29478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
30478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Redistribution and use in source and binary forms, with or without
31478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * modification, are permitted provided that the following conditions
32478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * are met:
33478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
34478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
35478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
36478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
37478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    documentation and/or other materials provided with the distribution.
38478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 3. All advertising materials mentioning features or use of this software
39478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    must display the following acknowledgement:
40478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *      This product includes software developed by Yen Yen Lim and
41478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *      North Dakota State University
42478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 4. The name of the author may not be used to endorse or promote products
43478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *    derived from this software without specific prior written permission.
44478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project *
45478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
46478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
55478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * POSSIBILITY OF SUCH DAMAGE.
56478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
57478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
58478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef HAVE___ATTRIBUTE__
59478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define __attribute__(x)
60478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* HAVE___ATTRIBUTE__ */
61478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
62478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Address qualifiers. */
63478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
64478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_HOST		1
65478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_NET		2
66478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_PORT		3
67478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_GATEWAY	4
68478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_PROTO		5
69478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_PROTOCHAIN	6
70478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_PORTRANGE	7
71478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
72478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Protocol qualifiers. */
73478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
74478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_LINK		1
75478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_IP		2
76478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ARP		3
77478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_RARP		4
78478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_SCTP		5
79478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_TCP		6
80478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_UDP		7
81478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ICMP		8
82478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_IGMP		9
83478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_IGRP		10
84478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
85478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
86478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define	Q_ATALK		11
87478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define	Q_DECNET	12
88478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define	Q_LAT		13
89478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_SCA		14
90478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define	Q_MOPRC		15
91478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define	Q_MOPDL		16
92478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
93478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
94478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_IPV6		17
95478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ICMPV6	18
96478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_AH		19
97478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ESP		20
98478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
99478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_PIM		21
100478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_VRRP		22
101478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
102478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_AARP		23
103478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
104478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISO		24
105478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ESIS		25
106478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS		26
107478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_CLNP		27
108478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
109478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_STP		28
110478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
111478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_IPX		29
112478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
113478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_NETBEUI	30
114478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
115478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* IS-IS Levels */
116478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_L1       31
117478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_L2       32
118478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* PDU types */
119478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_IIH      33
120478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_LAN_IIH  34
121478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_PTP_IIH  35
122478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_SNP      36
123478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_CSNP     37
124478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_PSNP     38
125478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_LSP      39
126478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
127478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_RADIO		40
128478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
129511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_CARP		41
130511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Directional qualifiers. */
132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_SRC		1
134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_DST		2
135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_OR		3
136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_AND		4
137511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_ADDR1		5
138511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_ADDR2		6
139511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_ADDR3		7
140511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_ADDR4		8
141511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_RA		9
142511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_TA		10
143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_DEFAULT	0
145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_UNDEF		255
146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* ATM types */
148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_METAC		22	/* Meta signalling Circuit */
149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_BCC		23	/* Broadcast Circuit */
150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4SC	24	/* Segment OAM F4 Circuit */
151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4EC	25	/* End-to-End OAM F4 Circuit */
152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_SC		26	/* Signalling Circuit*/
153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_ILMIC		27	/* ILMI Circuit */
154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAM		28	/* OAM cells : F4 only */
155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4		29	/* OAM F4 cells: Segment + End-to-end */
156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_LANE		30	/* LANE traffic */
157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_LLC		31	/* LLC-encapsulated traffic */
158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Based on Q.2931 signalling protocol */
160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_SETUP		41	/* Setup message */
161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CALLPROCEED	42	/* Call proceeding message */
162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECT	43	/* Connect message */
163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECTACK	44	/* Connect Ack message */
164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_RELEASE	45	/* Release message */
165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_RELEASE_DONE	46	/* Release message */
166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* ATM field types */
168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_VPI		51
169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_VCI		52
170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_PROTOTYPE	53
171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_MSGTYPE	54
172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CALLREFTYPE	55
173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECTMSG	70	/* returns Q.2931 signalling messages for
175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   establishing and destroying switched
176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   virtual connection */
177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_METACONNECT	71	/* returns Q.2931 signalling messages for
178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   establishing and destroying predefined
179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   virtual circuits, such as broadcast
180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   circuit, oamf4 segment circuit, oamf4
181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   end-to-end circuits, ILMI circuits or
182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   connection signalling circuit. */
183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* MTP2 types */
185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_FISU		22	/* FISU */
186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_LSSU		23	/* LSSU */
187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_MSU		24	/* MSU */
188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
189511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* MTP2 HSL types */
190511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_FISU		25	/* FISU for HSL */
191511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_LSSU		26	/* LSSU */
192511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_MSU		27	/* MSU */
193511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* MTP3 field types */
195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_SIO		1
196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_OPC		2
197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_DPC		3
198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_SLS		4
199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
200511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* MTP3 field types in case of MTP2 HSL */
201511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_SIO		5
202511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_OPC		6
203511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_DPC		7
204511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_SLS		8
205511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct slist;
208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct stmt {
210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int code;
211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct slist *jt;	/*only for relative jump in block*/
212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct slist *jf;	/*only for relative jump in block*/
213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_int32 k;
214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct slist {
217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct stmt s;
218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct slist *next;
219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * A bit vector to represent definition sets.  We assume TOT_REGISTERS
223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * is smaller than 8*sizeof(atomset).
224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef bpf_u_int32 atomset;
226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define ATOMMASK(n) (1 << (n))
227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define ATOMELEM(d, n) (d & ATOMMASK(n))
228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * An unbounded set.
231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef bpf_u_int32 *uset;
233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Total number of atomic entities, including accumulator (A) and index (X).
236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * We treat all these guys similarly during flow analysis.
237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define N_ATOMS (BPF_MEMWORDS+2)
239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct edge {
241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int id;
242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int code;
243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	uset edom;
244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct block *succ;
245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct block *pred;
246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct edge *next;	/* link list of incoming edges for a node */
247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block {
250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int id;
251478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct slist *stmts;	/* side effect stmts */
252478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct stmt s;		/* branch stmt */
253478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int mark;
254511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall	u_int longjt;		/* jt branch requires long jump */
255511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall	u_int longjf;		/* jf branch requires long jump */
256478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int level;
257478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int offset;
258478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int sense;
259478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct edge et;
260478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct edge ef;
261478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct block *head;
262478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct block *link;	/* link field used by optimizer */
263478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	uset dom;
264478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	uset closure;
265478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct edge *in_edges;
266478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	atomset def, kill;
267478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	atomset in_use;
268478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	atomset out_use;
269478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int oval;
270478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int val[N_ATOMS];
271478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
272478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
273478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth {
274478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct block *b;	/* protocol checks */
275478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct slist *s;	/* stmt list */
276478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int regno;		/* virtual register number of result */
277478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
278478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
279478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct qual {
280478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	unsigned char addr;
281478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	unsigned char proto;
282478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	unsigned char dir;
283478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	unsigned char pad;
284478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
285478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
286478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_loadi(int);
287478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_load(int, struct arth *, int);
288478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_loadlen(void);
289478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_neg(struct arth *);
290478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_arth(int, struct arth *, struct arth *);
291478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
292478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_and(struct block *, struct block *);
293478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_or(struct block *, struct block *);
294478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_not(struct block *);
295478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
296478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_scode(const char *, struct qual);
297478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_ecode(const u_char *, struct qual);
298478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_acode(const u_char *, struct qual);
299478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mcode(const char *, const char *, int, struct qual);
300478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6
301478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mcode6(const char *, const char *, int, struct qual);
302478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
303478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_ncode(const char *, bpf_u_int32, struct qual);
304478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_proto_abbrev(int);
305478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_relation(int, struct arth *, struct arth *, int);
306478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_less(int);
307478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_greater(int);
308478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_byteop(int, int, int);
309478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_broadcast(int);
310478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_multicast(int);
311478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_inbound(int);
312478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
313478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_vlan(int);
314478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mpls(int);
315478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
316478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pppoed(void);
317511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct block *gen_pppoes(int);
318478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
319478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtype, int reverse);
320478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmtype_abbrev(int type);
321478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmmulti_abbrev(int type);
322478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
323478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mtp2type_abbrev(int type);
324478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse);
325478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
326478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_ifname(const char *);
327478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_rnr(int);
328478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_srnr(int);
329478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_ruleset(char *);
330478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_reason(int);
331478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_action(int);
332478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_dir(int);
333478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
334511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct block *gen_p80211_type(int, int);
335511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct block *gen_p80211_fcdir(int);
336511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall
337478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid bpf_optimize(struct block **);
338478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid bpf_error(const char *, ...)
339511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall    __attribute__((noreturn))
340511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifdef __ATTRIBUTE___FORMAT_OK
341511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall    __attribute__((format (printf, 1, 2)))
342511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif /* __ATTRIBUTE___FORMAT_OK */
343511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall    ;
344478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
345478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid finish_parse(struct block *);
346478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar *sdup(const char *);
347478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
348511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct bpf_insn *icode_to_fcode(struct block *, u_int *);
349478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_parse(void);
350478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid lex_init(const char *);
351478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid lex_cleanup(void);
352478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid sappend(struct slist *, struct slist *);
353478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
354478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* XXX */
355478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define JT(b)  ((b)->et.succ)
356478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define JF(b)  ((b)->ef.succ)
357478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
358478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern int no_optimize;
359