Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 313 lines (267 sloc) 9.225 kb
b11ddf8 Initial revision
mcr authored
1 /*
2 * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996
3 * The Regents of the University of California. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that: (1) source code distributions
7 * retain the above copyright notice and this paragraph in its entirety, (2)
8 * distributions including binary code include the above copyright notice and
9 * this paragraph in its entirety in the documentation or other materials
10 * provided with the distribution, and (3) all advertising materials mentioning
11 * features or use of this software display the following acknowledgement:
12 * ``This product includes software developed by the University of California,
13 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
14 * the University nor the names of its contributors may be used to endorse
15 * or promote products derived from this software without specific prior
16 * written permission.
17 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
18 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
20 *
022b629 yuguy From Albert Chin: just define __attribute__ as an empty macro if we
yuguy authored
21 * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.62 2005-04-23 22:26:52 guy Exp $ (LBL)
243b20e yuguy Add SunATM support, based on code from Yen Yen Lim at North Dakota State
yuguy authored
22 */
23
24 /*
25 * ATM support:
26 *
27 * Copyright (c) 1997 Yen Yen Lim and North Dakota State University
28 * All rights reserved.
29 *
30 * Redistribution and use in source and binary forms, with or without
31 * modification, are permitted provided that the following conditions
32 * are met:
33 * 1. Redistributions of source code must retain the above copyright
34 * notice, this list of conditions and the following disclaimer.
35 * 2. Redistributions in binary form must reproduce the above copyright
36 * notice, this list of conditions and the following disclaimer in the
37 * documentation and/or other materials provided with the distribution.
38 * 3. All advertising materials mentioning features or use of this software
39 * must display the following acknowledgement:
40 * This product includes software developed by Yen Yen Lim and
41 * North Dakota State University
42 * 4. The name of the author may not be used to endorse or promote products
43 * derived from this software without specific prior written permission.
44 *
45 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
46 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
47 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
48 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
49 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
50 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
51 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
52 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
53 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
54 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
55 * POSSIBILITY OF SUCH DAMAGE.
b11ddf8 Initial revision
mcr authored
56 */
57
022b629 yuguy From Albert Chin: just define __attribute__ as an empty macro if we
yuguy authored
58 #ifndef HAVE___ATTRIBUTE__
59 #define __attribute__(x)
60 #endif /* HAVE___ATTRIBUTE__ */
61
b11ddf8 Initial revision
mcr authored
62 /* Address qualifiers. */
63
64 #define Q_HOST 1
65 #define Q_NET 2
66 #define Q_PORT 3
67 #define Q_GATEWAY 4
68 #define Q_PROTO 5
7fe3c11 IPv6 packet filtering code.
itojun authored
69 #define Q_PROTOCHAIN 6
97a8e51 yuguy From Patrick Marie <mycroft@virgaria.org>: add support for port ranges
yuguy authored
70 #define Q_PORTRANGE 7
b11ddf8 Initial revision
mcr authored
71
72 /* Protocol qualifiers. */
73
74 #define Q_LINK 1
75 #define Q_IP 2
76 #define Q_ARP 3
77 #define Q_RARP 4
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
78 #define Q_SCTP 5
79 #define Q_TCP 6
80 #define Q_UDP 7
81 #define Q_ICMP 8
82 #define Q_IGMP 9
83 #define Q_IGRP 10
b11ddf8 Initial revision
mcr authored
84
85
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
86 #define Q_ATALK 11
87 #define Q_DECNET 12
88 #define Q_LAT 13
89 #define Q_SCA 14
90 #define Q_MOPRC 15
91 #define Q_MOPDL 16
b11ddf8 Initial revision
mcr authored
92
7fe3c11 IPv6 packet filtering code.
itojun authored
93
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
94 #define Q_IPV6 17
95 #define Q_ICMPV6 18
96 #define Q_AH 19
97 #define Q_ESP 20
7fe3c11 IPv6 packet filtering code.
itojun authored
98
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
99 #define Q_PIM 21
100 #define Q_VRRP 22
7fe3c11 IPv6 packet filtering code.
itojun authored
101
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
102 #define Q_AARP 23
54b2ab1 yuguy Patch from Monroe Williams <monroe@pobox.com>, submitted with NetBSD PR
yuguy authored
103
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
104 #define Q_ISO 24
105 #define Q_ESIS 25
106 #define Q_ISIS 26
107 #define Q_CLNP 27
af30d75 yuguy Tony Li's changes, from FreeBSD, to support filtering for OSI packets
yuguy authored
108
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
109 #define Q_STP 28
2b3dac2 yuguy Support checking for protocols specified by an LLC SAP on FDDI, Token
yuguy authored
110
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
111 #define Q_IPX 29
d17596d yuguy Add "ipx", which checks for the LLC SAP for IPX as well as, on Ethernet,
yuguy authored
112
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
113 #define Q_NETBEUI 30
b0dcde2 yuguy Add a "netbeui" keyword, which selects NetBEUI packets (LLC packets with
yuguy authored
114
bd48816 add BPF_ filters for misc. IS-IS PDU Types
hannes authored
115 /* IS-IS Levels */
116 #define Q_ISIS_L1 31
117 #define Q_ISIS_L2 32
118 /* PDU types */
119 #define Q_ISIS_IIH 33
120 #define Q_ISIS_LAN_IIH 34
121 #define Q_ISIS_PTP_IIH 35
122 #define Q_ISIS_SNP 36
123 #define Q_ISIS_CSNP 37
124 #define Q_ISIS_PSNP 38
125 #define Q_ISIS_LSP 39
126
b11ddf8 Initial revision
mcr authored
127 /* Directional qualifiers. */
128
129 #define Q_SRC 1
130 #define Q_DST 2
131 #define Q_OR 3
132 #define Q_AND 4
133
134 #define Q_DEFAULT 0
135 #define Q_UNDEF 255
136
243b20e yuguy Add SunATM support, based on code from Yen Yen Lim at North Dakota State
yuguy authored
137 /* ATM types */
138 #define A_METAC 22 /* Meta signalling Circuit */
139 #define A_BCC 23 /* Broadcast Circuit */
140 #define A_OAMF4SC 24 /* Segment OAM F4 Circuit */
141 #define A_OAMF4EC 25 /* End-to-End OAM F4 Circuit */
142 #define A_SC 26 /* Signalling Circuit*/
143 #define A_ILMIC 27 /* ILMI Circuit */
144 #define A_OAM 28 /* OAM cells : F4 only */
145 #define A_OAMF4 29 /* OAM F4 cells: Segment + End-to-end */
146 #define A_LANE 30 /* LANE traffic */
147 #define A_LLC 31 /* LLC-encapsulated traffic */
148
149 /* Based on Q.2931 signalling protocol */
150 #define A_SETUP 41 /* Setup message */
151 #define A_CALLPROCEED 42 /* Call proceeding message */
152 #define A_CONNECT 43 /* Connect message */
153 #define A_CONNECTACK 44 /* Connect Ack message */
154 #define A_RELEASE 45 /* Release message */
155 #define A_RELEASE_DONE 46 /* Release message */
156
157 /* ATM field types */
158 #define A_VPI 51
159 #define A_VCI 52
160 #define A_PROTOTYPE 53
161 #define A_MSGTYPE 54
162 #define A_CALLREFTYPE 55
163
164 #define A_CONNECTMSG 70 /* returns Q.2931 signalling messages for
165 establishing and destroying switched
166 virtual connection */
167 #define A_METACONNECT 71 /* returns Q.2931 signalling messages for
168 establishing and destroying predefined
169 virtual circuits, such as broadcast
170 circuit, oamf4 segment circuit, oamf4
171 end-to-end circuits, ILMI circuits or
172 connection signalling circuit. */
173
7fe3c11 IPv6 packet filtering code.
itojun authored
174 struct slist;
175
b11ddf8 Initial revision
mcr authored
176 struct stmt {
177 int code;
7fe3c11 IPv6 packet filtering code.
itojun authored
178 struct slist *jt; /*only for relative jump in block*/
179 struct slist *jf; /*only for relative jump in block*/
b11ddf8 Initial revision
mcr authored
180 bpf_int32 k;
181 };
182
183 struct slist {
184 struct stmt s;
185 struct slist *next;
186 };
187
5918c49 whitespace cleanup
itojun authored
188 /*
b11ddf8 Initial revision
mcr authored
189 * A bit vector to represent definition sets. We assume TOT_REGISTERS
190 * is smaller than 8*sizeof(atomset).
191 */
192 typedef bpf_u_int32 atomset;
193 #define ATOMMASK(n) (1 << (n))
194 #define ATOMELEM(d, n) (d & ATOMMASK(n))
195
196 /*
197 * An unbounded set.
198 */
199 typedef bpf_u_int32 *uset;
200
201 /*
202 * Total number of atomic entities, including accumulator (A) and index (X).
203 * We treat all these guys similarly during flow analysis.
204 */
205 #define N_ATOMS (BPF_MEMWORDS+2)
206
207 struct edge {
208 int id;
209 int code;
210 uset edom;
211 struct block *succ;
212 struct block *pred;
213 struct edge *next; /* link list of incoming edges for a node */
214 };
215
216 struct block {
217 int id;
218 struct slist *stmts; /* side effect stmts */
219 struct stmt s; /* branch stmt */
220 int mark;
221 int longjt; /* jt branch requires long jump */
222 int longjf; /* jf branch requires long jump */
223 int level;
224 int offset;
225 int sense;
226 struct edge et;
227 struct edge ef;
228 struct block *head;
229 struct block *link; /* link field used by optimizer */
230 uset dom;
231 uset closure;
232 struct edge *in_edges;
233 atomset def, kill;
234 atomset in_use;
235 atomset out_use;
236 int oval;
237 int val[N_ATOMS];
238 };
239
240 struct arth {
241 struct block *b; /* protocol checks */
242 struct slist *s; /* stmt list */
243 int regno; /* virtual register number of result */
244 };
245
246 struct qual {
247 unsigned char addr;
248 unsigned char proto;
249 unsigned char dir;
250 unsigned char pad;
251 };
252
253 struct arth *gen_loadi(int);
254 struct arth *gen_load(int, struct arth *, int);
255 struct arth *gen_loadlen(void);
256 struct arth *gen_neg(struct arth *);
257 struct arth *gen_arth(int, struct arth *, struct arth *);
258
259 void gen_and(struct block *, struct block *);
260 void gen_or(struct block *, struct block *);
261 void gen_not(struct block *);
262
263 struct block *gen_scode(const char *, struct qual);
264 struct block *gen_ecode(const u_char *, struct qual);
38b97b7 yuguy ARCNet support, from NetBSD.
yuguy authored
265 struct block *gen_acode(const u_char *, struct qual);
b11ddf8 Initial revision
mcr authored
266 struct block *gen_mcode(const char *, const char *, int, struct qual);
7fe3c11 IPv6 packet filtering code.
itojun authored
267 #ifdef INET6
268 struct block *gen_mcode6(const char *, const char *, int, struct qual);
269 #endif
b11ddf8 Initial revision
mcr authored
270 struct block *gen_ncode(const char *, bpf_u_int32, struct qual);
271 struct block *gen_proto_abbrev(int);
272 struct block *gen_relation(int, struct arth *, struct arth *, int);
273 struct block *gen_less(int);
274 struct block *gen_greater(int);
275 struct block *gen_byteop(int, int, int);
276 struct block *gen_broadcast(int);
277 struct block *gen_multicast(int);
278 struct block *gen_inbound(int);
279
98a503e yuguy Improved VLAN support, from Peter Jeremy - "vlan" filtering keyword,
yuguy authored
280 struct block *gen_vlan(int);
405ab1a add baseline support for MPLS protocol and per-label filtering
hannes authored
281 struct block *gen_mpls(int);
98a503e yuguy Improved VLAN support, from Peter Jeremy - "vlan" filtering keyword,
yuguy authored
282
243b20e yuguy Add SunATM support, based on code from Yen Yen Lim at North Dakota State
yuguy authored
283 struct block *gen_atmfield_code(int atmfield, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse);
284 struct block *gen_atmtype_abbrev(int type);
285 struct block *gen_atmmulti_abbrev(int type);
286
2e69dd9 yuguy The value pointed to by "gen_pf_ifname()"'s argument isn't modified, so
yuguy authored
287 struct block *gen_pf_ifname(const char *);
23d8b72 yuguy Add support for OpenBSD DLT_PFLOG.
yuguy authored
288 struct block *gen_pf_rnr(int);
8177eec Handle the new OpenBSD pf format (DLT 117), which is now being used
fenner authored
289 struct block *gen_pf_srnr(int);
290 struct block *gen_pf_ruleset(char *);
23d8b72 yuguy Add support for OpenBSD DLT_PFLOG.
yuguy authored
291 struct block *gen_pf_reason(int);
292 struct block *gen_pf_action(int);
293 struct block *gen_pf_dir(int);
294
b11ddf8 Initial revision
mcr authored
295 void bpf_optimize(struct block **);
0e2f8c8 add config.h, remove gnuc.h. remove __dead
assar authored
296 void bpf_error(const char *, ...)
022b629 yuguy From Albert Chin: just define __attribute__ as an empty macro if we
yuguy authored
297 __attribute__((noreturn, format (printf, 1, 2)));
b11ddf8 Initial revision
mcr authored
298
299 void finish_parse(struct block *);
300 char *sdup(const char *);
301
302 struct bpf_insn *icode_to_fcode(struct block *, int *);
303 int pcap_parse(void);
304 void lex_init(char *);
0d0297b yuguy Older versions of Flex (e.g., 2.5.2, which at least one user had) dump
yuguy authored
305 void lex_cleanup(void);
b11ddf8 Initial revision
mcr authored
306 void sappend(struct slist *, struct slist *);
307
308 /* XXX */
309 #define JT(b) ((b)->et.succ)
310 #define JF(b) ((b)->ef.succ)
7fe3c11 IPv6 packet filtering code.
itojun authored
311
312 extern int no_optimize;
Something went wrong with that request. Please try again.