Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 210 lines (174 sloc) 5.176 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 *
d17596d yuguy Add "ipx", which checks for the LLC SAP for IPX as well as, on Ethernet,
yuguy authored
21 * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.49 2001-01-14 07:57:48 guy Exp $ (LBL)
b11ddf8 Initial revision
mcr authored
22 */
23
24 /* Address qualifiers. */
25
26 #define Q_HOST 1
27 #define Q_NET 2
28 #define Q_PORT 3
29 #define Q_GATEWAY 4
30 #define Q_PROTO 5
7fe3c11 IPv6 packet filtering code.
itojun authored
31 #define Q_PROTOCHAIN 6
b11ddf8 Initial revision
mcr authored
32
33 /* Protocol qualifiers. */
34
35 #define Q_LINK 1
36 #define Q_IP 2
37 #define Q_ARP 3
38 #define Q_RARP 4
39 #define Q_TCP 5
40 #define Q_UDP 6
41 #define Q_ICMP 7
42 #define Q_IGMP 8
43 #define Q_IGRP 9
44
45
46 #define Q_ATALK 10
47 #define Q_DECNET 11
48 #define Q_LAT 12
49 #define Q_SCA 13
50 #define Q_MOPRC 14
51 #define Q_MOPDL 15
52
7fe3c11 IPv6 packet filtering code.
itojun authored
53
54 #define Q_IPV6 16
55 #define Q_ICMPV6 17
56 #define Q_AH 18
57 #define Q_ESP 19
58
59 #define Q_PIM 20
60
54b2ab1 yuguy Patch from Monroe Williams <monroe@pobox.com>, submitted with NetBSD PR
yuguy authored
61 #define Q_AARP 21
62
af30d75 yuguy Tony Li's changes, from FreeBSD, to support filtering for OSI packets
yuguy authored
63 #define Q_ISO 22
64 #define Q_ESIS 23
65 #define Q_ISIS 24
195ad57 yuguy Allow "clnp", as well as "esis" and "isis", as OSI protocols for which
yuguy authored
66 #define Q_CLNP 25
af30d75 yuguy Tony Li's changes, from FreeBSD, to support filtering for OSI packets
yuguy authored
67
2b3dac2 yuguy Support checking for protocols specified by an LLC SAP on FDDI, Token
yuguy authored
68 #define Q_STP 26
69
d17596d yuguy Add "ipx", which checks for the LLC SAP for IPX as well as, on Ethernet,
yuguy authored
70 #define Q_IPX 27
71
b11ddf8 Initial revision
mcr authored
72 /* Directional qualifiers. */
73
74 #define Q_SRC 1
75 #define Q_DST 2
76 #define Q_OR 3
77 #define Q_AND 4
78
79 #define Q_DEFAULT 0
80 #define Q_UNDEF 255
81
7fe3c11 IPv6 packet filtering code.
itojun authored
82 struct slist;
83
b11ddf8 Initial revision
mcr authored
84 struct stmt {
85 int code;
7fe3c11 IPv6 packet filtering code.
itojun authored
86 struct slist *jt; /*only for relative jump in block*/
87 struct slist *jf; /*only for relative jump in block*/
b11ddf8 Initial revision
mcr authored
88 bpf_int32 k;
89 };
90
91 struct slist {
92 struct stmt s;
93 struct slist *next;
94 };
95
96 /*
97 * A bit vector to represent definition sets. We assume TOT_REGISTERS
98 * is smaller than 8*sizeof(atomset).
99 */
100 typedef bpf_u_int32 atomset;
101 #define ATOMMASK(n) (1 << (n))
102 #define ATOMELEM(d, n) (d & ATOMMASK(n))
103
104 /*
105 * An unbounded set.
106 */
107 typedef bpf_u_int32 *uset;
108
109 /*
110 * Total number of atomic entities, including accumulator (A) and index (X).
111 * We treat all these guys similarly during flow analysis.
112 */
113 #define N_ATOMS (BPF_MEMWORDS+2)
114
115 struct edge {
116 int id;
117 int code;
118 uset edom;
119 struct block *succ;
120 struct block *pred;
121 struct edge *next; /* link list of incoming edges for a node */
122 };
123
124 struct block {
125 int id;
126 struct slist *stmts; /* side effect stmts */
127 struct stmt s; /* branch stmt */
128 int mark;
129 int longjt; /* jt branch requires long jump */
130 int longjf; /* jf branch requires long jump */
131 int level;
132 int offset;
133 int sense;
134 struct edge et;
135 struct edge ef;
136 struct block *head;
137 struct block *link; /* link field used by optimizer */
138 uset dom;
139 uset closure;
140 struct edge *in_edges;
141 atomset def, kill;
142 atomset in_use;
143 atomset out_use;
144 int oval;
145 int val[N_ATOMS];
146 };
147
148 struct arth {
149 struct block *b; /* protocol checks */
150 struct slist *s; /* stmt list */
151 int regno; /* virtual register number of result */
152 };
153
154 struct qual {
155 unsigned char addr;
156 unsigned char proto;
157 unsigned char dir;
158 unsigned char pad;
159 };
160
161 struct arth *gen_loadi(int);
162 struct arth *gen_load(int, struct arth *, int);
163 struct arth *gen_loadlen(void);
164 struct arth *gen_neg(struct arth *);
165 struct arth *gen_arth(int, struct arth *, struct arth *);
166
167 void gen_and(struct block *, struct block *);
168 void gen_or(struct block *, struct block *);
169 void gen_not(struct block *);
170
171 struct block *gen_scode(const char *, struct qual);
172 struct block *gen_ecode(const u_char *, struct qual);
173 struct block *gen_mcode(const char *, const char *, int, struct qual);
7fe3c11 IPv6 packet filtering code.
itojun authored
174 #ifdef INET6
175 struct block *gen_mcode6(const char *, const char *, int, struct qual);
176 #endif
b11ddf8 Initial revision
mcr authored
177 struct block *gen_ncode(const char *, bpf_u_int32, struct qual);
178 struct block *gen_proto_abbrev(int);
179 struct block *gen_relation(int, struct arth *, struct arth *, int);
180 struct block *gen_less(int);
181 struct block *gen_greater(int);
182 struct block *gen_byteop(int, int, int);
183 struct block *gen_broadcast(int);
184 struct block *gen_multicast(int);
185 struct block *gen_inbound(int);
186
98a503e yuguy Improved VLAN support, from Peter Jeremy - "vlan" filtering keyword,
yuguy authored
187 struct block *gen_vlan(int);
188
b11ddf8 Initial revision
mcr authored
189 void bpf_optimize(struct block **);
0e2f8c8 add config.h, remove gnuc.h. remove __dead
assar authored
190 void bpf_error(const char *, ...)
417d093 (bpf_error): conditionalize __attribute__
assar authored
191 #if HAVE___ATTRIBUTE__
0e2f8c8 add config.h, remove gnuc.h. remove __dead
assar authored
192 __attribute__((noreturn, format (printf, 1, 2)))
417d093 (bpf_error): conditionalize __attribute__
assar authored
193 #endif
194 ;
b11ddf8 Initial revision
mcr authored
195
196 void finish_parse(struct block *);
197 char *sdup(const char *);
198
199 struct bpf_insn *icode_to_fcode(struct block *, int *);
200 int pcap_parse(void);
201 void lex_init(char *);
0d0297b yuguy Older versions of Flex (e.g., 2.5.2, which at least one user had) dump
yuguy authored
202 void lex_cleanup(void);
b11ddf8 Initial revision
mcr authored
203 void sappend(struct slist *, struct slist *);
204
205 /* XXX */
206 #define JT(b) ((b)->et.succ)
207 #define JF(b) ((b)->ef.succ)
7fe3c11 IPv6 packet filtering code.
itojun authored
208
209 extern int no_optimize;
Something went wrong with that request. Please try again.