Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 355 lines (299 sloc) 10.112 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 *
740fb43 @yuguy Support OpenBSD's "addr1", "addr2", "addr3", and "addr4" link-layer
yuguy authored
21 * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.71 2007-11-18 02:03: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
875df1a @yuguy Make "link[N:M]" refer to the 802.11 header for all 802.11 DLT_ values,
yuguy authored
127 #define Q_RADIO 40
128
7af986f @gvnn3 Add support for CARP.
gvnn3 authored
129 #define Q_CARP 41
130
b11ddf8 Initial revision
mcr authored
131 /* Directional qualifiers. */
132
133 #define Q_SRC 1
134 #define Q_DST 2
135 #define Q_OR 3
136 #define Q_AND 4
740fb43 @yuguy Support OpenBSD's "addr1", "addr2", "addr3", and "addr4" link-layer
yuguy authored
137 #define Q_ADDR1 5
138 #define Q_ADDR2 6
139 #define Q_ADDR3 7
140 #define Q_ADDR4 8
cc7b2f2 @guyharris Add support for "wlan ra" and "wlan ta".
guyharris authored
141 #define Q_RA 9
142 #define Q_TA 10
b11ddf8 Initial revision
mcr authored
143
144 #define Q_DEFAULT 0
145 #define Q_UNDEF 255
146
243b20e @yuguy Add SunATM support, based on code from Yen Yen Lim at North Dakota State
yuguy authored
147 /* ATM types */
148 #define A_METAC 22 /* Meta signalling Circuit */
149 #define A_BCC 23 /* Broadcast Circuit */
150 #define A_OAMF4SC 24 /* Segment OAM F4 Circuit */
151 #define A_OAMF4EC 25 /* End-to-End OAM F4 Circuit */
152 #define A_SC 26 /* Signalling Circuit*/
153 #define A_ILMIC 27 /* ILMI Circuit */
154 #define A_OAM 28 /* OAM cells : F4 only */
155 #define A_OAMF4 29 /* OAM F4 cells: Segment + End-to-end */
156 #define A_LANE 30 /* LANE traffic */
157 #define A_LLC 31 /* LLC-encapsulated traffic */
158
159 /* Based on Q.2931 signalling protocol */
160 #define A_SETUP 41 /* Setup message */
161 #define A_CALLPROCEED 42 /* Call proceeding message */
162 #define A_CONNECT 43 /* Connect message */
163 #define A_CONNECTACK 44 /* Connect Ack message */
164 #define A_RELEASE 45 /* Release message */
165 #define A_RELEASE_DONE 46 /* Release message */
166
167 /* ATM field types */
168 #define A_VPI 51
169 #define A_VCI 52
170 #define A_PROTOTYPE 53
171 #define A_MSGTYPE 54
172 #define A_CALLREFTYPE 55
173
174 #define A_CONNECTMSG 70 /* returns Q.2931 signalling messages for
175 establishing and destroying switched
176 virtual connection */
177 #define A_METACONNECT 71 /* returns Q.2931 signalling messages for
178 establishing and destroying predefined
179 virtual circuits, such as broadcast
180 circuit, oamf4 segment circuit, oamf4
181 end-to-end circuits, ILMI circuits or
182 connection signalling circuit. */
183
7589e0a @yuguy From Florent Drouin: add support for filtering on MTP2 frame types.
yuguy authored
184 /* MTP2 types */
185 #define M_FISU 22 /* FISU */
d02424c @yuguy From Florent Drouin: a Link Status Signal Unit is called an LSSU, not an
yuguy authored
186 #define M_LSSU 23 /* LSSU */
7589e0a @yuguy From Florent Drouin: add support for filtering on MTP2 frame types.
yuguy authored
187 #define M_MSU 24 /* MSU */
188
c36c37e Support filtering filtering E1 SS7 traffic on MTP2 layer Annex A.
dzejarczech authored
189 /* MTP2 HSL types */
190 #define MH_FISU 25 /* FISU for HSL */
191 #define MH_LSSU 26 /* LSSU */
192 #define MH_MSU 27 /* MSU */
193
7589e0a @yuguy From Florent Drouin: add support for filtering on MTP2 frame types.
yuguy authored
194 /* MTP3 field types */
195 #define M_SIO 1
196 #define M_OPC 2
197 #define M_DPC 3
198 #define M_SLS 4
a0a4852 @yuguy From Gilbert Hoyek <gil_hoyek@hotmail.com>: support for capturing SS7
yuguy authored
199
c36c37e Support filtering filtering E1 SS7 traffic on MTP2 layer Annex A.
dzejarczech authored
200 /* MTP3 field types in case of MTP2 HSL */
201 #define MH_SIO 5
202 #define MH_OPC 6
203 #define MH_DPC 7
204 #define MH_SLS 8
205
a0a4852 @yuguy From Gilbert Hoyek <gil_hoyek@hotmail.com>: support for capturing SS7
yuguy authored
206
7fe3c11 IPv6 packet filtering code.
itojun authored
207 struct slist;
208
b11ddf8 Initial revision
mcr authored
209 struct stmt {
210 int code;
7fe3c11 IPv6 packet filtering code.
itojun authored
211 struct slist *jt; /*only for relative jump in block*/
212 struct slist *jf; /*only for relative jump in block*/
b11ddf8 Initial revision
mcr authored
213 bpf_int32 k;
214 };
215
216 struct slist {
217 struct stmt s;
218 struct slist *next;
219 };
220
5918c49 whitespace cleanup
itojun authored
221 /*
b11ddf8 Initial revision
mcr authored
222 * A bit vector to represent definition sets. We assume TOT_REGISTERS
223 * is smaller than 8*sizeof(atomset).
224 */
225 typedef bpf_u_int32 atomset;
226 #define ATOMMASK(n) (1 << (n))
227 #define ATOMELEM(d, n) (d & ATOMMASK(n))
228
229 /*
230 * An unbounded set.
231 */
232 typedef bpf_u_int32 *uset;
233
234 /*
235 * Total number of atomic entities, including accumulator (A) and index (X).
236 * We treat all these guys similarly during flow analysis.
237 */
238 #define N_ATOMS (BPF_MEMWORDS+2)
239
240 struct edge {
241 int id;
242 int code;
243 uset edom;
244 struct block *succ;
245 struct block *pred;
246 struct edge *next; /* link list of incoming edges for a node */
247 };
248
249 struct block {
250 int id;
251 struct slist *stmts; /* side effect stmts */
252 struct stmt s; /* branch stmt */
253 int mark;
b274713 @guyharris Make some counts unsigned ("counts" as in "they're always >= 0").
guyharris authored
254 u_int longjt; /* jt branch requires long jump */
255 u_int longjf; /* jf branch requires long jump */
b11ddf8 Initial revision
mcr authored
256 int level;
257 int offset;
258 int sense;
259 struct edge et;
260 struct edge ef;
261 struct block *head;
262 struct block *link; /* link field used by optimizer */
263 uset dom;
264 uset closure;
265 struct edge *in_edges;
266 atomset def, kill;
267 atomset in_use;
268 atomset out_use;
269 int oval;
270 int val[N_ATOMS];
271 };
272
273 struct arth {
274 struct block *b; /* protocol checks */
275 struct slist *s; /* stmt list */
276 int regno; /* virtual register number of result */
277 };
278
279 struct qual {
280 unsigned char addr;
281 unsigned char proto;
282 unsigned char dir;
283 unsigned char pad;
284 };
285
286 struct arth *gen_loadi(int);
287 struct arth *gen_load(int, struct arth *, int);
288 struct arth *gen_loadlen(void);
289 struct arth *gen_neg(struct arth *);
290 struct arth *gen_arth(int, struct arth *, struct arth *);
291
292 void gen_and(struct block *, struct block *);
293 void gen_or(struct block *, struct block *);
294 void gen_not(struct block *);
295
296 struct block *gen_scode(const char *, struct qual);
297 struct block *gen_ecode(const u_char *, struct qual);
38b97b7 @yuguy ARCNet support, from NetBSD.
yuguy authored
298 struct block *gen_acode(const u_char *, struct qual);
b11ddf8 Initial revision
mcr authored
299 struct block *gen_mcode(const char *, const char *, int, struct qual);
7fe3c11 IPv6 packet filtering code.
itojun authored
300 #ifdef INET6
301 struct block *gen_mcode6(const char *, const char *, int, struct qual);
302 #endif
b11ddf8 Initial revision
mcr authored
303 struct block *gen_ncode(const char *, bpf_u_int32, struct qual);
304 struct block *gen_proto_abbrev(int);
305 struct block *gen_relation(int, struct arth *, struct arth *, int);
306 struct block *gen_less(int);
307 struct block *gen_greater(int);
308 struct block *gen_byteop(int, int, int);
309 struct block *gen_broadcast(int);
310 struct block *gen_multicast(int);
311 struct block *gen_inbound(int);
312
98a503e @yuguy Improved VLAN support, from Peter Jeremy - "vlan" filtering keyword,
yuguy authored
313 struct block *gen_vlan(int);
405ab1a add baseline support for MPLS protocol and per-label filtering
hannes authored
314 struct block *gen_mpls(int);
98a503e @yuguy Improved VLAN support, from Peter Jeremy - "vlan" filtering keyword,
yuguy authored
315
7fb15ab @yuguy Add "pppoed" and "pppoes" keywords, for PPPoE Discovery and Session
yuguy authored
316 struct block *gen_pppoed(void);
317 struct block *gen_pppoes(void);
318
6804103 @yuguy Make the value argument to "gen_ncmp()" a bpf_int32, the same as the
yuguy authored
319 struct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtype, int reverse);
243b20e @yuguy Add SunATM support, based on code from Yen Yen Lim at North Dakota State
yuguy authored
320 struct block *gen_atmtype_abbrev(int type);
321 struct block *gen_atmmulti_abbrev(int type);
322
7589e0a @yuguy From Florent Drouin: add support for filtering on MTP2 frame types.
yuguy authored
323 struct block *gen_mtp2type_abbrev(int type);
a0a4852 @yuguy From Gilbert Hoyek <gil_hoyek@hotmail.com>: support for capturing SS7
yuguy authored
324 struct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse);
325
2e69dd9 @yuguy The value pointed to by "gen_pf_ifname()"'s argument isn't modified, so
yuguy authored
326 struct block *gen_pf_ifname(const char *);
23d8b72 @yuguy Add support for OpenBSD DLT_PFLOG.
yuguy authored
327 struct block *gen_pf_rnr(int);
8177eec Handle the new OpenBSD pf format (DLT 117), which is now being used
fenner authored
328 struct block *gen_pf_srnr(int);
329 struct block *gen_pf_ruleset(char *);
23d8b72 @yuguy Add support for OpenBSD DLT_PFLOG.
yuguy authored
330 struct block *gen_pf_reason(int);
331 struct block *gen_pf_action(int);
332 struct block *gen_pf_dir(int);
333
8856701 @yuguy From Sepherosa Ziehau: additional filter operations for 802.11 frame
yuguy authored
334 struct block *gen_p80211_type(int, int);
740fb43 @yuguy Support OpenBSD's "addr1", "addr2", "addr3", and "addr4" link-layer
yuguy authored
335 struct block *gen_p80211_fcdir(int);
8856701 @yuguy From Sepherosa Ziehau: additional filter operations for 802.11 frame
yuguy authored
336
b11ddf8 Initial revision
mcr authored
337 void bpf_optimize(struct block **);
0e2f8c8 add config.h, remove gnuc.h. remove __dead
assar authored
338 void bpf_error(const char *, ...)
022b629 @yuguy From Albert Chin: just define __attribute__ as an empty macro if we
yuguy authored
339 __attribute__((noreturn, format (printf, 1, 2)));
b11ddf8 Initial revision
mcr authored
340
341 void finish_parse(struct block *);
342 char *sdup(const char *);
343
b274713 @guyharris Make some counts unsigned ("counts" as in "they're always >= 0").
guyharris authored
344 struct bpf_insn *icode_to_fcode(struct block *, u_int *);
b11ddf8 Initial revision
mcr authored
345 int pcap_parse(void);
a6186fa @yuguy Pick up changes from NetBSD:
yuguy authored
346 void lex_init(const char *);
0d0297b @yuguy Older versions of Flex (e.g., 2.5.2, which at least one user had) dump
yuguy authored
347 void lex_cleanup(void);
b11ddf8 Initial revision
mcr authored
348 void sappend(struct slist *, struct slist *);
349
350 /* XXX */
351 #define JT(b) ((b)->et.succ)
352 #define JF(b) ((b)->ef.succ)
7fe3c11 IPv6 packet filtering code.
itojun authored
353
354 extern int no_optimize;
Something went wrong with that request. Please try again.