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 *
21478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.60.2.11 2007/06/11 09:52:04 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
129478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Directional qualifiers. */
130478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_SRC		1
132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_DST		2
133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_OR		3
134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_AND		4
135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_DEFAULT	0
137478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_UNDEF		255
138478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
139478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* ATM types */
140478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_METAC		22	/* Meta signalling Circuit */
141478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_BCC		23	/* Broadcast Circuit */
142478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4SC	24	/* Segment OAM F4 Circuit */
143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4EC	25	/* End-to-End OAM F4 Circuit */
144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_SC		26	/* Signalling Circuit*/
145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_ILMIC		27	/* ILMI Circuit */
146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAM		28	/* OAM cells : F4 only */
147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4		29	/* OAM F4 cells: Segment + End-to-end */
148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_LANE		30	/* LANE traffic */
149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_LLC		31	/* LLC-encapsulated traffic */
150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Based on Q.2931 signalling protocol */
152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_SETUP		41	/* Setup message */
153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CALLPROCEED	42	/* Call proceeding message */
154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECT	43	/* Connect message */
155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECTACK	44	/* Connect Ack message */
156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_RELEASE	45	/* Release message */
157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_RELEASE_DONE	46	/* Release message */
158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* ATM field types */
160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_VPI		51
161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_VCI		52
162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_PROTOTYPE	53
163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_MSGTYPE	54
164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CALLREFTYPE	55
165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECTMSG	70	/* returns Q.2931 signalling messages for
167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   establishing and destroying switched
168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   virtual connection */
169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_METACONNECT	71	/* returns Q.2931 signalling messages for
170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   establishing and destroying predefined
171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   virtual circuits, such as broadcast
172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   circuit, oamf4 segment circuit, oamf4
173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   end-to-end circuits, ILMI circuits or
174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project				   connection signalling circuit. */
175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* MTP2 types */
177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_FISU		22	/* FISU */
178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_LSSU		23	/* LSSU */
179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_MSU		24	/* MSU */
180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* MTP3 field types */
182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_SIO		1
183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_OPC		2
184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_DPC		3
185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_SLS		4
186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct slist;
189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct stmt {
191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int code;
192478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct slist *jt;	/*only for relative jump in block*/
193478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct slist *jf;	/*only for relative jump in block*/
194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	bpf_int32 k;
195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct slist {
198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct stmt s;
199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct slist *next;
200478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
201478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
202478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
203478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * A bit vector to represent definition sets.  We assume TOT_REGISTERS
204478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * is smaller than 8*sizeof(atomset).
205478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef bpf_u_int32 atomset;
207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define ATOMMASK(n) (1 << (n))
208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define ATOMELEM(d, n) (d & ATOMMASK(n))
209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * An unbounded set.
212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef bpf_u_int32 *uset;
214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/*
216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Total number of atomic entities, including accumulator (A) and index (X).
217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * We treat all these guys similarly during flow analysis.
218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */
219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define N_ATOMS (BPF_MEMWORDS+2)
220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct edge {
222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int id;
223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int code;
224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	uset edom;
225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct block *succ;
226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct block *pred;
227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct edge *next;	/* link list of incoming edges for a node */
228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block {
231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int id;
232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct slist *stmts;	/* side effect stmts */
233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct stmt s;		/* branch stmt */
234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int mark;
235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int longjt;		/* jt branch requires long jump */
236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int longjf;		/* jf branch requires long jump */
237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int level;
238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int offset;
239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int sense;
240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct edge et;
241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct edge ef;
242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct block *head;
243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct block *link;	/* link field used by optimizer */
244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	uset dom;
245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	uset closure;
246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct edge *in_edges;
247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	atomset def, kill;
248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	atomset in_use;
249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	atomset out_use;
250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int oval;
251478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int val[N_ATOMS];
252478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
253478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
254478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth {
255478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct block *b;	/* protocol checks */
256478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	struct slist *s;	/* stmt list */
257478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	int regno;		/* virtual register number of result */
258478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
259478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
260478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct qual {
261478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	unsigned char addr;
262478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	unsigned char proto;
263478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	unsigned char dir;
264478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project	unsigned char pad;
265478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project};
266478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
267478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_loadi(int);
268478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_load(int, struct arth *, int);
269478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_loadlen(void);
270478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_neg(struct arth *);
271478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_arth(int, struct arth *, struct arth *);
272478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
273478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_and(struct block *, struct block *);
274478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_or(struct block *, struct block *);
275478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_not(struct block *);
276478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
277478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_scode(const char *, struct qual);
278478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_ecode(const u_char *, struct qual);
279478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_acode(const u_char *, struct qual);
280478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mcode(const char *, const char *, int, struct qual);
281478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6
282478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mcode6(const char *, const char *, int, struct qual);
283478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif
284478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_ncode(const char *, bpf_u_int32, struct qual);
285478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_proto_abbrev(int);
286478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_relation(int, struct arth *, struct arth *, int);
287478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_less(int);
288478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_greater(int);
289478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_byteop(int, int, int);
290478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_broadcast(int);
291478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_multicast(int);
292478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_inbound(int);
293478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
294478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_vlan(int);
295478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mpls(int);
296478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
297478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pppoed(void);
298478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pppoes(void);
299478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
300478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtype, int reverse);
301478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmtype_abbrev(int type);
302478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmmulti_abbrev(int type);
303478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
304478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mtp2type_abbrev(int type);
305478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse);
306478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
307478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_ifname(const char *);
308478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_rnr(int);
309478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_srnr(int);
310478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_ruleset(char *);
311478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_reason(int);
312478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_action(int);
313478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_dir(int);
314478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
315478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid bpf_optimize(struct block **);
316478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid bpf_error(const char *, ...)
317478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project    __attribute__((noreturn, format (printf, 1, 2)));
318478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
319478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid finish_parse(struct block *);
320478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar *sdup(const char *);
321478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
322478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct bpf_insn *icode_to_fcode(struct block *, int *);
323478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_parse(void);
324478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid lex_init(const char *);
325478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid lex_cleanup(void);
326478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid sappend(struct slist *, struct slist *);
327478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
328478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* XXX */
329478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define JT(b)  ((b)->et.succ)
330478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define JF(b)  ((b)->ef.succ)
331478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project
332478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern int no_optimize;
333