source: rtems-libbsd/freebsd/contrib/libpcap/gencode.h @ 8440506

4.1155-freebsd-126-freebsd-12freebsd-9.3
Last change on this file since 8440506 was 8440506, checked in by Chris Johns <chrisj@…>, on 06/15/15 at 07:42:23

Add tcpdump and libpcap.

  • Update the file builder generator to handle generator specific cflags and includes. The tcpdump and libpcap have localised headers and need specific headers paths to see them. There are also module specific flags and these need to be passed to the lex and yacc generators.
  • Add the tcpdump support.
  • Property mode set to 100644
File size: 9.6 KB
Line 
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 *
21 * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.71 2007-11-18 02:03:52 guy Exp $ (LBL)
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.
56 */
57
58#ifndef HAVE___ATTRIBUTE__
59#define __attribute__(x)
60#endif /* HAVE___ATTRIBUTE__ */
61
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
69#define Q_PROTOCHAIN    6
70#define Q_PORTRANGE     7
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
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
84
85
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
92
93
94#define Q_IPV6          17
95#define Q_ICMPV6        18
96#define Q_AH            19
97#define Q_ESP           20
98
99#define Q_PIM           21
100#define Q_VRRP          22
101
102#define Q_AARP          23
103
104#define Q_ISO           24
105#define Q_ESIS          25
106#define Q_ISIS          26
107#define Q_CLNP          27
108
109#define Q_STP           28
110
111#define Q_IPX           29
112
113#define Q_NETBEUI       30
114
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
127#define Q_RADIO         40
128
129#define Q_CARP          41
130
131/* Directional qualifiers. */
132
133#define Q_SRC           1
134#define Q_DST           2
135#define Q_OR            3
136#define Q_AND           4
137#define Q_ADDR1         5
138#define Q_ADDR2         6
139#define Q_ADDR3         7
140#define Q_ADDR4         8
141#define Q_RA            9
142#define Q_TA            10
143
144#define Q_DEFAULT       0
145#define Q_UNDEF         255
146
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
184/* MTP2 types */
185#define M_FISU          22      /* FISU */
186#define M_LSSU          23      /* LSSU */
187#define M_MSU           24      /* MSU */
188
189/* MTP3 field types */
190#define M_SIO           1
191#define M_OPC           2
192#define M_DPC           3
193#define M_SLS           4
194
195
196struct slist;
197
198struct stmt {
199        int code;
200        struct slist *jt;       /*only for relative jump in block*/
201        struct slist *jf;       /*only for relative jump in block*/
202        bpf_int32 k;
203};
204
205struct slist {
206        struct stmt s;
207        struct slist *next;
208};
209
210/*
211 * A bit vector to represent definition sets.  We assume TOT_REGISTERS
212 * is smaller than 8*sizeof(atomset).
213 */
214typedef bpf_u_int32 atomset;
215#define ATOMMASK(n) (1 << (n))
216#define ATOMELEM(d, n) (d & ATOMMASK(n))
217
218/*
219 * An unbounded set.
220 */
221typedef bpf_u_int32 *uset;
222
223/*
224 * Total number of atomic entities, including accumulator (A) and index (X).
225 * We treat all these guys similarly during flow analysis.
226 */
227#define N_ATOMS (BPF_MEMWORDS+2)
228
229struct edge {
230        int id;
231        int code;
232        uset edom;
233        struct block *succ;
234        struct block *pred;
235        struct edge *next;      /* link list of incoming edges for a node */
236};
237
238struct block {
239        int id;
240        struct slist *stmts;    /* side effect stmts */
241        struct stmt s;          /* branch stmt */
242        int mark;
243        u_int longjt;           /* jt branch requires long jump */
244        u_int longjf;           /* jf branch requires long jump */
245        int level;
246        int offset;
247        int sense;
248        struct edge et;
249        struct edge ef;
250        struct block *head;
251        struct block *link;     /* link field used by optimizer */
252        uset dom;
253        uset closure;
254        struct edge *in_edges;
255        atomset def, kill;
256        atomset in_use;
257        atomset out_use;
258        int oval;
259        int val[N_ATOMS];
260};
261
262struct arth {
263        struct block *b;        /* protocol checks */
264        struct slist *s;        /* stmt list */
265        int regno;              /* virtual register number of result */
266};
267
268struct qual {
269        unsigned char addr;
270        unsigned char proto;
271        unsigned char dir;
272        unsigned char pad;
273};
274
275struct arth *gen_loadi(int);
276struct arth *gen_load(int, struct arth *, int);
277struct arth *gen_loadlen(void);
278struct arth *gen_neg(struct arth *);
279struct arth *gen_arth(int, struct arth *, struct arth *);
280
281void gen_and(struct block *, struct block *);
282void gen_or(struct block *, struct block *);
283void gen_not(struct block *);
284
285struct block *gen_scode(const char *, struct qual);
286struct block *gen_ecode(const u_char *, struct qual);
287struct block *gen_acode(const u_char *, struct qual);
288struct block *gen_mcode(const char *, const char *, int, struct qual);
289#ifdef INET6
290struct block *gen_mcode6(const char *, const char *, int, struct qual);
291#endif
292struct block *gen_ncode(const char *, bpf_u_int32, struct qual);
293struct block *gen_proto_abbrev(int);
294struct block *gen_relation(int, struct arth *, struct arth *, int);
295struct block *gen_less(int);
296struct block *gen_greater(int);
297struct block *gen_byteop(int, int, int);
298struct block *gen_broadcast(int);
299struct block *gen_multicast(int);
300struct block *gen_inbound(int);
301
302struct block *gen_vlan(int);
303struct block *gen_mpls(int);
304
305struct block *gen_pppoed(void);
306struct block *gen_pppoes(void);
307
308struct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtype, int reverse);
309struct block *gen_atmtype_abbrev(int type);
310struct block *gen_atmmulti_abbrev(int type);
311
312struct block *gen_mtp2type_abbrev(int type);
313struct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse);
314
315struct block *gen_pf_ifname(const char *);
316struct block *gen_pf_rnr(int);
317struct block *gen_pf_srnr(int);
318struct block *gen_pf_ruleset(char *);
319struct block *gen_pf_reason(int);
320struct block *gen_pf_action(int);
321struct block *gen_pf_dir(int);
322
323struct block *gen_p80211_type(int, int);
324struct block *gen_p80211_fcdir(int);
325
326void bpf_optimize(struct block **);
327void bpf_error(const char *, ...)
328    __attribute__((noreturn, format (printf, 1, 2)));
329
330void finish_parse(struct block *);
331char *sdup(const char *);
332
333struct bpf_insn *icode_to_fcode(struct block *, u_int *);
334int pcap_parse(void);
335void lex_init(const char *);
336void lex_cleanup(void);
337void sappend(struct slist *, struct slist *);
338
339/* XXX */
340#define JT(b)  ((b)->et.succ)
341#define JF(b)  ((b)->ef.succ)
342
343extern int no_optimize;
Note: See TracBrowser for help on using the repository browser.