Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 311 lines (266 sloc) 9.152 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 *
405ab1a add baseline support for MPLS protocol and per-label filtering
hannes authored
21 * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.60 2004-06-16 08:20:30 hannes 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
58 /* Address qualifiers. */
59
60 #define Q_HOST 1
61 #define Q_NET 2
62 #define Q_PORT 3
63 #define Q_GATEWAY 4
64 #define Q_PROTO 5
7fe3c11 IPv6 packet filtering code.
itojun authored
65 #define Q_PROTOCHAIN 6
b11ddf8 Initial revision
mcr authored
66
67 /* Protocol qualifiers. */
68
69 #define Q_LINK 1
70 #define Q_IP 2
71 #define Q_ARP 3
72 #define Q_RARP 4
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
73 #define Q_SCTP 5
74 #define Q_TCP 6
75 #define Q_UDP 7
76 #define Q_ICMP 8
77 #define Q_IGMP 9
78 #define Q_IGRP 10
b11ddf8 Initial revision
mcr authored
79
80
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
81 #define Q_ATALK 11
82 #define Q_DECNET 12
83 #define Q_LAT 13
84 #define Q_SCA 14
85 #define Q_MOPRC 15
86 #define Q_MOPDL 16
b11ddf8 Initial revision
mcr authored
87
7fe3c11 IPv6 packet filtering code.
itojun authored
88
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
89 #define Q_IPV6 17
90 #define Q_ICMPV6 18
91 #define Q_AH 19
92 #define Q_ESP 20
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_PIM 21
95 #define Q_VRRP 22
7fe3c11 IPv6 packet filtering code.
itojun authored
96
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
97 #define Q_AARP 23
54b2ab1 yuguy Patch from Monroe Williams <monroe@pobox.com>, submitted with NetBSD PR
yuguy authored
98
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
99 #define Q_ISO 24
100 #define Q_ESIS 25
101 #define Q_ISIS 26
102 #define Q_CLNP 27
af30d75 yuguy Tony Li's changes, from FreeBSD, to support filtering for OSI packets
yuguy authored
103
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
104 #define Q_STP 28
2b3dac2 yuguy Support checking for protocols specified by an LLC SAP on FDDI, Token
yuguy authored
105
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
106 #define Q_IPX 29
d17596d yuguy Add "ipx", which checks for the LLC SAP for IPX as well as, on Ethernet,
yuguy authored
107
283da6d SCTP support from Armando L. Caro Jr. <acaro@mail.eecis.udel.edu>
fenner authored
108 #define Q_NETBEUI 30
b0dcde2 yuguy Add a "netbeui" keyword, which selects NetBEUI packets (LLC packets with
yuguy authored
109
bd48816 add BPF_ filters for misc. IS-IS PDU Types
hannes authored
110 /* IS-IS Levels */
111 #define Q_ISIS_L1 31
112 #define Q_ISIS_L2 32
113 /* PDU types */
114 #define Q_ISIS_IIH 33
115 #define Q_ISIS_LAN_IIH 34
116 #define Q_ISIS_PTP_IIH 35
117 #define Q_ISIS_SNP 36
118 #define Q_ISIS_CSNP 37
119 #define Q_ISIS_PSNP 38
120 #define Q_ISIS_LSP 39
121
b11ddf8 Initial revision
mcr authored
122 /* Directional qualifiers. */
123
124 #define Q_SRC 1
125 #define Q_DST 2
126 #define Q_OR 3
127 #define Q_AND 4
128
129 #define Q_DEFAULT 0
130 #define Q_UNDEF 255
131
243b20e yuguy Add SunATM support, based on code from Yen Yen Lim at North Dakota State
yuguy authored
132 /* ATM types */
133 #define A_METAC 22 /* Meta signalling Circuit */
134 #define A_BCC 23 /* Broadcast Circuit */
135 #define A_OAMF4SC 24 /* Segment OAM F4 Circuit */
136 #define A_OAMF4EC 25 /* End-to-End OAM F4 Circuit */
137 #define A_SC 26 /* Signalling Circuit*/
138 #define A_ILMIC 27 /* ILMI Circuit */
139 #define A_OAM 28 /* OAM cells : F4 only */
140 #define A_OAMF4 29 /* OAM F4 cells: Segment + End-to-end */
141 #define A_LANE 30 /* LANE traffic */
142 #define A_LLC 31 /* LLC-encapsulated traffic */
143
144 /* Based on Q.2931 signalling protocol */
145 #define A_SETUP 41 /* Setup message */
146 #define A_CALLPROCEED 42 /* Call proceeding message */
147 #define A_CONNECT 43 /* Connect message */
148 #define A_CONNECTACK 44 /* Connect Ack message */
149 #define A_RELEASE 45 /* Release message */
150 #define A_RELEASE_DONE 46 /* Release message */
151
152 /* ATM field types */
153 #define A_VPI 51
154 #define A_VCI 52
155 #define A_PROTOTYPE 53
156 #define A_MSGTYPE 54
157 #define A_CALLREFTYPE 55
158
159 #define A_CONNECTMSG 70 /* returns Q.2931 signalling messages for
160 establishing and destroying switched
161 virtual connection */
162 #define A_METACONNECT 71 /* returns Q.2931 signalling messages for
163 establishing and destroying predefined
164 virtual circuits, such as broadcast
165 circuit, oamf4 segment circuit, oamf4
166 end-to-end circuits, ILMI circuits or
167 connection signalling circuit. */
168
7fe3c11 IPv6 packet filtering code.
itojun authored
169 struct slist;
170
b11ddf8 Initial revision
mcr authored
171 struct stmt {
172 int code;
7fe3c11 IPv6 packet filtering code.
itojun authored
173 struct slist *jt; /*only for relative jump in block*/
174 struct slist *jf; /*only for relative jump in block*/
b11ddf8 Initial revision
mcr authored
175 bpf_int32 k;
176 };
177
178 struct slist {
179 struct stmt s;
180 struct slist *next;
181 };
182
5918c49 whitespace cleanup
itojun authored
183 /*
b11ddf8 Initial revision
mcr authored
184 * A bit vector to represent definition sets. We assume TOT_REGISTERS
185 * is smaller than 8*sizeof(atomset).
186 */
187 typedef bpf_u_int32 atomset;
188 #define ATOMMASK(n) (1 << (n))
189 #define ATOMELEM(d, n) (d & ATOMMASK(n))
190
191 /*
192 * An unbounded set.
193 */
194 typedef bpf_u_int32 *uset;
195
196 /*
197 * Total number of atomic entities, including accumulator (A) and index (X).
198 * We treat all these guys similarly during flow analysis.
199 */
200 #define N_ATOMS (BPF_MEMWORDS+2)
201
202 struct edge {
203 int id;
204 int code;
205 uset edom;
206 struct block *succ;
207 struct block *pred;
208 struct edge *next; /* link list of incoming edges for a node */
209 };
210
211 struct block {
212 int id;
213 struct slist *stmts; /* side effect stmts */
214 struct stmt s; /* branch stmt */
215 int mark;
216 int longjt; /* jt branch requires long jump */
217 int longjf; /* jf branch requires long jump */
218 int level;
219 int offset;
220 int sense;
221 struct edge et;
222 struct edge ef;
223 struct block *head;
224 struct block *link; /* link field used by optimizer */
225 uset dom;
226 uset closure;
227 struct edge *in_edges;
228 atomset def, kill;
229 atomset in_use;
230 atomset out_use;
231 int oval;
232 int val[N_ATOMS];
233 };
234
235 struct arth {
236 struct block *b; /* protocol checks */
237 struct slist *s; /* stmt list */
238 int regno; /* virtual register number of result */
239 };
240
241 struct qual {
242 unsigned char addr;
243 unsigned char proto;
244 unsigned char dir;
245 unsigned char pad;
246 };
247
248 struct arth *gen_loadi(int);
249 struct arth *gen_load(int, struct arth *, int);
250 struct arth *gen_loadlen(void);
251 struct arth *gen_neg(struct arth *);
252 struct arth *gen_arth(int, struct arth *, struct arth *);
253
254 void gen_and(struct block *, struct block *);
255 void gen_or(struct block *, struct block *);
256 void gen_not(struct block *);
257
258 struct block *gen_scode(const char *, struct qual);
259 struct block *gen_ecode(const u_char *, struct qual);
38b97b7 yuguy ARCNet support, from NetBSD.
yuguy authored
260 struct block *gen_acode(const u_char *, struct qual);
b11ddf8 Initial revision
mcr authored
261 struct block *gen_mcode(const char *, const char *, int, struct qual);
7fe3c11 IPv6 packet filtering code.
itojun authored
262 #ifdef INET6
263 struct block *gen_mcode6(const char *, const char *, int, struct qual);
264 #endif
b11ddf8 Initial revision
mcr authored
265 struct block *gen_ncode(const char *, bpf_u_int32, struct qual);
266 struct block *gen_proto_abbrev(int);
267 struct block *gen_relation(int, struct arth *, struct arth *, int);
268 struct block *gen_less(int);
269 struct block *gen_greater(int);
270 struct block *gen_byteop(int, int, int);
271 struct block *gen_broadcast(int);
272 struct block *gen_multicast(int);
273 struct block *gen_inbound(int);
274
98a503e yuguy Improved VLAN support, from Peter Jeremy - "vlan" filtering keyword,
yuguy authored
275 struct block *gen_vlan(int);
405ab1a add baseline support for MPLS protocol and per-label filtering
hannes authored
276 struct block *gen_mpls(int);
98a503e yuguy Improved VLAN support, from Peter Jeremy - "vlan" filtering keyword,
yuguy authored
277
243b20e yuguy Add SunATM support, based on code from Yen Yen Lim at North Dakota State
yuguy authored
278 struct block *gen_atmfield_code(int atmfield, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse);
279 struct block *gen_atmtype_abbrev(int type);
280 struct block *gen_atmmulti_abbrev(int type);
281
2e69dd9 yuguy The value pointed to by "gen_pf_ifname()"'s argument isn't modified, so
yuguy authored
282 struct block *gen_pf_ifname(const char *);
23d8b72 yuguy Add support for OpenBSD DLT_PFLOG.
yuguy authored
283 struct block *gen_pf_rnr(int);
8177eec Handle the new OpenBSD pf format (DLT 117), which is now being used
fenner authored
284 struct block *gen_pf_srnr(int);
285 struct block *gen_pf_ruleset(char *);
23d8b72 yuguy Add support for OpenBSD DLT_PFLOG.
yuguy authored
286 struct block *gen_pf_reason(int);
287 struct block *gen_pf_action(int);
288 struct block *gen_pf_dir(int);
289
b11ddf8 Initial revision
mcr authored
290 void bpf_optimize(struct block **);
0e2f8c8 add config.h, remove gnuc.h. remove __dead
assar authored
291 void bpf_error(const char *, ...)
417d093 (bpf_error): conditionalize __attribute__
assar authored
292 #if HAVE___ATTRIBUTE__
0e2f8c8 add config.h, remove gnuc.h. remove __dead
assar authored
293 __attribute__((noreturn, format (printf, 1, 2)))
417d093 (bpf_error): conditionalize __attribute__
assar authored
294 #endif
295 ;
b11ddf8 Initial revision
mcr authored
296
297 void finish_parse(struct block *);
298 char *sdup(const char *);
299
300 struct bpf_insn *icode_to_fcode(struct block *, int *);
301 int pcap_parse(void);
302 void lex_init(char *);
0d0297b yuguy Older versions of Flex (e.g., 2.5.2, which at least one user had) dump
yuguy authored
303 void lex_cleanup(void);
b11ddf8 Initial revision
mcr authored
304 void sappend(struct slist *, struct slist *);
305
306 /* XXX */
307 #define JT(b) ((b)->et.succ)
308 #define JF(b) ((b)->ef.succ)
7fe3c11 IPv6 packet filtering code.
itojun authored
309
310 extern int no_optimize;
Something went wrong with that request. Please try again.