xref: /minix3/external/bsd/libpcap/dist/gencode.h (revision d56f51ea7d8b9045e5c8e2028422523d3f9a5840)
1*d56f51eaSDavid van Moolenbroek /*	$NetBSD: gencode.h,v 1.3 2015/03/31 21:39:42 christos Exp $	*/
2*d56f51eaSDavid van Moolenbroek 
3*d56f51eaSDavid van Moolenbroek /*
4*d56f51eaSDavid van Moolenbroek  * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996
5*d56f51eaSDavid van Moolenbroek  *	The Regents of the University of California.  All rights reserved.
6*d56f51eaSDavid van Moolenbroek  *
7*d56f51eaSDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
8*d56f51eaSDavid van Moolenbroek  * modification, are permitted provided that: (1) source code distributions
9*d56f51eaSDavid van Moolenbroek  * retain the above copyright notice and this paragraph in its entirety, (2)
10*d56f51eaSDavid van Moolenbroek  * distributions including binary code include the above copyright notice and
11*d56f51eaSDavid van Moolenbroek  * this paragraph in its entirety in the documentation or other materials
12*d56f51eaSDavid van Moolenbroek  * provided with the distribution, and (3) all advertising materials mentioning
13*d56f51eaSDavid van Moolenbroek  * features or use of this software display the following acknowledgement:
14*d56f51eaSDavid van Moolenbroek  * ``This product includes software developed by the University of California,
15*d56f51eaSDavid van Moolenbroek  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
16*d56f51eaSDavid van Moolenbroek  * the University nor the names of its contributors may be used to endorse
17*d56f51eaSDavid van Moolenbroek  * or promote products derived from this software without specific prior
18*d56f51eaSDavid van Moolenbroek  * written permission.
19*d56f51eaSDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
20*d56f51eaSDavid van Moolenbroek  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
21*d56f51eaSDavid van Moolenbroek  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
22*d56f51eaSDavid van Moolenbroek  */
23*d56f51eaSDavid van Moolenbroek 
24*d56f51eaSDavid van Moolenbroek /*
25*d56f51eaSDavid van Moolenbroek  * ATM support:
26*d56f51eaSDavid van Moolenbroek  *
27*d56f51eaSDavid van Moolenbroek  * Copyright (c) 1997 Yen Yen Lim and North Dakota State University
28*d56f51eaSDavid van Moolenbroek  * All rights reserved.
29*d56f51eaSDavid van Moolenbroek  *
30*d56f51eaSDavid van Moolenbroek  * Redistribution and use in source and binary forms, with or without
31*d56f51eaSDavid van Moolenbroek  * modification, are permitted provided that the following conditions
32*d56f51eaSDavid van Moolenbroek  * are met:
33*d56f51eaSDavid van Moolenbroek  * 1. Redistributions of source code must retain the above copyright
34*d56f51eaSDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer.
35*d56f51eaSDavid van Moolenbroek  * 2. Redistributions in binary form must reproduce the above copyright
36*d56f51eaSDavid van Moolenbroek  *    notice, this list of conditions and the following disclaimer in the
37*d56f51eaSDavid van Moolenbroek  *    documentation and/or other materials provided with the distribution.
38*d56f51eaSDavid van Moolenbroek  * 3. All advertising materials mentioning features or use of this software
39*d56f51eaSDavid van Moolenbroek  *    must display the following acknowledgement:
40*d56f51eaSDavid van Moolenbroek  *      This product includes software developed by Yen Yen Lim and
41*d56f51eaSDavid van Moolenbroek  *      North Dakota State University
42*d56f51eaSDavid van Moolenbroek  * 4. The name of the author may not be used to endorse or promote products
43*d56f51eaSDavid van Moolenbroek  *    derived from this software without specific prior written permission.
44*d56f51eaSDavid van Moolenbroek  *
45*d56f51eaSDavid van Moolenbroek  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
46*d56f51eaSDavid van Moolenbroek  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47*d56f51eaSDavid van Moolenbroek  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48*d56f51eaSDavid van Moolenbroek  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
49*d56f51eaSDavid van Moolenbroek  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
50*d56f51eaSDavid van Moolenbroek  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
51*d56f51eaSDavid van Moolenbroek  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
52*d56f51eaSDavid van Moolenbroek  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
53*d56f51eaSDavid van Moolenbroek  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
54*d56f51eaSDavid van Moolenbroek  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
55*d56f51eaSDavid van Moolenbroek  * POSSIBILITY OF SUCH DAMAGE.
56*d56f51eaSDavid van Moolenbroek  */
57*d56f51eaSDavid van Moolenbroek 
58*d56f51eaSDavid van Moolenbroek #ifndef HAVE___ATTRIBUTE__
59*d56f51eaSDavid van Moolenbroek #define __attribute__(x)
60*d56f51eaSDavid van Moolenbroek #endif /* HAVE___ATTRIBUTE__ */
61*d56f51eaSDavid van Moolenbroek 
62*d56f51eaSDavid van Moolenbroek /* Address qualifiers. */
63*d56f51eaSDavid van Moolenbroek 
64*d56f51eaSDavid van Moolenbroek #define Q_HOST		1
65*d56f51eaSDavid van Moolenbroek #define Q_NET		2
66*d56f51eaSDavid van Moolenbroek #define Q_PORT		3
67*d56f51eaSDavid van Moolenbroek #define Q_GATEWAY	4
68*d56f51eaSDavid van Moolenbroek #define Q_PROTO		5
69*d56f51eaSDavid van Moolenbroek #define Q_PROTOCHAIN	6
70*d56f51eaSDavid van Moolenbroek #define Q_PORTRANGE	7
71*d56f51eaSDavid van Moolenbroek 
72*d56f51eaSDavid van Moolenbroek /* Protocol qualifiers. */
73*d56f51eaSDavid van Moolenbroek 
74*d56f51eaSDavid van Moolenbroek #define Q_LINK		1
75*d56f51eaSDavid van Moolenbroek #define Q_IP		2
76*d56f51eaSDavid van Moolenbroek #define Q_ARP		3
77*d56f51eaSDavid van Moolenbroek #define Q_RARP		4
78*d56f51eaSDavid van Moolenbroek #define Q_SCTP		5
79*d56f51eaSDavid van Moolenbroek #define Q_TCP		6
80*d56f51eaSDavid van Moolenbroek #define Q_UDP		7
81*d56f51eaSDavid van Moolenbroek #define Q_ICMP		8
82*d56f51eaSDavid van Moolenbroek #define Q_IGMP		9
83*d56f51eaSDavid van Moolenbroek #define Q_IGRP		10
84*d56f51eaSDavid van Moolenbroek 
85*d56f51eaSDavid van Moolenbroek 
86*d56f51eaSDavid van Moolenbroek #define	Q_ATALK		11
87*d56f51eaSDavid van Moolenbroek #define	Q_DECNET	12
88*d56f51eaSDavid van Moolenbroek #define	Q_LAT		13
89*d56f51eaSDavid van Moolenbroek #define Q_SCA		14
90*d56f51eaSDavid van Moolenbroek #define	Q_MOPRC		15
91*d56f51eaSDavid van Moolenbroek #define	Q_MOPDL		16
92*d56f51eaSDavid van Moolenbroek 
93*d56f51eaSDavid van Moolenbroek 
94*d56f51eaSDavid van Moolenbroek #define Q_IPV6		17
95*d56f51eaSDavid van Moolenbroek #define Q_ICMPV6	18
96*d56f51eaSDavid van Moolenbroek #define Q_AH		19
97*d56f51eaSDavid van Moolenbroek #define Q_ESP		20
98*d56f51eaSDavid van Moolenbroek 
99*d56f51eaSDavid van Moolenbroek #define Q_PIM		21
100*d56f51eaSDavid van Moolenbroek #define Q_VRRP		22
101*d56f51eaSDavid van Moolenbroek 
102*d56f51eaSDavid van Moolenbroek #define Q_AARP		23
103*d56f51eaSDavid van Moolenbroek 
104*d56f51eaSDavid van Moolenbroek #define Q_ISO		24
105*d56f51eaSDavid van Moolenbroek #define Q_ESIS		25
106*d56f51eaSDavid van Moolenbroek #define Q_ISIS		26
107*d56f51eaSDavid van Moolenbroek #define Q_CLNP		27
108*d56f51eaSDavid van Moolenbroek 
109*d56f51eaSDavid van Moolenbroek #define Q_STP		28
110*d56f51eaSDavid van Moolenbroek 
111*d56f51eaSDavid van Moolenbroek #define Q_IPX		29
112*d56f51eaSDavid van Moolenbroek 
113*d56f51eaSDavid van Moolenbroek #define Q_NETBEUI	30
114*d56f51eaSDavid van Moolenbroek 
115*d56f51eaSDavid van Moolenbroek /* IS-IS Levels */
116*d56f51eaSDavid van Moolenbroek #define Q_ISIS_L1       31
117*d56f51eaSDavid van Moolenbroek #define Q_ISIS_L2       32
118*d56f51eaSDavid van Moolenbroek /* PDU types */
119*d56f51eaSDavid van Moolenbroek #define Q_ISIS_IIH      33
120*d56f51eaSDavid van Moolenbroek #define Q_ISIS_LAN_IIH  34
121*d56f51eaSDavid van Moolenbroek #define Q_ISIS_PTP_IIH  35
122*d56f51eaSDavid van Moolenbroek #define Q_ISIS_SNP      36
123*d56f51eaSDavid van Moolenbroek #define Q_ISIS_CSNP     37
124*d56f51eaSDavid van Moolenbroek #define Q_ISIS_PSNP     38
125*d56f51eaSDavid van Moolenbroek #define Q_ISIS_LSP      39
126*d56f51eaSDavid van Moolenbroek 
127*d56f51eaSDavid van Moolenbroek #define Q_RADIO		40
128*d56f51eaSDavid van Moolenbroek 
129*d56f51eaSDavid van Moolenbroek #define Q_CARP		41
130*d56f51eaSDavid van Moolenbroek 
131*d56f51eaSDavid van Moolenbroek /* Directional qualifiers. */
132*d56f51eaSDavid van Moolenbroek 
133*d56f51eaSDavid van Moolenbroek #define Q_SRC		1
134*d56f51eaSDavid van Moolenbroek #define Q_DST		2
135*d56f51eaSDavid van Moolenbroek #define Q_OR		3
136*d56f51eaSDavid van Moolenbroek #define Q_AND		4
137*d56f51eaSDavid van Moolenbroek #define Q_ADDR1		5
138*d56f51eaSDavid van Moolenbroek #define Q_ADDR2		6
139*d56f51eaSDavid van Moolenbroek #define Q_ADDR3		7
140*d56f51eaSDavid van Moolenbroek #define Q_ADDR4		8
141*d56f51eaSDavid van Moolenbroek #define Q_RA		9
142*d56f51eaSDavid van Moolenbroek #define Q_TA		10
143*d56f51eaSDavid van Moolenbroek 
144*d56f51eaSDavid van Moolenbroek #define Q_DEFAULT	0
145*d56f51eaSDavid van Moolenbroek #define Q_UNDEF		255
146*d56f51eaSDavid van Moolenbroek 
147*d56f51eaSDavid van Moolenbroek /* ATM types */
148*d56f51eaSDavid van Moolenbroek #define A_METAC		22	/* Meta signalling Circuit */
149*d56f51eaSDavid van Moolenbroek #define A_BCC		23	/* Broadcast Circuit */
150*d56f51eaSDavid van Moolenbroek #define A_OAMF4SC	24	/* Segment OAM F4 Circuit */
151*d56f51eaSDavid van Moolenbroek #define A_OAMF4EC	25	/* End-to-End OAM F4 Circuit */
152*d56f51eaSDavid van Moolenbroek #define A_SC		26	/* Signalling Circuit*/
153*d56f51eaSDavid van Moolenbroek #define A_ILMIC		27	/* ILMI Circuit */
154*d56f51eaSDavid van Moolenbroek #define A_OAM		28	/* OAM cells : F4 only */
155*d56f51eaSDavid van Moolenbroek #define A_OAMF4		29	/* OAM F4 cells: Segment + End-to-end */
156*d56f51eaSDavid van Moolenbroek #define A_LANE		30	/* LANE traffic */
157*d56f51eaSDavid van Moolenbroek #define A_LLC		31	/* LLC-encapsulated traffic */
158*d56f51eaSDavid van Moolenbroek 
159*d56f51eaSDavid van Moolenbroek /* Based on Q.2931 signalling protocol */
160*d56f51eaSDavid van Moolenbroek #define A_SETUP		41	/* Setup message */
161*d56f51eaSDavid van Moolenbroek #define A_CALLPROCEED	42	/* Call proceeding message */
162*d56f51eaSDavid van Moolenbroek #define A_CONNECT	43	/* Connect message */
163*d56f51eaSDavid van Moolenbroek #define A_CONNECTACK	44	/* Connect Ack message */
164*d56f51eaSDavid van Moolenbroek #define A_RELEASE	45	/* Release message */
165*d56f51eaSDavid van Moolenbroek #define A_RELEASE_DONE	46	/* Release message */
166*d56f51eaSDavid van Moolenbroek 
167*d56f51eaSDavid van Moolenbroek /* ATM field types */
168*d56f51eaSDavid van Moolenbroek #define A_VPI		51
169*d56f51eaSDavid van Moolenbroek #define A_VCI		52
170*d56f51eaSDavid van Moolenbroek #define A_PROTOTYPE	53
171*d56f51eaSDavid van Moolenbroek #define A_MSGTYPE	54
172*d56f51eaSDavid van Moolenbroek #define A_CALLREFTYPE	55
173*d56f51eaSDavid van Moolenbroek 
174*d56f51eaSDavid van Moolenbroek #define A_CONNECTMSG	70	/* returns Q.2931 signalling messages for
175*d56f51eaSDavid van Moolenbroek 				   establishing and destroying switched
176*d56f51eaSDavid van Moolenbroek 				   virtual connection */
177*d56f51eaSDavid van Moolenbroek #define A_METACONNECT	71	/* returns Q.2931 signalling messages for
178*d56f51eaSDavid van Moolenbroek 				   establishing and destroying predefined
179*d56f51eaSDavid van Moolenbroek 				   virtual circuits, such as broadcast
180*d56f51eaSDavid van Moolenbroek 				   circuit, oamf4 segment circuit, oamf4
181*d56f51eaSDavid van Moolenbroek 				   end-to-end circuits, ILMI circuits or
182*d56f51eaSDavid van Moolenbroek 				   connection signalling circuit. */
183*d56f51eaSDavid van Moolenbroek 
184*d56f51eaSDavid van Moolenbroek /* MTP2 types */
185*d56f51eaSDavid van Moolenbroek #define M_FISU		22	/* FISU */
186*d56f51eaSDavid van Moolenbroek #define M_LSSU		23	/* LSSU */
187*d56f51eaSDavid van Moolenbroek #define M_MSU		24	/* MSU */
188*d56f51eaSDavid van Moolenbroek 
189*d56f51eaSDavid van Moolenbroek /* MTP2 HSL types */
190*d56f51eaSDavid van Moolenbroek #define MH_FISU		25	/* FISU for HSL */
191*d56f51eaSDavid van Moolenbroek #define MH_LSSU		26	/* LSSU */
192*d56f51eaSDavid van Moolenbroek #define MH_MSU		27	/* MSU */
193*d56f51eaSDavid van Moolenbroek 
194*d56f51eaSDavid van Moolenbroek /* MTP3 field types */
195*d56f51eaSDavid van Moolenbroek #define M_SIO		1
196*d56f51eaSDavid van Moolenbroek #define M_OPC		2
197*d56f51eaSDavid van Moolenbroek #define M_DPC		3
198*d56f51eaSDavid van Moolenbroek #define M_SLS		4
199*d56f51eaSDavid van Moolenbroek 
200*d56f51eaSDavid van Moolenbroek /* MTP3 field types in case of MTP2 HSL */
201*d56f51eaSDavid van Moolenbroek #define MH_SIO		5
202*d56f51eaSDavid van Moolenbroek #define MH_OPC		6
203*d56f51eaSDavid van Moolenbroek #define MH_DPC		7
204*d56f51eaSDavid van Moolenbroek #define MH_SLS		8
205*d56f51eaSDavid van Moolenbroek 
206*d56f51eaSDavid van Moolenbroek 
207*d56f51eaSDavid van Moolenbroek struct slist;
208*d56f51eaSDavid van Moolenbroek 
209*d56f51eaSDavid van Moolenbroek struct stmt {
210*d56f51eaSDavid van Moolenbroek 	int code;
211*d56f51eaSDavid van Moolenbroek 	struct slist *jt;	/*only for relative jump in block*/
212*d56f51eaSDavid van Moolenbroek 	struct slist *jf;	/*only for relative jump in block*/
213*d56f51eaSDavid van Moolenbroek 	bpf_int32 k;
214*d56f51eaSDavid van Moolenbroek };
215*d56f51eaSDavid van Moolenbroek 
216*d56f51eaSDavid van Moolenbroek struct slist {
217*d56f51eaSDavid van Moolenbroek 	struct stmt s;
218*d56f51eaSDavid van Moolenbroek 	struct slist *next;
219*d56f51eaSDavid van Moolenbroek };
220*d56f51eaSDavid van Moolenbroek 
221*d56f51eaSDavid van Moolenbroek /*
222*d56f51eaSDavid van Moolenbroek  * A bit vector to represent definition sets.  We assume TOT_REGISTERS
223*d56f51eaSDavid van Moolenbroek  * is smaller than 8*sizeof(atomset).
224*d56f51eaSDavid van Moolenbroek  */
225*d56f51eaSDavid van Moolenbroek typedef bpf_u_int32 atomset;
226*d56f51eaSDavid van Moolenbroek #define ATOMMASK(n) (1 << (n))
227*d56f51eaSDavid van Moolenbroek #define ATOMELEM(d, n) (d & ATOMMASK(n))
228*d56f51eaSDavid van Moolenbroek 
229*d56f51eaSDavid van Moolenbroek /*
230*d56f51eaSDavid van Moolenbroek  * An unbounded set.
231*d56f51eaSDavid van Moolenbroek  */
232*d56f51eaSDavid van Moolenbroek typedef bpf_u_int32 *uset;
233*d56f51eaSDavid van Moolenbroek 
234*d56f51eaSDavid van Moolenbroek /*
235*d56f51eaSDavid van Moolenbroek  * Total number of atomic entities, including accumulator (A) and index (X).
236*d56f51eaSDavid van Moolenbroek  * We treat all these guys similarly during flow analysis.
237*d56f51eaSDavid van Moolenbroek  */
238*d56f51eaSDavid van Moolenbroek #define N_ATOMS (BPF_MEMWORDS+2)
239*d56f51eaSDavid van Moolenbroek 
240*d56f51eaSDavid van Moolenbroek struct edge {
241*d56f51eaSDavid van Moolenbroek 	int id;
242*d56f51eaSDavid van Moolenbroek 	int code;
243*d56f51eaSDavid van Moolenbroek 	uset edom;
244*d56f51eaSDavid van Moolenbroek 	struct block *succ;
245*d56f51eaSDavid van Moolenbroek 	struct block *pred;
246*d56f51eaSDavid van Moolenbroek 	struct edge *next;	/* link list of incoming edges for a node */
247*d56f51eaSDavid van Moolenbroek };
248*d56f51eaSDavid van Moolenbroek 
249*d56f51eaSDavid van Moolenbroek struct block {
250*d56f51eaSDavid van Moolenbroek 	int id;
251*d56f51eaSDavid van Moolenbroek 	struct slist *stmts;	/* side effect stmts */
252*d56f51eaSDavid van Moolenbroek 	struct stmt s;		/* branch stmt */
253*d56f51eaSDavid van Moolenbroek 	int mark;
254*d56f51eaSDavid van Moolenbroek 	u_int longjt;		/* jt branch requires long jump */
255*d56f51eaSDavid van Moolenbroek 	u_int longjf;		/* jf branch requires long jump */
256*d56f51eaSDavid van Moolenbroek 	int level;
257*d56f51eaSDavid van Moolenbroek 	int offset;
258*d56f51eaSDavid van Moolenbroek 	int sense;
259*d56f51eaSDavid van Moolenbroek 	struct edge et;
260*d56f51eaSDavid van Moolenbroek 	struct edge ef;
261*d56f51eaSDavid van Moolenbroek 	struct block *head;
262*d56f51eaSDavid van Moolenbroek 	struct block *link;	/* link field used by optimizer */
263*d56f51eaSDavid van Moolenbroek 	uset dom;
264*d56f51eaSDavid van Moolenbroek 	uset closure;
265*d56f51eaSDavid van Moolenbroek 	struct edge *in_edges;
266*d56f51eaSDavid van Moolenbroek 	atomset def, kill;
267*d56f51eaSDavid van Moolenbroek 	atomset in_use;
268*d56f51eaSDavid van Moolenbroek 	atomset out_use;
269*d56f51eaSDavid van Moolenbroek 	int oval;
270*d56f51eaSDavid van Moolenbroek 	int val[N_ATOMS];
271*d56f51eaSDavid van Moolenbroek };
272*d56f51eaSDavid van Moolenbroek 
273*d56f51eaSDavid van Moolenbroek struct arth {
274*d56f51eaSDavid van Moolenbroek 	struct block *b;	/* protocol checks */
275*d56f51eaSDavid van Moolenbroek 	struct slist *s;	/* stmt list */
276*d56f51eaSDavid van Moolenbroek 	int regno;		/* virtual register number of result */
277*d56f51eaSDavid van Moolenbroek };
278*d56f51eaSDavid van Moolenbroek 
279*d56f51eaSDavid van Moolenbroek struct qual {
280*d56f51eaSDavid van Moolenbroek 	unsigned char addr;
281*d56f51eaSDavid van Moolenbroek 	unsigned char proto;
282*d56f51eaSDavid van Moolenbroek 	unsigned char dir;
283*d56f51eaSDavid van Moolenbroek 	unsigned char pad;
284*d56f51eaSDavid van Moolenbroek };
285*d56f51eaSDavid van Moolenbroek 
286*d56f51eaSDavid van Moolenbroek struct arth *gen_loadi(int);
287*d56f51eaSDavid van Moolenbroek struct arth *gen_load(int, struct arth *, int);
288*d56f51eaSDavid van Moolenbroek struct arth *gen_loadlen(void);
289*d56f51eaSDavid van Moolenbroek struct arth *gen_neg(struct arth *);
290*d56f51eaSDavid van Moolenbroek struct arth *gen_arth(int, struct arth *, struct arth *);
291*d56f51eaSDavid van Moolenbroek 
292*d56f51eaSDavid van Moolenbroek void gen_and(struct block *, struct block *);
293*d56f51eaSDavid van Moolenbroek void gen_or(struct block *, struct block *);
294*d56f51eaSDavid van Moolenbroek void gen_not(struct block *);
295*d56f51eaSDavid van Moolenbroek 
296*d56f51eaSDavid van Moolenbroek struct block *gen_scode(const char *, struct qual);
297*d56f51eaSDavid van Moolenbroek struct block *gen_ecode(const u_char *, struct qual);
298*d56f51eaSDavid van Moolenbroek struct block *gen_acode(const u_char *, struct qual);
299*d56f51eaSDavid van Moolenbroek struct block *gen_mcode(const char *, const char *, unsigned int, struct qual);
300*d56f51eaSDavid van Moolenbroek #ifdef INET6
301*d56f51eaSDavid van Moolenbroek struct block *gen_mcode6(const char *, const char *, unsigned int, struct qual);
302*d56f51eaSDavid van Moolenbroek #endif
303*d56f51eaSDavid van Moolenbroek struct block *gen_ncode(const char *, bpf_u_int32, struct qual);
304*d56f51eaSDavid van Moolenbroek struct block *gen_proto_abbrev(int);
305*d56f51eaSDavid van Moolenbroek struct block *gen_relation(int, struct arth *, struct arth *, int);
306*d56f51eaSDavid van Moolenbroek struct block *gen_less(int);
307*d56f51eaSDavid van Moolenbroek struct block *gen_greater(int);
308*d56f51eaSDavid van Moolenbroek struct block *gen_byteop(int, int, int);
309*d56f51eaSDavid van Moolenbroek struct block *gen_broadcast(int);
310*d56f51eaSDavid van Moolenbroek struct block *gen_multicast(int);
311*d56f51eaSDavid van Moolenbroek struct block *gen_inbound(int);
312*d56f51eaSDavid van Moolenbroek 
313*d56f51eaSDavid van Moolenbroek struct block *gen_llc(void);
314*d56f51eaSDavid van Moolenbroek struct block *gen_llc_i(void);
315*d56f51eaSDavid van Moolenbroek struct block *gen_llc_s(void);
316*d56f51eaSDavid van Moolenbroek struct block *gen_llc_u(void);
317*d56f51eaSDavid van Moolenbroek struct block *gen_llc_s_subtype(bpf_u_int32);
318*d56f51eaSDavid van Moolenbroek struct block *gen_llc_u_subtype(bpf_u_int32);
319*d56f51eaSDavid van Moolenbroek 
320*d56f51eaSDavid van Moolenbroek struct block *gen_vlan(int);
321*d56f51eaSDavid van Moolenbroek struct block *gen_mpls(int);
322*d56f51eaSDavid van Moolenbroek 
323*d56f51eaSDavid van Moolenbroek struct block *gen_pppoed(void);
324*d56f51eaSDavid van Moolenbroek struct block *gen_pppoes(int);
325*d56f51eaSDavid van Moolenbroek 
326*d56f51eaSDavid van Moolenbroek struct block *gen_geneve(int);
327*d56f51eaSDavid van Moolenbroek 
328*d56f51eaSDavid van Moolenbroek struct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtype, int reverse);
329*d56f51eaSDavid van Moolenbroek struct block *gen_atmtype_abbrev(int type);
330*d56f51eaSDavid van Moolenbroek struct block *gen_atmmulti_abbrev(int type);
331*d56f51eaSDavid van Moolenbroek 
332*d56f51eaSDavid van Moolenbroek struct block *gen_mtp2type_abbrev(int type);
333*d56f51eaSDavid van Moolenbroek struct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse);
334*d56f51eaSDavid van Moolenbroek 
335*d56f51eaSDavid van Moolenbroek struct block *gen_pf_ifname(const char *);
336*d56f51eaSDavid van Moolenbroek struct block *gen_pf_rnr(int);
337*d56f51eaSDavid van Moolenbroek struct block *gen_pf_srnr(int);
338*d56f51eaSDavid van Moolenbroek struct block *gen_pf_ruleset(char *);
339*d56f51eaSDavid van Moolenbroek struct block *gen_pf_reason(int);
340*d56f51eaSDavid van Moolenbroek struct block *gen_pf_action(int);
341*d56f51eaSDavid van Moolenbroek struct block *gen_pf_dir(int);
342*d56f51eaSDavid van Moolenbroek 
343*d56f51eaSDavid van Moolenbroek struct block *gen_p80211_type(int, int);
344*d56f51eaSDavid van Moolenbroek struct block *gen_p80211_fcdir(int);
345*d56f51eaSDavid van Moolenbroek 
346*d56f51eaSDavid van Moolenbroek void bpf_optimize(struct block **);
347*d56f51eaSDavid van Moolenbroek void bpf_error(const char *, ...)
348*d56f51eaSDavid van Moolenbroek     __attribute__((noreturn))
349*d56f51eaSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK
350*d56f51eaSDavid van Moolenbroek     __attribute__((format (printf, 1, 2)))
351*d56f51eaSDavid van Moolenbroek #endif /* __ATTRIBUTE___FORMAT_OK */
352*d56f51eaSDavid van Moolenbroek     ;
353*d56f51eaSDavid van Moolenbroek 
354*d56f51eaSDavid van Moolenbroek void finish_parse(struct block *);
355*d56f51eaSDavid van Moolenbroek char *sdup(const char *);
356*d56f51eaSDavid van Moolenbroek 
357*d56f51eaSDavid van Moolenbroek struct bpf_insn *icode_to_fcode(struct block *, u_int *);
358*d56f51eaSDavid van Moolenbroek int pcap_parse(void);
359*d56f51eaSDavid van Moolenbroek void lex_init(const char *);
360*d56f51eaSDavid van Moolenbroek void lex_cleanup(void);
361*d56f51eaSDavid van Moolenbroek void sappend(struct slist *, struct slist *);
362*d56f51eaSDavid van Moolenbroek 
363*d56f51eaSDavid van Moolenbroek /* XXX */
364*d56f51eaSDavid van Moolenbroek #define JT(b)  ((b)->et.succ)
365*d56f51eaSDavid van Moolenbroek #define JF(b)  ((b)->ef.succ)
366*d56f51eaSDavid van Moolenbroek 
367*d56f51eaSDavid van Moolenbroek extern int no_optimize;
368