1/*
2 * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998
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
22#ifdef HAVE_CONFIG_H
23#include <config.h>
24#endif
25
26#ifdef _WIN32
27  #include <ws2tcpip.h>
28#else
29  #include <sys/socket.h>
30
31  #ifdef __NetBSD__
32    #include <sys/param.h>
33  #endif
34
35  #include <netinet/in.h>
36  #include <arpa/inet.h>
37#endif /* _WIN32 */
38
39#include <stdlib.h>
40#include <string.h>
41#include <memory.h>
42#include <setjmp.h>
43#include <stdarg.h>
44#include <stdio.h>
45
46#ifdef MSDOS
47#include "pcap-dos.h"
48#endif
49
50#include "pcap-int.h"
51
52#include "extract.h"
53
54#include "ethertype.h"
55#include "nlpid.h"
56#include "llc.h"
57#include "gencode.h"
58#include "ieee80211.h"
59#include "atmuni31.h"
60#include "sunatmpos.h"
61#include "pflog.h"
62#include "ppp.h"
63#include "pcap/sll.h"
64#include "pcap/ipnet.h"
65#include "arcnet.h"
66#include "diag-control.h"
67
68#include "scanner.h"
69
70#if defined(linux)
71#include <linux/types.h>
72#include <linux/if_packet.h>
73#include <linux/filter.h>
74#endif
75
76#ifndef offsetof
77#define offsetof(s, e) ((size_t)&((s *)0)->e)
78#endif
79
80#ifdef _WIN32
81  #ifdef INET6
82    #if defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF)
83/* IPv6 address */
84struct in6_addr
85  {
86    union
87      {
88	uint8_t		u6_addr8[16];
89	uint16_t	u6_addr16[8];
90	uint32_t	u6_addr32[4];
91      } in6_u;
92#define s6_addr			in6_u.u6_addr8
93#define s6_addr16		in6_u.u6_addr16
94#define s6_addr32		in6_u.u6_addr32
95#define s6_addr64		in6_u.u6_addr64
96  };
97
98typedef unsigned short	sa_family_t;
99
100#define	__SOCKADDR_COMMON(sa_prefix) \
101  sa_family_t sa_prefix##family
102
103/* Ditto, for IPv6.  */
104struct sockaddr_in6
105  {
106    __SOCKADDR_COMMON (sin6_);
107    uint16_t sin6_port;		/* Transport layer port # */
108    uint32_t sin6_flowinfo;	/* IPv6 flow information */
109    struct in6_addr sin6_addr;	/* IPv6 address */
110  };
111
112      #ifndef EAI_ADDRFAMILY
113struct addrinfo {
114	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */
115	int	ai_family;	/* PF_xxx */
116	int	ai_socktype;	/* SOCK_xxx */
117	int	ai_protocol;	/* 0 or IPPROTO_xxx for IPv4 and IPv6 */
118	size_t	ai_addrlen;	/* length of ai_addr */
119	char	*ai_canonname;	/* canonical name for hostname */
120	struct sockaddr *ai_addr;	/* binary address */
121	struct addrinfo *ai_next;	/* next structure in linked list */
122};
123      #endif /* EAI_ADDRFAMILY */
124    #endif /* defined(__MINGW32__) && defined(DEFINE_ADDITIONAL_IPV6_STUFF) */
125  #endif /* INET6 */
126#else /* _WIN32 */
127  #include <netdb.h>	/* for "struct addrinfo" */
128#endif /* _WIN32 */
129#include <pcap/namedb.h>
130
131#include "nametoaddr.h"
132
133#define ETHERMTU	1500
134
135#ifndef IPPROTO_HOPOPTS
136#define IPPROTO_HOPOPTS 0
137#endif
138#ifndef IPPROTO_ROUTING
139#define IPPROTO_ROUTING 43
140#endif
141#ifndef IPPROTO_FRAGMENT
142#define IPPROTO_FRAGMENT 44
143#endif
144#ifndef IPPROTO_DSTOPTS
145#define IPPROTO_DSTOPTS 60
146#endif
147#ifndef IPPROTO_SCTP
148#define IPPROTO_SCTP 132
149#endif
150
151#define GENEVE_PORT 6081
152
153#ifdef HAVE_OS_PROTO_H
154#include "os-proto.h"
155#endif
156
157#define JMP(c) ((c)|BPF_JMP|BPF_K)
158
159/*
160 * "Push" the current value of the link-layer header type and link-layer
161 * header offset onto a "stack", and set a new value.  (It's not a
162 * full-blown stack; we keep only the top two items.)
163 */
164#define PUSH_LINKHDR(cs, new_linktype, new_is_variable, new_constant_part, new_reg) \
165{ \
166	(cs)->prevlinktype = (cs)->linktype; \
167	(cs)->off_prevlinkhdr = (cs)->off_linkhdr; \
168	(cs)->linktype = (new_linktype); \
169	(cs)->off_linkhdr.is_variable = (new_is_variable); \
170	(cs)->off_linkhdr.constant_part = (new_constant_part); \
171	(cs)->off_linkhdr.reg = (new_reg); \
172	(cs)->is_geneve = 0; \
173}
174
175/*
176 * Offset "not set" value.
177 */
178#define OFFSET_NOT_SET	0xffffffffU
179
180/*
181 * Absolute offsets, which are offsets from the beginning of the raw
182 * packet data, are, in the general case, the sum of a variable value
183 * and a constant value; the variable value may be absent, in which
184 * case the offset is only the constant value, and the constant value
185 * may be zero, in which case the offset is only the variable value.
186 *
187 * bpf_abs_offset is a structure containing all that information:
188 *
189 *   is_variable is 1 if there's a variable part.
190 *
191 *   constant_part is the constant part of the value, possibly zero;
192 *
193 *   if is_variable is 1, reg is the register number for a register
194 *   containing the variable value if the register has been assigned,
195 *   and -1 otherwise.
196 */
197typedef struct {
198	int	is_variable;
199	u_int	constant_part;
200	int	reg;
201} bpf_abs_offset;
202
203/*
204 * Value passed to gen_load_a() to indicate what the offset argument
205 * is relative to the beginning of.
206 */
207enum e_offrel {
208	OR_PACKET,		/* full packet data */
209	OR_LINKHDR,		/* link-layer header */
210	OR_PREVLINKHDR,		/* previous link-layer header */
211	OR_LLC,			/* 802.2 LLC header */
212	OR_PREVMPLSHDR,		/* previous MPLS header */
213	OR_LINKTYPE,		/* link-layer type */
214	OR_LINKPL,		/* link-layer payload */
215	OR_LINKPL_NOSNAP,	/* link-layer payload, with no SNAP header at the link layer */
216	OR_TRAN_IPV4,		/* transport-layer header, with IPv4 network layer */
217	OR_TRAN_IPV6		/* transport-layer header, with IPv6 network layer */
218};
219
220/*
221 * We divy out chunks of memory rather than call malloc each time so
222 * we don't have to worry about leaking memory.  It's probably
223 * not a big deal if all this memory was wasted but if this ever
224 * goes into a library that would probably not be a good idea.
225 *
226 * XXX - this *is* in a library....
227 */
228#define NCHUNKS 16
229#define CHUNK0SIZE 1024
230struct chunk {
231	size_t n_left;
232	void *m;
233};
234
235/* Code generator state */
236
237struct _compiler_state {
238	jmp_buf top_ctx;
239	pcap_t *bpf_pcap;
240	int error_set;
241
242	struct icode ic;
243
244	int snaplen;
245
246	int linktype;
247	int prevlinktype;
248	int outermostlinktype;
249
250	bpf_u_int32 netmask;
251	int no_optimize;
252
253	/* Hack for handling VLAN and MPLS stacks. */
254	u_int label_stack_depth;
255	u_int vlan_stack_depth;
256
257	/* XXX */
258	u_int pcap_fddipad;
259
260	/*
261	 * As errors are handled by a longjmp, anything allocated must
262	 * be freed in the longjmp handler, so it must be reachable
263	 * from that handler.
264	 *
265	 * One thing that's allocated is the result of pcap_nametoaddrinfo();
266	 * it must be freed with freeaddrinfo().  This variable points to
267	 * any addrinfo structure that would need to be freed.
268	 */
269	struct addrinfo *ai;
270
271	/*
272	 * Another thing that's allocated is the result of pcap_ether_aton();
273	 * it must be freed with free().  This variable points to any
274	 * address that would need to be freed.
275	 */
276	u_char *e;
277
278	/*
279	 * Various code constructs need to know the layout of the packet.
280	 * These values give the necessary offsets from the beginning
281	 * of the packet data.
282	 */
283
284	/*
285	 * Absolute offset of the beginning of the link-layer header.
286	 */
287	bpf_abs_offset off_linkhdr;
288
289	/*
290	 * If we're checking a link-layer header for a packet encapsulated
291	 * in another protocol layer, this is the equivalent information
292	 * for the previous layers' link-layer header from the beginning
293	 * of the raw packet data.
294	 */
295	bpf_abs_offset off_prevlinkhdr;
296
297	/*
298	 * This is the equivalent information for the outermost layers'
299	 * link-layer header.
300	 */
301	bpf_abs_offset off_outermostlinkhdr;
302
303	/*
304	 * Absolute offset of the beginning of the link-layer payload.
305	 */
306	bpf_abs_offset off_linkpl;
307
308	/*
309	 * "off_linktype" is the offset to information in the link-layer
310	 * header giving the packet type. This is an absolute offset
311	 * from the beginning of the packet.
312	 *
313	 * For Ethernet, it's the offset of the Ethernet type field; this
314	 * means that it must have a value that skips VLAN tags.
315	 *
316	 * For link-layer types that always use 802.2 headers, it's the
317	 * offset of the LLC header; this means that it must have a value
318	 * that skips VLAN tags.
319	 *
320	 * For PPP, it's the offset of the PPP type field.
321	 *
322	 * For Cisco HDLC, it's the offset of the CHDLC type field.
323	 *
324	 * For BSD loopback, it's the offset of the AF_ value.
325	 *
326	 * For Linux cooked sockets, it's the offset of the type field.
327	 *
328	 * off_linktype.constant_part is set to OFFSET_NOT_SET for no
329	 * encapsulation, in which case, IP is assumed.
330	 */
331	bpf_abs_offset off_linktype;
332
333	/*
334	 * TRUE if the link layer includes an ATM pseudo-header.
335	 */
336	int is_atm;
337
338	/*
339	 * TRUE if "geneve" appeared in the filter; it causes us to
340	 * generate code that checks for a Geneve header and assume
341	 * that later filters apply to the encapsulated payload.
342	 */
343	int is_geneve;
344
345	/*
346	 * TRUE if we need variable length part of VLAN offset
347	 */
348	int is_vlan_vloffset;
349
350	/*
351	 * These are offsets for the ATM pseudo-header.
352	 */
353	u_int off_vpi;
354	u_int off_vci;
355	u_int off_proto;
356
357	/*
358	 * These are offsets for the MTP2 fields.
359	 */
360	u_int off_li;
361	u_int off_li_hsl;
362
363	/*
364	 * These are offsets for the MTP3 fields.
365	 */
366	u_int off_sio;
367	u_int off_opc;
368	u_int off_dpc;
369	u_int off_sls;
370
371	/*
372	 * This is the offset of the first byte after the ATM pseudo_header,
373	 * or -1 if there is no ATM pseudo-header.
374	 */
375	u_int off_payload;
376
377	/*
378	 * These are offsets to the beginning of the network-layer header.
379	 * They are relative to the beginning of the link-layer payload
380	 * (i.e., they don't include off_linkhdr.constant_part or
381	 * off_linkpl.constant_part).
382	 *
383	 * If the link layer never uses 802.2 LLC:
384	 *
385	 *	"off_nl" and "off_nl_nosnap" are the same.
386	 *
387	 * If the link layer always uses 802.2 LLC:
388	 *
389	 *	"off_nl" is the offset if there's a SNAP header following
390	 *	the 802.2 header;
391	 *
392	 *	"off_nl_nosnap" is the offset if there's no SNAP header.
393	 *
394	 * If the link layer is Ethernet:
395	 *
396	 *	"off_nl" is the offset if the packet is an Ethernet II packet
397	 *	(we assume no 802.3+802.2+SNAP);
398	 *
399	 *	"off_nl_nosnap" is the offset if the packet is an 802.3 packet
400	 *	with an 802.2 header following it.
401	 */
402	u_int off_nl;
403	u_int off_nl_nosnap;
404
405	/*
406	 * Here we handle simple allocation of the scratch registers.
407	 * If too many registers are alloc'd, the allocator punts.
408	 */
409	int regused[BPF_MEMWORDS];
410	int curreg;
411
412	/*
413	 * Memory chunks.
414	 */
415	struct chunk chunks[NCHUNKS];
416	int cur_chunk;
417};
418
419/*
420 * For use by routines outside this file.
421 */
422/* VARARGS */
423void
424bpf_set_error(compiler_state_t *cstate, const char *fmt, ...)
425{
426	va_list ap;
427
428	/*
429	 * If we've already set an error, don't override it.
430	 * The lexical analyzer reports some errors by setting
431	 * the error and then returning a LEX_ERROR token, which
432	 * is not recognized by any grammar rule, and thus forces
433	 * the parse to stop.  We don't want the error reported
434	 * by the lexical analyzer to be overwritten by the syntax
435	 * error.
436	 */
437	if (!cstate->error_set) {
438		va_start(ap, fmt);
439		(void)vsnprintf(cstate->bpf_pcap->errbuf, PCAP_ERRBUF_SIZE,
440		    fmt, ap);
441		va_end(ap);
442		cstate->error_set = 1;
443	}
444}
445
446/*
447 * For use *ONLY* in routines in this file.
448 */
449static void PCAP_NORETURN bpf_error(compiler_state_t *, const char *, ...)
450    PCAP_PRINTFLIKE(2, 3);
451
452/* VARARGS */
453static void PCAP_NORETURN
454bpf_error(compiler_state_t *cstate, const char *fmt, ...)
455{
456	va_list ap;
457
458	va_start(ap, fmt);
459	(void)vsnprintf(cstate->bpf_pcap->errbuf, PCAP_ERRBUF_SIZE,
460	    fmt, ap);
461	va_end(ap);
462	longjmp(cstate->top_ctx, 1);
463	/*NOTREACHED*/
464#ifdef _AIX
465	PCAP_UNREACHABLE
466#endif /* _AIX */
467}
468
469static int init_linktype(compiler_state_t *, pcap_t *);
470
471static void init_regs(compiler_state_t *);
472static int alloc_reg(compiler_state_t *);
473static void free_reg(compiler_state_t *, int);
474
475static void initchunks(compiler_state_t *cstate);
476static void *newchunk_nolongjmp(compiler_state_t *cstate, size_t);
477static void *newchunk(compiler_state_t *cstate, size_t);
478static void freechunks(compiler_state_t *cstate);
479static inline struct block *new_block(compiler_state_t *cstate, int);
480static inline struct slist *new_stmt(compiler_state_t *cstate, int);
481static struct block *gen_retblk(compiler_state_t *cstate, int);
482static inline void syntax(compiler_state_t *cstate);
483
484static void backpatch(struct block *, struct block *);
485static void merge(struct block *, struct block *);
486static struct block *gen_cmp(compiler_state_t *, enum e_offrel, u_int,
487    u_int, bpf_u_int32);
488static struct block *gen_cmp_gt(compiler_state_t *, enum e_offrel, u_int,
489    u_int, bpf_u_int32);
490static struct block *gen_cmp_ge(compiler_state_t *, enum e_offrel, u_int,
491    u_int, bpf_u_int32);
492static struct block *gen_cmp_lt(compiler_state_t *, enum e_offrel, u_int,
493    u_int, bpf_u_int32);
494static struct block *gen_cmp_le(compiler_state_t *, enum e_offrel, u_int,
495    u_int, bpf_u_int32);
496static struct block *gen_mcmp(compiler_state_t *, enum e_offrel, u_int,
497    u_int, bpf_u_int32, bpf_u_int32);
498static struct block *gen_bcmp(compiler_state_t *, enum e_offrel, u_int,
499    u_int, const u_char *);
500static struct block *gen_ncmp(compiler_state_t *, enum e_offrel, u_int,
501    u_int, bpf_u_int32, int, int, bpf_u_int32);
502static struct slist *gen_load_absoffsetrel(compiler_state_t *, bpf_abs_offset *,
503    u_int, u_int);
504static struct slist *gen_load_a(compiler_state_t *, enum e_offrel, u_int,
505    u_int);
506static struct slist *gen_loadx_iphdrlen(compiler_state_t *);
507static struct block *gen_uncond(compiler_state_t *, int);
508static inline struct block *gen_true(compiler_state_t *);
509static inline struct block *gen_false(compiler_state_t *);
510static struct block *gen_ether_linktype(compiler_state_t *, bpf_u_int32);
511static struct block *gen_ipnet_linktype(compiler_state_t *, bpf_u_int32);
512static struct block *gen_linux_sll_linktype(compiler_state_t *, bpf_u_int32);
513static struct slist *gen_load_pflog_llprefixlen(compiler_state_t *);
514static struct slist *gen_load_prism_llprefixlen(compiler_state_t *);
515static struct slist *gen_load_avs_llprefixlen(compiler_state_t *);
516static struct slist *gen_load_radiotap_llprefixlen(compiler_state_t *);
517static struct slist *gen_load_ppi_llprefixlen(compiler_state_t *);
518static void insert_compute_vloffsets(compiler_state_t *, struct block *);
519static struct slist *gen_abs_offset_varpart(compiler_state_t *,
520    bpf_abs_offset *);
521static bpf_u_int32 ethertype_to_ppptype(bpf_u_int32);
522static struct block *gen_linktype(compiler_state_t *, bpf_u_int32);
523static struct block *gen_snap(compiler_state_t *, bpf_u_int32, bpf_u_int32);
524static struct block *gen_llc_linktype(compiler_state_t *, bpf_u_int32);
525static struct block *gen_hostop(compiler_state_t *, bpf_u_int32, bpf_u_int32,
526    int, bpf_u_int32, u_int, u_int);
527#ifdef INET6
528static struct block *gen_hostop6(compiler_state_t *, struct in6_addr *,
529    struct in6_addr *, int, bpf_u_int32, u_int, u_int);
530#endif
531static struct block *gen_ahostop(compiler_state_t *, const u_char *, int);
532static struct block *gen_ehostop(compiler_state_t *, const u_char *, int);
533static struct block *gen_fhostop(compiler_state_t *, const u_char *, int);
534static struct block *gen_thostop(compiler_state_t *, const u_char *, int);
535static struct block *gen_wlanhostop(compiler_state_t *, const u_char *, int);
536static struct block *gen_ipfchostop(compiler_state_t *, const u_char *, int);
537static struct block *gen_dnhostop(compiler_state_t *, bpf_u_int32, int);
538static struct block *gen_mpls_linktype(compiler_state_t *, bpf_u_int32);
539static struct block *gen_host(compiler_state_t *, bpf_u_int32, bpf_u_int32,
540    int, int, int);
541#ifdef INET6
542static struct block *gen_host6(compiler_state_t *, struct in6_addr *,
543    struct in6_addr *, int, int, int);
544#endif
545#ifndef INET6
546static struct block *gen_gateway(compiler_state_t *, const u_char *,
547    struct addrinfo *, int, int);
548#endif
549static struct block *gen_ipfrag(compiler_state_t *);
550static struct block *gen_portatom(compiler_state_t *, int, bpf_u_int32);
551static struct block *gen_portrangeatom(compiler_state_t *, u_int, bpf_u_int32,
552    bpf_u_int32);
553static struct block *gen_portatom6(compiler_state_t *, int, bpf_u_int32);
554static struct block *gen_portrangeatom6(compiler_state_t *, u_int, bpf_u_int32,
555    bpf_u_int32);
556static struct block *gen_portop(compiler_state_t *, u_int, u_int, int);
557static struct block *gen_port(compiler_state_t *, u_int, int, int);
558static struct block *gen_portrangeop(compiler_state_t *, u_int, u_int,
559    bpf_u_int32, int);
560static struct block *gen_portrange(compiler_state_t *, u_int, u_int, int, int);
561struct block *gen_portop6(compiler_state_t *, u_int, u_int, int);
562static struct block *gen_port6(compiler_state_t *, u_int, int, int);
563static struct block *gen_portrangeop6(compiler_state_t *, u_int, u_int,
564    bpf_u_int32, int);
565static struct block *gen_portrange6(compiler_state_t *, u_int, u_int, int, int);
566static int lookup_proto(compiler_state_t *, const char *, int);
567#if !defined(NO_PROTOCHAIN)
568static struct block *gen_protochain(compiler_state_t *, bpf_u_int32, int);
569#endif /* !defined(NO_PROTOCHAIN) */
570static struct block *gen_proto(compiler_state_t *, bpf_u_int32, int, int);
571static struct slist *xfer_to_x(compiler_state_t *, struct arth *);
572static struct slist *xfer_to_a(compiler_state_t *, struct arth *);
573static struct block *gen_mac_multicast(compiler_state_t *, int);
574static struct block *gen_len(compiler_state_t *, int, int);
575static struct block *gen_check_802_11_data_frame(compiler_state_t *);
576static struct block *gen_geneve_ll_check(compiler_state_t *cstate);
577
578static struct block *gen_ppi_dlt_check(compiler_state_t *);
579static struct block *gen_atmfield_code_internal(compiler_state_t *, int,
580    bpf_u_int32, int, int);
581static struct block *gen_atmtype_llc(compiler_state_t *);
582static struct block *gen_msg_abbrev(compiler_state_t *, int type);
583
584static void
585initchunks(compiler_state_t *cstate)
586{
587	int i;
588
589	for (i = 0; i < NCHUNKS; i++) {
590		cstate->chunks[i].n_left = 0;
591		cstate->chunks[i].m = NULL;
592	}
593	cstate->cur_chunk = 0;
594}
595
596static void *
597newchunk_nolongjmp(compiler_state_t *cstate, size_t n)
598{
599	struct chunk *cp;
600	int k;
601	size_t size;
602
603#ifndef __NetBSD__
604	/* XXX Round up to nearest long. */
605	n = (n + sizeof(long) - 1) & ~(sizeof(long) - 1);
606#else
607	/* XXX Round up to structure boundary. */
608	n = ALIGN(n);
609#endif
610
611	cp = &cstate->chunks[cstate->cur_chunk];
612	if (n > cp->n_left) {
613		++cp;
614		k = ++cstate->cur_chunk;
615		if (k >= NCHUNKS) {
616			bpf_set_error(cstate, "out of memory");
617			return (NULL);
618		}
619		size = CHUNK0SIZE << k;
620		cp->m = (void *)malloc(size);
621		if (cp->m == NULL) {
622			bpf_set_error(cstate, "out of memory");
623			return (NULL);
624		}
625		memset((char *)cp->m, 0, size);
626		cp->n_left = size;
627		if (n > size) {
628			bpf_set_error(cstate, "out of memory");
629			return (NULL);
630		}
631	}
632	cp->n_left -= n;
633	return (void *)((char *)cp->m + cp->n_left);
634}
635
636static void *
637newchunk(compiler_state_t *cstate, size_t n)
638{
639	void *p;
640
641	p = newchunk_nolongjmp(cstate, n);
642	if (p == NULL) {
643		longjmp(cstate->top_ctx, 1);
644		/*NOTREACHED*/
645	}
646	return (p);
647}
648
649static void
650freechunks(compiler_state_t *cstate)
651{
652	int i;
653
654	for (i = 0; i < NCHUNKS; ++i)
655		if (cstate->chunks[i].m != NULL)
656			free(cstate->chunks[i].m);
657}
658
659/*
660 * A strdup whose allocations are freed after code generation is over.
661 * This is used by the lexical analyzer, so it can't longjmp; it just
662 * returns NULL on an allocation error, and the callers must check
663 * for it.
664 */
665char *
666sdup(compiler_state_t *cstate, const char *s)
667{
668	size_t n = strlen(s) + 1;
669	char *cp = newchunk_nolongjmp(cstate, n);
670
671	if (cp == NULL)
672		return (NULL);
673	pcap_strlcpy(cp, s, n);
674	return (cp);
675}
676
677static inline struct block *
678new_block(compiler_state_t *cstate, int code)
679{
680	struct block *p;
681
682	p = (struct block *)newchunk(cstate, sizeof(*p));
683	p->s.code = code;
684	p->head = p;
685
686	return p;
687}
688
689static inline struct slist *
690new_stmt(compiler_state_t *cstate, int code)
691{
692	struct slist *p;
693
694	p = (struct slist *)newchunk(cstate, sizeof(*p));
695	p->s.code = code;
696
697	return p;
698}
699
700static struct block *
701gen_retblk(compiler_state_t *cstate, int v)
702{
703	struct block *b = new_block(cstate, BPF_RET|BPF_K);
704
705	b->s.k = v;
706	return b;
707}
708
709static inline PCAP_NORETURN_DEF void
710syntax(compiler_state_t *cstate)
711{
712	bpf_error(cstate, "syntax error in filter expression");
713}
714
715int
716pcap_compile(pcap_t *p, struct bpf_program *program,
717	     const char *buf, int optimize, bpf_u_int32 mask)
718{
719#ifdef _WIN32
720	static int done = 0;
721#endif
722	compiler_state_t cstate;
723	const char * volatile xbuf = buf;
724	yyscan_t scanner = NULL;
725	volatile YY_BUFFER_STATE in_buffer = NULL;
726	u_int len;
727	int  rc;
728
729	/*
730	 * If this pcap_t hasn't been activated, it doesn't have a
731	 * link-layer type, so we can't use it.
732	 */
733	if (!p->activated) {
734		snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
735		    "not-yet-activated pcap_t passed to pcap_compile");
736		return (PCAP_ERROR);
737	}
738
739#ifdef _WIN32
740	if (!done)
741		pcap_wsockinit();
742	done = 1;
743#endif
744
745#ifdef ENABLE_REMOTE
746	/*
747	 * If the device on which we're capturing need to be notified
748	 * that a new filter is being compiled, do so.
749	 *
750	 * This allows them to save a copy of it, in case, for example,
751	 * they're implementing a form of remote packet capture, and
752	 * want the remote machine to filter out the packets in which
753	 * it's sending the packets it's captured.
754	 *
755	 * XXX - the fact that we happen to be compiling a filter
756	 * doesn't necessarily mean we'll be installing it as the
757	 * filter for this pcap_t; we might be running it from userland
758	 * on captured packets to do packet classification.  We really
759	 * need a better way of handling this, but this is all that
760	 * the WinPcap remote capture code did.
761	 */
762	if (p->save_current_filter_op != NULL)
763		(p->save_current_filter_op)(p, buf);
764#endif
765
766	initchunks(&cstate);
767	cstate.no_optimize = 0;
768#ifdef INET6
769	cstate.ai = NULL;
770#endif
771	cstate.e = NULL;
772	cstate.ic.root = NULL;
773	cstate.ic.cur_mark = 0;
774	cstate.bpf_pcap = p;
775	cstate.error_set = 0;
776	init_regs(&cstate);
777
778	cstate.netmask = mask;
779
780	cstate.snaplen = pcap_snapshot(p);
781	if (cstate.snaplen == 0) {
782		snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
783			 "snaplen of 0 rejects all packets");
784		rc = PCAP_ERROR;
785		goto quit;
786	}
787
788	if (pcap_lex_init(&scanner) != 0)
789		pcap_fmt_errmsg_for_errno(p->errbuf, PCAP_ERRBUF_SIZE,
790		    errno, "can't initialize scanner");
791	in_buffer = pcap__scan_string(xbuf ? xbuf : "", scanner);
792
793	/*
794	 * Associate the compiler state with the lexical analyzer
795	 * state.
796	 */
797	pcap_set_extra(&cstate, scanner);
798
799	if (init_linktype(&cstate, p) == -1) {
800		rc = PCAP_ERROR;
801		goto quit;
802	}
803	if (pcap_parse(scanner, &cstate) != 0) {
804#ifdef INET6
805		if (cstate.ai != NULL)
806			freeaddrinfo(cstate.ai);
807#endif
808		if (cstate.e != NULL)
809			free(cstate.e);
810		rc = PCAP_ERROR;
811		goto quit;
812	}
813
814	if (cstate.ic.root == NULL) {
815		/*
816		 * Catch errors reported by gen_retblk().
817		 */
818		if (setjmp(cstate.top_ctx)) {
819			rc = PCAP_ERROR;
820			goto quit;
821		}
822		cstate.ic.root = gen_retblk(&cstate, cstate.snaplen);
823	}
824
825	if (optimize && !cstate.no_optimize) {
826		if (bpf_optimize(&cstate.ic, p->errbuf) == -1) {
827			/* Failure */
828			rc = PCAP_ERROR;
829			goto quit;
830		}
831		if (cstate.ic.root == NULL ||
832		    (cstate.ic.root->s.code == (BPF_RET|BPF_K) && cstate.ic.root->s.k == 0)) {
833			(void)snprintf(p->errbuf, PCAP_ERRBUF_SIZE,
834			    "expression rejects all packets");
835			rc = PCAP_ERROR;
836			goto quit;
837		}
838	}
839	program->bf_insns = icode_to_fcode(&cstate.ic,
840	    cstate.ic.root, &len, p->errbuf);
841	if (program->bf_insns == NULL) {
842		/* Failure */
843		rc = PCAP_ERROR;
844		goto quit;
845	}
846	program->bf_len = len;
847
848	rc = 0;  /* We're all okay */
849
850quit:
851	/*
852	 * Clean up everything for the lexical analyzer.
853	 */
854	if (in_buffer != NULL)
855		pcap__delete_buffer(in_buffer, scanner);
856	if (scanner != NULL)
857		pcap_lex_destroy(scanner);
858
859	/*
860	 * Clean up our own allocated memory.
861	 */
862	freechunks(&cstate);
863
864	return (rc);
865}
866
867/*
868 * entry point for using the compiler with no pcap open
869 * pass in all the stuff that is needed explicitly instead.
870 */
871int
872pcap_compile_nopcap(int snaplen_arg, int linktype_arg,
873		    struct bpf_program *program,
874	     const char *buf, int optimize, bpf_u_int32 mask)
875{
876	pcap_t *p;
877	int ret;
878
879	p = pcap_open_dead(linktype_arg, snaplen_arg);
880	if (p == NULL)
881		return (PCAP_ERROR);
882	ret = pcap_compile(p, program, buf, optimize, mask);
883	pcap_close(p);
884	return (ret);
885}
886
887/*
888 * Clean up a "struct bpf_program" by freeing all the memory allocated
889 * in it.
890 */
891void
892pcap_freecode(struct bpf_program *program)
893{
894	program->bf_len = 0;
895	if (program->bf_insns != NULL) {
896		free((char *)program->bf_insns);
897		program->bf_insns = NULL;
898	}
899}
900
901/*
902 * Backpatch the blocks in 'list' to 'target'.  The 'sense' field indicates
903 * which of the jt and jf fields has been resolved and which is a pointer
904 * back to another unresolved block (or nil).  At least one of the fields
905 * in each block is already resolved.
906 */
907static void
908backpatch(struct block *list, struct block *target)
909{
910	struct block *next;
911
912	while (list) {
913		if (!list->sense) {
914			next = JT(list);
915			JT(list) = target;
916		} else {
917			next = JF(list);
918			JF(list) = target;
919		}
920		list = next;
921	}
922}
923
924/*
925 * Merge the lists in b0 and b1, using the 'sense' field to indicate
926 * which of jt and jf is the link.
927 */
928static void
929merge(struct block *b0, struct block *b1)
930{
931	register struct block **p = &b0;
932
933	/* Find end of list. */
934	while (*p)
935		p = !((*p)->sense) ? &JT(*p) : &JF(*p);
936
937	/* Concatenate the lists. */
938	*p = b1;
939}
940
941int
942finish_parse(compiler_state_t *cstate, struct block *p)
943{
944	struct block *ppi_dlt_check;
945
946	/*
947	 * Catch errors reported by us and routines below us, and return -1
948	 * on an error.
949	 */
950	if (setjmp(cstate->top_ctx))
951		return (-1);
952
953	/*
954	 * Insert before the statements of the first (root) block any
955	 * statements needed to load the lengths of any variable-length
956	 * headers into registers.
957	 *
958	 * XXX - a fancier strategy would be to insert those before the
959	 * statements of all blocks that use those lengths and that
960	 * have no predecessors that use them, so that we only compute
961	 * the lengths if we need them.  There might be even better
962	 * approaches than that.
963	 *
964	 * However, those strategies would be more complicated, and
965	 * as we don't generate code to compute a length if the
966	 * program has no tests that use the length, and as most
967	 * tests will probably use those lengths, we would just
968	 * postpone computing the lengths so that it's not done
969	 * for tests that fail early, and it's not clear that's
970	 * worth the effort.
971	 */
972	insert_compute_vloffsets(cstate, p->head);
973
974	/*
975	 * For DLT_PPI captures, generate a check of the per-packet
976	 * DLT value to make sure it's DLT_IEEE802_11.
977	 *
978	 * XXX - TurboCap cards use DLT_PPI for Ethernet.
979	 * Can we just define some DLT_ETHERNET_WITH_PHDR pseudo-header
980	 * with appropriate Ethernet information and use that rather
981	 * than using something such as DLT_PPI where you don't know
982	 * the link-layer header type until runtime, which, in the
983	 * general case, would force us to generate both Ethernet *and*
984	 * 802.11 code (*and* anything else for which PPI is used)
985	 * and choose between them early in the BPF program?
986	 */
987	ppi_dlt_check = gen_ppi_dlt_check(cstate);
988	if (ppi_dlt_check != NULL)
989		gen_and(ppi_dlt_check, p);
990
991	backpatch(p, gen_retblk(cstate, cstate->snaplen));
992	p->sense = !p->sense;
993	backpatch(p, gen_retblk(cstate, 0));
994	cstate->ic.root = p->head;
995	return (0);
996}
997
998void
999gen_and(struct block *b0, struct block *b1)
1000{
1001	backpatch(b0, b1->head);
1002	b0->sense = !b0->sense;
1003	b1->sense = !b1->sense;
1004	merge(b1, b0);
1005	b1->sense = !b1->sense;
1006	b1->head = b0->head;
1007}
1008
1009void
1010gen_or(struct block *b0, struct block *b1)
1011{
1012	b0->sense = !b0->sense;
1013	backpatch(b0, b1->head);
1014	b0->sense = !b0->sense;
1015	merge(b1, b0);
1016	b1->head = b0->head;
1017}
1018
1019void
1020gen_not(struct block *b)
1021{
1022	b->sense = !b->sense;
1023}
1024
1025static struct block *
1026gen_cmp(compiler_state_t *cstate, enum e_offrel offrel, u_int offset,
1027    u_int size, bpf_u_int32 v)
1028{
1029	return gen_ncmp(cstate, offrel, offset, size, 0xffffffff, BPF_JEQ, 0, v);
1030}
1031
1032static struct block *
1033gen_cmp_gt(compiler_state_t *cstate, enum e_offrel offrel, u_int offset,
1034    u_int size, bpf_u_int32 v)
1035{
1036	return gen_ncmp(cstate, offrel, offset, size, 0xffffffff, BPF_JGT, 0, v);
1037}
1038
1039static struct block *
1040gen_cmp_ge(compiler_state_t *cstate, enum e_offrel offrel, u_int offset,
1041    u_int size, bpf_u_int32 v)
1042{
1043	return gen_ncmp(cstate, offrel, offset, size, 0xffffffff, BPF_JGE, 0, v);
1044}
1045
1046static struct block *
1047gen_cmp_lt(compiler_state_t *cstate, enum e_offrel offrel, u_int offset,
1048    u_int size, bpf_u_int32 v)
1049{
1050	return gen_ncmp(cstate, offrel, offset, size, 0xffffffff, BPF_JGE, 1, v);
1051}
1052
1053static struct block *
1054gen_cmp_le(compiler_state_t *cstate, enum e_offrel offrel, u_int offset,
1055    u_int size, bpf_u_int32 v)
1056{
1057	return gen_ncmp(cstate, offrel, offset, size, 0xffffffff, BPF_JGT, 1, v);
1058}
1059
1060static struct block *
1061gen_mcmp(compiler_state_t *cstate, enum e_offrel offrel, u_int offset,
1062    u_int size, bpf_u_int32 v, bpf_u_int32 mask)
1063{
1064	return gen_ncmp(cstate, offrel, offset, size, mask, BPF_JEQ, 0, v);
1065}
1066
1067static struct block *
1068gen_bcmp(compiler_state_t *cstate, enum e_offrel offrel, u_int offset,
1069    u_int size, const u_char *v)
1070{
1071	register struct block *b, *tmp;
1072
1073	b = NULL;
1074	while (size >= 4) {
1075		register const u_char *p = &v[size - 4];
1076
1077		tmp = gen_cmp(cstate, offrel, offset + size - 4, BPF_W,
1078		    EXTRACT_BE_U_4(p));
1079		if (b != NULL)
1080			gen_and(b, tmp);
1081		b = tmp;
1082		size -= 4;
1083	}
1084	while (size >= 2) {
1085		register const u_char *p = &v[size - 2];
1086
1087		tmp = gen_cmp(cstate, offrel, offset + size - 2, BPF_H,
1088		    EXTRACT_BE_U_2(p));
1089		if (b != NULL)
1090			gen_and(b, tmp);
1091		b = tmp;
1092		size -= 2;
1093	}
1094	if (size > 0) {
1095		tmp = gen_cmp(cstate, offrel, offset, BPF_B, v[0]);
1096		if (b != NULL)
1097			gen_and(b, tmp);
1098		b = tmp;
1099	}
1100	return b;
1101}
1102
1103/*
1104 * AND the field of size "size" at offset "offset" relative to the header
1105 * specified by "offrel" with "mask", and compare it with the value "v"
1106 * with the test specified by "jtype"; if "reverse" is true, the test
1107 * should test the opposite of "jtype".
1108 */
1109static struct block *
1110gen_ncmp(compiler_state_t *cstate, enum e_offrel offrel, u_int offset,
1111    u_int size, bpf_u_int32 mask, int jtype, int reverse,
1112    bpf_u_int32 v)
1113{
1114	struct slist *s, *s2;
1115	struct block *b;
1116
1117	s = gen_load_a(cstate, offrel, offset, size);
1118
1119	if (mask != 0xffffffff) {
1120		s2 = new_stmt(cstate, BPF_ALU|BPF_AND|BPF_K);
1121		s2->s.k = mask;
1122		sappend(s, s2);
1123	}
1124
1125	b = new_block(cstate, JMP(jtype));
1126	b->stmts = s;
1127	b->s.k = v;
1128	if (reverse && (jtype == BPF_JGT || jtype == BPF_JGE))
1129		gen_not(b);
1130	return b;
1131}
1132
1133static int
1134init_linktype(compiler_state_t *cstate, pcap_t *p)
1135{
1136	cstate->pcap_fddipad = p->fddipad;
1137
1138	/*
1139	 * We start out with only one link-layer header.
1140	 */
1141	cstate->outermostlinktype = pcap_datalink(p);
1142	cstate->off_outermostlinkhdr.constant_part = 0;
1143	cstate->off_outermostlinkhdr.is_variable = 0;
1144	cstate->off_outermostlinkhdr.reg = -1;
1145
1146	cstate->prevlinktype = cstate->outermostlinktype;
1147	cstate->off_prevlinkhdr.constant_part = 0;
1148	cstate->off_prevlinkhdr.is_variable = 0;
1149	cstate->off_prevlinkhdr.reg = -1;
1150
1151	cstate->linktype = cstate->outermostlinktype;
1152	cstate->off_linkhdr.constant_part = 0;
1153	cstate->off_linkhdr.is_variable = 0;
1154	cstate->off_linkhdr.reg = -1;
1155
1156	/*
1157	 * XXX
1158	 */
1159	cstate->off_linkpl.constant_part = 0;
1160	cstate->off_linkpl.is_variable = 0;
1161	cstate->off_linkpl.reg = -1;
1162
1163	cstate->off_linktype.constant_part = 0;
1164	cstate->off_linktype.is_variable = 0;
1165	cstate->off_linktype.reg = -1;
1166
1167	/*
1168	 * Assume it's not raw ATM with a pseudo-header, for now.
1169	 */
1170	cstate->is_atm = 0;
1171	cstate->off_vpi = OFFSET_NOT_SET;
1172	cstate->off_vci = OFFSET_NOT_SET;
1173	cstate->off_proto = OFFSET_NOT_SET;
1174	cstate->off_payload = OFFSET_NOT_SET;
1175
1176	/*
1177	 * And not Geneve.
1178	 */
1179	cstate->is_geneve = 0;
1180
1181	/*
1182	 * No variable length VLAN offset by default
1183	 */
1184	cstate->is_vlan_vloffset = 0;
1185
1186	/*
1187	 * And assume we're not doing SS7.
1188	 */
1189	cstate->off_li = OFFSET_NOT_SET;
1190	cstate->off_li_hsl = OFFSET_NOT_SET;
1191	cstate->off_sio = OFFSET_NOT_SET;
1192	cstate->off_opc = OFFSET_NOT_SET;
1193	cstate->off_dpc = OFFSET_NOT_SET;
1194	cstate->off_sls = OFFSET_NOT_SET;
1195
1196	cstate->label_stack_depth = 0;
1197	cstate->vlan_stack_depth = 0;
1198
1199	switch (cstate->linktype) {
1200
1201	case DLT_ARCNET:
1202		cstate->off_linktype.constant_part = 2;
1203		cstate->off_linkpl.constant_part = 6;
1204		cstate->off_nl = 0;		/* XXX in reality, variable! */
1205		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1206		break;
1207
1208	case DLT_ARCNET_LINUX:
1209		cstate->off_linktype.constant_part = 4;
1210		cstate->off_linkpl.constant_part = 8;
1211		cstate->off_nl = 0;		/* XXX in reality, variable! */
1212		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1213		break;
1214
1215	case DLT_EN10MB:
1216		cstate->off_linktype.constant_part = 12;
1217		cstate->off_linkpl.constant_part = 14;	/* Ethernet header length */
1218		cstate->off_nl = 0;		/* Ethernet II */
1219		cstate->off_nl_nosnap = 3;	/* 802.3+802.2 */
1220		break;
1221
1222	case DLT_SLIP:
1223		/*
1224		 * SLIP doesn't have a link level type.  The 16 byte
1225		 * header is hacked into our SLIP driver.
1226		 */
1227		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1228		cstate->off_linkpl.constant_part = 16;
1229		cstate->off_nl = 0;
1230		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1231		break;
1232
1233	case DLT_SLIP_BSDOS:
1234		/* XXX this may be the same as the DLT_PPP_BSDOS case */
1235		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1236		/* XXX end */
1237		cstate->off_linkpl.constant_part = 24;
1238		cstate->off_nl = 0;
1239		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1240		break;
1241
1242	case DLT_NULL:
1243	case DLT_LOOP:
1244		cstate->off_linktype.constant_part = 0;
1245		cstate->off_linkpl.constant_part = 4;
1246		cstate->off_nl = 0;
1247		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1248		break;
1249
1250	case DLT_ENC:
1251		cstate->off_linktype.constant_part = 0;
1252		cstate->off_linkpl.constant_part = 12;
1253		cstate->off_nl = 0;
1254		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1255		break;
1256
1257	case DLT_PPP:
1258	case DLT_PPP_PPPD:
1259	case DLT_C_HDLC:		/* BSD/OS Cisco HDLC */
1260	case DLT_HDLC:			/* NetBSD (Cisco) HDLC */
1261	case DLT_PPP_SERIAL:		/* NetBSD sync/async serial PPP */
1262		cstate->off_linktype.constant_part = 2;	/* skip HDLC-like framing */
1263		cstate->off_linkpl.constant_part = 4;	/* skip HDLC-like framing and protocol field */
1264		cstate->off_nl = 0;
1265		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1266		break;
1267
1268	case DLT_PPP_ETHER:
1269		/*
1270		 * This does no include the Ethernet header, and
1271		 * only covers session state.
1272		 */
1273		cstate->off_linktype.constant_part = 6;
1274		cstate->off_linkpl.constant_part = 8;
1275		cstate->off_nl = 0;
1276		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1277		break;
1278
1279	case DLT_PPP_BSDOS:
1280		cstate->off_linktype.constant_part = 5;
1281		cstate->off_linkpl.constant_part = 24;
1282		cstate->off_nl = 0;
1283		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1284		break;
1285
1286	case DLT_FDDI:
1287		/*
1288		 * FDDI doesn't really have a link-level type field.
1289		 * We set "off_linktype" to the offset of the LLC header.
1290		 *
1291		 * To check for Ethernet types, we assume that SSAP = SNAP
1292		 * is being used and pick out the encapsulated Ethernet type.
1293		 * XXX - should we generate code to check for SNAP?
1294		 */
1295		cstate->off_linktype.constant_part = 13;
1296		cstate->off_linktype.constant_part += cstate->pcap_fddipad;
1297		cstate->off_linkpl.constant_part = 13;	/* FDDI MAC header length */
1298		cstate->off_linkpl.constant_part += cstate->pcap_fddipad;
1299		cstate->off_nl = 8;		/* 802.2+SNAP */
1300		cstate->off_nl_nosnap = 3;	/* 802.2 */
1301		break;
1302
1303	case DLT_IEEE802:
1304		/*
1305		 * Token Ring doesn't really have a link-level type field.
1306		 * We set "off_linktype" to the offset of the LLC header.
1307		 *
1308		 * To check for Ethernet types, we assume that SSAP = SNAP
1309		 * is being used and pick out the encapsulated Ethernet type.
1310		 * XXX - should we generate code to check for SNAP?
1311		 *
1312		 * XXX - the header is actually variable-length.
1313		 * Some various Linux patched versions gave 38
1314		 * as "off_linktype" and 40 as "off_nl"; however,
1315		 * if a token ring packet has *no* routing
1316		 * information, i.e. is not source-routed, the correct
1317		 * values are 20 and 22, as they are in the vanilla code.
1318		 *
1319		 * A packet is source-routed iff the uppermost bit
1320		 * of the first byte of the source address, at an
1321		 * offset of 8, has the uppermost bit set.  If the
1322		 * packet is source-routed, the total number of bytes
1323		 * of routing information is 2 plus bits 0x1F00 of
1324		 * the 16-bit value at an offset of 14 (shifted right
1325		 * 8 - figure out which byte that is).
1326		 */
1327		cstate->off_linktype.constant_part = 14;
1328		cstate->off_linkpl.constant_part = 14;	/* Token Ring MAC header length */
1329		cstate->off_nl = 8;		/* 802.2+SNAP */
1330		cstate->off_nl_nosnap = 3;	/* 802.2 */
1331		break;
1332
1333	case DLT_PRISM_HEADER:
1334	case DLT_IEEE802_11_RADIO_AVS:
1335	case DLT_IEEE802_11_RADIO:
1336		cstate->off_linkhdr.is_variable = 1;
1337		/* Fall through, 802.11 doesn't have a variable link
1338		 * prefix but is otherwise the same. */
1339		/* FALLTHROUGH */
1340
1341	case DLT_IEEE802_11:
1342		/*
1343		 * 802.11 doesn't really have a link-level type field.
1344		 * We set "off_linktype.constant_part" to the offset of
1345		 * the LLC header.
1346		 *
1347		 * To check for Ethernet types, we assume that SSAP = SNAP
1348		 * is being used and pick out the encapsulated Ethernet type.
1349		 * XXX - should we generate code to check for SNAP?
1350		 *
1351		 * We also handle variable-length radio headers here.
1352		 * The Prism header is in theory variable-length, but in
1353		 * practice it's always 144 bytes long.  However, some
1354		 * drivers on Linux use ARPHRD_IEEE80211_PRISM, but
1355		 * sometimes or always supply an AVS header, so we
1356		 * have to check whether the radio header is a Prism
1357		 * header or an AVS header, so, in practice, it's
1358		 * variable-length.
1359		 */
1360		cstate->off_linktype.constant_part = 24;
1361		cstate->off_linkpl.constant_part = 0;	/* link-layer header is variable-length */
1362		cstate->off_linkpl.is_variable = 1;
1363		cstate->off_nl = 8;		/* 802.2+SNAP */
1364		cstate->off_nl_nosnap = 3;	/* 802.2 */
1365		break;
1366
1367	case DLT_PPI:
1368		/*
1369		 * At the moment we treat PPI the same way that we treat
1370		 * normal Radiotap encoded packets. The difference is in
1371		 * the function that generates the code at the beginning
1372		 * to compute the header length.  Since this code generator
1373		 * of PPI supports bare 802.11 encapsulation only (i.e.
1374		 * the encapsulated DLT should be DLT_IEEE802_11) we
1375		 * generate code to check for this too.
1376		 */
1377		cstate->off_linktype.constant_part = 24;
1378		cstate->off_linkpl.constant_part = 0;	/* link-layer header is variable-length */
1379		cstate->off_linkpl.is_variable = 1;
1380		cstate->off_linkhdr.is_variable = 1;
1381		cstate->off_nl = 8;		/* 802.2+SNAP */
1382		cstate->off_nl_nosnap = 3;	/* 802.2 */
1383		break;
1384
1385	case DLT_ATM_RFC1483:
1386	case DLT_ATM_CLIP:	/* Linux ATM defines this */
1387		/*
1388		 * assume routed, non-ISO PDUs
1389		 * (i.e., LLC = 0xAA-AA-03, OUT = 0x00-00-00)
1390		 *
1391		 * XXX - what about ISO PDUs, e.g. CLNP, ISIS, ESIS,
1392		 * or PPP with the PPP NLPID (e.g., PPPoA)?  The
1393		 * latter would presumably be treated the way PPPoE
1394		 * should be, so you can do "pppoe and udp port 2049"
1395		 * or "pppoa and tcp port 80" and have it check for
1396		 * PPPo{A,E} and a PPP protocol of IP and....
1397		 */
1398		cstate->off_linktype.constant_part = 0;
1399		cstate->off_linkpl.constant_part = 0;	/* packet begins with LLC header */
1400		cstate->off_nl = 8;		/* 802.2+SNAP */
1401		cstate->off_nl_nosnap = 3;	/* 802.2 */
1402		break;
1403
1404	case DLT_SUNATM:
1405		/*
1406		 * Full Frontal ATM; you get AALn PDUs with an ATM
1407		 * pseudo-header.
1408		 */
1409		cstate->is_atm = 1;
1410		cstate->off_vpi = SUNATM_VPI_POS;
1411		cstate->off_vci = SUNATM_VCI_POS;
1412		cstate->off_proto = PROTO_POS;
1413		cstate->off_payload = SUNATM_PKT_BEGIN_POS;
1414		cstate->off_linktype.constant_part = cstate->off_payload;
1415		cstate->off_linkpl.constant_part = cstate->off_payload;	/* if LLC-encapsulated */
1416		cstate->off_nl = 8;		/* 802.2+SNAP */
1417		cstate->off_nl_nosnap = 3;	/* 802.2 */
1418		break;
1419
1420	case DLT_RAW:
1421	case DLT_IPV4:
1422	case DLT_IPV6:
1423		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1424		cstate->off_linkpl.constant_part = 0;
1425		cstate->off_nl = 0;
1426		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1427		break;
1428
1429	case DLT_LINUX_SLL:	/* fake header for Linux cooked socket v1 */
1430		cstate->off_linktype.constant_part = 14;
1431		cstate->off_linkpl.constant_part = 16;
1432		cstate->off_nl = 0;
1433		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1434		break;
1435
1436	case DLT_LINUX_SLL2:	/* fake header for Linux cooked socket v2 */
1437		cstate->off_linktype.constant_part = 0;
1438		cstate->off_linkpl.constant_part = 20;
1439		cstate->off_nl = 0;
1440		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1441		break;
1442
1443	case DLT_LTALK:
1444		/*
1445		 * LocalTalk does have a 1-byte type field in the LLAP header,
1446		 * but really it just indicates whether there is a "short" or
1447		 * "long" DDP packet following.
1448		 */
1449		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1450		cstate->off_linkpl.constant_part = 0;
1451		cstate->off_nl = 0;
1452		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1453		break;
1454
1455	case DLT_IP_OVER_FC:
1456		/*
1457		 * RFC 2625 IP-over-Fibre-Channel doesn't really have a
1458		 * link-level type field.  We set "off_linktype" to the
1459		 * offset of the LLC header.
1460		 *
1461		 * To check for Ethernet types, we assume that SSAP = SNAP
1462		 * is being used and pick out the encapsulated Ethernet type.
1463		 * XXX - should we generate code to check for SNAP? RFC
1464		 * 2625 says SNAP should be used.
1465		 */
1466		cstate->off_linktype.constant_part = 16;
1467		cstate->off_linkpl.constant_part = 16;
1468		cstate->off_nl = 8;		/* 802.2+SNAP */
1469		cstate->off_nl_nosnap = 3;	/* 802.2 */
1470		break;
1471
1472	case DLT_FRELAY:
1473		/*
1474		 * XXX - we should set this to handle SNAP-encapsulated
1475		 * frames (NLPID of 0x80).
1476		 */
1477		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1478		cstate->off_linkpl.constant_part = 0;
1479		cstate->off_nl = 0;
1480		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1481		break;
1482
1483                /*
1484                 * the only BPF-interesting FRF.16 frames are non-control frames;
1485                 * Frame Relay has a variable length link-layer
1486                 * so lets start with offset 4 for now and increments later on (FIXME);
1487                 */
1488	case DLT_MFR:
1489		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1490		cstate->off_linkpl.constant_part = 0;
1491		cstate->off_nl = 4;
1492		cstate->off_nl_nosnap = 0;	/* XXX - for now -> no 802.2 LLC */
1493		break;
1494
1495	case DLT_APPLE_IP_OVER_IEEE1394:
1496		cstate->off_linktype.constant_part = 16;
1497		cstate->off_linkpl.constant_part = 18;
1498		cstate->off_nl = 0;
1499		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1500		break;
1501
1502	case DLT_SYMANTEC_FIREWALL:
1503		cstate->off_linktype.constant_part = 6;
1504		cstate->off_linkpl.constant_part = 44;
1505		cstate->off_nl = 0;		/* Ethernet II */
1506		cstate->off_nl_nosnap = 0;	/* XXX - what does it do with 802.3 packets? */
1507		break;
1508
1509	case DLT_PFLOG:
1510		cstate->off_linktype.constant_part = 0;
1511		cstate->off_linkpl.constant_part = 0;	/* link-layer header is variable-length */
1512		cstate->off_linkpl.is_variable = 1;
1513		cstate->off_nl = 0;
1514		cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
1515		break;
1516
1517        case DLT_JUNIPER_MFR:
1518        case DLT_JUNIPER_MLFR:
1519        case DLT_JUNIPER_MLPPP:
1520        case DLT_JUNIPER_PPP:
1521        case DLT_JUNIPER_CHDLC:
1522        case DLT_JUNIPER_FRELAY:
1523		cstate->off_linktype.constant_part = 4;
1524		cstate->off_linkpl.constant_part = 4;
1525		cstate->off_nl = 0;
1526		cstate->off_nl_nosnap = OFFSET_NOT_SET;	/* no 802.2 LLC */
1527                break;
1528
1529	case DLT_JUNIPER_ATM1:
1530		cstate->off_linktype.constant_part = 4;		/* in reality variable between 4-8 */
1531		cstate->off_linkpl.constant_part = 4;	/* in reality variable between 4-8 */
1532		cstate->off_nl = 0;
1533		cstate->off_nl_nosnap = 10;
1534		break;
1535
1536	case DLT_JUNIPER_ATM2:
1537		cstate->off_linktype.constant_part = 8;		/* in reality variable between 8-12 */
1538		cstate->off_linkpl.constant_part = 8;	/* in reality variable between 8-12 */
1539		cstate->off_nl = 0;
1540		cstate->off_nl_nosnap = 10;
1541		break;
1542
1543		/* frames captured on a Juniper PPPoE service PIC
1544		 * contain raw ethernet frames */
1545	case DLT_JUNIPER_PPPOE:
1546        case DLT_JUNIPER_ETHER:
1547		cstate->off_linkpl.constant_part = 14;
1548		cstate->off_linktype.constant_part = 16;
1549		cstate->off_nl = 18;		/* Ethernet II */
1550		cstate->off_nl_nosnap = 21;	/* 802.3+802.2 */
1551		break;
1552
1553	case DLT_JUNIPER_PPPOE_ATM:
1554		cstate->off_linktype.constant_part = 4;
1555		cstate->off_linkpl.constant_part = 6;
1556		cstate->off_nl = 0;
1557		cstate->off_nl_nosnap = OFFSET_NOT_SET;	/* no 802.2 LLC */
1558		break;
1559
1560	case DLT_JUNIPER_GGSN:
1561		cstate->off_linktype.constant_part = 6;
1562		cstate->off_linkpl.constant_part = 12;
1563		cstate->off_nl = 0;
1564		cstate->off_nl_nosnap = OFFSET_NOT_SET;	/* no 802.2 LLC */
1565		break;
1566
1567	case DLT_JUNIPER_ES:
1568		cstate->off_linktype.constant_part = 6;
1569		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;	/* not really a network layer but raw IP addresses */
1570		cstate->off_nl = OFFSET_NOT_SET;	/* not really a network layer but raw IP addresses */
1571		cstate->off_nl_nosnap = OFFSET_NOT_SET;	/* no 802.2 LLC */
1572		break;
1573
1574	case DLT_JUNIPER_MONITOR:
1575		cstate->off_linktype.constant_part = 12;
1576		cstate->off_linkpl.constant_part = 12;
1577		cstate->off_nl = 0;			/* raw IP/IP6 header */
1578		cstate->off_nl_nosnap = OFFSET_NOT_SET;	/* no 802.2 LLC */
1579		break;
1580
1581	case DLT_BACNET_MS_TP:
1582		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1583		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;
1584		cstate->off_nl = OFFSET_NOT_SET;
1585		cstate->off_nl_nosnap = OFFSET_NOT_SET;
1586		break;
1587
1588	case DLT_JUNIPER_SERVICES:
1589		cstate->off_linktype.constant_part = 12;
1590		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;	/* L3 proto location dep. on cookie type */
1591		cstate->off_nl = OFFSET_NOT_SET;	/* L3 proto location dep. on cookie type */
1592		cstate->off_nl_nosnap = OFFSET_NOT_SET;	/* no 802.2 LLC */
1593		break;
1594
1595	case DLT_JUNIPER_VP:
1596		cstate->off_linktype.constant_part = 18;
1597		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;
1598		cstate->off_nl = OFFSET_NOT_SET;
1599		cstate->off_nl_nosnap = OFFSET_NOT_SET;
1600		break;
1601
1602	case DLT_JUNIPER_ST:
1603		cstate->off_linktype.constant_part = 18;
1604		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;
1605		cstate->off_nl = OFFSET_NOT_SET;
1606		cstate->off_nl_nosnap = OFFSET_NOT_SET;
1607		break;
1608
1609	case DLT_JUNIPER_ISM:
1610		cstate->off_linktype.constant_part = 8;
1611		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;
1612		cstate->off_nl = OFFSET_NOT_SET;
1613		cstate->off_nl_nosnap = OFFSET_NOT_SET;
1614		break;
1615
1616	case DLT_JUNIPER_VS:
1617	case DLT_JUNIPER_SRX_E2E:
1618	case DLT_JUNIPER_FIBRECHANNEL:
1619	case DLT_JUNIPER_ATM_CEMIC:
1620		cstate->off_linktype.constant_part = 8;
1621		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;
1622		cstate->off_nl = OFFSET_NOT_SET;
1623		cstate->off_nl_nosnap = OFFSET_NOT_SET;
1624		break;
1625
1626	case DLT_MTP2:
1627		cstate->off_li = 2;
1628		cstate->off_li_hsl = 4;
1629		cstate->off_sio = 3;
1630		cstate->off_opc = 4;
1631		cstate->off_dpc = 4;
1632		cstate->off_sls = 7;
1633		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1634		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;
1635		cstate->off_nl = OFFSET_NOT_SET;
1636		cstate->off_nl_nosnap = OFFSET_NOT_SET;
1637		break;
1638
1639	case DLT_MTP2_WITH_PHDR:
1640		cstate->off_li = 6;
1641		cstate->off_li_hsl = 8;
1642		cstate->off_sio = 7;
1643		cstate->off_opc = 8;
1644		cstate->off_dpc = 8;
1645		cstate->off_sls = 11;
1646		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1647		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;
1648		cstate->off_nl = OFFSET_NOT_SET;
1649		cstate->off_nl_nosnap = OFFSET_NOT_SET;
1650		break;
1651
1652	case DLT_ERF:
1653		cstate->off_li = 22;
1654		cstate->off_li_hsl = 24;
1655		cstate->off_sio = 23;
1656		cstate->off_opc = 24;
1657		cstate->off_dpc = 24;
1658		cstate->off_sls = 27;
1659		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1660		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;
1661		cstate->off_nl = OFFSET_NOT_SET;
1662		cstate->off_nl_nosnap = OFFSET_NOT_SET;
1663		break;
1664
1665	case DLT_PFSYNC:
1666		cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1667		cstate->off_linkpl.constant_part = 4;
1668		cstate->off_nl = 0;
1669		cstate->off_nl_nosnap = 0;
1670		break;
1671
1672	case DLT_AX25_KISS:
1673		/*
1674		 * Currently, only raw "link[N:M]" filtering is supported.
1675		 */
1676		cstate->off_linktype.constant_part = OFFSET_NOT_SET;	/* variable, min 15, max 71 steps of 7 */
1677		cstate->off_linkpl.constant_part = OFFSET_NOT_SET;
1678		cstate->off_nl = OFFSET_NOT_SET;	/* variable, min 16, max 71 steps of 7 */
1679		cstate->off_nl_nosnap = OFFSET_NOT_SET;	/* no 802.2 LLC */
1680		break;
1681
1682	case DLT_IPNET:
1683		cstate->off_linktype.constant_part = 1;
1684		cstate->off_linkpl.constant_part = 24;	/* ipnet header length */
1685		cstate->off_nl = 0;
1686		cstate->off_nl_nosnap = OFFSET_NOT_SET;
1687		break;
1688
1689	case DLT_NETANALYZER:
1690		cstate->off_linkhdr.constant_part = 4;	/* Ethernet header is past 4-byte pseudo-header */
1691		cstate->off_linktype.constant_part = cstate->off_linkhdr.constant_part + 12;
1692		cstate->off_linkpl.constant_part = cstate->off_linkhdr.constant_part + 14;	/* pseudo-header+Ethernet header length */
1693		cstate->off_nl = 0;		/* Ethernet II */
1694		cstate->off_nl_nosnap = 3;	/* 802.3+802.2 */
1695		break;
1696
1697	case DLT_NETANALYZER_TRANSPARENT:
1698		cstate->off_linkhdr.constant_part = 12;	/* MAC header is past 4-byte pseudo-header, preamble, and SFD */
1699		cstate->off_linktype.constant_part = cstate->off_linkhdr.constant_part + 12;
1700		cstate->off_linkpl.constant_part = cstate->off_linkhdr.constant_part + 14;	/* pseudo-header+preamble+SFD+Ethernet header length */
1701		cstate->off_nl = 0;		/* Ethernet II */
1702		cstate->off_nl_nosnap = 3;	/* 802.3+802.2 */
1703		break;
1704
1705	default:
1706		/*
1707		 * For values in the range in which we've assigned new
1708		 * DLT_ values, only raw "link[N:M]" filtering is supported.
1709		 */
1710		if (cstate->linktype >= DLT_MATCHING_MIN &&
1711		    cstate->linktype <= DLT_MATCHING_MAX) {
1712			cstate->off_linktype.constant_part = OFFSET_NOT_SET;
1713			cstate->off_linkpl.constant_part = OFFSET_NOT_SET;
1714			cstate->off_nl = OFFSET_NOT_SET;
1715			cstate->off_nl_nosnap = OFFSET_NOT_SET;
1716		} else {
1717			bpf_set_error(cstate, "unknown data link type %d (min %d, max %d)",
1718			    cstate->linktype, DLT_MATCHING_MIN, DLT_MATCHING_MAX);
1719			return (-1);
1720		}
1721		break;
1722	}
1723
1724	cstate->off_outermostlinkhdr = cstate->off_prevlinkhdr = cstate->off_linkhdr;
1725	return (0);
1726}
1727
1728/*
1729 * Load a value relative to the specified absolute offset.
1730 */
1731static struct slist *
1732gen_load_absoffsetrel(compiler_state_t *cstate, bpf_abs_offset *abs_offset,
1733    u_int offset, u_int size)
1734{
1735	struct slist *s, *s2;
1736
1737	s = gen_abs_offset_varpart(cstate, abs_offset);
1738
1739	/*
1740	 * If "s" is non-null, it has code to arrange that the X register
1741	 * contains the variable part of the absolute offset, so we
1742	 * generate a load relative to that, with an offset of
1743	 * abs_offset->constant_part + offset.
1744	 *
1745	 * Otherwise, we can do an absolute load with an offset of
1746	 * abs_offset->constant_part + offset.
1747	 */
1748	if (s != NULL) {
1749		/*
1750		 * "s" points to a list of statements that puts the
1751		 * variable part of the absolute offset into the X register.
1752		 * Do an indirect load, to use the X register as an offset.
1753		 */
1754		s2 = new_stmt(cstate, BPF_LD|BPF_IND|size);
1755		s2->s.k = abs_offset->constant_part + offset;
1756		sappend(s, s2);
1757	} else {
1758		/*
1759		 * There is no variable part of the absolute offset, so
1760		 * just do an absolute load.
1761		 */
1762		s = new_stmt(cstate, BPF_LD|BPF_ABS|size);
1763		s->s.k = abs_offset->constant_part + offset;
1764	}
1765	return s;
1766}
1767
1768/*
1769 * Load a value relative to the beginning of the specified header.
1770 */
1771static struct slist *
1772gen_load_a(compiler_state_t *cstate, enum e_offrel offrel, u_int offset,
1773    u_int size)
1774{
1775	struct slist *s, *s2;
1776
1777	/*
1778	 * Squelch warnings from compilers that *don't* assume that
1779	 * offrel always has a valid enum value and therefore don't
1780	 * assume that we'll always go through one of the case arms.
1781	 *
1782	 * If we have a default case, compilers that *do* assume that
1783	 * will then complain about the default case code being
1784	 * unreachable.
1785	 *
1786	 * Damned if you do, damned if you don't.
1787	 */
1788	s = NULL;
1789
1790	switch (offrel) {
1791
1792	case OR_PACKET:
1793                s = new_stmt(cstate, BPF_LD|BPF_ABS|size);
1794                s->s.k = offset;
1795		break;
1796
1797	case OR_LINKHDR:
1798		s = gen_load_absoffsetrel(cstate, &cstate->off_linkhdr, offset, size);
1799		break;
1800
1801	case OR_PREVLINKHDR:
1802		s = gen_load_absoffsetrel(cstate, &cstate->off_prevlinkhdr, offset, size);
1803		break;
1804
1805	case OR_LLC:
1806		s = gen_load_absoffsetrel(cstate, &cstate->off_linkpl, offset, size);
1807		break;
1808
1809	case OR_PREVMPLSHDR:
1810		s = gen_load_absoffsetrel(cstate, &cstate->off_linkpl, cstate->off_nl - 4 + offset, size);
1811		break;
1812
1813	case OR_LINKPL:
1814		s = gen_load_absoffsetrel(cstate, &cstate->off_linkpl, cstate->off_nl + offset, size);
1815		break;
1816
1817	case OR_LINKPL_NOSNAP:
1818		s = gen_load_absoffsetrel(cstate, &cstate->off_linkpl, cstate->off_nl_nosnap + offset, size);
1819		break;
1820
1821	case OR_LINKTYPE:
1822		s = gen_load_absoffsetrel(cstate, &cstate->off_linktype, offset, size);
1823		break;
1824
1825	case OR_TRAN_IPV4:
1826		/*
1827		 * Load the X register with the length of the IPv4 header
1828		 * (plus the offset of the link-layer header, if it's
1829		 * preceded by a variable-length header such as a radio
1830		 * header), in bytes.
1831		 */
1832		s = gen_loadx_iphdrlen(cstate);
1833
1834		/*
1835		 * Load the item at {offset of the link-layer payload} +
1836		 * {offset, relative to the start of the link-layer
1837		 * paylod, of the IPv4 header} + {length of the IPv4 header} +
1838		 * {specified offset}.
1839		 *
1840		 * If the offset of the link-layer payload is variable,
1841		 * the variable part of that offset is included in the
1842		 * value in the X register, and we include the constant
1843		 * part in the offset of the load.
1844		 */
1845		s2 = new_stmt(cstate, BPF_LD|BPF_IND|size);
1846		s2->s.k = cstate->off_linkpl.constant_part + cstate->off_nl + offset;
1847		sappend(s, s2);
1848		break;
1849
1850	case OR_TRAN_IPV6:
1851		s = gen_load_absoffsetrel(cstate, &cstate->off_linkpl, cstate->off_nl + 40 + offset, size);
1852		break;
1853	}
1854	return s;
1855}
1856
1857/*
1858 * Generate code to load into the X register the sum of the length of
1859 * the IPv4 header and the variable part of the offset of the link-layer
1860 * payload.
1861 */
1862static struct slist *
1863gen_loadx_iphdrlen(compiler_state_t *cstate)
1864{
1865	struct slist *s, *s2;
1866
1867	s = gen_abs_offset_varpart(cstate, &cstate->off_linkpl);
1868	if (s != NULL) {
1869		/*
1870		 * The offset of the link-layer payload has a variable
1871		 * part.  "s" points to a list of statements that put
1872		 * the variable part of that offset into the X register.
1873		 *
1874		 * The 4*([k]&0xf) addressing mode can't be used, as we
1875		 * don't have a constant offset, so we have to load the
1876		 * value in question into the A register and add to it
1877		 * the value from the X register.
1878		 */
1879		s2 = new_stmt(cstate, BPF_LD|BPF_IND|BPF_B);
1880		s2->s.k = cstate->off_linkpl.constant_part + cstate->off_nl;
1881		sappend(s, s2);
1882		s2 = new_stmt(cstate, BPF_ALU|BPF_AND|BPF_K);
1883		s2->s.k = 0xf;
1884		sappend(s, s2);
1885		s2 = new_stmt(cstate, BPF_ALU|BPF_LSH|BPF_K);
1886		s2->s.k = 2;
1887		sappend(s, s2);
1888
1889		/*
1890		 * The A register now contains the length of the IP header.
1891		 * We need to add to it the variable part of the offset of
1892		 * the link-layer payload, which is still in the X
1893		 * register, and move the result into the X register.
1894		 */
1895		sappend(s, new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_X));
1896		sappend(s, new_stmt(cstate, BPF_MISC|BPF_TAX));
1897	} else {
1898		/*
1899		 * The offset of the link-layer payload is a constant,
1900		 * so no code was generated to load the (non-existent)
1901		 * variable part of that offset.
1902		 *
1903		 * This means we can use the 4*([k]&0xf) addressing
1904		 * mode.  Load the length of the IPv4 header, which
1905		 * is at an offset of cstate->off_nl from the beginning of
1906		 * the link-layer payload, and thus at an offset of
1907		 * cstate->off_linkpl.constant_part + cstate->off_nl from the beginning
1908		 * of the raw packet data, using that addressing mode.
1909		 */
1910		s = new_stmt(cstate, BPF_LDX|BPF_MSH|BPF_B);
1911		s->s.k = cstate->off_linkpl.constant_part + cstate->off_nl;
1912	}
1913	return s;
1914}
1915
1916
1917static struct block *
1918gen_uncond(compiler_state_t *cstate, int rsense)
1919{
1920	struct block *b;
1921	struct slist *s;
1922
1923	s = new_stmt(cstate, BPF_LD|BPF_IMM);
1924	s->s.k = !rsense;
1925	b = new_block(cstate, JMP(BPF_JEQ));
1926	b->stmts = s;
1927
1928	return b;
1929}
1930
1931static inline struct block *
1932gen_true(compiler_state_t *cstate)
1933{
1934	return gen_uncond(cstate, 1);
1935}
1936
1937static inline struct block *
1938gen_false(compiler_state_t *cstate)
1939{
1940	return gen_uncond(cstate, 0);
1941}
1942
1943/*
1944 * Byte-swap a 32-bit number.
1945 * ("htonl()" or "ntohl()" won't work - we want to byte-swap even on
1946 * big-endian platforms.)
1947 */
1948#define	SWAPLONG(y) \
1949((((y)&0xff)<<24) | (((y)&0xff00)<<8) | (((y)&0xff0000)>>8) | (((y)>>24)&0xff))
1950
1951/*
1952 * Generate code to match a particular packet type.
1953 *
1954 * "proto" is an Ethernet type value, if > ETHERMTU, or an LLC SAP
1955 * value, if <= ETHERMTU.  We use that to determine whether to
1956 * match the type/length field or to check the type/length field for
1957 * a value <= ETHERMTU to see whether it's a type field and then do
1958 * the appropriate test.
1959 */
1960static struct block *
1961gen_ether_linktype(compiler_state_t *cstate, bpf_u_int32 ll_proto)
1962{
1963	struct block *b0, *b1;
1964
1965	switch (ll_proto) {
1966
1967	case LLCSAP_ISONS:
1968	case LLCSAP_IP:
1969	case LLCSAP_NETBEUI:
1970		/*
1971		 * OSI protocols and NetBEUI always use 802.2 encapsulation,
1972		 * so we check the DSAP and SSAP.
1973		 *
1974		 * LLCSAP_IP checks for IP-over-802.2, rather
1975		 * than IP-over-Ethernet or IP-over-SNAP.
1976		 *
1977		 * XXX - should we check both the DSAP and the
1978		 * SSAP, like this, or should we check just the
1979		 * DSAP, as we do for other types <= ETHERMTU
1980		 * (i.e., other SAP values)?
1981		 */
1982		b0 = gen_cmp_gt(cstate, OR_LINKTYPE, 0, BPF_H, ETHERMTU);
1983		gen_not(b0);
1984		b1 = gen_cmp(cstate, OR_LLC, 0, BPF_H, (ll_proto << 8) | ll_proto);
1985		gen_and(b0, b1);
1986		return b1;
1987
1988	case LLCSAP_IPX:
1989		/*
1990		 * Check for;
1991		 *
1992		 *	Ethernet_II frames, which are Ethernet
1993		 *	frames with a frame type of ETHERTYPE_IPX;
1994		 *
1995		 *	Ethernet_802.3 frames, which are 802.3
1996		 *	frames (i.e., the type/length field is
1997		 *	a length field, <= ETHERMTU, rather than
1998		 *	a type field) with the first two bytes
1999		 *	after the Ethernet/802.3 header being
2000		 *	0xFFFF;
2001		 *
2002		 *	Ethernet_802.2 frames, which are 802.3
2003		 *	frames with an 802.2 LLC header and
2004		 *	with the IPX LSAP as the DSAP in the LLC
2005		 *	header;
2006		 *
2007		 *	Ethernet_SNAP frames, which are 802.3
2008		 *	frames with an LLC header and a SNAP
2009		 *	header and with an OUI of 0x000000
2010		 *	(encapsulated Ethernet) and a protocol
2011		 *	ID of ETHERTYPE_IPX in the SNAP header.
2012		 *
2013		 * XXX - should we generate the same code both
2014		 * for tests for LLCSAP_IPX and for ETHERTYPE_IPX?
2015		 */
2016
2017		/*
2018		 * This generates code to check both for the
2019		 * IPX LSAP (Ethernet_802.2) and for Ethernet_802.3.
2020		 */
2021		b0 = gen_cmp(cstate, OR_LLC, 0, BPF_B, LLCSAP_IPX);
2022		b1 = gen_cmp(cstate, OR_LLC, 0, BPF_H, 0xFFFF);
2023		gen_or(b0, b1);
2024
2025		/*
2026		 * Now we add code to check for SNAP frames with
2027		 * ETHERTYPE_IPX, i.e. Ethernet_SNAP.
2028		 */
2029		b0 = gen_snap(cstate, 0x000000, ETHERTYPE_IPX);
2030		gen_or(b0, b1);
2031
2032		/*
2033		 * Now we generate code to check for 802.3
2034		 * frames in general.
2035		 */
2036		b0 = gen_cmp_gt(cstate, OR_LINKTYPE, 0, BPF_H, ETHERMTU);
2037		gen_not(b0);
2038
2039		/*
2040		 * Now add the check for 802.3 frames before the
2041		 * check for Ethernet_802.2 and Ethernet_802.3,
2042		 * as those checks should only be done on 802.3
2043		 * frames, not on Ethernet frames.
2044		 */
2045		gen_and(b0, b1);
2046
2047		/*
2048		 * Now add the check for Ethernet_II frames, and
2049		 * do that before checking for the other frame
2050		 * types.
2051		 */
2052		b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, ETHERTYPE_IPX);
2053		gen_or(b0, b1);
2054		return b1;
2055
2056	case ETHERTYPE_ATALK:
2057	case ETHERTYPE_AARP:
2058		/*
2059		 * EtherTalk (AppleTalk protocols on Ethernet link
2060		 * layer) may use 802.2 encapsulation.
2061		 */
2062
2063		/*
2064		 * Check for 802.2 encapsulation (EtherTalk phase 2?);
2065		 * we check for an Ethernet type field less than
2066		 * 1500, which means it's an 802.3 length field.
2067		 */
2068		b0 = gen_cmp_gt(cstate, OR_LINKTYPE, 0, BPF_H, ETHERMTU);
2069		gen_not(b0);
2070
2071		/*
2072		 * 802.2-encapsulated ETHERTYPE_ATALK packets are
2073		 * SNAP packets with an organization code of
2074		 * 0x080007 (Apple, for Appletalk) and a protocol
2075		 * type of ETHERTYPE_ATALK (Appletalk).
2076		 *
2077		 * 802.2-encapsulated ETHERTYPE_AARP packets are
2078		 * SNAP packets with an organization code of
2079		 * 0x000000 (encapsulated Ethernet) and a protocol
2080		 * type of ETHERTYPE_AARP (Appletalk ARP).
2081		 */
2082		if (ll_proto == ETHERTYPE_ATALK)
2083			b1 = gen_snap(cstate, 0x080007, ETHERTYPE_ATALK);
2084		else	/* ll_proto == ETHERTYPE_AARP */
2085			b1 = gen_snap(cstate, 0x000000, ETHERTYPE_AARP);
2086		gen_and(b0, b1);
2087
2088		/*
2089		 * Check for Ethernet encapsulation (Ethertalk
2090		 * phase 1?); we just check for the Ethernet
2091		 * protocol type.
2092		 */
2093		b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, ll_proto);
2094
2095		gen_or(b0, b1);
2096		return b1;
2097
2098	default:
2099		if (ll_proto <= ETHERMTU) {
2100			/*
2101			 * This is an LLC SAP value, so the frames
2102			 * that match would be 802.2 frames.
2103			 * Check that the frame is an 802.2 frame
2104			 * (i.e., that the length/type field is
2105			 * a length field, <= ETHERMTU) and
2106			 * then check the DSAP.
2107			 */
2108			b0 = gen_cmp_gt(cstate, OR_LINKTYPE, 0, BPF_H, ETHERMTU);
2109			gen_not(b0);
2110			b1 = gen_cmp(cstate, OR_LINKTYPE, 2, BPF_B, ll_proto);
2111			gen_and(b0, b1);
2112			return b1;
2113		} else {
2114			/*
2115			 * This is an Ethernet type, so compare
2116			 * the length/type field with it (if
2117			 * the frame is an 802.2 frame, the length
2118			 * field will be <= ETHERMTU, and, as
2119			 * "ll_proto" is > ETHERMTU, this test
2120			 * will fail and the frame won't match,
2121			 * which is what we want).
2122			 */
2123			return gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, ll_proto);
2124		}
2125	}
2126}
2127
2128static struct block *
2129gen_loopback_linktype(compiler_state_t *cstate, bpf_u_int32 ll_proto)
2130{
2131	/*
2132	 * For DLT_NULL, the link-layer header is a 32-bit word
2133	 * containing an AF_ value in *host* byte order, and for
2134	 * DLT_ENC, the link-layer header begins with a 32-bit
2135	 * word containing an AF_ value in host byte order.
2136	 *
2137	 * In addition, if we're reading a saved capture file,
2138	 * the host byte order in the capture may not be the
2139	 * same as the host byte order on this machine.
2140	 *
2141	 * For DLT_LOOP, the link-layer header is a 32-bit
2142	 * word containing an AF_ value in *network* byte order.
2143	 */
2144	if (cstate->linktype == DLT_NULL || cstate->linktype == DLT_ENC) {
2145		/*
2146		 * The AF_ value is in host byte order, but the BPF
2147		 * interpreter will convert it to network byte order.
2148		 *
2149		 * If this is a save file, and it's from a machine
2150		 * with the opposite byte order to ours, we byte-swap
2151		 * the AF_ value.
2152		 *
2153		 * Then we run it through "htonl()", and generate
2154		 * code to compare against the result.
2155		 */
2156		if (cstate->bpf_pcap->rfile != NULL && cstate->bpf_pcap->swapped)
2157			ll_proto = SWAPLONG(ll_proto);
2158		ll_proto = htonl(ll_proto);
2159	}
2160	return (gen_cmp(cstate, OR_LINKHDR, 0, BPF_W, ll_proto));
2161}
2162
2163/*
2164 * "proto" is an Ethernet type value and for IPNET, if it is not IPv4
2165 * or IPv6 then we have an error.
2166 */
2167static struct block *
2168gen_ipnet_linktype(compiler_state_t *cstate, bpf_u_int32 ll_proto)
2169{
2170	switch (ll_proto) {
2171
2172	case ETHERTYPE_IP:
2173		return gen_cmp(cstate, OR_LINKTYPE, 0, BPF_B, IPH_AF_INET);
2174		/*NOTREACHED*/
2175
2176	case ETHERTYPE_IPV6:
2177		return gen_cmp(cstate, OR_LINKTYPE, 0, BPF_B, IPH_AF_INET6);
2178		/*NOTREACHED*/
2179
2180	default:
2181		break;
2182	}
2183
2184	return gen_false(cstate);
2185}
2186
2187/*
2188 * Generate code to match a particular packet type.
2189 *
2190 * "ll_proto" is an Ethernet type value, if > ETHERMTU, or an LLC SAP
2191 * value, if <= ETHERMTU.  We use that to determine whether to
2192 * match the type field or to check the type field for the special
2193 * LINUX_SLL_P_802_2 value and then do the appropriate test.
2194 */
2195static struct block *
2196gen_linux_sll_linktype(compiler_state_t *cstate, bpf_u_int32 ll_proto)
2197{
2198	struct block *b0, *b1;
2199
2200	switch (ll_proto) {
2201
2202	case LLCSAP_ISONS:
2203	case LLCSAP_IP:
2204	case LLCSAP_NETBEUI:
2205		/*
2206		 * OSI protocols and NetBEUI always use 802.2 encapsulation,
2207		 * so we check the DSAP and SSAP.
2208		 *
2209		 * LLCSAP_IP checks for IP-over-802.2, rather
2210		 * than IP-over-Ethernet or IP-over-SNAP.
2211		 *
2212		 * XXX - should we check both the DSAP and the
2213		 * SSAP, like this, or should we check just the
2214		 * DSAP, as we do for other types <= ETHERMTU
2215		 * (i.e., other SAP values)?
2216		 */
2217		b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, LINUX_SLL_P_802_2);
2218		b1 = gen_cmp(cstate, OR_LLC, 0, BPF_H, (ll_proto << 8) | ll_proto);
2219		gen_and(b0, b1);
2220		return b1;
2221
2222	case LLCSAP_IPX:
2223		/*
2224		 *	Ethernet_II frames, which are Ethernet
2225		 *	frames with a frame type of ETHERTYPE_IPX;
2226		 *
2227		 *	Ethernet_802.3 frames, which have a frame
2228		 *	type of LINUX_SLL_P_802_3;
2229		 *
2230		 *	Ethernet_802.2 frames, which are 802.3
2231		 *	frames with an 802.2 LLC header (i.e, have
2232		 *	a frame type of LINUX_SLL_P_802_2) and
2233		 *	with the IPX LSAP as the DSAP in the LLC
2234		 *	header;
2235		 *
2236		 *	Ethernet_SNAP frames, which are 802.3
2237		 *	frames with an LLC header and a SNAP
2238		 *	header and with an OUI of 0x000000
2239		 *	(encapsulated Ethernet) and a protocol
2240		 *	ID of ETHERTYPE_IPX in the SNAP header.
2241		 *
2242		 * First, do the checks on LINUX_SLL_P_802_2
2243		 * frames; generate the check for either
2244		 * Ethernet_802.2 or Ethernet_SNAP frames, and
2245		 * then put a check for LINUX_SLL_P_802_2 frames
2246		 * before it.
2247		 */
2248		b0 = gen_cmp(cstate, OR_LLC, 0, BPF_B, LLCSAP_IPX);
2249		b1 = gen_snap(cstate, 0x000000, ETHERTYPE_IPX);
2250		gen_or(b0, b1);
2251		b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, LINUX_SLL_P_802_2);
2252		gen_and(b0, b1);
2253
2254		/*
2255		 * Now check for 802.3 frames and OR that with
2256		 * the previous test.
2257		 */
2258		b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, LINUX_SLL_P_802_3);
2259		gen_or(b0, b1);
2260
2261		/*
2262		 * Now add the check for Ethernet_II frames, and
2263		 * do that before checking for the other frame
2264		 * types.
2265		 */
2266		b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, ETHERTYPE_IPX);
2267		gen_or(b0, b1);
2268		return b1;
2269
2270	case ETHERTYPE_ATALK:
2271	case ETHERTYPE_AARP:
2272		/*
2273		 * EtherTalk (AppleTalk protocols on Ethernet link
2274		 * layer) may use 802.2 encapsulation.
2275		 */
2276
2277		/*
2278		 * Check for 802.2 encapsulation (EtherTalk phase 2?);
2279		 * we check for the 802.2 protocol type in the
2280		 * "Ethernet type" field.
2281		 */
2282		b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, LINUX_SLL_P_802_2);
2283
2284		/*
2285		 * 802.2-encapsulated ETHERTYPE_ATALK packets are
2286		 * SNAP packets with an organization code of
2287		 * 0x080007 (Apple, for Appletalk) and a protocol
2288		 * type of ETHERTYPE_ATALK (Appletalk).
2289		 *
2290		 * 802.2-encapsulated ETHERTYPE_AARP packets are
2291		 * SNAP packets with an organization code of
2292		 * 0x000000 (encapsulated Ethernet) and a protocol
2293		 * type of ETHERTYPE_AARP (Appletalk ARP).
2294		 */
2295		if (ll_proto == ETHERTYPE_ATALK)
2296			b1 = gen_snap(cstate, 0x080007, ETHERTYPE_ATALK);
2297		else	/* ll_proto == ETHERTYPE_AARP */
2298			b1 = gen_snap(cstate, 0x000000, ETHERTYPE_AARP);
2299		gen_and(b0, b1);
2300
2301		/*
2302		 * Check for Ethernet encapsulation (Ethertalk
2303		 * phase 1?); we just check for the Ethernet
2304		 * protocol type.
2305		 */
2306		b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, ll_proto);
2307
2308		gen_or(b0, b1);
2309		return b1;
2310
2311	default:
2312		if (ll_proto <= ETHERMTU) {
2313			/*
2314			 * This is an LLC SAP value, so the frames
2315			 * that match would be 802.2 frames.
2316			 * Check for the 802.2 protocol type
2317			 * in the "Ethernet type" field, and
2318			 * then check the DSAP.
2319			 */
2320			b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, LINUX_SLL_P_802_2);
2321			b1 = gen_cmp(cstate, OR_LINKHDR, cstate->off_linkpl.constant_part, BPF_B,
2322			     ll_proto);
2323			gen_and(b0, b1);
2324			return b1;
2325		} else {
2326			/*
2327			 * This is an Ethernet type, so compare
2328			 * the length/type field with it (if
2329			 * the frame is an 802.2 frame, the length
2330			 * field will be <= ETHERMTU, and, as
2331			 * "ll_proto" is > ETHERMTU, this test
2332			 * will fail and the frame won't match,
2333			 * which is what we want).
2334			 */
2335			return gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, ll_proto);
2336		}
2337	}
2338}
2339
2340/*
2341 * Load a value relative to the beginning of the link-layer header after the
2342 * pflog header.
2343 */
2344static struct slist *
2345gen_load_pflog_llprefixlen(compiler_state_t *cstate)
2346{
2347	struct slist *s1, *s2;
2348
2349	/*
2350	 * Generate code to load the length of the pflog header into
2351	 * the register assigned to hold that length, if one has been
2352	 * assigned.  (If one hasn't been assigned, no code we've
2353	 * generated uses that prefix, so we don't need to generate any
2354	 * code to load it.)
2355	 */
2356	if (cstate->off_linkpl.reg != -1) {
2357		/*
2358		 * The length is in the first byte of the header.
2359		 */
2360		s1 = new_stmt(cstate, BPF_LD|BPF_B|BPF_ABS);
2361		s1->s.k = 0;
2362
2363		/*
2364		 * Round it up to a multiple of 4.
2365		 * Add 3, and clear the lower 2 bits.
2366		 */
2367		s2 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
2368		s2->s.k = 3;
2369		sappend(s1, s2);
2370		s2 = new_stmt(cstate, BPF_ALU|BPF_AND|BPF_K);
2371		s2->s.k = 0xfffffffc;
2372		sappend(s1, s2);
2373
2374		/*
2375		 * Now allocate a register to hold that value and store
2376		 * it.
2377		 */
2378		s2 = new_stmt(cstate, BPF_ST);
2379		s2->s.k = cstate->off_linkpl.reg;
2380		sappend(s1, s2);
2381
2382		/*
2383		 * Now move it into the X register.
2384		 */
2385		s2 = new_stmt(cstate, BPF_MISC|BPF_TAX);
2386		sappend(s1, s2);
2387
2388		return (s1);
2389	} else
2390		return (NULL);
2391}
2392
2393static struct slist *
2394gen_load_prism_llprefixlen(compiler_state_t *cstate)
2395{
2396	struct slist *s1, *s2;
2397	struct slist *sjeq_avs_cookie;
2398	struct slist *sjcommon;
2399
2400	/*
2401	 * This code is not compatible with the optimizer, as
2402	 * we are generating jmp instructions within a normal
2403	 * slist of instructions
2404	 */
2405	cstate->no_optimize = 1;
2406
2407	/*
2408	 * Generate code to load the length of the radio header into
2409	 * the register assigned to hold that length, if one has been
2410	 * assigned.  (If one hasn't been assigned, no code we've
2411	 * generated uses that prefix, so we don't need to generate any
2412	 * code to load it.)
2413	 *
2414	 * Some Linux drivers use ARPHRD_IEEE80211_PRISM but sometimes
2415	 * or always use the AVS header rather than the Prism header.
2416	 * We load a 4-byte big-endian value at the beginning of the
2417	 * raw packet data, and see whether, when masked with 0xFFFFF000,
2418	 * it's equal to 0x80211000.  If so, that indicates that it's
2419	 * an AVS header (the masked-out bits are the version number).
2420	 * Otherwise, it's a Prism header.
2421	 *
2422	 * XXX - the Prism header is also, in theory, variable-length,
2423	 * but no known software generates headers that aren't 144
2424	 * bytes long.
2425	 */
2426	if (cstate->off_linkhdr.reg != -1) {
2427		/*
2428		 * Load the cookie.
2429		 */
2430		s1 = new_stmt(cstate, BPF_LD|BPF_W|BPF_ABS);
2431		s1->s.k = 0;
2432
2433		/*
2434		 * AND it with 0xFFFFF000.
2435		 */
2436		s2 = new_stmt(cstate, BPF_ALU|BPF_AND|BPF_K);
2437		s2->s.k = 0xFFFFF000;
2438		sappend(s1, s2);
2439
2440		/*
2441		 * Compare with 0x80211000.
2442		 */
2443		sjeq_avs_cookie = new_stmt(cstate, JMP(BPF_JEQ));
2444		sjeq_avs_cookie->s.k = 0x80211000;
2445		sappend(s1, sjeq_avs_cookie);
2446
2447		/*
2448		 * If it's AVS:
2449		 *
2450		 * The 4 bytes at an offset of 4 from the beginning of
2451		 * the AVS header are the length of the AVS header.
2452		 * That field is big-endian.
2453		 */
2454		s2 = new_stmt(cstate, BPF_LD|BPF_W|BPF_ABS);
2455		s2->s.k = 4;
2456		sappend(s1, s2);
2457		sjeq_avs_cookie->s.jt = s2;
2458
2459		/*
2460		 * Now jump to the code to allocate a register
2461		 * into which to save the header length and
2462		 * store the length there.  (The "jump always"
2463		 * instruction needs to have the k field set;
2464		 * it's added to the PC, so, as we're jumping
2465		 * over a single instruction, it should be 1.)
2466		 */
2467		sjcommon = new_stmt(cstate, JMP(BPF_JA));
2468		sjcommon->s.k = 1;
2469		sappend(s1, sjcommon);
2470
2471		/*
2472		 * Now for the code that handles the Prism header.
2473		 * Just load the length of the Prism header (144)
2474		 * into the A register.  Have the test for an AVS
2475		 * header branch here if we don't have an AVS header.
2476		 */
2477		s2 = new_stmt(cstate, BPF_LD|BPF_W|BPF_IMM);
2478		s2->s.k = 144;
2479		sappend(s1, s2);
2480		sjeq_avs_cookie->s.jf = s2;
2481
2482		/*
2483		 * Now allocate a register to hold that value and store
2484		 * it.  The code for the AVS header will jump here after
2485		 * loading the length of the AVS header.
2486		 */
2487		s2 = new_stmt(cstate, BPF_ST);
2488		s2->s.k = cstate->off_linkhdr.reg;
2489		sappend(s1, s2);
2490		sjcommon->s.jf = s2;
2491
2492		/*
2493		 * Now move it into the X register.
2494		 */
2495		s2 = new_stmt(cstate, BPF_MISC|BPF_TAX);
2496		sappend(s1, s2);
2497
2498		return (s1);
2499	} else
2500		return (NULL);
2501}
2502
2503static struct slist *
2504gen_load_avs_llprefixlen(compiler_state_t *cstate)
2505{
2506	struct slist *s1, *s2;
2507
2508	/*
2509	 * Generate code to load the length of the AVS header into
2510	 * the register assigned to hold that length, if one has been
2511	 * assigned.  (If one hasn't been assigned, no code we've
2512	 * generated uses that prefix, so we don't need to generate any
2513	 * code to load it.)
2514	 */
2515	if (cstate->off_linkhdr.reg != -1) {
2516		/*
2517		 * The 4 bytes at an offset of 4 from the beginning of
2518		 * the AVS header are the length of the AVS header.
2519		 * That field is big-endian.
2520		 */
2521		s1 = new_stmt(cstate, BPF_LD|BPF_W|BPF_ABS);
2522		s1->s.k = 4;
2523
2524		/*
2525		 * Now allocate a register to hold that value and store
2526		 * it.
2527		 */
2528		s2 = new_stmt(cstate, BPF_ST);
2529		s2->s.k = cstate->off_linkhdr.reg;
2530		sappend(s1, s2);
2531
2532		/*
2533		 * Now move it into the X register.
2534		 */
2535		s2 = new_stmt(cstate, BPF_MISC|BPF_TAX);
2536		sappend(s1, s2);
2537
2538		return (s1);
2539	} else
2540		return (NULL);
2541}
2542
2543static struct slist *
2544gen_load_radiotap_llprefixlen(compiler_state_t *cstate)
2545{
2546	struct slist *s1, *s2;
2547
2548	/*
2549	 * Generate code to load the length of the radiotap header into
2550	 * the register assigned to hold that length, if one has been
2551	 * assigned.  (If one hasn't been assigned, no code we've
2552	 * generated uses that prefix, so we don't need to generate any
2553	 * code to load it.)
2554	 */
2555	if (cstate->off_linkhdr.reg != -1) {
2556		/*
2557		 * The 2 bytes at offsets of 2 and 3 from the beginning
2558		 * of the radiotap header are the length of the radiotap
2559		 * header; unfortunately, it's little-endian, so we have
2560		 * to load it a byte at a time and construct the value.
2561		 */
2562
2563		/*
2564		 * Load the high-order byte, at an offset of 3, shift it
2565		 * left a byte, and put the result in the X register.
2566		 */
2567		s1 = new_stmt(cstate, BPF_LD|BPF_B|BPF_ABS);
2568		s1->s.k = 3;
2569		s2 = new_stmt(cstate, BPF_ALU|BPF_LSH|BPF_K);
2570		sappend(s1, s2);
2571		s2->s.k = 8;
2572		s2 = new_stmt(cstate, BPF_MISC|BPF_TAX);
2573		sappend(s1, s2);
2574
2575		/*
2576		 * Load the next byte, at an offset of 2, and OR the
2577		 * value from the X register into it.
2578		 */
2579		s2 = new_stmt(cstate, BPF_LD|BPF_B|BPF_ABS);
2580		sappend(s1, s2);
2581		s2->s.k = 2;
2582		s2 = new_stmt(cstate, BPF_ALU|BPF_OR|BPF_X);
2583		sappend(s1, s2);
2584
2585		/*
2586		 * Now allocate a register to hold that value and store
2587		 * it.
2588		 */
2589		s2 = new_stmt(cstate, BPF_ST);
2590		s2->s.k = cstate->off_linkhdr.reg;
2591		sappend(s1, s2);
2592
2593		/*
2594		 * Now move it into the X register.
2595		 */
2596		s2 = new_stmt(cstate, BPF_MISC|BPF_TAX);
2597		sappend(s1, s2);
2598
2599		return (s1);
2600	} else
2601		return (NULL);
2602}
2603
2604/*
2605 * At the moment we treat PPI as normal Radiotap encoded
2606 * packets. The difference is in the function that generates
2607 * the code at the beginning to compute the header length.
2608 * Since this code generator of PPI supports bare 802.11
2609 * encapsulation only (i.e. the encapsulated DLT should be
2610 * DLT_IEEE802_11) we generate code to check for this too;
2611 * that's done in finish_parse().
2612 */
2613static struct slist *
2614gen_load_ppi_llprefixlen(compiler_state_t *cstate)
2615{
2616	struct slist *s1, *s2;
2617
2618	/*
2619	 * Generate code to load the length of the radiotap header
2620	 * into the register assigned to hold that length, if one has
2621	 * been assigned.
2622	 */
2623	if (cstate->off_linkhdr.reg != -1) {
2624		/*
2625		 * The 2 bytes at offsets of 2 and 3 from the beginning
2626		 * of the radiotap header are the length of the radiotap
2627		 * header; unfortunately, it's little-endian, so we have
2628		 * to load it a byte at a time and construct the value.
2629		 */
2630
2631		/*
2632		 * Load the high-order byte, at an offset of 3, shift it
2633		 * left a byte, and put the result in the X register.
2634		 */
2635		s1 = new_stmt(cstate, BPF_LD|BPF_B|BPF_ABS);
2636		s1->s.k = 3;
2637		s2 = new_stmt(cstate, BPF_ALU|BPF_LSH|BPF_K);
2638		sappend(s1, s2);
2639		s2->s.k = 8;
2640		s2 = new_stmt(cstate, BPF_MISC|BPF_TAX);
2641		sappend(s1, s2);
2642
2643		/*
2644		 * Load the next byte, at an offset of 2, and OR the
2645		 * value from the X register into it.
2646		 */
2647		s2 = new_stmt(cstate, BPF_LD|BPF_B|BPF_ABS);
2648		sappend(s1, s2);
2649		s2->s.k = 2;
2650		s2 = new_stmt(cstate, BPF_ALU|BPF_OR|BPF_X);
2651		sappend(s1, s2);
2652
2653		/*
2654		 * Now allocate a register to hold that value and store
2655		 * it.
2656		 */
2657		s2 = new_stmt(cstate, BPF_ST);
2658		s2->s.k = cstate->off_linkhdr.reg;
2659		sappend(s1, s2);
2660
2661		/*
2662		 * Now move it into the X register.
2663		 */
2664		s2 = new_stmt(cstate, BPF_MISC|BPF_TAX);
2665		sappend(s1, s2);
2666
2667		return (s1);
2668	} else
2669		return (NULL);
2670}
2671
2672/*
2673 * Load a value relative to the beginning of the link-layer header after the 802.11
2674 * header, i.e. LLC_SNAP.
2675 * The link-layer header doesn't necessarily begin at the beginning
2676 * of the packet data; there might be a variable-length prefix containing
2677 * radio information.
2678 */
2679static struct slist *
2680gen_load_802_11_header_len(compiler_state_t *cstate, struct slist *s, struct slist *snext)
2681{
2682	struct slist *s2;
2683	struct slist *sjset_data_frame_1;
2684	struct slist *sjset_data_frame_2;
2685	struct slist *sjset_qos;
2686	struct slist *sjset_radiotap_flags_present;
2687	struct slist *sjset_radiotap_ext_present;
2688	struct slist *sjset_radiotap_tsft_present;
2689	struct slist *sjset_tsft_datapad, *sjset_notsft_datapad;
2690	struct slist *s_roundup;
2691
2692	if (cstate->off_linkpl.reg == -1) {
2693		/*
2694		 * No register has been assigned to the offset of
2695		 * the link-layer payload, which means nobody needs
2696		 * it; don't bother computing it - just return
2697		 * what we already have.
2698		 */
2699		return (s);
2700	}
2701
2702	/*
2703	 * This code is not compatible with the optimizer, as
2704	 * we are generating jmp instructions within a normal
2705	 * slist of instructions
2706	 */
2707	cstate->no_optimize = 1;
2708
2709	/*
2710	 * If "s" is non-null, it has code to arrange that the X register
2711	 * contains the length of the prefix preceding the link-layer
2712	 * header.
2713	 *
2714	 * Otherwise, the length of the prefix preceding the link-layer
2715	 * header is "off_outermostlinkhdr.constant_part".
2716	 */
2717	if (s == NULL) {
2718		/*
2719		 * There is no variable-length header preceding the
2720		 * link-layer header.
2721		 *
2722		 * Load the length of the fixed-length prefix preceding
2723		 * the link-layer header (if any) into the X register,
2724		 * and store it in the cstate->off_linkpl.reg register.
2725		 * That length is off_outermostlinkhdr.constant_part.
2726		 */
2727		s = new_stmt(cstate, BPF_LDX|BPF_IMM);
2728		s->s.k = cstate->off_outermostlinkhdr.constant_part;
2729	}
2730
2731	/*
2732	 * The X register contains the offset of the beginning of the
2733	 * link-layer header; add 24, which is the minimum length
2734	 * of the MAC header for a data frame, to that, and store it
2735	 * in cstate->off_linkpl.reg, and then load the Frame Control field,
2736	 * which is at the offset in the X register, with an indexed load.
2737	 */
2738	s2 = new_stmt(cstate, BPF_MISC|BPF_TXA);
2739	sappend(s, s2);
2740	s2 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
2741	s2->s.k = 24;
2742	sappend(s, s2);
2743	s2 = new_stmt(cstate, BPF_ST);
2744	s2->s.k = cstate->off_linkpl.reg;
2745	sappend(s, s2);
2746
2747	s2 = new_stmt(cstate, BPF_LD|BPF_IND|BPF_B);
2748	s2->s.k = 0;
2749	sappend(s, s2);
2750
2751	/*
2752	 * Check the Frame Control field to see if this is a data frame;
2753	 * a data frame has the 0x08 bit (b3) in that field set and the
2754	 * 0x04 bit (b2) clear.
2755	 */
2756	sjset_data_frame_1 = new_stmt(cstate, JMP(BPF_JSET));
2757	sjset_data_frame_1->s.k = 0x08;
2758	sappend(s, sjset_data_frame_1);
2759
2760	/*
2761	 * If b3 is set, test b2, otherwise go to the first statement of
2762	 * the rest of the program.
2763	 */
2764	sjset_data_frame_1->s.jt = sjset_data_frame_2 = new_stmt(cstate, JMP(BPF_JSET));
2765	sjset_data_frame_2->s.k = 0x04;
2766	sappend(s, sjset_data_frame_2);
2767	sjset_data_frame_1->s.jf = snext;
2768
2769	/*
2770	 * If b2 is not set, this is a data frame; test the QoS bit.
2771	 * Otherwise, go to the first statement of the rest of the
2772	 * program.
2773	 */
2774	sjset_data_frame_2->s.jt = snext;
2775	sjset_data_frame_2->s.jf = sjset_qos = new_stmt(cstate, JMP(BPF_JSET));
2776	sjset_qos->s.k = 0x80;	/* QoS bit */
2777	sappend(s, sjset_qos);
2778
2779	/*
2780	 * If it's set, add 2 to cstate->off_linkpl.reg, to skip the QoS
2781	 * field.
2782	 * Otherwise, go to the first statement of the rest of the
2783	 * program.
2784	 */
2785	sjset_qos->s.jt = s2 = new_stmt(cstate, BPF_LD|BPF_MEM);
2786	s2->s.k = cstate->off_linkpl.reg;
2787	sappend(s, s2);
2788	s2 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_IMM);
2789	s2->s.k = 2;
2790	sappend(s, s2);
2791	s2 = new_stmt(cstate, BPF_ST);
2792	s2->s.k = cstate->off_linkpl.reg;
2793	sappend(s, s2);
2794
2795	/*
2796	 * If we have a radiotap header, look at it to see whether
2797	 * there's Atheros padding between the MAC-layer header
2798	 * and the payload.
2799	 *
2800	 * Note: all of the fields in the radiotap header are
2801	 * little-endian, so we byte-swap all of the values
2802	 * we test against, as they will be loaded as big-endian
2803	 * values.
2804	 *
2805	 * XXX - in the general case, we would have to scan through
2806	 * *all* the presence bits, if there's more than one word of
2807	 * presence bits.  That would require a loop, meaning that
2808	 * we wouldn't be able to run the filter in the kernel.
2809	 *
2810	 * We assume here that the Atheros adapters that insert the
2811	 * annoying padding don't have multiple antennae and therefore
2812	 * do not generate radiotap headers with multiple presence words.
2813	 */
2814	if (cstate->linktype == DLT_IEEE802_11_RADIO) {
2815		/*
2816		 * Is the IEEE80211_RADIOTAP_FLAGS bit (0x0000002) set
2817		 * in the first presence flag word?
2818		 */
2819		sjset_qos->s.jf = s2 = new_stmt(cstate, BPF_LD|BPF_ABS|BPF_W);
2820		s2->s.k = 4;
2821		sappend(s, s2);
2822
2823		sjset_radiotap_flags_present = new_stmt(cstate, JMP(BPF_JSET));
2824		sjset_radiotap_flags_present->s.k = SWAPLONG(0x00000002);
2825		sappend(s, sjset_radiotap_flags_present);
2826
2827		/*
2828		 * If not, skip all of this.
2829		 */
2830		sjset_radiotap_flags_present->s.jf = snext;
2831
2832		/*
2833		 * Otherwise, is the "extension" bit set in that word?
2834		 */
2835		sjset_radiotap_ext_present = new_stmt(cstate, JMP(BPF_JSET));
2836		sjset_radiotap_ext_present->s.k = SWAPLONG(0x80000000);
2837		sappend(s, sjset_radiotap_ext_present);
2838		sjset_radiotap_flags_present->s.jt = sjset_radiotap_ext_present;
2839
2840		/*
2841		 * If so, skip all of this.
2842		 */
2843		sjset_radiotap_ext_present->s.jt = snext;
2844
2845		/*
2846		 * Otherwise, is the IEEE80211_RADIOTAP_TSFT bit set?
2847		 */
2848		sjset_radiotap_tsft_present = new_stmt(cstate, JMP(BPF_JSET));
2849		sjset_radiotap_tsft_present->s.k = SWAPLONG(0x00000001);
2850		sappend(s, sjset_radiotap_tsft_present);
2851		sjset_radiotap_ext_present->s.jf = sjset_radiotap_tsft_present;
2852
2853		/*
2854		 * If IEEE80211_RADIOTAP_TSFT is set, the flags field is
2855		 * at an offset of 16 from the beginning of the raw packet
2856		 * data (8 bytes for the radiotap header and 8 bytes for
2857		 * the TSFT field).
2858		 *
2859		 * Test whether the IEEE80211_RADIOTAP_F_DATAPAD bit (0x20)
2860		 * is set.
2861		 */
2862		s2 = new_stmt(cstate, BPF_LD|BPF_ABS|BPF_B);
2863		s2->s.k = 16;
2864		sappend(s, s2);
2865		sjset_radiotap_tsft_present->s.jt = s2;
2866
2867		sjset_tsft_datapad = new_stmt(cstate, JMP(BPF_JSET));
2868		sjset_tsft_datapad->s.k = 0x20;
2869		sappend(s, sjset_tsft_datapad);
2870
2871		/*
2872		 * If IEEE80211_RADIOTAP_TSFT is not set, the flags field is
2873		 * at an offset of 8 from the beginning of the raw packet
2874		 * data (8 bytes for the radiotap header).
2875		 *
2876		 * Test whether the IEEE80211_RADIOTAP_F_DATAPAD bit (0x20)
2877		 * is set.
2878		 */
2879		s2 = new_stmt(cstate, BPF_LD|BPF_ABS|BPF_B);
2880		s2->s.k = 8;
2881		sappend(s, s2);
2882		sjset_radiotap_tsft_present->s.jf = s2;
2883
2884		sjset_notsft_datapad = new_stmt(cstate, JMP(BPF_JSET));
2885		sjset_notsft_datapad->s.k = 0x20;
2886		sappend(s, sjset_notsft_datapad);
2887
2888		/*
2889		 * In either case, if IEEE80211_RADIOTAP_F_DATAPAD is
2890		 * set, round the length of the 802.11 header to
2891		 * a multiple of 4.  Do that by adding 3 and then
2892		 * dividing by and multiplying by 4, which we do by
2893		 * ANDing with ~3.
2894		 */
2895		s_roundup = new_stmt(cstate, BPF_LD|BPF_MEM);
2896		s_roundup->s.k = cstate->off_linkpl.reg;
2897		sappend(s, s_roundup);
2898		s2 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_IMM);
2899		s2->s.k = 3;
2900		sappend(s, s2);
2901		s2 = new_stmt(cstate, BPF_ALU|BPF_AND|BPF_IMM);
2902		s2->s.k = (bpf_u_int32)~3;
2903		sappend(s, s2);
2904		s2 = new_stmt(cstate, BPF_ST);
2905		s2->s.k = cstate->off_linkpl.reg;
2906		sappend(s, s2);
2907
2908		sjset_tsft_datapad->s.jt = s_roundup;
2909		sjset_tsft_datapad->s.jf = snext;
2910		sjset_notsft_datapad->s.jt = s_roundup;
2911		sjset_notsft_datapad->s.jf = snext;
2912	} else
2913		sjset_qos->s.jf = snext;
2914
2915	return s;
2916}
2917
2918static void
2919insert_compute_vloffsets(compiler_state_t *cstate, struct block *b)
2920{
2921	struct slist *s;
2922
2923	/* There is an implicit dependency between the link
2924	 * payload and link header since the payload computation
2925	 * includes the variable part of the header. Therefore,
2926	 * if nobody else has allocated a register for the link
2927	 * header and we need it, do it now. */
2928	if (cstate->off_linkpl.reg != -1 && cstate->off_linkhdr.is_variable &&
2929	    cstate->off_linkhdr.reg == -1)
2930		cstate->off_linkhdr.reg = alloc_reg(cstate);
2931
2932	/*
2933	 * For link-layer types that have a variable-length header
2934	 * preceding the link-layer header, generate code to load
2935	 * the offset of the link-layer header into the register
2936	 * assigned to that offset, if any.
2937	 *
2938	 * XXX - this, and the next switch statement, won't handle
2939	 * encapsulation of 802.11 or 802.11+radio information in
2940	 * some other protocol stack.  That's significantly more
2941	 * complicated.
2942	 */
2943	switch (cstate->outermostlinktype) {
2944
2945	case DLT_PRISM_HEADER:
2946		s = gen_load_prism_llprefixlen(cstate);
2947		break;
2948
2949	case DLT_IEEE802_11_RADIO_AVS:
2950		s = gen_load_avs_llprefixlen(cstate);
2951		break;
2952
2953	case DLT_IEEE802_11_RADIO:
2954		s = gen_load_radiotap_llprefixlen(cstate);
2955		break;
2956
2957	case DLT_PPI:
2958		s = gen_load_ppi_llprefixlen(cstate);
2959		break;
2960
2961	default:
2962		s = NULL;
2963		break;
2964	}
2965
2966	/*
2967	 * For link-layer types that have a variable-length link-layer
2968	 * header, generate code to load the offset of the link-layer
2969	 * payload into the register assigned to that offset, if any.
2970	 */
2971	switch (cstate->outermostlinktype) {
2972
2973	case DLT_IEEE802_11:
2974	case DLT_PRISM_HEADER:
2975	case DLT_IEEE802_11_RADIO_AVS:
2976	case DLT_IEEE802_11_RADIO:
2977	case DLT_PPI:
2978		s = gen_load_802_11_header_len(cstate, s, b->stmts);
2979		break;
2980
2981	case DLT_PFLOG:
2982		s = gen_load_pflog_llprefixlen(cstate);
2983		break;
2984	}
2985
2986	/*
2987	 * If there is no initialization yet and we need variable
2988	 * length offsets for VLAN, initialize them to zero
2989	 */
2990	if (s == NULL && cstate->is_vlan_vloffset) {
2991		struct slist *s2;
2992
2993		if (cstate->off_linkpl.reg == -1)
2994			cstate->off_linkpl.reg = alloc_reg(cstate);
2995		if (cstate->off_linktype.reg == -1)
2996			cstate->off_linktype.reg = alloc_reg(cstate);
2997
2998		s = new_stmt(cstate, BPF_LD|BPF_W|BPF_IMM);
2999		s->s.k = 0;
3000		s2 = new_stmt(cstate, BPF_ST);
3001		s2->s.k = cstate->off_linkpl.reg;
3002		sappend(s, s2);
3003		s2 = new_stmt(cstate, BPF_ST);
3004		s2->s.k = cstate->off_linktype.reg;
3005		sappend(s, s2);
3006	}
3007
3008	/*
3009	 * If we have any offset-loading code, append all the
3010	 * existing statements in the block to those statements,
3011	 * and make the resulting list the list of statements
3012	 * for the block.
3013	 */
3014	if (s != NULL) {
3015		sappend(s, b->stmts);
3016		b->stmts = s;
3017	}
3018}
3019
3020static struct block *
3021gen_ppi_dlt_check(compiler_state_t *cstate)
3022{
3023	struct slist *s_load_dlt;
3024	struct block *b;
3025
3026	if (cstate->linktype == DLT_PPI)
3027	{
3028		/* Create the statements that check for the DLT
3029		 */
3030		s_load_dlt = new_stmt(cstate, BPF_LD|BPF_W|BPF_ABS);
3031		s_load_dlt->s.k = 4;
3032
3033		b = new_block(cstate, JMP(BPF_JEQ));
3034
3035		b->stmts = s_load_dlt;
3036		b->s.k = SWAPLONG(DLT_IEEE802_11);
3037	}
3038	else
3039	{
3040		b = NULL;
3041	}
3042
3043	return b;
3044}
3045
3046/*
3047 * Take an absolute offset, and:
3048 *
3049 *    if it has no variable part, return NULL;
3050 *
3051 *    if it has a variable part, generate code to load the register
3052 *    containing that variable part into the X register, returning
3053 *    a pointer to that code - if no register for that offset has
3054 *    been allocated, allocate it first.
3055 *
3056 * (The code to set that register will be generated later, but will
3057 * be placed earlier in the code sequence.)
3058 */
3059static struct slist *
3060gen_abs_offset_varpart(compiler_state_t *cstate, bpf_abs_offset *off)
3061{
3062	struct slist *s;
3063
3064	if (off->is_variable) {
3065		if (off->reg == -1) {
3066			/*
3067			 * We haven't yet assigned a register for the
3068			 * variable part of the offset of the link-layer
3069			 * header; allocate one.
3070			 */
3071			off->reg = alloc_reg(cstate);
3072		}
3073
3074		/*
3075		 * Load the register containing the variable part of the
3076		 * offset of the link-layer header into the X register.
3077		 */
3078		s = new_stmt(cstate, BPF_LDX|BPF_MEM);
3079		s->s.k = off->reg;
3080		return s;
3081	} else {
3082		/*
3083		 * That offset isn't variable, there's no variable part,
3084		 * so we don't need to generate any code.
3085		 */
3086		return NULL;
3087	}
3088}
3089
3090/*
3091 * Map an Ethernet type to the equivalent PPP type.
3092 */
3093static bpf_u_int32
3094ethertype_to_ppptype(bpf_u_int32 ll_proto)
3095{
3096	switch (ll_proto) {
3097
3098	case ETHERTYPE_IP:
3099		ll_proto = PPP_IP;
3100		break;
3101
3102	case ETHERTYPE_IPV6:
3103		ll_proto = PPP_IPV6;
3104		break;
3105
3106	case ETHERTYPE_DN:
3107		ll_proto = PPP_DECNET;
3108		break;
3109
3110	case ETHERTYPE_ATALK:
3111		ll_proto = PPP_APPLE;
3112		break;
3113
3114	case ETHERTYPE_NS:
3115		ll_proto = PPP_NS;
3116		break;
3117
3118	case LLCSAP_ISONS:
3119		ll_proto = PPP_OSI;
3120		break;
3121
3122	case LLCSAP_8021D:
3123		/*
3124		 * I'm assuming the "Bridging PDU"s that go
3125		 * over PPP are Spanning Tree Protocol
3126		 * Bridging PDUs.
3127		 */
3128		ll_proto = PPP_BRPDU;
3129		break;
3130
3131	case LLCSAP_IPX:
3132		ll_proto = PPP_IPX;
3133		break;
3134	}
3135	return (ll_proto);
3136}
3137
3138/*
3139 * Generate any tests that, for encapsulation of a link-layer packet
3140 * inside another protocol stack, need to be done to check for those
3141 * link-layer packets (and that haven't already been done by a check
3142 * for that encapsulation).
3143 */
3144static struct block *
3145gen_prevlinkhdr_check(compiler_state_t *cstate)
3146{
3147	struct block *b0;
3148
3149	if (cstate->is_geneve)
3150		return gen_geneve_ll_check(cstate);
3151
3152	switch (cstate->prevlinktype) {
3153
3154	case DLT_SUNATM:
3155		/*
3156		 * This is LANE-encapsulated Ethernet; check that the LANE
3157		 * packet doesn't begin with an LE Control marker, i.e.
3158		 * that it's data, not a control message.
3159		 *
3160		 * (We've already generated a test for LANE.)
3161		 */
3162		b0 = gen_cmp(cstate, OR_PREVLINKHDR, SUNATM_PKT_BEGIN_POS, BPF_H, 0xFF00);
3163		gen_not(b0);
3164		return b0;
3165
3166	default:
3167		/*
3168		 * No such tests are necessary.
3169		 */
3170		return NULL;
3171	}
3172	/*NOTREACHED*/
3173}
3174
3175/*
3176 * The three different values we should check for when checking for an
3177 * IPv6 packet with DLT_NULL.
3178 */
3179#define BSD_AFNUM_INET6_BSD	24	/* NetBSD, OpenBSD, BSD/OS, Npcap */
3180#define BSD_AFNUM_INET6_FREEBSD	28	/* FreeBSD */
3181#define BSD_AFNUM_INET6_DARWIN	30	/* macOS, iOS, other Darwin-based OSes */
3182
3183/*
3184 * Generate code to match a particular packet type by matching the
3185 * link-layer type field or fields in the 802.2 LLC header.
3186 *
3187 * "proto" is an Ethernet type value, if > ETHERMTU, or an LLC SAP
3188 * value, if <= ETHERMTU.
3189 */
3190static struct block *
3191gen_linktype(compiler_state_t *cstate, bpf_u_int32 ll_proto)
3192{
3193	struct block *b0, *b1, *b2;
3194	const char *description;
3195
3196	/* are we checking MPLS-encapsulated packets? */
3197	if (cstate->label_stack_depth > 0)
3198		return gen_mpls_linktype(cstate, ll_proto);
3199
3200	switch (cstate->linktype) {
3201
3202	case DLT_EN10MB:
3203	case DLT_NETANALYZER:
3204	case DLT_NETANALYZER_TRANSPARENT:
3205		/* Geneve has an EtherType regardless of whether there is an
3206		 * L2 header. */
3207		if (!cstate->is_geneve)
3208			b0 = gen_prevlinkhdr_check(cstate);
3209		else
3210			b0 = NULL;
3211
3212		b1 = gen_ether_linktype(cstate, ll_proto);
3213		if (b0 != NULL)
3214			gen_and(b0, b1);
3215		return b1;
3216		/*NOTREACHED*/
3217
3218	case DLT_C_HDLC:
3219	case DLT_HDLC:
3220		switch (ll_proto) {
3221
3222		case LLCSAP_ISONS:
3223			ll_proto = (ll_proto << 8 | LLCSAP_ISONS);
3224			/* fall through */
3225
3226		default:
3227			return gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, ll_proto);
3228			/*NOTREACHED*/
3229		}
3230
3231	case DLT_IEEE802_11:
3232	case DLT_PRISM_HEADER:
3233	case DLT_IEEE802_11_RADIO_AVS:
3234	case DLT_IEEE802_11_RADIO:
3235	case DLT_PPI:
3236		/*
3237		 * Check that we have a data frame.
3238		 */
3239		b0 = gen_check_802_11_data_frame(cstate);
3240
3241		/*
3242		 * Now check for the specified link-layer type.
3243		 */
3244		b1 = gen_llc_linktype(cstate, ll_proto);
3245		gen_and(b0, b1);
3246		return b1;
3247		/*NOTREACHED*/
3248
3249	case DLT_FDDI:
3250		/*
3251		 * XXX - check for LLC frames.
3252		 */
3253		return gen_llc_linktype(cstate, ll_proto);
3254		/*NOTREACHED*/
3255
3256	case DLT_IEEE802:
3257		/*
3258		 * XXX - check for LLC PDUs, as per IEEE 802.5.
3259		 */
3260		return gen_llc_linktype(cstate, ll_proto);
3261		/*NOTREACHED*/
3262
3263	case DLT_ATM_RFC1483:
3264	case DLT_ATM_CLIP:
3265	case DLT_IP_OVER_FC:
3266		return gen_llc_linktype(cstate, ll_proto);
3267		/*NOTREACHED*/
3268
3269	case DLT_SUNATM:
3270		/*
3271		 * Check for an LLC-encapsulated version of this protocol;
3272		 * if we were checking for LANE, linktype would no longer
3273		 * be DLT_SUNATM.
3274		 *
3275		 * Check for LLC encapsulation and then check the protocol.
3276		 */
3277		b0 = gen_atmfield_code_internal(cstate, A_PROTOTYPE, PT_LLC, BPF_JEQ, 0);
3278		b1 = gen_llc_linktype(cstate, ll_proto);
3279		gen_and(b0, b1);
3280		return b1;
3281		/*NOTREACHED*/
3282
3283	case DLT_LINUX_SLL:
3284		return gen_linux_sll_linktype(cstate, ll_proto);
3285		/*NOTREACHED*/
3286
3287	case DLT_SLIP:
3288	case DLT_SLIP_BSDOS:
3289	case DLT_RAW:
3290		/*
3291		 * These types don't provide any type field; packets
3292		 * are always IPv4 or IPv6.
3293		 *
3294		 * XXX - for IPv4, check for a version number of 4, and,
3295		 * for IPv6, check for a version number of 6?
3296		 */
3297		switch (ll_proto) {
3298
3299		case ETHERTYPE_IP:
3300			/* Check for a version number of 4. */
3301			return gen_mcmp(cstate, OR_LINKHDR, 0, BPF_B, 0x40, 0xF0);
3302
3303		case ETHERTYPE_IPV6:
3304			/* Check for a version number of 6. */
3305			return gen_mcmp(cstate, OR_LINKHDR, 0, BPF_B, 0x60, 0xF0);
3306
3307		default:
3308			return gen_false(cstate);	/* always false */
3309		}
3310		/*NOTREACHED*/
3311
3312	case DLT_IPV4:
3313		/*
3314		 * Raw IPv4, so no type field.
3315		 */
3316		if (ll_proto == ETHERTYPE_IP)
3317			return gen_true(cstate);	/* always true */
3318
3319		/* Checking for something other than IPv4; always false */
3320		return gen_false(cstate);
3321		/*NOTREACHED*/
3322
3323	case DLT_IPV6:
3324		/*
3325		 * Raw IPv6, so no type field.
3326		 */
3327		if (ll_proto == ETHERTYPE_IPV6)
3328			return gen_true(cstate);	/* always true */
3329
3330		/* Checking for something other than IPv6; always false */
3331		return gen_false(cstate);
3332		/*NOTREACHED*/
3333
3334	case DLT_PPP:
3335	case DLT_PPP_PPPD:
3336	case DLT_PPP_SERIAL:
3337	case DLT_PPP_ETHER:
3338		/*
3339		 * We use Ethernet protocol types inside libpcap;
3340		 * map them to the corresponding PPP protocol types.
3341		 */
3342		return gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H,
3343		    ethertype_to_ppptype(ll_proto));
3344		/*NOTREACHED*/
3345
3346	case DLT_PPP_BSDOS:
3347		/*
3348		 * We use Ethernet protocol types inside libpcap;
3349		 * map them to the corresponding PPP protocol types.
3350		 */
3351		switch (ll_proto) {
3352
3353		case ETHERTYPE_IP:
3354			/*
3355			 * Also check for Van Jacobson-compressed IP.
3356			 * XXX - do this for other forms of PPP?
3357			 */
3358			b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, PPP_IP);
3359			b1 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, PPP_VJC);
3360			gen_or(b0, b1);
3361			b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, PPP_VJNC);
3362			gen_or(b1, b0);
3363			return b0;
3364
3365		default:
3366			return gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H,
3367			    ethertype_to_ppptype(ll_proto));
3368		}
3369		/*NOTREACHED*/
3370
3371	case DLT_NULL:
3372	case DLT_LOOP:
3373	case DLT_ENC:
3374		switch (ll_proto) {
3375
3376		case ETHERTYPE_IP:
3377			return (gen_loopback_linktype(cstate, AF_INET));
3378
3379		case ETHERTYPE_IPV6:
3380			/*
3381			 * AF_ values may, unfortunately, be platform-
3382			 * dependent; AF_INET isn't, because everybody
3383			 * used 4.2BSD's value, but AF_INET6 is, because
3384			 * 4.2BSD didn't have a value for it (given that
3385			 * IPv6 didn't exist back in the early 1980's),
3386			 * and they all picked their own values.
3387			 *
3388			 * This means that, if we're reading from a
3389			 * savefile, we need to check for all the
3390			 * possible values.
3391			 *
3392			 * If we're doing a live capture, we only need
3393			 * to check for this platform's value; however,
3394			 * Npcap uses 24, which isn't Windows's AF_INET6
3395			 * value.  (Given the multiple different values,
3396			 * programs that read pcap files shouldn't be
3397			 * checking for their platform's AF_INET6 value
3398			 * anyway, they should check for all of the
3399			 * possible values. and they might as well do
3400			 * that even for live captures.)
3401			 */
3402			if (cstate->bpf_pcap->rfile != NULL) {
3403				/*
3404				 * Savefile - check for all three
3405				 * possible IPv6 values.
3406				 */
3407				b0 = gen_loopback_linktype(cstate, BSD_AFNUM_INET6_BSD);
3408				b1 = gen_loopback_linktype(cstate, BSD_AFNUM_INET6_FREEBSD);
3409				gen_or(b0, b1);
3410				b0 = gen_loopback_linktype(cstate, BSD_AFNUM_INET6_DARWIN);
3411				gen_or(b0, b1);
3412				return (b1);
3413			} else {
3414				/*
3415				 * Live capture, so we only need to
3416				 * check for the value used on this
3417				 * platform.
3418				 */
3419#ifdef _WIN32
3420				/*
3421				 * Npcap doesn't use Windows's AF_INET6,
3422				 * as that collides with AF_IPX on
3423				 * some BSDs (both have the value 23).
3424				 * Instead, it uses 24.
3425				 */
3426				return (gen_loopback_linktype(cstate, 24));
3427#else /* _WIN32 */
3428#ifdef AF_INET6
3429				return (gen_loopback_linktype(cstate, AF_INET6));
3430#else /* AF_INET6 */
3431				/*
3432				 * I guess this platform doesn't support
3433				 * IPv6, so we just reject all packets.
3434				 */
3435				return gen_false(cstate);
3436#endif /* AF_INET6 */
3437#endif /* _WIN32 */
3438			}
3439
3440		default:
3441			/*
3442			 * Not a type on which we support filtering.
3443			 * XXX - support those that have AF_ values
3444			 * #defined on this platform, at least?
3445			 */
3446			return gen_false(cstate);
3447		}
3448
3449	case DLT_PFLOG:
3450		/*
3451		 * af field is host byte order in contrast to the rest of
3452		 * the packet.
3453		 */
3454		if (ll_proto == ETHERTYPE_IP)
3455			return (gen_cmp(cstate, OR_LINKHDR, offsetof(struct pfloghdr, af),
3456			    BPF_B, AF_INET));
3457		else if (ll_proto == ETHERTYPE_IPV6)
3458			return (gen_cmp(cstate, OR_LINKHDR, offsetof(struct pfloghdr, af),
3459			    BPF_B, AF_INET6));
3460		else
3461			return gen_false(cstate);
3462		/*NOTREACHED*/
3463
3464	case DLT_ARCNET:
3465	case DLT_ARCNET_LINUX:
3466		/*
3467		 * XXX should we check for first fragment if the protocol
3468		 * uses PHDS?
3469		 */
3470		switch (ll_proto) {
3471
3472		default:
3473			return gen_false(cstate);
3474
3475		case ETHERTYPE_IPV6:
3476			return (gen_cmp(cstate, OR_LINKTYPE, 0, BPF_B,
3477				ARCTYPE_INET6));
3478
3479		case ETHERTYPE_IP:
3480			b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_B,
3481			    ARCTYPE_IP);
3482			b1 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_B,
3483			    ARCTYPE_IP_OLD);
3484			gen_or(b0, b1);
3485			return (b1);
3486
3487		case ETHERTYPE_ARP:
3488			b0 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_B,
3489			    ARCTYPE_ARP);
3490			b1 = gen_cmp(cstate, OR_LINKTYPE, 0, BPF_B,
3491			    ARCTYPE_ARP_OLD);
3492			gen_or(b0, b1);
3493			return (b1);
3494
3495		case ETHERTYPE_REVARP:
3496			return (gen_cmp(cstate, OR_LINKTYPE, 0, BPF_B,
3497			    ARCTYPE_REVARP));
3498
3499		case ETHERTYPE_ATALK:
3500			return (gen_cmp(cstate, OR_LINKTYPE, 0, BPF_B,
3501			    ARCTYPE_ATALK));
3502		}
3503		/*NOTREACHED*/
3504
3505	case DLT_LTALK:
3506		switch (ll_proto) {
3507		case ETHERTYPE_ATALK:
3508			return gen_true(cstate);
3509		default:
3510			return gen_false(cstate);
3511		}
3512		/*NOTREACHED*/
3513
3514	case DLT_FRELAY:
3515		/*
3516		 * XXX - assumes a 2-byte Frame Relay header with
3517		 * DLCI and flags.  What if the address is longer?
3518		 */
3519		switch (ll_proto) {
3520
3521		case ETHERTYPE_IP:
3522			/*
3523			 * Check for the special NLPID for IP.
3524			 */
3525			return gen_cmp(cstate, OR_LINKHDR, 2, BPF_H, (0x03<<8) | 0xcc);
3526
3527		case ETHERTYPE_IPV6:
3528			/*
3529			 * Check for the special NLPID for IPv6.
3530			 */
3531			return gen_cmp(cstate, OR_LINKHDR, 2, BPF_H, (0x03<<8) | 0x8e);
3532
3533		case LLCSAP_ISONS:
3534			/*
3535			 * Check for several OSI protocols.
3536			 *
3537			 * Frame Relay packets typically have an OSI
3538			 * NLPID at the beginning; we check for each
3539			 * of them.
3540			 *
3541			 * What we check for is the NLPID and a frame
3542			 * control field of UI, i.e. 0x03 followed
3543			 * by the NLPID.
3544			 */
3545			b0 = gen_cmp(cstate, OR_LINKHDR, 2, BPF_H, (0x03<<8) | ISO8473_CLNP);
3546			b1 = gen_cmp(cstate, OR_LINKHDR, 2, BPF_H, (0x03<<8) | ISO9542_ESIS);
3547			b2 = gen_cmp(cstate, OR_LINKHDR, 2, BPF_H, (0x03<<8) | ISO10589_ISIS);
3548			gen_or(b1, b2);
3549			gen_or(b0, b2);
3550			return b2;
3551
3552		default:
3553			return gen_false(cstate);
3554		}
3555		/*NOTREACHED*/
3556
3557	case DLT_MFR:
3558		bpf_error(cstate, "Multi-link Frame Relay link-layer type filtering not implemented");
3559
3560        case DLT_JUNIPER_MFR:
3561        case DLT_JUNIPER_MLFR:
3562        case DLT_JUNIPER_MLPPP:
3563	case DLT_JUNIPER_ATM1:
3564	case DLT_JUNIPER_ATM2:
3565	case DLT_JUNIPER_PPPOE:
3566	case DLT_JUNIPER_PPPOE_ATM:
3567        case DLT_JUNIPER_GGSN:
3568        case DLT_JUNIPER_ES:
3569        case DLT_JUNIPER_MONITOR:
3570        case DLT_JUNIPER_SERVICES:
3571        case DLT_JUNIPER_ETHER:
3572        case DLT_JUNIPER_PPP:
3573        case DLT_JUNIPER_FRELAY:
3574        case DLT_JUNIPER_CHDLC:
3575        case DLT_JUNIPER_VP:
3576        case DLT_JUNIPER_ST:
3577        case DLT_JUNIPER_ISM:
3578        case DLT_JUNIPER_VS:
3579        case DLT_JUNIPER_SRX_E2E:
3580        case DLT_JUNIPER_FIBRECHANNEL:
3581	case DLT_JUNIPER_ATM_CEMIC:
3582
3583		/* just lets verify the magic number for now -
3584		 * on ATM we may have up to 6 different encapsulations on the wire
3585		 * and need a lot of heuristics to figure out that the payload
3586		 * might be;
3587		 *
3588		 * FIXME encapsulation specific BPF_ filters
3589		 */
3590		return gen_mcmp(cstate, OR_LINKHDR, 0, BPF_W, 0x4d474300, 0xffffff00); /* compare the magic number */
3591
3592	case DLT_BACNET_MS_TP:
3593		return gen_mcmp(cstate, OR_LINKHDR, 0, BPF_W, 0x55FF0000, 0xffff0000);
3594
3595	case DLT_IPNET:
3596		return gen_ipnet_linktype(cstate, ll_proto);
3597
3598	case DLT_LINUX_IRDA:
3599		bpf_error(cstate, "IrDA link-layer type filtering not implemented");
3600
3601	case DLT_DOCSIS:
3602		bpf_error(cstate, "DOCSIS link-layer type filtering not implemented");
3603
3604	case DLT_MTP2:
3605	case DLT_MTP2_WITH_PHDR:
3606		bpf_error(cstate, "MTP2 link-layer type filtering not implemented");
3607
3608	case DLT_ERF:
3609		bpf_error(cstate, "ERF link-layer type filtering not implemented");
3610
3611	case DLT_PFSYNC:
3612		bpf_error(cstate, "PFSYNC link-layer type filtering not implemented");
3613
3614	case DLT_LINUX_LAPD:
3615		bpf_error(cstate, "LAPD link-layer type filtering not implemented");
3616
3617	case DLT_USB_FREEBSD:
3618	case DLT_USB_LINUX:
3619	case DLT_USB_LINUX_MMAPPED:
3620	case DLT_USBPCAP:
3621		bpf_error(cstate, "USB link-layer type filtering not implemented");
3622
3623	case DLT_BLUETOOTH_HCI_H4:
3624	case DLT_BLUETOOTH_HCI_H4_WITH_PHDR:
3625		bpf_error(cstate, "Bluetooth link-layer type filtering not implemented");
3626
3627	case DLT_CAN20B:
3628	case DLT_CAN_SOCKETCAN:
3629		bpf_error(cstate, "CAN link-layer type filtering not implemented");
3630
3631	case DLT_IEEE802_15_4:
3632	case DLT_IEEE802_15_4_LINUX:
3633	case DLT_IEEE802_15_4_NONASK_PHY:
3634	case DLT_IEEE802_15_4_NOFCS:
3635	case DLT_IEEE802_15_4_TAP:
3636		bpf_error(cstate, "IEEE 802.15.4 link-layer type filtering not implemented");
3637
3638	case DLT_IEEE802_16_MAC_CPS_RADIO:
3639		bpf_error(cstate, "IEEE 802.16 link-layer type filtering not implemented");
3640
3641	case DLT_SITA:
3642		bpf_error(cstate, "SITA link-layer type filtering not implemented");
3643
3644	case DLT_RAIF1:
3645		bpf_error(cstate, "RAIF1 link-layer type filtering not implemented");
3646
3647	case DLT_IPMB_KONTRON:
3648	case DLT_IPMB_LINUX:
3649		bpf_error(cstate, "IPMB link-layer type filtering not implemented");
3650
3651	case DLT_AX25_KISS:
3652		bpf_error(cstate, "AX.25 link-layer type filtering not implemented");
3653
3654	case DLT_NFLOG:
3655		/* Using the fixed-size NFLOG header it is possible to tell only
3656		 * the address family of the packet, other meaningful data is
3657		 * either missing or behind TLVs.
3658		 */
3659		bpf_error(cstate, "NFLOG link-layer type filtering not implemented");
3660
3661	default:
3662		/*
3663		 * Does this link-layer header type have a field
3664		 * indicating the type of the next protocol?  If
3665		 * so, off_linktype.constant_part will be the offset of that
3666		 * field in the packet; if not, it will be OFFSET_NOT_SET.
3667		 */
3668		if (cstate->off_linktype.constant_part != OFFSET_NOT_SET) {
3669			/*
3670			 * Yes; assume it's an Ethernet type.  (If
3671			 * it's not, it needs to be handled specially
3672			 * above.)
3673			 */
3674			return gen_cmp(cstate, OR_LINKTYPE, 0, BPF_H, ll_proto);
3675			/*NOTREACHED */
3676		} else {
3677			/*
3678			 * No; report an error.
3679			 */
3680			description = pcap_datalink_val_to_description_or_dlt(cstate->linktype);
3681			bpf_error(cstate, "%s link-layer type filtering not implemented",
3682			    description);
3683			/*NOTREACHED */
3684		}
3685	}
3686}
3687
3688/*
3689 * Check for an LLC SNAP packet with a given organization code and
3690 * protocol type; we check the entire contents of the 802.2 LLC and
3691 * snap headers, checking for DSAP and SSAP of SNAP and a control
3692 * field of 0x03 in the LLC header, and for the specified organization
3693 * code and protocol type in the SNAP header.
3694 */
3695static struct block *
3696gen_snap(compiler_state_t *cstate, bpf_u_int32 orgcode, bpf_u_int32 ptype)
3697{
3698	u_char snapblock[8];
3699
3700	snapblock[0] = LLCSAP_SNAP;		/* DSAP = SNAP */
3701	snapblock[1] = LLCSAP_SNAP;		/* SSAP = SNAP */
3702	snapblock[2] = 0x03;			/* control = UI */
3703	snapblock[3] = (u_char)(orgcode >> 16);	/* upper 8 bits of organization code */
3704	snapblock[4] = (u_char)(orgcode >> 8);	/* middle 8 bits of organization code */
3705	snapblock[5] = (u_char)(orgcode >> 0);	/* lower 8 bits of organization code */
3706	snapblock[6] = (u_char)(ptype >> 8);	/* upper 8 bits of protocol type */
3707	snapblock[7] = (u_char)(ptype >> 0);	/* lower 8 bits of protocol type */
3708	return gen_bcmp(cstate, OR_LLC, 0, 8, snapblock);
3709}
3710
3711/*
3712 * Generate code to match frames with an LLC header.
3713 */
3714static struct block *
3715gen_llc_internal(compiler_state_t *cstate)
3716{
3717	struct block *b0, *b1;
3718
3719	switch (cstate->linktype) {
3720
3721	case DLT_EN10MB:
3722		/*
3723		 * We check for an Ethernet type field less than
3724		 * 1500, which means it's an 802.3 length field.
3725		 */
3726		b0 = gen_cmp_gt(cstate, OR_LINKTYPE, 0, BPF_H, ETHERMTU);
3727		gen_not(b0);
3728
3729		/*
3730		 * Now check for the purported DSAP and SSAP not being
3731		 * 0xFF, to rule out NetWare-over-802.3.
3732		 */
3733		b1 = gen_cmp(cstate, OR_LLC, 0, BPF_H, 0xFFFF);
3734		gen_not(b1);
3735		gen_and(b0, b1);
3736		return b1;
3737
3738	case DLT_SUNATM:
3739		/*
3740		 * We check for LLC traffic.
3741		 */
3742		b0 = gen_atmtype_llc(cstate);
3743		return b0;
3744
3745	case DLT_IEEE802:	/* Token Ring */
3746		/*
3747		 * XXX - check for LLC frames.
3748		 */
3749		return gen_true(cstate);
3750
3751	case DLT_FDDI:
3752		/*
3753		 * XXX - check for LLC frames.
3754		 */
3755		return gen_true(cstate);
3756
3757	case DLT_ATM_RFC1483:
3758		/*
3759		 * For LLC encapsulation, these are defined to have an
3760		 * 802.2 LLC header.
3761		 *
3762		 * For VC encapsulation, they don't, but there's no
3763		 * way to check for that; the protocol used on the VC
3764		 * is negotiated out of band.
3765		 */
3766		return gen_true(cstate);
3767
3768	case DLT_IEEE802_11:
3769	case DLT_PRISM_HEADER:
3770	case DLT_IEEE802_11_RADIO:
3771	case DLT_IEEE802_11_RADIO_AVS:
3772	case DLT_PPI:
3773		/*
3774		 * Check that we have a data frame.
3775		 */
3776		b0 = gen_check_802_11_data_frame(cstate);
3777		return b0;
3778
3779	default:
3780		bpf_error(cstate, "'llc' not supported for %s",
3781			  pcap_datalink_val_to_description_or_dlt(cstate->linktype));
3782		/*NOTREACHED*/
3783	}
3784}
3785
3786struct block *
3787gen_llc(compiler_state_t *cstate)
3788{
3789	/*
3790	 * Catch errors reported by us and routines below us, and return NULL
3791	 * on an error.
3792	 */
3793	if (setjmp(cstate->top_ctx))
3794		return (NULL);
3795
3796	return gen_llc_internal(cstate);
3797}
3798
3799struct block *
3800gen_llc_i(compiler_state_t *cstate)
3801{
3802	struct block *b0, *b1;
3803	struct slist *s;
3804
3805	/*
3806	 * Catch errors reported by us and routines below us, and return NULL
3807	 * on an error.
3808	 */
3809	if (setjmp(cstate->top_ctx))
3810		return (NULL);
3811
3812	/*
3813	 * Check whether this is an LLC frame.
3814	 */
3815	b0 = gen_llc_internal(cstate);
3816
3817	/*
3818	 * Load the control byte and test the low-order bit; it must
3819	 * be clear for I frames.
3820	 */
3821	s = gen_load_a(cstate, OR_LLC, 2, BPF_B);
3822	b1 = new_block(cstate, JMP(BPF_JSET));
3823	b1->s.k = 0x01;
3824	b1->stmts = s;
3825	gen_not(b1);
3826	gen_and(b0, b1);
3827	return b1;
3828}
3829
3830struct block *
3831gen_llc_s(compiler_state_t *cstate)
3832{
3833	struct block *b0, *b1;
3834
3835	/*
3836	 * Catch errors reported by us and routines below us, and return NULL
3837	 * on an error.
3838	 */
3839	if (setjmp(cstate->top_ctx))
3840		return (NULL);
3841
3842	/*
3843	 * Check whether this is an LLC frame.
3844	 */
3845	b0 = gen_llc_internal(cstate);
3846
3847	/*
3848	 * Now compare the low-order 2 bit of the control byte against
3849	 * the appropriate value for S frames.
3850	 */
3851	b1 = gen_mcmp(cstate, OR_LLC, 2, BPF_B, LLC_S_FMT, 0x03);
3852	gen_and(b0, b1);
3853	return b1;
3854}
3855
3856struct block *
3857gen_llc_u(compiler_state_t *cstate)
3858{
3859	struct block *b0, *b1;
3860
3861	/*
3862	 * Catch errors reported by us and routines below us, and return NULL
3863	 * on an error.
3864	 */
3865	if (setjmp(cstate->top_ctx))
3866		return (NULL);
3867
3868	/*
3869	 * Check whether this is an LLC frame.
3870	 */
3871	b0 = gen_llc_internal(cstate);
3872
3873	/*
3874	 * Now compare the low-order 2 bit of the control byte against
3875	 * the appropriate value for U frames.
3876	 */
3877	b1 = gen_mcmp(cstate, OR_LLC, 2, BPF_B, LLC_U_FMT, 0x03);
3878	gen_and(b0, b1);
3879	return b1;
3880}
3881
3882struct block *
3883gen_llc_s_subtype(compiler_state_t *cstate, bpf_u_int32 subtype)
3884{
3885	struct block *b0, *b1;
3886
3887	/*
3888	 * Catch errors reported by us and routines below us, and return NULL
3889	 * on an error.
3890	 */
3891	if (setjmp(cstate->top_ctx))
3892		return (NULL);
3893
3894	/*
3895	 * Check whether this is an LLC frame.
3896	 */
3897	b0 = gen_llc_internal(cstate);
3898
3899	/*
3900	 * Now check for an S frame with the appropriate type.
3901	 */
3902	b1 = gen_mcmp(cstate, OR_LLC, 2, BPF_B, subtype, LLC_S_CMD_MASK);
3903	gen_and(b0, b1);
3904	return b1;
3905}
3906
3907struct block *
3908gen_llc_u_subtype(compiler_state_t *cstate, bpf_u_int32 subtype)
3909{
3910	struct block *b0, *b1;
3911
3912	/*
3913	 * Catch errors reported by us and routines below us, and return NULL
3914	 * on an error.
3915	 */
3916	if (setjmp(cstate->top_ctx))
3917		return (NULL);
3918
3919	/*
3920	 * Check whether this is an LLC frame.
3921	 */
3922	b0 = gen_llc_internal(cstate);
3923
3924	/*
3925	 * Now check for a U frame with the appropriate type.
3926	 */
3927	b1 = gen_mcmp(cstate, OR_LLC, 2, BPF_B, subtype, LLC_U_CMD_MASK);
3928	gen_and(b0, b1);
3929	return b1;
3930}
3931
3932/*
3933 * Generate code to match a particular packet type, for link-layer types
3934 * using 802.2 LLC headers.
3935 *
3936 * This is *NOT* used for Ethernet; "gen_ether_linktype()" is used
3937 * for that - it handles the D/I/X Ethernet vs. 802.3+802.2 issues.
3938 *
3939 * "proto" is an Ethernet type value, if > ETHERMTU, or an LLC SAP
3940 * value, if <= ETHERMTU.  We use that to determine whether to
3941 * match the DSAP or both DSAP and LSAP or to check the OUI and
3942 * protocol ID in a SNAP header.
3943 */
3944static struct block *
3945gen_llc_linktype(compiler_state_t *cstate, bpf_u_int32 ll_proto)
3946{
3947	/*
3948	 * XXX - handle token-ring variable-length header.
3949	 */
3950	switch (ll_proto) {
3951
3952	case LLCSAP_IP:
3953	case LLCSAP_ISONS:
3954	case LLCSAP_NETBEUI:
3955		/*
3956		 * XXX - should we check both the DSAP and the
3957		 * SSAP, like this, or should we check just the
3958		 * DSAP, as we do for other SAP values?
3959		 */
3960		return gen_cmp(cstate, OR_LLC, 0, BPF_H, (bpf_u_int32)
3961			     ((ll_proto << 8) | ll_proto));
3962
3963	case LLCSAP_IPX:
3964		/*
3965		 * XXX - are there ever SNAP frames for IPX on
3966		 * non-Ethernet 802.x networks?
3967		 */
3968		return gen_cmp(cstate, OR_LLC, 0, BPF_B, LLCSAP_IPX);
3969
3970	case ETHERTYPE_ATALK:
3971		/*
3972		 * 802.2-encapsulated ETHERTYPE_ATALK packets are
3973		 * SNAP packets with an organization code of
3974		 * 0x080007 (Apple, for Appletalk) and a protocol
3975		 * type of ETHERTYPE_ATALK (Appletalk).
3976		 *
3977		 * XXX - check for an organization code of
3978		 * encapsulated Ethernet as well?
3979		 */
3980		return gen_snap(cstate, 0x080007, ETHERTYPE_ATALK);
3981
3982	default:
3983		/*
3984		 * XXX - we don't have to check for IPX 802.3
3985		 * here, but should we check for the IPX Ethertype?
3986		 */
3987		if (ll_proto <= ETHERMTU) {
3988			/*
3989			 * This is an LLC SAP value, so check
3990			 * the DSAP.
3991			 */
3992			return gen_cmp(cstate, OR_LLC, 0, BPF_B, ll_proto);
3993		} else {
3994			/*
3995			 * This is an Ethernet type; we assume that it's
3996			 * unlikely that it'll appear in the right place
3997			 * at random, and therefore check only the
3998			 * location that would hold the Ethernet type
3999			 * in a SNAP frame with an organization code of
4000			 * 0x000000 (encapsulated Ethernet).
4001			 *
4002			 * XXX - if we were to check for the SNAP DSAP and
4003			 * LSAP, as per XXX, and were also to check for an
4004			 * organization code of 0x000000 (encapsulated
4005			 * Ethernet), we'd do
4006			 *
4007			 *	return gen_snap(cstate, 0x000000, ll_proto);
4008			 *
4009			 * here; for now, we don't, as per the above.
4010			 * I don't know whether it's worth the extra CPU
4011			 * time to do the right check or not.
4012			 */
4013			return gen_cmp(cstate, OR_LLC, 6, BPF_H, ll_proto);
4014		}
4015	}
4016}
4017
4018static struct block *
4019gen_hostop(compiler_state_t *cstate, bpf_u_int32 addr, bpf_u_int32 mask,
4020    int dir, bpf_u_int32 ll_proto, u_int src_off, u_int dst_off)
4021{
4022	struct block *b0, *b1;
4023	u_int offset;
4024
4025	switch (dir) {
4026
4027	case Q_SRC:
4028		offset = src_off;
4029		break;
4030
4031	case Q_DST:
4032		offset = dst_off;
4033		break;
4034
4035	case Q_AND:
4036		b0 = gen_hostop(cstate, addr, mask, Q_SRC, ll_proto, src_off, dst_off);
4037		b1 = gen_hostop(cstate, addr, mask, Q_DST, ll_proto, src_off, dst_off);
4038		gen_and(b0, b1);
4039		return b1;
4040
4041	case Q_DEFAULT:
4042	case Q_OR:
4043		b0 = gen_hostop(cstate, addr, mask, Q_SRC, ll_proto, src_off, dst_off);
4044		b1 = gen_hostop(cstate, addr, mask, Q_DST, ll_proto, src_off, dst_off);
4045		gen_or(b0, b1);
4046		return b1;
4047
4048	case Q_ADDR1:
4049		bpf_error(cstate, "'addr1' and 'address1' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4050		/*NOTREACHED*/
4051
4052	case Q_ADDR2:
4053		bpf_error(cstate, "'addr2' and 'address2' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4054		/*NOTREACHED*/
4055
4056	case Q_ADDR3:
4057		bpf_error(cstate, "'addr3' and 'address3' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4058		/*NOTREACHED*/
4059
4060	case Q_ADDR4:
4061		bpf_error(cstate, "'addr4' and 'address4' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4062		/*NOTREACHED*/
4063
4064	case Q_RA:
4065		bpf_error(cstate, "'ra' is not a valid qualifier for addresses other than 802.11 MAC addresses");
4066		/*NOTREACHED*/
4067
4068	case Q_TA:
4069		bpf_error(cstate, "'ta' is not a valid qualifier for addresses other than 802.11 MAC addresses");
4070		/*NOTREACHED*/
4071
4072	default:
4073		abort();
4074		/*NOTREACHED*/
4075	}
4076	b0 = gen_linktype(cstate, ll_proto);
4077	b1 = gen_mcmp(cstate, OR_LINKPL, offset, BPF_W, addr, mask);
4078	gen_and(b0, b1);
4079	return b1;
4080}
4081
4082#ifdef INET6
4083static struct block *
4084gen_hostop6(compiler_state_t *cstate, struct in6_addr *addr,
4085    struct in6_addr *mask, int dir, bpf_u_int32 ll_proto, u_int src_off,
4086    u_int dst_off)
4087{
4088	struct block *b0, *b1;
4089	u_int offset;
4090	uint32_t *a, *m;
4091
4092	switch (dir) {
4093
4094	case Q_SRC:
4095		offset = src_off;
4096		break;
4097
4098	case Q_DST:
4099		offset = dst_off;
4100		break;
4101
4102	case Q_AND:
4103		b0 = gen_hostop6(cstate, addr, mask, Q_SRC, ll_proto, src_off, dst_off);
4104		b1 = gen_hostop6(cstate, addr, mask, Q_DST, ll_proto, src_off, dst_off);
4105		gen_and(b0, b1);
4106		return b1;
4107
4108	case Q_DEFAULT:
4109	case Q_OR:
4110		b0 = gen_hostop6(cstate, addr, mask, Q_SRC, ll_proto, src_off, dst_off);
4111		b1 = gen_hostop6(cstate, addr, mask, Q_DST, ll_proto, src_off, dst_off);
4112		gen_or(b0, b1);
4113		return b1;
4114
4115	case Q_ADDR1:
4116		bpf_error(cstate, "'addr1' and 'address1' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4117		/*NOTREACHED*/
4118
4119	case Q_ADDR2:
4120		bpf_error(cstate, "'addr2' and 'address2' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4121		/*NOTREACHED*/
4122
4123	case Q_ADDR3:
4124		bpf_error(cstate, "'addr3' and 'address3' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4125		/*NOTREACHED*/
4126
4127	case Q_ADDR4:
4128		bpf_error(cstate, "'addr4' and 'address4' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4129		/*NOTREACHED*/
4130
4131	case Q_RA:
4132		bpf_error(cstate, "'ra' is not a valid qualifier for addresses other than 802.11 MAC addresses");
4133		/*NOTREACHED*/
4134
4135	case Q_TA:
4136		bpf_error(cstate, "'ta' is not a valid qualifier for addresses other than 802.11 MAC addresses");
4137		/*NOTREACHED*/
4138
4139	default:
4140		abort();
4141		/*NOTREACHED*/
4142	}
4143	/* this order is important */
4144	a = (uint32_t *)addr;
4145	m = (uint32_t *)mask;
4146	b1 = gen_mcmp(cstate, OR_LINKPL, offset + 12, BPF_W, ntohl(a[3]), ntohl(m[3]));
4147	b0 = gen_mcmp(cstate, OR_LINKPL, offset + 8, BPF_W, ntohl(a[2]), ntohl(m[2]));
4148	gen_and(b0, b1);
4149	b0 = gen_mcmp(cstate, OR_LINKPL, offset + 4, BPF_W, ntohl(a[1]), ntohl(m[1]));
4150	gen_and(b0, b1);
4151	b0 = gen_mcmp(cstate, OR_LINKPL, offset + 0, BPF_W, ntohl(a[0]), ntohl(m[0]));
4152	gen_and(b0, b1);
4153	b0 = gen_linktype(cstate, ll_proto);
4154	gen_and(b0, b1);
4155	return b1;
4156}
4157#endif
4158
4159static struct block *
4160gen_ehostop(compiler_state_t *cstate, const u_char *eaddr, int dir)
4161{
4162	register struct block *b0, *b1;
4163
4164	switch (dir) {
4165	case Q_SRC:
4166		return gen_bcmp(cstate, OR_LINKHDR, 6, 6, eaddr);
4167
4168	case Q_DST:
4169		return gen_bcmp(cstate, OR_LINKHDR, 0, 6, eaddr);
4170
4171	case Q_AND:
4172		b0 = gen_ehostop(cstate, eaddr, Q_SRC);
4173		b1 = gen_ehostop(cstate, eaddr, Q_DST);
4174		gen_and(b0, b1);
4175		return b1;
4176
4177	case Q_DEFAULT:
4178	case Q_OR:
4179		b0 = gen_ehostop(cstate, eaddr, Q_SRC);
4180		b1 = gen_ehostop(cstate, eaddr, Q_DST);
4181		gen_or(b0, b1);
4182		return b1;
4183
4184	case Q_ADDR1:
4185		bpf_error(cstate, "'addr1' and 'address1' are only supported on 802.11 with 802.11 headers");
4186		/*NOTREACHED*/
4187
4188	case Q_ADDR2:
4189		bpf_error(cstate, "'addr2' and 'address2' are only supported on 802.11 with 802.11 headers");
4190		/*NOTREACHED*/
4191
4192	case Q_ADDR3:
4193		bpf_error(cstate, "'addr3' and 'address3' are only supported on 802.11 with 802.11 headers");
4194		/*NOTREACHED*/
4195
4196	case Q_ADDR4:
4197		bpf_error(cstate, "'addr4' and 'address4' are only supported on 802.11 with 802.11 headers");
4198		/*NOTREACHED*/
4199
4200	case Q_RA:
4201		bpf_error(cstate, "'ra' is only supported on 802.11 with 802.11 headers");
4202		/*NOTREACHED*/
4203
4204	case Q_TA:
4205		bpf_error(cstate, "'ta' is only supported on 802.11 with 802.11 headers");
4206		/*NOTREACHED*/
4207	}
4208	abort();
4209	/*NOTREACHED*/
4210}
4211
4212/*
4213 * Like gen_ehostop, but for DLT_FDDI
4214 */
4215static struct block *
4216gen_fhostop(compiler_state_t *cstate, const u_char *eaddr, int dir)
4217{
4218	struct block *b0, *b1;
4219
4220	switch (dir) {
4221	case Q_SRC:
4222		return gen_bcmp(cstate, OR_LINKHDR, 6 + 1 + cstate->pcap_fddipad, 6, eaddr);
4223
4224	case Q_DST:
4225		return gen_bcmp(cstate, OR_LINKHDR, 0 + 1 + cstate->pcap_fddipad, 6, eaddr);
4226
4227	case Q_AND:
4228		b0 = gen_fhostop(cstate, eaddr, Q_SRC);
4229		b1 = gen_fhostop(cstate, eaddr, Q_DST);
4230		gen_and(b0, b1);
4231		return b1;
4232
4233	case Q_DEFAULT:
4234	case Q_OR:
4235		b0 = gen_fhostop(cstate, eaddr, Q_SRC);
4236		b1 = gen_fhostop(cstate, eaddr, Q_DST);
4237		gen_or(b0, b1);
4238		return b1;
4239
4240	case Q_ADDR1:
4241		bpf_error(cstate, "'addr1' and 'address1' are only supported on 802.11");
4242		/*NOTREACHED*/
4243
4244	case Q_ADDR2:
4245		bpf_error(cstate, "'addr2' and 'address2' are only supported on 802.11");
4246		/*NOTREACHED*/
4247
4248	case Q_ADDR3:
4249		bpf_error(cstate, "'addr3' and 'address3' are only supported on 802.11");
4250		/*NOTREACHED*/
4251
4252	case Q_ADDR4:
4253		bpf_error(cstate, "'addr4' and 'address4' are only supported on 802.11");
4254		/*NOTREACHED*/
4255
4256	case Q_RA:
4257		bpf_error(cstate, "'ra' is only supported on 802.11");
4258		/*NOTREACHED*/
4259
4260	case Q_TA:
4261		bpf_error(cstate, "'ta' is only supported on 802.11");
4262		/*NOTREACHED*/
4263	}
4264	abort();
4265	/*NOTREACHED*/
4266}
4267
4268/*
4269 * Like gen_ehostop, but for DLT_IEEE802 (Token Ring)
4270 */
4271static struct block *
4272gen_thostop(compiler_state_t *cstate, const u_char *eaddr, int dir)
4273{
4274	register struct block *b0, *b1;
4275
4276	switch (dir) {
4277	case Q_SRC:
4278		return gen_bcmp(cstate, OR_LINKHDR, 8, 6, eaddr);
4279
4280	case Q_DST:
4281		return gen_bcmp(cstate, OR_LINKHDR, 2, 6, eaddr);
4282
4283	case Q_AND:
4284		b0 = gen_thostop(cstate, eaddr, Q_SRC);
4285		b1 = gen_thostop(cstate, eaddr, Q_DST);
4286		gen_and(b0, b1);
4287		return b1;
4288
4289	case Q_DEFAULT:
4290	case Q_OR:
4291		b0 = gen_thostop(cstate, eaddr, Q_SRC);
4292		b1 = gen_thostop(cstate, eaddr, Q_DST);
4293		gen_or(b0, b1);
4294		return b1;
4295
4296	case Q_ADDR1:
4297		bpf_error(cstate, "'addr1' and 'address1' are only supported on 802.11");
4298		/*NOTREACHED*/
4299
4300	case Q_ADDR2:
4301		bpf_error(cstate, "'addr2' and 'address2' are only supported on 802.11");
4302		/*NOTREACHED*/
4303
4304	case Q_ADDR3:
4305		bpf_error(cstate, "'addr3' and 'address3' are only supported on 802.11");
4306		/*NOTREACHED*/
4307
4308	case Q_ADDR4:
4309		bpf_error(cstate, "'addr4' and 'address4' are only supported on 802.11");
4310		/*NOTREACHED*/
4311
4312	case Q_RA:
4313		bpf_error(cstate, "'ra' is only supported on 802.11");
4314		/*NOTREACHED*/
4315
4316	case Q_TA:
4317		bpf_error(cstate, "'ta' is only supported on 802.11");
4318		/*NOTREACHED*/
4319	}
4320	abort();
4321	/*NOTREACHED*/
4322}
4323
4324/*
4325 * Like gen_ehostop, but for DLT_IEEE802_11 (802.11 wireless LAN) and
4326 * various 802.11 + radio headers.
4327 */
4328static struct block *
4329gen_wlanhostop(compiler_state_t *cstate, const u_char *eaddr, int dir)
4330{
4331	register struct block *b0, *b1, *b2;
4332	register struct slist *s;
4333
4334#ifdef ENABLE_WLAN_FILTERING_PATCH
4335	/*
4336	 * TODO GV 20070613
4337	 * We need to disable the optimizer because the optimizer is buggy
4338	 * and wipes out some LD instructions generated by the below
4339	 * code to validate the Frame Control bits
4340	 */
4341	cstate->no_optimize = 1;
4342#endif /* ENABLE_WLAN_FILTERING_PATCH */
4343
4344	switch (dir) {
4345	case Q_SRC:
4346		/*
4347		 * Oh, yuk.
4348		 *
4349		 *	For control frames, there is no SA.
4350		 *
4351		 *	For management frames, SA is at an
4352		 *	offset of 10 from the beginning of
4353		 *	the packet.
4354		 *
4355		 *	For data frames, SA is at an offset
4356		 *	of 10 from the beginning of the packet
4357		 *	if From DS is clear, at an offset of
4358		 *	16 from the beginning of the packet
4359		 *	if From DS is set and To DS is clear,
4360		 *	and an offset of 24 from the beginning
4361		 *	of the packet if From DS is set and To DS
4362		 *	is set.
4363		 */
4364
4365		/*
4366		 * Generate the tests to be done for data frames
4367		 * with From DS set.
4368		 *
4369		 * First, check for To DS set, i.e. check "link[1] & 0x01".
4370		 */
4371		s = gen_load_a(cstate, OR_LINKHDR, 1, BPF_B);
4372		b1 = new_block(cstate, JMP(BPF_JSET));
4373		b1->s.k = 0x01;	/* To DS */
4374		b1->stmts = s;
4375
4376		/*
4377		 * If To DS is set, the SA is at 24.
4378		 */
4379		b0 = gen_bcmp(cstate, OR_LINKHDR, 24, 6, eaddr);
4380		gen_and(b1, b0);
4381
4382		/*
4383		 * Now, check for To DS not set, i.e. check
4384		 * "!(link[1] & 0x01)".
4385		 */
4386		s = gen_load_a(cstate, OR_LINKHDR, 1, BPF_B);
4387		b2 = new_block(cstate, JMP(BPF_JSET));
4388		b2->s.k = 0x01;	/* To DS */
4389		b2->stmts = s;
4390		gen_not(b2);
4391
4392		/*
4393		 * If To DS is not set, the SA is at 16.
4394		 */
4395		b1 = gen_bcmp(cstate, OR_LINKHDR, 16, 6, eaddr);
4396		gen_and(b2, b1);
4397
4398		/*
4399		 * Now OR together the last two checks.  That gives
4400		 * the complete set of checks for data frames with
4401		 * From DS set.
4402		 */
4403		gen_or(b1, b0);
4404
4405		/*
4406		 * Now check for From DS being set, and AND that with
4407		 * the ORed-together checks.
4408		 */
4409		s = gen_load_a(cstate, OR_LINKHDR, 1, BPF_B);
4410		b1 = new_block(cstate, JMP(BPF_JSET));
4411		b1->s.k = 0x02;	/* From DS */
4412		b1->stmts = s;
4413		gen_and(b1, b0);
4414
4415		/*
4416		 * Now check for data frames with From DS not set.
4417		 */
4418		s = gen_load_a(cstate, OR_LINKHDR, 1, BPF_B);
4419		b2 = new_block(cstate, JMP(BPF_JSET));
4420		b2->s.k = 0x02;	/* From DS */
4421		b2->stmts = s;
4422		gen_not(b2);
4423
4424		/*
4425		 * If From DS isn't set, the SA is at 10.
4426		 */
4427		b1 = gen_bcmp(cstate, OR_LINKHDR, 10, 6, eaddr);
4428		gen_and(b2, b1);
4429
4430		/*
4431		 * Now OR together the checks for data frames with
4432		 * From DS not set and for data frames with From DS
4433		 * set; that gives the checks done for data frames.
4434		 */
4435		gen_or(b1, b0);
4436
4437		/*
4438		 * Now check for a data frame.
4439		 * I.e, check "link[0] & 0x08".
4440		 */
4441		s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
4442		b1 = new_block(cstate, JMP(BPF_JSET));
4443		b1->s.k = 0x08;
4444		b1->stmts = s;
4445
4446		/*
4447		 * AND that with the checks done for data frames.
4448		 */
4449		gen_and(b1, b0);
4450
4451		/*
4452		 * If the high-order bit of the type value is 0, this
4453		 * is a management frame.
4454		 * I.e, check "!(link[0] & 0x08)".
4455		 */
4456		s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
4457		b2 = new_block(cstate, JMP(BPF_JSET));
4458		b2->s.k = 0x08;
4459		b2->stmts = s;
4460		gen_not(b2);
4461
4462		/*
4463		 * For management frames, the SA is at 10.
4464		 */
4465		b1 = gen_bcmp(cstate, OR_LINKHDR, 10, 6, eaddr);
4466		gen_and(b2, b1);
4467
4468		/*
4469		 * OR that with the checks done for data frames.
4470		 * That gives the checks done for management and
4471		 * data frames.
4472		 */
4473		gen_or(b1, b0);
4474
4475		/*
4476		 * If the low-order bit of the type value is 1,
4477		 * this is either a control frame or a frame
4478		 * with a reserved type, and thus not a
4479		 * frame with an SA.
4480		 *
4481		 * I.e., check "!(link[0] & 0x04)".
4482		 */
4483		s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
4484		b1 = new_block(cstate, JMP(BPF_JSET));
4485		b1->s.k = 0x04;
4486		b1->stmts = s;
4487		gen_not(b1);
4488
4489		/*
4490		 * AND that with the checks for data and management
4491		 * frames.
4492		 */
4493		gen_and(b1, b0);
4494		return b0;
4495
4496	case Q_DST:
4497		/*
4498		 * Oh, yuk.
4499		 *
4500		 *	For control frames, there is no DA.
4501		 *
4502		 *	For management frames, DA is at an
4503		 *	offset of 4 from the beginning of
4504		 *	the packet.
4505		 *
4506		 *	For data frames, DA is at an offset
4507		 *	of 4 from the beginning of the packet
4508		 *	if To DS is clear and at an offset of
4509		 *	16 from the beginning of the packet
4510		 *	if To DS is set.
4511		 */
4512
4513		/*
4514		 * Generate the tests to be done for data frames.
4515		 *
4516		 * First, check for To DS set, i.e. "link[1] & 0x01".
4517		 */
4518		s = gen_load_a(cstate, OR_LINKHDR, 1, BPF_B);
4519		b1 = new_block(cstate, JMP(BPF_JSET));
4520		b1->s.k = 0x01;	/* To DS */
4521		b1->stmts = s;
4522
4523		/*
4524		 * If To DS is set, the DA is at 16.
4525		 */
4526		b0 = gen_bcmp(cstate, OR_LINKHDR, 16, 6, eaddr);
4527		gen_and(b1, b0);
4528
4529		/*
4530		 * Now, check for To DS not set, i.e. check
4531		 * "!(link[1] & 0x01)".
4532		 */
4533		s = gen_load_a(cstate, OR_LINKHDR, 1, BPF_B);
4534		b2 = new_block(cstate, JMP(BPF_JSET));
4535		b2->s.k = 0x01;	/* To DS */
4536		b2->stmts = s;
4537		gen_not(b2);
4538
4539		/*
4540		 * If To DS is not set, the DA is at 4.
4541		 */
4542		b1 = gen_bcmp(cstate, OR_LINKHDR, 4, 6, eaddr);
4543		gen_and(b2, b1);
4544
4545		/*
4546		 * Now OR together the last two checks.  That gives
4547		 * the complete set of checks for data frames.
4548		 */
4549		gen_or(b1, b0);
4550
4551		/*
4552		 * Now check for a data frame.
4553		 * I.e, check "link[0] & 0x08".
4554		 */
4555		s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
4556		b1 = new_block(cstate, JMP(BPF_JSET));
4557		b1->s.k = 0x08;
4558		b1->stmts = s;
4559
4560		/*
4561		 * AND that with the checks done for data frames.
4562		 */
4563		gen_and(b1, b0);
4564
4565		/*
4566		 * If the high-order bit of the type value is 0, this
4567		 * is a management frame.
4568		 * I.e, check "!(link[0] & 0x08)".
4569		 */
4570		s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
4571		b2 = new_block(cstate, JMP(BPF_JSET));
4572		b2->s.k = 0x08;
4573		b2->stmts = s;
4574		gen_not(b2);
4575
4576		/*
4577		 * For management frames, the DA is at 4.
4578		 */
4579		b1 = gen_bcmp(cstate, OR_LINKHDR, 4, 6, eaddr);
4580		gen_and(b2, b1);
4581
4582		/*
4583		 * OR that with the checks done for data frames.
4584		 * That gives the checks done for management and
4585		 * data frames.
4586		 */
4587		gen_or(b1, b0);
4588
4589		/*
4590		 * If the low-order bit of the type value is 1,
4591		 * this is either a control frame or a frame
4592		 * with a reserved type, and thus not a
4593		 * frame with an SA.
4594		 *
4595		 * I.e., check "!(link[0] & 0x04)".
4596		 */
4597		s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
4598		b1 = new_block(cstate, JMP(BPF_JSET));
4599		b1->s.k = 0x04;
4600		b1->stmts = s;
4601		gen_not(b1);
4602
4603		/*
4604		 * AND that with the checks for data and management
4605		 * frames.
4606		 */
4607		gen_and(b1, b0);
4608		return b0;
4609
4610	case Q_AND:
4611		b0 = gen_wlanhostop(cstate, eaddr, Q_SRC);
4612		b1 = gen_wlanhostop(cstate, eaddr, Q_DST);
4613		gen_and(b0, b1);
4614		return b1;
4615
4616	case Q_DEFAULT:
4617	case Q_OR:
4618		b0 = gen_wlanhostop(cstate, eaddr, Q_SRC);
4619		b1 = gen_wlanhostop(cstate, eaddr, Q_DST);
4620		gen_or(b0, b1);
4621		return b1;
4622
4623	/*
4624	 * XXX - add BSSID keyword?
4625	 */
4626	case Q_ADDR1:
4627		return (gen_bcmp(cstate, OR_LINKHDR, 4, 6, eaddr));
4628
4629	case Q_ADDR2:
4630		/*
4631		 * Not present in CTS or ACK control frames.
4632		 */
4633		b0 = gen_mcmp(cstate, OR_LINKHDR, 0, BPF_B, IEEE80211_FC0_TYPE_CTL,
4634			IEEE80211_FC0_TYPE_MASK);
4635		gen_not(b0);
4636		b1 = gen_mcmp(cstate, OR_LINKHDR, 0, BPF_B, IEEE80211_FC0_SUBTYPE_CTS,
4637			IEEE80211_FC0_SUBTYPE_MASK);
4638		gen_not(b1);
4639		b2 = gen_mcmp(cstate, OR_LINKHDR, 0, BPF_B, IEEE80211_FC0_SUBTYPE_ACK,
4640			IEEE80211_FC0_SUBTYPE_MASK);
4641		gen_not(b2);
4642		gen_and(b1, b2);
4643		gen_or(b0, b2);
4644		b1 = gen_bcmp(cstate, OR_LINKHDR, 10, 6, eaddr);
4645		gen_and(b2, b1);
4646		return b1;
4647
4648	case Q_ADDR3:
4649		/*
4650		 * Not present in control frames.
4651		 */
4652		b0 = gen_mcmp(cstate, OR_LINKHDR, 0, BPF_B, IEEE80211_FC0_TYPE_CTL,
4653			IEEE80211_FC0_TYPE_MASK);
4654		gen_not(b0);
4655		b1 = gen_bcmp(cstate, OR_LINKHDR, 16, 6, eaddr);
4656		gen_and(b0, b1);
4657		return b1;
4658
4659	case Q_ADDR4:
4660		/*
4661		 * Present only if the direction mask has both "From DS"
4662		 * and "To DS" set.  Neither control frames nor management
4663		 * frames should have both of those set, so we don't
4664		 * check the frame type.
4665		 */
4666		b0 = gen_mcmp(cstate, OR_LINKHDR, 1, BPF_B,
4667			IEEE80211_FC1_DIR_DSTODS, IEEE80211_FC1_DIR_MASK);
4668		b1 = gen_bcmp(cstate, OR_LINKHDR, 24, 6, eaddr);
4669		gen_and(b0, b1);
4670		return b1;
4671
4672	case Q_RA:
4673		/*
4674		 * Not present in management frames; addr1 in other
4675		 * frames.
4676		 */
4677
4678		/*
4679		 * If the high-order bit of the type value is 0, this
4680		 * is a management frame.
4681		 * I.e, check "(link[0] & 0x08)".
4682		 */
4683		s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
4684		b1 = new_block(cstate, JMP(BPF_JSET));
4685		b1->s.k = 0x08;
4686		b1->stmts = s;
4687
4688		/*
4689		 * Check addr1.
4690		 */
4691		b0 = gen_bcmp(cstate, OR_LINKHDR, 4, 6, eaddr);
4692
4693		/*
4694		 * AND that with the check of addr1.
4695		 */
4696		gen_and(b1, b0);
4697		return (b0);
4698
4699	case Q_TA:
4700		/*
4701		 * Not present in management frames; addr2, if present,
4702		 * in other frames.
4703		 */
4704
4705		/*
4706		 * Not present in CTS or ACK control frames.
4707		 */
4708		b0 = gen_mcmp(cstate, OR_LINKHDR, 0, BPF_B, IEEE80211_FC0_TYPE_CTL,
4709			IEEE80211_FC0_TYPE_MASK);
4710		gen_not(b0);
4711		b1 = gen_mcmp(cstate, OR_LINKHDR, 0, BPF_B, IEEE80211_FC0_SUBTYPE_CTS,
4712			IEEE80211_FC0_SUBTYPE_MASK);
4713		gen_not(b1);
4714		b2 = gen_mcmp(cstate, OR_LINKHDR, 0, BPF_B, IEEE80211_FC0_SUBTYPE_ACK,
4715			IEEE80211_FC0_SUBTYPE_MASK);
4716		gen_not(b2);
4717		gen_and(b1, b2);
4718		gen_or(b0, b2);
4719
4720		/*
4721		 * If the high-order bit of the type value is 0, this
4722		 * is a management frame.
4723		 * I.e, check "(link[0] & 0x08)".
4724		 */
4725		s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
4726		b1 = new_block(cstate, JMP(BPF_JSET));
4727		b1->s.k = 0x08;
4728		b1->stmts = s;
4729
4730		/*
4731		 * AND that with the check for frames other than
4732		 * CTS and ACK frames.
4733		 */
4734		gen_and(b1, b2);
4735
4736		/*
4737		 * Check addr2.
4738		 */
4739		b1 = gen_bcmp(cstate, OR_LINKHDR, 10, 6, eaddr);
4740		gen_and(b2, b1);
4741		return b1;
4742	}
4743	abort();
4744	/*NOTREACHED*/
4745}
4746
4747/*
4748 * Like gen_ehostop, but for RFC 2625 IP-over-Fibre-Channel.
4749 * (We assume that the addresses are IEEE 48-bit MAC addresses,
4750 * as the RFC states.)
4751 */
4752static struct block *
4753gen_ipfchostop(compiler_state_t *cstate, const u_char *eaddr, int dir)
4754{
4755	register struct block *b0, *b1;
4756
4757	switch (dir) {
4758	case Q_SRC:
4759		return gen_bcmp(cstate, OR_LINKHDR, 10, 6, eaddr);
4760
4761	case Q_DST:
4762		return gen_bcmp(cstate, OR_LINKHDR, 2, 6, eaddr);
4763
4764	case Q_AND:
4765		b0 = gen_ipfchostop(cstate, eaddr, Q_SRC);
4766		b1 = gen_ipfchostop(cstate, eaddr, Q_DST);
4767		gen_and(b0, b1);
4768		return b1;
4769
4770	case Q_DEFAULT:
4771	case Q_OR:
4772		b0 = gen_ipfchostop(cstate, eaddr, Q_SRC);
4773		b1 = gen_ipfchostop(cstate, eaddr, Q_DST);
4774		gen_or(b0, b1);
4775		return b1;
4776
4777	case Q_ADDR1:
4778		bpf_error(cstate, "'addr1' and 'address1' are only supported on 802.11");
4779		/*NOTREACHED*/
4780
4781	case Q_ADDR2:
4782		bpf_error(cstate, "'addr2' and 'address2' are only supported on 802.11");
4783		/*NOTREACHED*/
4784
4785	case Q_ADDR3:
4786		bpf_error(cstate, "'addr3' and 'address3' are only supported on 802.11");
4787		/*NOTREACHED*/
4788
4789	case Q_ADDR4:
4790		bpf_error(cstate, "'addr4' and 'address4' are only supported on 802.11");
4791		/*NOTREACHED*/
4792
4793	case Q_RA:
4794		bpf_error(cstate, "'ra' is only supported on 802.11");
4795		/*NOTREACHED*/
4796
4797	case Q_TA:
4798		bpf_error(cstate, "'ta' is only supported on 802.11");
4799		/*NOTREACHED*/
4800	}
4801	abort();
4802	/*NOTREACHED*/
4803}
4804
4805/*
4806 * This is quite tricky because there may be pad bytes in front of the
4807 * DECNET header, and then there are two possible data packet formats that
4808 * carry both src and dst addresses, plus 5 packet types in a format that
4809 * carries only the src node, plus 2 types that use a different format and
4810 * also carry just the src node.
4811 *
4812 * Yuck.
4813 *
4814 * Instead of doing those all right, we just look for data packets with
4815 * 0 or 1 bytes of padding.  If you want to look at other packets, that
4816 * will require a lot more hacking.
4817 *
4818 * To add support for filtering on DECNET "areas" (network numbers)
4819 * one would want to add a "mask" argument to this routine.  That would
4820 * make the filter even more inefficient, although one could be clever
4821 * and not generate masking instructions if the mask is 0xFFFF.
4822 */
4823static struct block *
4824gen_dnhostop(compiler_state_t *cstate, bpf_u_int32 addr, int dir)
4825{
4826	struct block *b0, *b1, *b2, *tmp;
4827	u_int offset_lh;	/* offset if long header is received */
4828	u_int offset_sh;	/* offset if short header is received */
4829
4830	switch (dir) {
4831
4832	case Q_DST:
4833		offset_sh = 1;	/* follows flags */
4834		offset_lh = 7;	/* flgs,darea,dsubarea,HIORD */
4835		break;
4836
4837	case Q_SRC:
4838		offset_sh = 3;	/* follows flags, dstnode */
4839		offset_lh = 15;	/* flgs,darea,dsubarea,did,sarea,ssub,HIORD */
4840		break;
4841
4842	case Q_AND:
4843		/* Inefficient because we do our Calvinball dance twice */
4844		b0 = gen_dnhostop(cstate, addr, Q_SRC);
4845		b1 = gen_dnhostop(cstate, addr, Q_DST);
4846		gen_and(b0, b1);
4847		return b1;
4848
4849	case Q_DEFAULT:
4850	case Q_OR:
4851		/* Inefficient because we do our Calvinball dance twice */
4852		b0 = gen_dnhostop(cstate, addr, Q_SRC);
4853		b1 = gen_dnhostop(cstate, addr, Q_DST);
4854		gen_or(b0, b1);
4855		return b1;
4856
4857	case Q_ADDR1:
4858		bpf_error(cstate, "'addr1' and 'address1' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4859		/*NOTREACHED*/
4860
4861	case Q_ADDR2:
4862		bpf_error(cstate, "'addr2' and 'address2' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4863		/*NOTREACHED*/
4864
4865	case Q_ADDR3:
4866		bpf_error(cstate, "'addr3' and 'address3' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4867		/*NOTREACHED*/
4868
4869	case Q_ADDR4:
4870		bpf_error(cstate, "'addr4' and 'address4' are not valid qualifiers for addresses other than 802.11 MAC addresses");
4871		/*NOTREACHED*/
4872
4873	case Q_RA:
4874		bpf_error(cstate, "'ra' is not a valid qualifier for addresses other than 802.11 MAC addresses");
4875		/*NOTREACHED*/
4876
4877	case Q_TA:
4878		bpf_error(cstate, "'ta' is not a valid qualifier for addresses other than 802.11 MAC addresses");
4879		/*NOTREACHED*/
4880
4881	default:
4882		abort();
4883		/*NOTREACHED*/
4884	}
4885	b0 = gen_linktype(cstate, ETHERTYPE_DN);
4886	/* Check for pad = 1, long header case */
4887	tmp = gen_mcmp(cstate, OR_LINKPL, 2, BPF_H,
4888	    (bpf_u_int32)ntohs(0x0681), (bpf_u_int32)ntohs(0x07FF));
4889	b1 = gen_cmp(cstate, OR_LINKPL, 2 + 1 + offset_lh,
4890	    BPF_H, (bpf_u_int32)ntohs((u_short)addr));
4891	gen_and(tmp, b1);
4892	/* Check for pad = 0, long header case */
4893	tmp = gen_mcmp(cstate, OR_LINKPL, 2, BPF_B, (bpf_u_int32)0x06,
4894	    (bpf_u_int32)0x7);
4895	b2 = gen_cmp(cstate, OR_LINKPL, 2 + offset_lh, BPF_H,
4896	    (bpf_u_int32)ntohs((u_short)addr));
4897	gen_and(tmp, b2);
4898	gen_or(b2, b1);
4899	/* Check for pad = 1, short header case */
4900	tmp = gen_mcmp(cstate, OR_LINKPL, 2, BPF_H,
4901	    (bpf_u_int32)ntohs(0x0281), (bpf_u_int32)ntohs(0x07FF));
4902	b2 = gen_cmp(cstate, OR_LINKPL, 2 + 1 + offset_sh, BPF_H,
4903	    (bpf_u_int32)ntohs((u_short)addr));
4904	gen_and(tmp, b2);
4905	gen_or(b2, b1);
4906	/* Check for pad = 0, short header case */
4907	tmp = gen_mcmp(cstate, OR_LINKPL, 2, BPF_B, (bpf_u_int32)0x02,
4908	    (bpf_u_int32)0x7);
4909	b2 = gen_cmp(cstate, OR_LINKPL, 2 + offset_sh, BPF_H,
4910	    (bpf_u_int32)ntohs((u_short)addr));
4911	gen_and(tmp, b2);
4912	gen_or(b2, b1);
4913
4914	/* Combine with test for cstate->linktype */
4915	gen_and(b0, b1);
4916	return b1;
4917}
4918
4919/*
4920 * Generate a check for IPv4 or IPv6 for MPLS-encapsulated packets;
4921 * test the bottom-of-stack bit, and then check the version number
4922 * field in the IP header.
4923 */
4924static struct block *
4925gen_mpls_linktype(compiler_state_t *cstate, bpf_u_int32 ll_proto)
4926{
4927	struct block *b0, *b1;
4928
4929        switch (ll_proto) {
4930
4931        case ETHERTYPE_IP:
4932                /* match the bottom-of-stack bit */
4933                b0 = gen_mcmp(cstate, OR_LINKPL, (u_int)-2, BPF_B, 0x01, 0x01);
4934                /* match the IPv4 version number */
4935                b1 = gen_mcmp(cstate, OR_LINKPL, 0, BPF_B, 0x40, 0xf0);
4936                gen_and(b0, b1);
4937                return b1;
4938
4939        case ETHERTYPE_IPV6:
4940                /* match the bottom-of-stack bit */
4941                b0 = gen_mcmp(cstate, OR_LINKPL, (u_int)-2, BPF_B, 0x01, 0x01);
4942                /* match the IPv4 version number */
4943                b1 = gen_mcmp(cstate, OR_LINKPL, 0, BPF_B, 0x60, 0xf0);
4944                gen_and(b0, b1);
4945                return b1;
4946
4947        default:
4948               /* FIXME add other L3 proto IDs */
4949               bpf_error(cstate, "unsupported protocol over mpls");
4950               /*NOTREACHED*/
4951        }
4952}
4953
4954static struct block *
4955gen_host(compiler_state_t *cstate, bpf_u_int32 addr, bpf_u_int32 mask,
4956    int proto, int dir, int type)
4957{
4958	struct block *b0, *b1;
4959	const char *typestr;
4960
4961	if (type == Q_NET)
4962		typestr = "net";
4963	else
4964		typestr = "host";
4965
4966	switch (proto) {
4967
4968	case Q_DEFAULT:
4969		b0 = gen_host(cstate, addr, mask, Q_IP, dir, type);
4970		/*
4971		 * Only check for non-IPv4 addresses if we're not
4972		 * checking MPLS-encapsulated packets.
4973		 */
4974		if (cstate->label_stack_depth == 0) {
4975			b1 = gen_host(cstate, addr, mask, Q_ARP, dir, type);
4976			gen_or(b0, b1);
4977			b0 = gen_host(cstate, addr, mask, Q_RARP, dir, type);
4978			gen_or(b1, b0);
4979		}
4980		return b0;
4981
4982	case Q_LINK:
4983		bpf_error(cstate, "link-layer modifier applied to %s", typestr);
4984
4985	case Q_IP:
4986		return gen_hostop(cstate, addr, mask, dir, ETHERTYPE_IP, 12, 16);
4987
4988	case Q_RARP:
4989		return gen_hostop(cstate, addr, mask, dir, ETHERTYPE_REVARP, 14, 24);
4990
4991	case Q_ARP:
4992		return gen_hostop(cstate, addr, mask, dir, ETHERTYPE_ARP, 14, 24);
4993
4994	case Q_SCTP:
4995		bpf_error(cstate, "'sctp' modifier applied to %s", typestr);
4996
4997	case Q_TCP:
4998		bpf_error(cstate, "'tcp' modifier applied to %s", typestr);
4999
5000	case Q_UDP:
5001		bpf_error(cstate, "'udp' modifier applied to %s", typestr);
5002
5003	case Q_ICMP:
5004		bpf_error(cstate, "'icmp' modifier applied to %s", typestr);
5005
5006	case Q_IGMP:
5007		bpf_error(cstate, "'igmp' modifier applied to %s", typestr);
5008
5009	case Q_IGRP:
5010		bpf_error(cstate, "'igrp' modifier applied to %s", typestr);
5011
5012	case Q_ATALK:
5013		bpf_error(cstate, "AppleTalk host filtering not implemented");
5014
5015	case Q_DECNET:
5016		return gen_dnhostop(cstate, addr, dir);
5017
5018	case Q_LAT:
5019		bpf_error(cstate, "LAT host filtering not implemented");
5020
5021	case Q_SCA:
5022		bpf_error(cstate, "SCA host filtering not implemented");
5023
5024	case Q_MOPRC:
5025		bpf_error(cstate, "MOPRC host filtering not implemented");
5026
5027	case Q_MOPDL:
5028		bpf_error(cstate, "MOPDL host filtering not implemented");
5029
5030	case Q_IPV6:
5031		bpf_error(cstate, "'ip6' modifier applied to ip host");
5032
5033	case Q_ICMPV6:
5034		bpf_error(cstate, "'icmp6' modifier applied to %s", typestr);
5035
5036	case Q_AH:
5037		bpf_error(cstate, "'ah' modifier applied to %s", typestr);
5038
5039	case Q_ESP:
5040		bpf_error(cstate, "'esp' modifier applied to %s", typestr);
5041
5042	case Q_PIM:
5043		bpf_error(cstate, "'pim' modifier applied to %s", typestr);
5044
5045	case Q_VRRP:
5046		bpf_error(cstate, "'vrrp' modifier applied to %s", typestr);
5047
5048	case Q_AARP:
5049		bpf_error(cstate, "AARP host filtering not implemented");
5050
5051	case Q_ISO:
5052		bpf_error(cstate, "ISO host filtering not implemented");
5053
5054	case Q_ESIS:
5055		bpf_error(cstate, "'esis' modifier applied to %s", typestr);
5056
5057	case Q_ISIS:
5058		bpf_error(cstate, "'isis' modifier applied to %s", typestr);
5059
5060	case Q_CLNP:
5061		bpf_error(cstate, "'clnp' modifier applied to %s", typestr);
5062
5063	case Q_STP:
5064		bpf_error(cstate, "'stp' modifier applied to %s", typestr);
5065
5066	case Q_IPX:
5067		bpf_error(cstate, "IPX host filtering not implemented");
5068
5069	case Q_NETBEUI:
5070		bpf_error(cstate, "'netbeui' modifier applied to %s", typestr);
5071
5072	case Q_ISIS_L1:
5073		bpf_error(cstate, "'l1' modifier applied to %s", typestr);
5074
5075	case Q_ISIS_L2:
5076		bpf_error(cstate, "'l2' modifier applied to %s", typestr);
5077
5078	case Q_ISIS_IIH:
5079		bpf_error(cstate, "'iih' modifier applied to %s", typestr);
5080
5081	case Q_ISIS_SNP:
5082		bpf_error(cstate, "'snp' modifier applied to %s", typestr);
5083
5084	case Q_ISIS_CSNP:
5085		bpf_error(cstate, "'csnp' modifier applied to %s", typestr);
5086
5087	case Q_ISIS_PSNP:
5088		bpf_error(cstate, "'psnp' modifier applied to %s", typestr);
5089
5090	case Q_ISIS_LSP:
5091		bpf_error(cstate, "'lsp' modifier applied to %s", typestr);
5092
5093	case Q_RADIO:
5094		bpf_error(cstate, "'radio' modifier applied to %s", typestr);
5095
5096	case Q_CARP:
5097		bpf_error(cstate, "'carp' modifier applied to %s", typestr);
5098
5099	default:
5100		abort();
5101	}
5102	/*NOTREACHED*/
5103}
5104
5105#ifdef INET6
5106static struct block *
5107gen_host6(compiler_state_t *cstate, struct in6_addr *addr,
5108    struct in6_addr *mask, int proto, int dir, int type)
5109{
5110	const char *typestr;
5111
5112	if (type == Q_NET)
5113		typestr = "net";
5114	else
5115		typestr = "host";
5116
5117	switch (proto) {
5118
5119	case Q_DEFAULT:
5120		return gen_host6(cstate, addr, mask, Q_IPV6, dir, type);
5121
5122	case Q_LINK:
5123		bpf_error(cstate, "link-layer modifier applied to ip6 %s", typestr);
5124
5125	case Q_IP:
5126		bpf_error(cstate, "'ip' modifier applied to ip6 %s", typestr);
5127
5128	case Q_RARP:
5129		bpf_error(cstate, "'rarp' modifier applied to ip6 %s", typestr);
5130
5131	case Q_ARP:
5132		bpf_error(cstate, "'arp' modifier applied to ip6 %s", typestr);
5133
5134	case Q_SCTP:
5135		bpf_error(cstate, "'sctp' modifier applied to ip6 %s", typestr);
5136
5137	case Q_TCP:
5138		bpf_error(cstate, "'tcp' modifier applied to ip6 %s", typestr);
5139
5140	case Q_UDP:
5141		bpf_error(cstate, "'udp' modifier applied to ip6 %s", typestr);
5142
5143	case Q_ICMP:
5144		bpf_error(cstate, "'icmp' modifier applied to ip6 %s", typestr);
5145
5146	case Q_IGMP:
5147		bpf_error(cstate, "'igmp' modifier applied to ip6 %s", typestr);
5148
5149	case Q_IGRP:
5150		bpf_error(cstate, "'igrp' modifier applied to ip6 %s", typestr);
5151
5152	case Q_ATALK:
5153		bpf_error(cstate, "AppleTalk modifier applied to ip6 %s", typestr);
5154
5155	case Q_DECNET:
5156		bpf_error(cstate, "'decnet' modifier applied to ip6 %s", typestr);
5157
5158	case Q_LAT:
5159		bpf_error(cstate, "'lat' modifier applied to ip6 %s", typestr);
5160
5161	case Q_SCA:
5162		bpf_error(cstate, "'sca' modifier applied to ip6 %s", typestr);
5163
5164	case Q_MOPRC:
5165		bpf_error(cstate, "'moprc' modifier applied to ip6 %s", typestr);
5166
5167	case Q_MOPDL:
5168		bpf_error(cstate, "'mopdl' modifier applied to ip6 %s", typestr);
5169
5170	case Q_IPV6:
5171		return gen_hostop6(cstate, addr, mask, dir, ETHERTYPE_IPV6, 8, 24);
5172
5173	case Q_ICMPV6:
5174		bpf_error(cstate, "'icmp6' modifier applied to ip6 %s", typestr);
5175
5176	case Q_AH:
5177		bpf_error(cstate, "'ah' modifier applied to ip6 %s", typestr);
5178
5179	case Q_ESP:
5180		bpf_error(cstate, "'esp' modifier applied to ip6 %s", typestr);
5181
5182	case Q_PIM:
5183		bpf_error(cstate, "'pim' modifier applied to ip6 %s", typestr);
5184
5185	case Q_VRRP:
5186		bpf_error(cstate, "'vrrp' modifier applied to ip6 %s", typestr);
5187
5188	case Q_AARP:
5189		bpf_error(cstate, "'aarp' modifier applied to ip6 %s", typestr);
5190
5191	case Q_ISO:
5192		bpf_error(cstate, "'iso' modifier applied to ip6 %s", typestr);
5193
5194	case Q_ESIS:
5195		bpf_error(cstate, "'esis' modifier applied to ip6 %s", typestr);
5196
5197	case Q_ISIS:
5198		bpf_error(cstate, "'isis' modifier applied to ip6 %s", typestr);
5199
5200	case Q_CLNP:
5201		bpf_error(cstate, "'clnp' modifier applied to ip6 %s", typestr);
5202
5203	case Q_STP:
5204		bpf_error(cstate, "'stp' modifier applied to ip6 %s", typestr);
5205
5206	case Q_IPX:
5207		bpf_error(cstate, "'ipx' modifier applied to ip6 %s", typestr);
5208
5209	case Q_NETBEUI:
5210		bpf_error(cstate, "'netbeui' modifier applied to ip6 %s", typestr);
5211
5212	case Q_ISIS_L1:
5213		bpf_error(cstate, "'l1' modifier applied to ip6 %s", typestr);
5214
5215	case Q_ISIS_L2:
5216		bpf_error(cstate, "'l2' modifier applied to ip6 %s", typestr);
5217
5218	case Q_ISIS_IIH:
5219		bpf_error(cstate, "'iih' modifier applied to ip6 %s", typestr);
5220
5221	case Q_ISIS_SNP:
5222		bpf_error(cstate, "'snp' modifier applied to ip6 %s", typestr);
5223
5224	case Q_ISIS_CSNP:
5225		bpf_error(cstate, "'csnp' modifier applied to ip6 %s", typestr);
5226
5227	case Q_ISIS_PSNP:
5228		bpf_error(cstate, "'psnp' modifier applied to ip6 %s", typestr);
5229
5230	case Q_ISIS_LSP:
5231		bpf_error(cstate, "'lsp' modifier applied to ip6 %s", typestr);
5232
5233	case Q_RADIO:
5234		bpf_error(cstate, "'radio' modifier applied to ip6 %s", typestr);
5235
5236	case Q_CARP:
5237		bpf_error(cstate, "'carp' modifier applied to ip6 %s", typestr);
5238
5239	default:
5240		abort();
5241	}
5242	/*NOTREACHED*/
5243}
5244#endif
5245
5246#ifndef INET6
5247static struct block *
5248gen_gateway(compiler_state_t *cstate, const u_char *eaddr,
5249    struct addrinfo *alist, int proto, int dir)
5250{
5251	struct block *b0, *b1, *tmp;
5252	struct addrinfo *ai;
5253	struct sockaddr_in *sin;
5254
5255	if (dir != 0)
5256		bpf_error(cstate, "direction applied to 'gateway'");
5257
5258	switch (proto) {
5259	case Q_DEFAULT:
5260	case Q_IP:
5261	case Q_ARP:
5262	case Q_RARP:
5263		switch (cstate->linktype) {
5264		case DLT_EN10MB:
5265		case DLT_NETANALYZER:
5266		case DLT_NETANALYZER_TRANSPARENT:
5267			b1 = gen_prevlinkhdr_check(cstate);
5268			b0 = gen_ehostop(cstate, eaddr, Q_OR);
5269			if (b1 != NULL)
5270				gen_and(b1, b0);
5271			break;
5272		case DLT_FDDI:
5273			b0 = gen_fhostop(cstate, eaddr, Q_OR);
5274			break;
5275		case DLT_IEEE802:
5276			b0 = gen_thostop(cstate, eaddr, Q_OR);
5277			break;
5278		case DLT_IEEE802_11:
5279		case DLT_PRISM_HEADER:
5280		case DLT_IEEE802_11_RADIO_AVS:
5281		case DLT_IEEE802_11_RADIO:
5282		case DLT_PPI:
5283			b0 = gen_wlanhostop(cstate, eaddr, Q_OR);
5284			break;
5285		case DLT_SUNATM:
5286			/*
5287			 * This is LLC-multiplexed traffic; if it were
5288			 * LANE, cstate->linktype would have been set to
5289			 * DLT_EN10MB.
5290			 */
5291			bpf_error(cstate,
5292			    "'gateway' supported only on ethernet/FDDI/token ring/802.11/ATM LANE/Fibre Channel");
5293			break;
5294		case DLT_IP_OVER_FC:
5295			b0 = gen_ipfchostop(cstate, eaddr, Q_OR);
5296			break;
5297		default:
5298			bpf_error(cstate,
5299			    "'gateway' supported only on ethernet/FDDI/token ring/802.11/ATM LANE/Fibre Channel");
5300		}
5301		b1 = NULL;
5302		for (ai = alist; ai != NULL; ai = ai->ai_next) {
5303			/*
5304			 * Does it have an address?
5305			 */
5306			if (ai->ai_addr != NULL) {
5307				/*
5308				 * Yes.  Is it an IPv4 address?
5309				 */
5310				if (ai->ai_addr->sa_family == AF_INET) {
5311					/*
5312					 * Generate an entry for it.
5313					 */
5314					sin = (struct sockaddr_in *)ai->ai_addr;
5315					tmp = gen_host(cstate,
5316					    ntohl(sin->sin_addr.s_addr),
5317					    0xffffffff, proto, Q_OR, Q_HOST);
5318					/*
5319					 * Is it the *first* IPv4 address?
5320					 */
5321					if (b1 == NULL) {
5322						/*
5323						 * Yes, so start with it.
5324						 */
5325						b1 = tmp;
5326					} else {
5327						/*
5328						 * No, so OR it into the
5329						 * existing set of
5330						 * addresses.
5331						 */
5332						gen_or(b1, tmp);
5333						b1 = tmp;
5334					}
5335				}
5336			}
5337		}
5338		if (b1 == NULL) {
5339			/*
5340			 * No IPv4 addresses found.
5341			 */
5342			return (NULL);
5343		}
5344		gen_not(b1);
5345		gen_and(b0, b1);
5346		return b1;
5347	}
5348	bpf_error(cstate, "illegal modifier of 'gateway'");
5349	/*NOTREACHED*/
5350}
5351#endif
5352
5353static struct block *
5354gen_proto_abbrev_internal(compiler_state_t *cstate, int proto)
5355{
5356	struct block *b0;
5357	struct block *b1;
5358
5359	switch (proto) {
5360
5361	case Q_SCTP:
5362		b1 = gen_proto(cstate, IPPROTO_SCTP, Q_DEFAULT, Q_DEFAULT);
5363		break;
5364
5365	case Q_TCP:
5366		b1 = gen_proto(cstate, IPPROTO_TCP, Q_DEFAULT, Q_DEFAULT);
5367		break;
5368
5369	case Q_UDP:
5370		b1 = gen_proto(cstate, IPPROTO_UDP, Q_DEFAULT, Q_DEFAULT);
5371		break;
5372
5373	case Q_ICMP:
5374		b1 = gen_proto(cstate, IPPROTO_ICMP, Q_IP, Q_DEFAULT);
5375		break;
5376
5377#ifndef	IPPROTO_IGMP
5378#define	IPPROTO_IGMP	2
5379#endif
5380
5381	case Q_IGMP:
5382		b1 = gen_proto(cstate, IPPROTO_IGMP, Q_IP, Q_DEFAULT);
5383		break;
5384
5385#ifndef	IPPROTO_IGRP
5386#define	IPPROTO_IGRP	9
5387#endif
5388	case Q_IGRP:
5389		b1 = gen_proto(cstate, IPPROTO_IGRP, Q_IP, Q_DEFAULT);
5390		break;
5391
5392#ifndef IPPROTO_PIM
5393#define IPPROTO_PIM	103
5394#endif
5395
5396	case Q_PIM:
5397		b1 = gen_proto(cstate, IPPROTO_PIM, Q_DEFAULT, Q_DEFAULT);
5398		break;
5399
5400#ifndef IPPROTO_VRRP
5401#define IPPROTO_VRRP	112
5402#endif
5403
5404	case Q_VRRP:
5405		b1 = gen_proto(cstate, IPPROTO_VRRP, Q_IP, Q_DEFAULT);
5406		break;
5407
5408#ifndef IPPROTO_CARP
5409#define IPPROTO_CARP	112
5410#endif
5411
5412	case Q_CARP:
5413		b1 = gen_proto(cstate, IPPROTO_CARP, Q_IP, Q_DEFAULT);
5414		break;
5415
5416	case Q_IP:
5417		b1 = gen_linktype(cstate, ETHERTYPE_IP);
5418		break;
5419
5420	case Q_ARP:
5421		b1 = gen_linktype(cstate, ETHERTYPE_ARP);
5422		break;
5423
5424	case Q_RARP:
5425		b1 = gen_linktype(cstate, ETHERTYPE_REVARP);
5426		break;
5427
5428	case Q_LINK:
5429		bpf_error(cstate, "link layer applied in wrong context");
5430
5431	case Q_ATALK:
5432		b1 = gen_linktype(cstate, ETHERTYPE_ATALK);
5433		break;
5434
5435	case Q_AARP:
5436		b1 = gen_linktype(cstate, ETHERTYPE_AARP);
5437		break;
5438
5439	case Q_DECNET:
5440		b1 = gen_linktype(cstate, ETHERTYPE_DN);
5441		break;
5442
5443	case Q_SCA:
5444		b1 = gen_linktype(cstate, ETHERTYPE_SCA);
5445		break;
5446
5447	case Q_LAT:
5448		b1 = gen_linktype(cstate, ETHERTYPE_LAT);
5449		break;
5450
5451	case Q_MOPDL:
5452		b1 = gen_linktype(cstate, ETHERTYPE_MOPDL);
5453		break;
5454
5455	case Q_MOPRC:
5456		b1 = gen_linktype(cstate, ETHERTYPE_MOPRC);
5457		break;
5458
5459	case Q_IPV6:
5460		b1 = gen_linktype(cstate, ETHERTYPE_IPV6);
5461		break;
5462
5463#ifndef IPPROTO_ICMPV6
5464#define IPPROTO_ICMPV6	58
5465#endif
5466	case Q_ICMPV6:
5467		b1 = gen_proto(cstate, IPPROTO_ICMPV6, Q_IPV6, Q_DEFAULT);
5468		break;
5469
5470#ifndef IPPROTO_AH
5471#define IPPROTO_AH	51
5472#endif
5473	case Q_AH:
5474		b1 = gen_proto(cstate, IPPROTO_AH, Q_DEFAULT, Q_DEFAULT);
5475		break;
5476
5477#ifndef IPPROTO_ESP
5478#define IPPROTO_ESP	50
5479#endif
5480	case Q_ESP:
5481		b1 = gen_proto(cstate, IPPROTO_ESP, Q_DEFAULT, Q_DEFAULT);
5482		break;
5483
5484	case Q_ISO:
5485		b1 = gen_linktype(cstate, LLCSAP_ISONS);
5486		break;
5487
5488	case Q_ESIS:
5489		b1 = gen_proto(cstate, ISO9542_ESIS, Q_ISO, Q_DEFAULT);
5490		break;
5491
5492	case Q_ISIS:
5493		b1 = gen_proto(cstate, ISO10589_ISIS, Q_ISO, Q_DEFAULT);
5494		break;
5495
5496	case Q_ISIS_L1: /* all IS-IS Level1 PDU-Types */
5497		b0 = gen_proto(cstate, ISIS_L1_LAN_IIH, Q_ISIS, Q_DEFAULT);
5498		b1 = gen_proto(cstate, ISIS_PTP_IIH, Q_ISIS, Q_DEFAULT); /* FIXME extract the circuit-type bits */
5499		gen_or(b0, b1);
5500		b0 = gen_proto(cstate, ISIS_L1_LSP, Q_ISIS, Q_DEFAULT);
5501		gen_or(b0, b1);
5502		b0 = gen_proto(cstate, ISIS_L1_CSNP, Q_ISIS, Q_DEFAULT);
5503		gen_or(b0, b1);
5504		b0 = gen_proto(cstate, ISIS_L1_PSNP, Q_ISIS, Q_DEFAULT);
5505		gen_or(b0, b1);
5506		break;
5507
5508	case Q_ISIS_L2: /* all IS-IS Level2 PDU-Types */
5509		b0 = gen_proto(cstate, ISIS_L2_LAN_IIH, Q_ISIS, Q_DEFAULT);
5510		b1 = gen_proto(cstate, ISIS_PTP_IIH, Q_ISIS, Q_DEFAULT); /* FIXME extract the circuit-type bits */
5511		gen_or(b0, b1);
5512		b0 = gen_proto(cstate, ISIS_L2_LSP, Q_ISIS, Q_DEFAULT);
5513		gen_or(b0, b1);
5514		b0 = gen_proto(cstate, ISIS_L2_CSNP, Q_ISIS, Q_DEFAULT);
5515		gen_or(b0, b1);
5516		b0 = gen_proto(cstate, ISIS_L2_PSNP, Q_ISIS, Q_DEFAULT);
5517		gen_or(b0, b1);
5518		break;
5519
5520	case Q_ISIS_IIH: /* all IS-IS Hello PDU-Types */
5521		b0 = gen_proto(cstate, ISIS_L1_LAN_IIH, Q_ISIS, Q_DEFAULT);
5522		b1 = gen_proto(cstate, ISIS_L2_LAN_IIH, Q_ISIS, Q_DEFAULT);
5523		gen_or(b0, b1);
5524		b0 = gen_proto(cstate, ISIS_PTP_IIH, Q_ISIS, Q_DEFAULT);
5525		gen_or(b0, b1);
5526		break;
5527
5528	case Q_ISIS_LSP:
5529		b0 = gen_proto(cstate, ISIS_L1_LSP, Q_ISIS, Q_DEFAULT);
5530		b1 = gen_proto(cstate, ISIS_L2_LSP, Q_ISIS, Q_DEFAULT);
5531		gen_or(b0, b1);
5532		break;
5533
5534	case Q_ISIS_SNP:
5535		b0 = gen_proto(cstate, ISIS_L1_CSNP, Q_ISIS, Q_DEFAULT);
5536		b1 = gen_proto(cstate, ISIS_L2_CSNP, Q_ISIS, Q_DEFAULT);
5537		gen_or(b0, b1);
5538		b0 = gen_proto(cstate, ISIS_L1_PSNP, Q_ISIS, Q_DEFAULT);
5539		gen_or(b0, b1);
5540		b0 = gen_proto(cstate, ISIS_L2_PSNP, Q_ISIS, Q_DEFAULT);
5541		gen_or(b0, b1);
5542		break;
5543
5544	case Q_ISIS_CSNP:
5545		b0 = gen_proto(cstate, ISIS_L1_CSNP, Q_ISIS, Q_DEFAULT);
5546		b1 = gen_proto(cstate, ISIS_L2_CSNP, Q_ISIS, Q_DEFAULT);
5547		gen_or(b0, b1);
5548		break;
5549
5550	case Q_ISIS_PSNP:
5551		b0 = gen_proto(cstate, ISIS_L1_PSNP, Q_ISIS, Q_DEFAULT);
5552		b1 = gen_proto(cstate, ISIS_L2_PSNP, Q_ISIS, Q_DEFAULT);
5553		gen_or(b0, b1);
5554		break;
5555
5556	case Q_CLNP:
5557		b1 = gen_proto(cstate, ISO8473_CLNP, Q_ISO, Q_DEFAULT);
5558		break;
5559
5560	case Q_STP:
5561		b1 = gen_linktype(cstate, LLCSAP_8021D);
5562		break;
5563
5564	case Q_IPX:
5565		b1 = gen_linktype(cstate, LLCSAP_IPX);
5566		break;
5567
5568	case Q_NETBEUI:
5569		b1 = gen_linktype(cstate, LLCSAP_NETBEUI);
5570		break;
5571
5572	case Q_RADIO:
5573		bpf_error(cstate, "'radio' is not a valid protocol type");
5574
5575	default:
5576		abort();
5577	}
5578	return b1;
5579}
5580
5581struct block *
5582gen_proto_abbrev(compiler_state_t *cstate, int proto)
5583{
5584	/*
5585	 * Catch errors reported by us and routines below us, and return NULL
5586	 * on an error.
5587	 */
5588	if (setjmp(cstate->top_ctx))
5589		return (NULL);
5590
5591	return gen_proto_abbrev_internal(cstate, proto);
5592}
5593
5594static struct block *
5595gen_ipfrag(compiler_state_t *cstate)
5596{
5597	struct slist *s;
5598	struct block *b;
5599
5600	/* not IPv4 frag other than the first frag */
5601	s = gen_load_a(cstate, OR_LINKPL, 6, BPF_H);
5602	b = new_block(cstate, JMP(BPF_JSET));
5603	b->s.k = 0x1fff;
5604	b->stmts = s;
5605	gen_not(b);
5606
5607	return b;
5608}
5609
5610/*
5611 * Generate a comparison to a port value in the transport-layer header
5612 * at the specified offset from the beginning of that header.
5613 *
5614 * XXX - this handles a variable-length prefix preceding the link-layer
5615 * header, such as the radiotap or AVS radio prefix, but doesn't handle
5616 * variable-length link-layer headers (such as Token Ring or 802.11
5617 * headers).
5618 */
5619static struct block *
5620gen_portatom(compiler_state_t *cstate, int off, bpf_u_int32 v)
5621{
5622	return gen_cmp(cstate, OR_TRAN_IPV4, off, BPF_H, v);
5623}
5624
5625static struct block *
5626gen_portatom6(compiler_state_t *cstate, int off, bpf_u_int32 v)
5627{
5628	return gen_cmp(cstate, OR_TRAN_IPV6, off, BPF_H, v);
5629}
5630
5631static struct block *
5632gen_portop(compiler_state_t *cstate, u_int port, u_int proto, int dir)
5633{
5634	struct block *b0, *b1, *tmp;
5635
5636	/* ip proto 'proto' and not a fragment other than the first fragment */
5637	tmp = gen_cmp(cstate, OR_LINKPL, 9, BPF_B, proto);
5638	b0 = gen_ipfrag(cstate);
5639	gen_and(tmp, b0);
5640
5641	switch (dir) {
5642	case Q_SRC:
5643		b1 = gen_portatom(cstate, 0, port);
5644		break;
5645
5646	case Q_DST:
5647		b1 = gen_portatom(cstate, 2, port);
5648		break;
5649
5650	case Q_AND:
5651		tmp = gen_portatom(cstate, 0, port);
5652		b1 = gen_portatom(cstate, 2, port);
5653		gen_and(tmp, b1);
5654		break;
5655
5656	case Q_DEFAULT:
5657	case Q_OR:
5658		tmp = gen_portatom(cstate, 0, port);
5659		b1 = gen_portatom(cstate, 2, port);
5660		gen_or(tmp, b1);
5661		break;
5662
5663	case Q_ADDR1:
5664		bpf_error(cstate, "'addr1' and 'address1' are not valid qualifiers for ports");
5665		/*NOTREACHED*/
5666
5667	case Q_ADDR2:
5668		bpf_error(cstate, "'addr2' and 'address2' are not valid qualifiers for ports");
5669		/*NOTREACHED*/
5670
5671	case Q_ADDR3:
5672		bpf_error(cstate, "'addr3' and 'address3' are not valid qualifiers for ports");
5673		/*NOTREACHED*/
5674
5675	case Q_ADDR4:
5676		bpf_error(cstate, "'addr4' and 'address4' are not valid qualifiers for ports");
5677		/*NOTREACHED*/
5678
5679	case Q_RA:
5680		bpf_error(cstate, "'ra' is not a valid qualifier for ports");
5681		/*NOTREACHED*/
5682
5683	case Q_TA:
5684		bpf_error(cstate, "'ta' is not a valid qualifier for ports");
5685		/*NOTREACHED*/
5686
5687	default:
5688		abort();
5689		/*NOTREACHED*/
5690	}
5691	gen_and(b0, b1);
5692
5693	return b1;
5694}
5695
5696static struct block *
5697gen_port(compiler_state_t *cstate, u_int port, int ip_proto, int dir)
5698{
5699	struct block *b0, *b1, *tmp;
5700
5701	/*
5702	 * ether proto ip
5703	 *
5704	 * For FDDI, RFC 1188 says that SNAP encapsulation is used,
5705	 * not LLC encapsulation with LLCSAP_IP.
5706	 *
5707	 * For IEEE 802 networks - which includes 802.5 token ring
5708	 * (which is what DLT_IEEE802 means) and 802.11 - RFC 1042
5709	 * says that SNAP encapsulation is used, not LLC encapsulation
5710	 * with LLCSAP_IP.
5711	 *
5712	 * For LLC-encapsulated ATM/"Classical IP", RFC 1483 and
5713	 * RFC 2225 say that SNAP encapsulation is used, not LLC
5714	 * encapsulation with LLCSAP_IP.
5715	 *
5716	 * So we always check for ETHERTYPE_IP.
5717	 */
5718	b0 = gen_linktype(cstate, ETHERTYPE_IP);
5719
5720	switch (ip_proto) {
5721	case IPPROTO_UDP:
5722	case IPPROTO_TCP:
5723	case IPPROTO_SCTP:
5724		b1 = gen_portop(cstate, port, (u_int)ip_proto, dir);
5725		break;
5726
5727	case PROTO_UNDEF:
5728		tmp = gen_portop(cstate, port, IPPROTO_TCP, dir);
5729		b1 = gen_portop(cstate, port, IPPROTO_UDP, dir);
5730		gen_or(tmp, b1);
5731		tmp = gen_portop(cstate, port, IPPROTO_SCTP, dir);
5732		gen_or(tmp, b1);
5733		break;
5734
5735	default:
5736		abort();
5737	}
5738	gen_and(b0, b1);
5739	return b1;
5740}
5741
5742struct block *
5743gen_portop6(compiler_state_t *cstate, u_int port, u_int proto, int dir)
5744{
5745	struct block *b0, *b1, *tmp;
5746
5747	/* ip6 proto 'proto' */
5748	/* XXX - catch the first fragment of a fragmented packet? */
5749	b0 = gen_cmp(cstate, OR_LINKPL, 6, BPF_B, proto);
5750
5751	switch (dir) {
5752	case Q_SRC:
5753		b1 = gen_portatom6(cstate, 0, port);
5754		break;
5755
5756	case Q_DST:
5757		b1 = gen_portatom6(cstate, 2, port);
5758		break;
5759
5760	case Q_AND:
5761		tmp = gen_portatom6(cstate, 0, port);
5762		b1 = gen_portatom6(cstate, 2, port);
5763		gen_and(tmp, b1);
5764		break;
5765
5766	case Q_DEFAULT:
5767	case Q_OR:
5768		tmp = gen_portatom6(cstate, 0, port);
5769		b1 = gen_portatom6(cstate, 2, port);
5770		gen_or(tmp, b1);
5771		break;
5772
5773	default:
5774		abort();
5775	}
5776	gen_and(b0, b1);
5777
5778	return b1;
5779}
5780
5781static struct block *
5782gen_port6(compiler_state_t *cstate, u_int port, int ip_proto, int dir)
5783{
5784	struct block *b0, *b1, *tmp;
5785
5786	/* link proto ip6 */
5787	b0 = gen_linktype(cstate, ETHERTYPE_IPV6);
5788
5789	switch (ip_proto) {
5790	case IPPROTO_UDP:
5791	case IPPROTO_TCP:
5792	case IPPROTO_SCTP:
5793		b1 = gen_portop6(cstate, port, (u_int)ip_proto, dir);
5794		break;
5795
5796	case PROTO_UNDEF:
5797		tmp = gen_portop6(cstate, port, IPPROTO_TCP, dir);
5798		b1 = gen_portop6(cstate, port, IPPROTO_UDP, dir);
5799		gen_or(tmp, b1);
5800		tmp = gen_portop6(cstate, port, IPPROTO_SCTP, dir);
5801		gen_or(tmp, b1);
5802		break;
5803
5804	default:
5805		abort();
5806	}
5807	gen_and(b0, b1);
5808	return b1;
5809}
5810
5811/* gen_portrange code */
5812static struct block *
5813gen_portrangeatom(compiler_state_t *cstate, u_int off, bpf_u_int32 v1,
5814    bpf_u_int32 v2)
5815{
5816	struct block *b1, *b2;
5817
5818	if (v1 > v2) {
5819		/*
5820		 * Reverse the order of the ports, so v1 is the lower one.
5821		 */
5822		bpf_u_int32 vtemp;
5823
5824		vtemp = v1;
5825		v1 = v2;
5826		v2 = vtemp;
5827	}
5828
5829	b1 = gen_cmp_ge(cstate, OR_TRAN_IPV4, off, BPF_H, v1);
5830	b2 = gen_cmp_le(cstate, OR_TRAN_IPV4, off, BPF_H, v2);
5831
5832	gen_and(b1, b2);
5833
5834	return b2;
5835}
5836
5837static struct block *
5838gen_portrangeop(compiler_state_t *cstate, u_int port1, u_int port2,
5839    bpf_u_int32 proto, int dir)
5840{
5841	struct block *b0, *b1, *tmp;
5842
5843	/* ip proto 'proto' and not a fragment other than the first fragment */
5844	tmp = gen_cmp(cstate, OR_LINKPL, 9, BPF_B, proto);
5845	b0 = gen_ipfrag(cstate);
5846	gen_and(tmp, b0);
5847
5848	switch (dir) {
5849	case Q_SRC:
5850		b1 = gen_portrangeatom(cstate, 0, port1, port2);
5851		break;
5852
5853	case Q_DST:
5854		b1 = gen_portrangeatom(cstate, 2, port1, port2);
5855		break;
5856
5857	case Q_AND:
5858		tmp = gen_portrangeatom(cstate, 0, port1, port2);
5859		b1 = gen_portrangeatom(cstate, 2, port1, port2);
5860		gen_and(tmp, b1);
5861		break;
5862
5863	case Q_DEFAULT:
5864	case Q_OR:
5865		tmp = gen_portrangeatom(cstate, 0, port1, port2);
5866		b1 = gen_portrangeatom(cstate, 2, port1, port2);
5867		gen_or(tmp, b1);
5868		break;
5869
5870	case Q_ADDR1:
5871		bpf_error(cstate, "'addr1' and 'address1' are not valid qualifiers for port ranges");
5872		/*NOTREACHED*/
5873
5874	case Q_ADDR2:
5875		bpf_error(cstate, "'addr2' and 'address2' are not valid qualifiers for port ranges");
5876		/*NOTREACHED*/
5877
5878	case Q_ADDR3:
5879		bpf_error(cstate, "'addr3' and 'address3' are not valid qualifiers for port ranges");
5880		/*NOTREACHED*/
5881
5882	case Q_ADDR4:
5883		bpf_error(cstate, "'addr4' and 'address4' are not valid qualifiers for port ranges");
5884		/*NOTREACHED*/
5885
5886	case Q_RA:
5887		bpf_error(cstate, "'ra' is not a valid qualifier for port ranges");
5888		/*NOTREACHED*/
5889
5890	case Q_TA:
5891		bpf_error(cstate, "'ta' is not a valid qualifier for port ranges");
5892		/*NOTREACHED*/
5893
5894	default:
5895		abort();
5896		/*NOTREACHED*/
5897	}
5898	gen_and(b0, b1);
5899
5900	return b1;
5901}
5902
5903static struct block *
5904gen_portrange(compiler_state_t *cstate, u_int port1, u_int port2, int ip_proto,
5905    int dir)
5906{
5907	struct block *b0, *b1, *tmp;
5908
5909	/* link proto ip */
5910	b0 = gen_linktype(cstate, ETHERTYPE_IP);
5911
5912	switch (ip_proto) {
5913	case IPPROTO_UDP:
5914	case IPPROTO_TCP:
5915	case IPPROTO_SCTP:
5916		b1 = gen_portrangeop(cstate, port1, port2, (bpf_u_int32)ip_proto,
5917		    dir);
5918		break;
5919
5920	case PROTO_UNDEF:
5921		tmp = gen_portrangeop(cstate, port1, port2, IPPROTO_TCP, dir);
5922		b1 = gen_portrangeop(cstate, port1, port2, IPPROTO_UDP, dir);
5923		gen_or(tmp, b1);
5924		tmp = gen_portrangeop(cstate, port1, port2, IPPROTO_SCTP, dir);
5925		gen_or(tmp, b1);
5926		break;
5927
5928	default:
5929		abort();
5930	}
5931	gen_and(b0, b1);
5932	return b1;
5933}
5934
5935static struct block *
5936gen_portrangeatom6(compiler_state_t *cstate, u_int off, bpf_u_int32 v1,
5937    bpf_u_int32 v2)
5938{
5939	struct block *b1, *b2;
5940
5941	if (v1 > v2) {
5942		/*
5943		 * Reverse the order of the ports, so v1 is the lower one.
5944		 */
5945		bpf_u_int32 vtemp;
5946
5947		vtemp = v1;
5948		v1 = v2;
5949		v2 = vtemp;
5950	}
5951
5952	b1 = gen_cmp_ge(cstate, OR_TRAN_IPV6, off, BPF_H, v1);
5953	b2 = gen_cmp_le(cstate, OR_TRAN_IPV6, off, BPF_H, v2);
5954
5955	gen_and(b1, b2);
5956
5957	return b2;
5958}
5959
5960static struct block *
5961gen_portrangeop6(compiler_state_t *cstate, u_int port1, u_int port2,
5962    bpf_u_int32 proto, int dir)
5963{
5964	struct block *b0, *b1, *tmp;
5965
5966	/* ip6 proto 'proto' */
5967	/* XXX - catch the first fragment of a fragmented packet? */
5968	b0 = gen_cmp(cstate, OR_LINKPL, 6, BPF_B, proto);
5969
5970	switch (dir) {
5971	case Q_SRC:
5972		b1 = gen_portrangeatom6(cstate, 0, port1, port2);
5973		break;
5974
5975	case Q_DST:
5976		b1 = gen_portrangeatom6(cstate, 2, port1, port2);
5977		break;
5978
5979	case Q_AND:
5980		tmp = gen_portrangeatom6(cstate, 0, port1, port2);
5981		b1 = gen_portrangeatom6(cstate, 2, port1, port2);
5982		gen_and(tmp, b1);
5983		break;
5984
5985	case Q_DEFAULT:
5986	case Q_OR:
5987		tmp = gen_portrangeatom6(cstate, 0, port1, port2);
5988		b1 = gen_portrangeatom6(cstate, 2, port1, port2);
5989		gen_or(tmp, b1);
5990		break;
5991
5992	default:
5993		abort();
5994	}
5995	gen_and(b0, b1);
5996
5997	return b1;
5998}
5999
6000static struct block *
6001gen_portrange6(compiler_state_t *cstate, u_int port1, u_int port2, int ip_proto,
6002    int dir)
6003{
6004	struct block *b0, *b1, *tmp;
6005
6006	/* link proto ip6 */
6007	b0 = gen_linktype(cstate, ETHERTYPE_IPV6);
6008
6009	switch (ip_proto) {
6010	case IPPROTO_UDP:
6011	case IPPROTO_TCP:
6012	case IPPROTO_SCTP:
6013		b1 = gen_portrangeop6(cstate, port1, port2, (bpf_u_int32)ip_proto,
6014		    dir);
6015		break;
6016
6017	case PROTO_UNDEF:
6018		tmp = gen_portrangeop6(cstate, port1, port2, IPPROTO_TCP, dir);
6019		b1 = gen_portrangeop6(cstate, port1, port2, IPPROTO_UDP, dir);
6020		gen_or(tmp, b1);
6021		tmp = gen_portrangeop6(cstate, port1, port2, IPPROTO_SCTP, dir);
6022		gen_or(tmp, b1);
6023		break;
6024
6025	default:
6026		abort();
6027	}
6028	gen_and(b0, b1);
6029	return b1;
6030}
6031
6032static int
6033lookup_proto(compiler_state_t *cstate, const char *name, int proto)
6034{
6035	register int v;
6036
6037	switch (proto) {
6038
6039	case Q_DEFAULT:
6040	case Q_IP:
6041	case Q_IPV6:
6042		v = pcap_nametoproto(name);
6043		if (v == PROTO_UNDEF)
6044			bpf_error(cstate, "unknown ip proto '%s'", name);
6045		break;
6046
6047	case Q_LINK:
6048		/* XXX should look up h/w protocol type based on cstate->linktype */
6049		v = pcap_nametoeproto(name);
6050		if (v == PROTO_UNDEF) {
6051			v = pcap_nametollc(name);
6052			if (v == PROTO_UNDEF)
6053				bpf_error(cstate, "unknown ether proto '%s'", name);
6054		}
6055		break;
6056
6057	case Q_ISO:
6058		if (strcmp(name, "esis") == 0)
6059			v = ISO9542_ESIS;
6060		else if (strcmp(name, "isis") == 0)
6061			v = ISO10589_ISIS;
6062		else if (strcmp(name, "clnp") == 0)
6063			v = ISO8473_CLNP;
6064		else
6065			bpf_error(cstate, "unknown osi proto '%s'", name);
6066		break;
6067
6068	default:
6069		v = PROTO_UNDEF;
6070		break;
6071	}
6072	return v;
6073}
6074
6075#if !defined(NO_PROTOCHAIN)
6076static struct block *
6077gen_protochain(compiler_state_t *cstate, bpf_u_int32 v, int proto)
6078{
6079	struct block *b0, *b;
6080	struct slist *s[100];
6081	int fix2, fix3, fix4, fix5;
6082	int ahcheck, again, end;
6083	int i, max;
6084	int reg2 = alloc_reg(cstate);
6085
6086	memset(s, 0, sizeof(s));
6087	fix3 = fix4 = fix5 = 0;
6088
6089	switch (proto) {
6090	case Q_IP:
6091	case Q_IPV6:
6092		break;
6093	case Q_DEFAULT:
6094		b0 = gen_protochain(cstate, v, Q_IP);
6095		b = gen_protochain(cstate, v, Q_IPV6);
6096		gen_or(b0, b);
6097		return b;
6098	default:
6099		bpf_error(cstate, "bad protocol applied for 'protochain'");
6100		/*NOTREACHED*/
6101	}
6102
6103	/*
6104	 * We don't handle variable-length prefixes before the link-layer
6105	 * header, or variable-length link-layer headers, here yet.
6106	 * We might want to add BPF instructions to do the protochain
6107	 * work, to simplify that and, on platforms that have a BPF
6108	 * interpreter with the new instructions, let the filtering
6109	 * be done in the kernel.  (We already require a modified BPF
6110	 * engine to do the protochain stuff, to support backward
6111	 * branches, and backward branch support is unlikely to appear
6112	 * in kernel BPF engines.)
6113	 */
6114	if (cstate->off_linkpl.is_variable)
6115		bpf_error(cstate, "'protochain' not supported with variable length headers");
6116
6117	/*
6118	 * To quote a comment in optimize.c:
6119	 *
6120	 * "These data structures are used in a Cocke and Shwarz style
6121	 * value numbering scheme.  Since the flowgraph is acyclic,
6122	 * exit values can be propagated from a node's predecessors
6123	 * provided it is uniquely defined."
6124	 *
6125	 * "Acyclic" means "no backward branches", which means "no
6126	 * loops", so we have to turn the optimizer off.
6127	 */
6128	cstate->no_optimize = 1;
6129
6130	/*
6131	 * s[0] is a dummy entry to protect other BPF insn from damage
6132	 * by s[fix] = foo with uninitialized variable "fix".  It is somewhat
6133	 * hard to find interdependency made by jump table fixup.
6134	 */
6135	i = 0;
6136	s[i] = new_stmt(cstate, 0);	/*dummy*/
6137	i++;
6138
6139	switch (proto) {
6140	case Q_IP:
6141		b0 = gen_linktype(cstate, ETHERTYPE_IP);
6142
6143		/* A = ip->ip_p */
6144		s[i] = new_stmt(cstate, BPF_LD|BPF_ABS|BPF_B);
6145		s[i]->s.k = cstate->off_linkpl.constant_part + cstate->off_nl + 9;
6146		i++;
6147		/* X = ip->ip_hl << 2 */
6148		s[i] = new_stmt(cstate, BPF_LDX|BPF_MSH|BPF_B);
6149		s[i]->s.k = cstate->off_linkpl.constant_part + cstate->off_nl;
6150		i++;
6151		break;
6152
6153	case Q_IPV6:
6154		b0 = gen_linktype(cstate, ETHERTYPE_IPV6);
6155
6156		/* A = ip6->ip_nxt */
6157		s[i] = new_stmt(cstate, BPF_LD|BPF_ABS|BPF_B);
6158		s[i]->s.k = cstate->off_linkpl.constant_part + cstate->off_nl + 6;
6159		i++;
6160		/* X = sizeof(struct ip6_hdr) */
6161		s[i] = new_stmt(cstate, BPF_LDX|BPF_IMM);
6162		s[i]->s.k = 40;
6163		i++;
6164		break;
6165
6166	default:
6167		bpf_error(cstate, "unsupported proto to gen_protochain");
6168		/*NOTREACHED*/
6169	}
6170
6171	/* again: if (A == v) goto end; else fall through; */
6172	again = i;
6173	s[i] = new_stmt(cstate, BPF_JMP|BPF_JEQ|BPF_K);
6174	s[i]->s.k = v;
6175	s[i]->s.jt = NULL;		/*later*/
6176	s[i]->s.jf = NULL;		/*update in next stmt*/
6177	fix5 = i;
6178	i++;
6179
6180#ifndef IPPROTO_NONE
6181#define IPPROTO_NONE	59
6182#endif
6183	/* if (A == IPPROTO_NONE) goto end */
6184	s[i] = new_stmt(cstate, BPF_JMP|BPF_JEQ|BPF_K);
6185	s[i]->s.jt = NULL;	/*later*/
6186	s[i]->s.jf = NULL;	/*update in next stmt*/
6187	s[i]->s.k = IPPROTO_NONE;
6188	s[fix5]->s.jf = s[i];
6189	fix2 = i;
6190	i++;
6191
6192	if (proto == Q_IPV6) {
6193		int v6start, v6end, v6advance, j;
6194
6195		v6start = i;
6196		/* if (A == IPPROTO_HOPOPTS) goto v6advance */
6197		s[i] = new_stmt(cstate, BPF_JMP|BPF_JEQ|BPF_K);
6198		s[i]->s.jt = NULL;	/*later*/
6199		s[i]->s.jf = NULL;	/*update in next stmt*/
6200		s[i]->s.k = IPPROTO_HOPOPTS;
6201		s[fix2]->s.jf = s[i];
6202		i++;
6203		/* if (A == IPPROTO_DSTOPTS) goto v6advance */
6204		s[i - 1]->s.jf = s[i] = new_stmt(cstate, BPF_JMP|BPF_JEQ|BPF_K);
6205		s[i]->s.jt = NULL;	/*later*/
6206		s[i]->s.jf = NULL;	/*update in next stmt*/
6207		s[i]->s.k = IPPROTO_DSTOPTS;
6208		i++;
6209		/* if (A == IPPROTO_ROUTING) goto v6advance */
6210		s[i - 1]->s.jf = s[i] = new_stmt(cstate, BPF_JMP|BPF_JEQ|BPF_K);
6211		s[i]->s.jt = NULL;	/*later*/
6212		s[i]->s.jf = NULL;	/*update in next stmt*/
6213		s[i]->s.k = IPPROTO_ROUTING;
6214		i++;
6215		/* if (A == IPPROTO_FRAGMENT) goto v6advance; else goto ahcheck; */
6216		s[i - 1]->s.jf = s[i] = new_stmt(cstate, BPF_JMP|BPF_JEQ|BPF_K);
6217		s[i]->s.jt = NULL;	/*later*/
6218		s[i]->s.jf = NULL;	/*later*/
6219		s[i]->s.k = IPPROTO_FRAGMENT;
6220		fix3 = i;
6221		v6end = i;
6222		i++;
6223
6224		/* v6advance: */
6225		v6advance = i;
6226
6227		/*
6228		 * in short,
6229		 * A = P[X + packet head];
6230		 * X = X + (P[X + packet head + 1] + 1) * 8;
6231		 */
6232		/* A = P[X + packet head] */
6233		s[i] = new_stmt(cstate, BPF_LD|BPF_IND|BPF_B);
6234		s[i]->s.k = cstate->off_linkpl.constant_part + cstate->off_nl;
6235		i++;
6236		/* MEM[reg2] = A */
6237		s[i] = new_stmt(cstate, BPF_ST);
6238		s[i]->s.k = reg2;
6239		i++;
6240		/* A = P[X + packet head + 1]; */
6241		s[i] = new_stmt(cstate, BPF_LD|BPF_IND|BPF_B);
6242		s[i]->s.k = cstate->off_linkpl.constant_part + cstate->off_nl + 1;
6243		i++;
6244		/* A += 1 */
6245		s[i] = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
6246		s[i]->s.k = 1;
6247		i++;
6248		/* A *= 8 */
6249		s[i] = new_stmt(cstate, BPF_ALU|BPF_MUL|BPF_K);
6250		s[i]->s.k = 8;
6251		i++;
6252		/* A += X */
6253		s[i] = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_X);
6254		s[i]->s.k = 0;
6255		i++;
6256		/* X = A; */
6257		s[i] = new_stmt(cstate, BPF_MISC|BPF_TAX);
6258		i++;
6259		/* A = MEM[reg2] */
6260		s[i] = new_stmt(cstate, BPF_LD|BPF_MEM);
6261		s[i]->s.k = reg2;
6262		i++;
6263
6264		/* goto again; (must use BPF_JA for backward jump) */
6265		s[i] = new_stmt(cstate, BPF_JMP|BPF_JA);
6266		s[i]->s.k = again - i - 1;
6267		s[i - 1]->s.jf = s[i];
6268		i++;
6269
6270		/* fixup */
6271		for (j = v6start; j <= v6end; j++)
6272			s[j]->s.jt = s[v6advance];
6273	} else {
6274		/* nop */
6275		s[i] = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
6276		s[i]->s.k = 0;
6277		s[fix2]->s.jf = s[i];
6278		i++;
6279	}
6280
6281	/* ahcheck: */
6282	ahcheck = i;
6283	/* if (A == IPPROTO_AH) then fall through; else goto end; */
6284	s[i] = new_stmt(cstate, BPF_JMP|BPF_JEQ|BPF_K);
6285	s[i]->s.jt = NULL;	/*later*/
6286	s[i]->s.jf = NULL;	/*later*/
6287	s[i]->s.k = IPPROTO_AH;
6288	if (fix3)
6289		s[fix3]->s.jf = s[ahcheck];
6290	fix4 = i;
6291	i++;
6292
6293	/*
6294	 * in short,
6295	 * A = P[X];
6296	 * X = X + (P[X + 1] + 2) * 4;
6297	 */
6298	/* A = X */
6299	s[i - 1]->s.jt = s[i] = new_stmt(cstate, BPF_MISC|BPF_TXA);
6300	i++;
6301	/* A = P[X + packet head]; */
6302	s[i] = new_stmt(cstate, BPF_LD|BPF_IND|BPF_B);
6303	s[i]->s.k = cstate->off_linkpl.constant_part + cstate->off_nl;
6304	i++;
6305	/* MEM[reg2] = A */
6306	s[i] = new_stmt(cstate, BPF_ST);
6307	s[i]->s.k = reg2;
6308	i++;
6309	/* A = X */
6310	s[i - 1]->s.jt = s[i] = new_stmt(cstate, BPF_MISC|BPF_TXA);
6311	i++;
6312	/* A += 1 */
6313	s[i] = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
6314	s[i]->s.k = 1;
6315	i++;
6316	/* X = A */
6317	s[i] = new_stmt(cstate, BPF_MISC|BPF_TAX);
6318	i++;
6319	/* A = P[X + packet head] */
6320	s[i] = new_stmt(cstate, BPF_LD|BPF_IND|BPF_B);
6321	s[i]->s.k = cstate->off_linkpl.constant_part + cstate->off_nl;
6322	i++;
6323	/* A += 2 */
6324	s[i] = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
6325	s[i]->s.k = 2;
6326	i++;
6327	/* A *= 4 */
6328	s[i] = new_stmt(cstate, BPF_ALU|BPF_MUL|BPF_K);
6329	s[i]->s.k = 4;
6330	i++;
6331	/* X = A; */
6332	s[i] = new_stmt(cstate, BPF_MISC|BPF_TAX);
6333	i++;
6334	/* A = MEM[reg2] */
6335	s[i] = new_stmt(cstate, BPF_LD|BPF_MEM);
6336	s[i]->s.k = reg2;
6337	i++;
6338
6339	/* goto again; (must use BPF_JA for backward jump) */
6340	s[i] = new_stmt(cstate, BPF_JMP|BPF_JA);
6341	s[i]->s.k = again - i - 1;
6342	i++;
6343
6344	/* end: nop */
6345	end = i;
6346	s[i] = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
6347	s[i]->s.k = 0;
6348	s[fix2]->s.jt = s[end];
6349	s[fix4]->s.jf = s[end];
6350	s[fix5]->s.jt = s[end];
6351	i++;
6352
6353	/*
6354	 * make slist chain
6355	 */
6356	max = i;
6357	for (i = 0; i < max - 1; i++)
6358		s[i]->next = s[i + 1];
6359	s[max - 1]->next = NULL;
6360
6361	/*
6362	 * emit final check
6363	 */
6364	b = new_block(cstate, JMP(BPF_JEQ));
6365	b->stmts = s[1];	/*remember, s[0] is dummy*/
6366	b->s.k = v;
6367
6368	free_reg(cstate, reg2);
6369
6370	gen_and(b0, b);
6371	return b;
6372}
6373#endif /* !defined(NO_PROTOCHAIN) */
6374
6375static struct block *
6376gen_check_802_11_data_frame(compiler_state_t *cstate)
6377{
6378	struct slist *s;
6379	struct block *b0, *b1;
6380
6381	/*
6382	 * A data frame has the 0x08 bit (b3) in the frame control field set
6383	 * and the 0x04 bit (b2) clear.
6384	 */
6385	s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
6386	b0 = new_block(cstate, JMP(BPF_JSET));
6387	b0->s.k = 0x08;
6388	b0->stmts = s;
6389
6390	s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
6391	b1 = new_block(cstate, JMP(BPF_JSET));
6392	b1->s.k = 0x04;
6393	b1->stmts = s;
6394	gen_not(b1);
6395
6396	gen_and(b1, b0);
6397
6398	return b0;
6399}
6400
6401/*
6402 * Generate code that checks whether the packet is a packet for protocol
6403 * <proto> and whether the type field in that protocol's header has
6404 * the value <v>, e.g. if <proto> is Q_IP, it checks whether it's an
6405 * IP packet and checks the protocol number in the IP header against <v>.
6406 *
6407 * If <proto> is Q_DEFAULT, i.e. just "proto" was specified, it checks
6408 * against Q_IP and Q_IPV6.
6409 */
6410static struct block *
6411gen_proto(compiler_state_t *cstate, bpf_u_int32 v, int proto, int dir)
6412{
6413	struct block *b0, *b1;
6414	struct block *b2;
6415
6416	if (dir != Q_DEFAULT)
6417		bpf_error(cstate, "direction applied to 'proto'");
6418
6419	switch (proto) {
6420	case Q_DEFAULT:
6421		b0 = gen_proto(cstate, v, Q_IP, dir);
6422		b1 = gen_proto(cstate, v, Q_IPV6, dir);
6423		gen_or(b0, b1);
6424		return b1;
6425
6426	case Q_LINK:
6427		return gen_linktype(cstate, v);
6428
6429	case Q_IP:
6430		/*
6431		 * For FDDI, RFC 1188 says that SNAP encapsulation is used,
6432		 * not LLC encapsulation with LLCSAP_IP.
6433		 *
6434		 * For IEEE 802 networks - which includes 802.5 token ring
6435		 * (which is what DLT_IEEE802 means) and 802.11 - RFC 1042
6436		 * says that SNAP encapsulation is used, not LLC encapsulation
6437		 * with LLCSAP_IP.
6438		 *
6439		 * For LLC-encapsulated ATM/"Classical IP", RFC 1483 and
6440		 * RFC 2225 say that SNAP encapsulation is used, not LLC
6441		 * encapsulation with LLCSAP_IP.
6442		 *
6443		 * So we always check for ETHERTYPE_IP.
6444		 */
6445		b0 = gen_linktype(cstate, ETHERTYPE_IP);
6446		b1 = gen_cmp(cstate, OR_LINKPL, 9, BPF_B, v);
6447		gen_and(b0, b1);
6448		return b1;
6449
6450	case Q_ARP:
6451		bpf_error(cstate, "arp does not encapsulate another protocol");
6452		/*NOTREACHED*/
6453
6454	case Q_RARP:
6455		bpf_error(cstate, "rarp does not encapsulate another protocol");
6456		/*NOTREACHED*/
6457
6458	case Q_SCTP:
6459		bpf_error(cstate, "'sctp proto' is bogus");
6460		/*NOTREACHED*/
6461
6462	case Q_TCP:
6463		bpf_error(cstate, "'tcp proto' is bogus");
6464		/*NOTREACHED*/
6465
6466	case Q_UDP:
6467		bpf_error(cstate, "'udp proto' is bogus");
6468		/*NOTREACHED*/
6469
6470	case Q_ICMP:
6471		bpf_error(cstate, "'icmp proto' is bogus");
6472		/*NOTREACHED*/
6473
6474	case Q_IGMP:
6475		bpf_error(cstate, "'igmp proto' is bogus");
6476		/*NOTREACHED*/
6477
6478	case Q_IGRP:
6479		bpf_error(cstate, "'igrp proto' is bogus");
6480		/*NOTREACHED*/
6481
6482	case Q_ATALK:
6483		bpf_error(cstate, "AppleTalk encapsulation is not specifiable");
6484		/*NOTREACHED*/
6485
6486	case Q_DECNET:
6487		bpf_error(cstate, "DECNET encapsulation is not specifiable");
6488		/*NOTREACHED*/
6489
6490	case Q_LAT:
6491		bpf_error(cstate, "LAT does not encapsulate another protocol");
6492		/*NOTREACHED*/
6493
6494	case Q_SCA:
6495		bpf_error(cstate, "SCA does not encapsulate another protocol");
6496		/*NOTREACHED*/
6497
6498	case Q_MOPRC:
6499		bpf_error(cstate, "MOPRC does not encapsulate another protocol");
6500		/*NOTREACHED*/
6501
6502	case Q_MOPDL:
6503		bpf_error(cstate, "MOPDL does not encapsulate another protocol");
6504		/*NOTREACHED*/
6505
6506	case Q_IPV6:
6507		b0 = gen_linktype(cstate, ETHERTYPE_IPV6);
6508		/*
6509		 * Also check for a fragment header before the final
6510		 * header.
6511		 */
6512		b2 = gen_cmp(cstate, OR_LINKPL, 6, BPF_B, IPPROTO_FRAGMENT);
6513		b1 = gen_cmp(cstate, OR_LINKPL, 40, BPF_B, v);
6514		gen_and(b2, b1);
6515		b2 = gen_cmp(cstate, OR_LINKPL, 6, BPF_B, v);
6516		gen_or(b2, b1);
6517		gen_and(b0, b1);
6518		return b1;
6519
6520	case Q_ICMPV6:
6521		bpf_error(cstate, "'icmp6 proto' is bogus");
6522		/*NOTREACHED*/
6523
6524	case Q_AH:
6525		bpf_error(cstate, "'ah proto' is bogus");
6526		/*NOTREACHED*/
6527
6528	case Q_ESP:
6529		bpf_error(cstate, "'esp proto' is bogus");
6530		/*NOTREACHED*/
6531
6532	case Q_PIM:
6533		bpf_error(cstate, "'pim proto' is bogus");
6534		/*NOTREACHED*/
6535
6536	case Q_VRRP:
6537		bpf_error(cstate, "'vrrp proto' is bogus");
6538		/*NOTREACHED*/
6539
6540	case Q_AARP:
6541		bpf_error(cstate, "'aarp proto' is bogus");
6542		/*NOTREACHED*/
6543
6544	case Q_ISO:
6545		switch (cstate->linktype) {
6546
6547		case DLT_FRELAY:
6548			/*
6549			 * Frame Relay packets typically have an OSI
6550			 * NLPID at the beginning; "gen_linktype(cstate, LLCSAP_ISONS)"
6551			 * generates code to check for all the OSI
6552			 * NLPIDs, so calling it and then adding a check
6553			 * for the particular NLPID for which we're
6554			 * looking is bogus, as we can just check for
6555			 * the NLPID.
6556			 *
6557			 * What we check for is the NLPID and a frame
6558			 * control field value of UI, i.e. 0x03 followed
6559			 * by the NLPID.
6560			 *
6561			 * XXX - assumes a 2-byte Frame Relay header with
6562			 * DLCI and flags.  What if the address is longer?
6563			 *
6564			 * XXX - what about SNAP-encapsulated frames?
6565			 */
6566			return gen_cmp(cstate, OR_LINKHDR, 2, BPF_H, (0x03<<8) | v);
6567			/*NOTREACHED*/
6568
6569		case DLT_C_HDLC:
6570		case DLT_HDLC:
6571			/*
6572			 * Cisco uses an Ethertype lookalike - for OSI,
6573			 * it's 0xfefe.
6574			 */
6575			b0 = gen_linktype(cstate, LLCSAP_ISONS<<8 | LLCSAP_ISONS);
6576			/* OSI in C-HDLC is stuffed with a fudge byte */
6577			b1 = gen_cmp(cstate, OR_LINKPL_NOSNAP, 1, BPF_B, v);
6578			gen_and(b0, b1);
6579			return b1;
6580
6581		default:
6582			b0 = gen_linktype(cstate, LLCSAP_ISONS);
6583			b1 = gen_cmp(cstate, OR_LINKPL_NOSNAP, 0, BPF_B, v);
6584			gen_and(b0, b1);
6585			return b1;
6586		}
6587
6588	case Q_ESIS:
6589		bpf_error(cstate, "'esis proto' is bogus");
6590		/*NOTREACHED*/
6591
6592	case Q_ISIS:
6593		b0 = gen_proto(cstate, ISO10589_ISIS, Q_ISO, Q_DEFAULT);
6594		/*
6595		 * 4 is the offset of the PDU type relative to the IS-IS
6596		 * header.
6597		 */
6598		b1 = gen_cmp(cstate, OR_LINKPL_NOSNAP, 4, BPF_B, v);
6599		gen_and(b0, b1);
6600		return b1;
6601
6602	case Q_CLNP:
6603		bpf_error(cstate, "'clnp proto' is not supported");
6604		/*NOTREACHED*/
6605
6606	case Q_STP:
6607		bpf_error(cstate, "'stp proto' is bogus");
6608		/*NOTREACHED*/
6609
6610	case Q_IPX:
6611		bpf_error(cstate, "'ipx proto' is bogus");
6612		/*NOTREACHED*/
6613
6614	case Q_NETBEUI:
6615		bpf_error(cstate, "'netbeui proto' is bogus");
6616		/*NOTREACHED*/
6617
6618	case Q_ISIS_L1:
6619		bpf_error(cstate, "'l1 proto' is bogus");
6620		/*NOTREACHED*/
6621
6622	case Q_ISIS_L2:
6623		bpf_error(cstate, "'l2 proto' is bogus");
6624		/*NOTREACHED*/
6625
6626	case Q_ISIS_IIH:
6627		bpf_error(cstate, "'iih proto' is bogus");
6628		/*NOTREACHED*/
6629
6630	case Q_ISIS_SNP:
6631		bpf_error(cstate, "'snp proto' is bogus");
6632		/*NOTREACHED*/
6633
6634	case Q_ISIS_CSNP:
6635		bpf_error(cstate, "'csnp proto' is bogus");
6636		/*NOTREACHED*/
6637
6638	case Q_ISIS_PSNP:
6639		bpf_error(cstate, "'psnp proto' is bogus");
6640		/*NOTREACHED*/
6641
6642	case Q_ISIS_LSP:
6643		bpf_error(cstate, "'lsp proto' is bogus");
6644		/*NOTREACHED*/
6645
6646	case Q_RADIO:
6647		bpf_error(cstate, "'radio proto' is bogus");
6648		/*NOTREACHED*/
6649
6650	case Q_CARP:
6651		bpf_error(cstate, "'carp proto' is bogus");
6652		/*NOTREACHED*/
6653
6654	default:
6655		abort();
6656		/*NOTREACHED*/
6657	}
6658	/*NOTREACHED*/
6659}
6660
6661struct block *
6662gen_scode(compiler_state_t *cstate, const char *name, struct qual q)
6663{
6664	int proto = q.proto;
6665	int dir = q.dir;
6666	int tproto;
6667	u_char *eaddr;
6668	bpf_u_int32 mask, addr;
6669	struct addrinfo *res, *res0;
6670	struct sockaddr_in *sin4;
6671#ifdef INET6
6672	int tproto6;
6673	struct sockaddr_in6 *sin6;
6674	struct in6_addr mask128;
6675#endif /*INET6*/
6676	struct block *b, *tmp;
6677	int port, real_proto;
6678	int port1, port2;
6679
6680	/*
6681	 * Catch errors reported by us and routines below us, and return NULL
6682	 * on an error.
6683	 */
6684	if (setjmp(cstate->top_ctx))
6685		return (NULL);
6686
6687	switch (q.addr) {
6688
6689	case Q_NET:
6690		addr = pcap_nametonetaddr(name);
6691		if (addr == 0)
6692			bpf_error(cstate, "unknown network '%s'", name);
6693		/* Left justify network addr and calculate its network mask */
6694		mask = 0xffffffff;
6695		while (addr && (addr & 0xff000000) == 0) {
6696			addr <<= 8;
6697			mask <<= 8;
6698		}
6699		return gen_host(cstate, addr, mask, proto, dir, q.addr);
6700
6701	case Q_DEFAULT:
6702	case Q_HOST:
6703		if (proto == Q_LINK) {
6704			switch (cstate->linktype) {
6705
6706			case DLT_EN10MB:
6707			case DLT_NETANALYZER:
6708			case DLT_NETANALYZER_TRANSPARENT:
6709				eaddr = pcap_ether_hostton(name);
6710				if (eaddr == NULL)
6711					bpf_error(cstate,
6712					    "unknown ether host '%s'", name);
6713				tmp = gen_prevlinkhdr_check(cstate);
6714				b = gen_ehostop(cstate, eaddr, dir);
6715				if (tmp != NULL)
6716					gen_and(tmp, b);
6717				free(eaddr);
6718				return b;
6719
6720			case DLT_FDDI:
6721				eaddr = pcap_ether_hostton(name);
6722				if (eaddr == NULL)
6723					bpf_error(cstate,
6724					    "unknown FDDI host '%s'", name);
6725				b = gen_fhostop(cstate, eaddr, dir);
6726				free(eaddr);
6727				return b;
6728
6729			case DLT_IEEE802:
6730				eaddr = pcap_ether_hostton(name);
6731				if (eaddr == NULL)
6732					bpf_error(cstate,
6733					    "unknown token ring host '%s'", name);
6734				b = gen_thostop(cstate, eaddr, dir);
6735				free(eaddr);
6736				return b;
6737
6738			case DLT_IEEE802_11:
6739			case DLT_PRISM_HEADER:
6740			case DLT_IEEE802_11_RADIO_AVS:
6741			case DLT_IEEE802_11_RADIO:
6742			case DLT_PPI:
6743				eaddr = pcap_ether_hostton(name);
6744				if (eaddr == NULL)
6745					bpf_error(cstate,
6746					    "unknown 802.11 host '%s'", name);
6747				b = gen_wlanhostop(cstate, eaddr, dir);
6748				free(eaddr);
6749				return b;
6750
6751			case DLT_IP_OVER_FC:
6752				eaddr = pcap_ether_hostton(name);
6753				if (eaddr == NULL)
6754					bpf_error(cstate,
6755					    "unknown Fibre Channel host '%s'", name);
6756				b = gen_ipfchostop(cstate, eaddr, dir);
6757				free(eaddr);
6758				return b;
6759			}
6760
6761			bpf_error(cstate, "only ethernet/FDDI/token ring/802.11/ATM LANE/Fibre Channel supports link-level host name");
6762		} else if (proto == Q_DECNET) {
6763			unsigned short dn_addr;
6764
6765			if (!__pcap_nametodnaddr(name, &dn_addr)) {
6766#ifdef	DECNETLIB
6767				bpf_error(cstate, "unknown decnet host name '%s'\n", name);
6768#else
6769				bpf_error(cstate, "decnet name support not included, '%s' cannot be translated\n",
6770					name);
6771#endif
6772			}
6773			/*
6774			 * I don't think DECNET hosts can be multihomed, so
6775			 * there is no need to build up a list of addresses
6776			 */
6777			return (gen_host(cstate, dn_addr, 0, proto, dir, q.addr));
6778		} else {
6779#ifdef INET6
6780			memset(&mask128, 0xff, sizeof(mask128));
6781#endif
6782			res0 = res = pcap_nametoaddrinfo(name);
6783			if (res == NULL)
6784				bpf_error(cstate, "unknown host '%s'", name);
6785			cstate->ai = res;
6786			b = tmp = NULL;
6787			tproto = proto;
6788#ifdef INET6
6789			tproto6 = proto;
6790#endif
6791			if (cstate->off_linktype.constant_part == OFFSET_NOT_SET &&
6792			    tproto == Q_DEFAULT) {
6793				tproto = Q_IP;
6794#ifdef INET6
6795				tproto6 = Q_IPV6;
6796#endif
6797			}
6798			for (res = res0; res; res = res->ai_next) {
6799				switch (res->ai_family) {
6800				case AF_INET:
6801#ifdef INET6
6802					if (tproto == Q_IPV6)
6803						continue;
6804#endif
6805
6806					sin4 = (struct sockaddr_in *)
6807						res->ai_addr;
6808					tmp = gen_host(cstate, ntohl(sin4->sin_addr.s_addr),
6809						0xffffffff, tproto, dir, q.addr);
6810					break;
6811#ifdef INET6
6812				case AF_INET6:
6813					if (tproto6 == Q_IP)
6814						continue;
6815
6816					sin6 = (struct sockaddr_in6 *)
6817						res->ai_addr;
6818					tmp = gen_host6(cstate, &sin6->sin6_addr,
6819						&mask128, tproto6, dir, q.addr);
6820					break;
6821#endif
6822				default:
6823					continue;
6824				}
6825				if (b)
6826					gen_or(b, tmp);
6827				b = tmp;
6828			}
6829			cstate->ai = NULL;
6830			freeaddrinfo(res0);
6831			if (b == NULL) {
6832				bpf_error(cstate, "unknown host '%s'%s", name,
6833				    (proto == Q_DEFAULT)
6834					? ""
6835					: " for specified address family");
6836			}
6837			return b;
6838		}
6839
6840	case Q_PORT:
6841		if (proto != Q_DEFAULT &&
6842		    proto != Q_UDP && proto != Q_TCP && proto != Q_SCTP)
6843			bpf_error(cstate, "illegal qualifier of 'port'");
6844		if (pcap_nametoport(name, &port, &real_proto) == 0)
6845			bpf_error(cstate, "unknown port '%s'", name);
6846		if (proto == Q_UDP) {
6847			if (real_proto == IPPROTO_TCP)
6848				bpf_error(cstate, "port '%s' is tcp", name);
6849			else if (real_proto == IPPROTO_SCTP)
6850				bpf_error(cstate, "port '%s' is sctp", name);
6851			else
6852				/* override PROTO_UNDEF */
6853				real_proto = IPPROTO_UDP;
6854		}
6855		if (proto == Q_TCP) {
6856			if (real_proto == IPPROTO_UDP)
6857				bpf_error(cstate, "port '%s' is udp", name);
6858
6859			else if (real_proto == IPPROTO_SCTP)
6860				bpf_error(cstate, "port '%s' is sctp", name);
6861			else
6862				/* override PROTO_UNDEF */
6863				real_proto = IPPROTO_TCP;
6864		}
6865		if (proto == Q_SCTP) {
6866			if (real_proto == IPPROTO_UDP)
6867				bpf_error(cstate, "port '%s' is udp", name);
6868
6869			else if (real_proto == IPPROTO_TCP)
6870				bpf_error(cstate, "port '%s' is tcp", name);
6871			else
6872				/* override PROTO_UNDEF */
6873				real_proto = IPPROTO_SCTP;
6874		}
6875		if (port < 0)
6876			bpf_error(cstate, "illegal port number %d < 0", port);
6877		if (port > 65535)
6878			bpf_error(cstate, "illegal port number %d > 65535", port);
6879		b = gen_port(cstate, port, real_proto, dir);
6880		gen_or(gen_port6(cstate, port, real_proto, dir), b);
6881		return b;
6882
6883	case Q_PORTRANGE:
6884		if (proto != Q_DEFAULT &&
6885		    proto != Q_UDP && proto != Q_TCP && proto != Q_SCTP)
6886			bpf_error(cstate, "illegal qualifier of 'portrange'");
6887		if (pcap_nametoportrange(name, &port1, &port2, &real_proto) == 0)
6888			bpf_error(cstate, "unknown port in range '%s'", name);
6889		if (proto == Q_UDP) {
6890			if (real_proto == IPPROTO_TCP)
6891				bpf_error(cstate, "port in range '%s' is tcp", name);
6892			else if (real_proto == IPPROTO_SCTP)
6893				bpf_error(cstate, "port in range '%s' is sctp", name);
6894			else
6895				/* override PROTO_UNDEF */
6896				real_proto = IPPROTO_UDP;
6897		}
6898		if (proto == Q_TCP) {
6899			if (real_proto == IPPROTO_UDP)
6900				bpf_error(cstate, "port in range '%s' is udp", name);
6901			else if (real_proto == IPPROTO_SCTP)
6902				bpf_error(cstate, "port in range '%s' is sctp", name);
6903			else
6904				/* override PROTO_UNDEF */
6905				real_proto = IPPROTO_TCP;
6906		}
6907		if (proto == Q_SCTP) {
6908			if (real_proto == IPPROTO_UDP)
6909				bpf_error(cstate, "port in range '%s' is udp", name);
6910			else if (real_proto == IPPROTO_TCP)
6911				bpf_error(cstate, "port in range '%s' is tcp", name);
6912			else
6913				/* override PROTO_UNDEF */
6914				real_proto = IPPROTO_SCTP;
6915		}
6916		if (port1 < 0)
6917			bpf_error(cstate, "illegal port number %d < 0", port1);
6918		if (port1 > 65535)
6919			bpf_error(cstate, "illegal port number %d > 65535", port1);
6920		if (port2 < 0)
6921			bpf_error(cstate, "illegal port number %d < 0", port2);
6922		if (port2 > 65535)
6923			bpf_error(cstate, "illegal port number %d > 65535", port2);
6924
6925		b = gen_portrange(cstate, port1, port2, real_proto, dir);
6926		gen_or(gen_portrange6(cstate, port1, port2, real_proto, dir), b);
6927		return b;
6928
6929	case Q_GATEWAY:
6930#ifndef INET6
6931		eaddr = pcap_ether_hostton(name);
6932		if (eaddr == NULL)
6933			bpf_error(cstate, "unknown ether host: %s", name);
6934
6935		res = pcap_nametoaddrinfo(name);
6936		cstate->ai = res;
6937		if (res == NULL)
6938			bpf_error(cstate, "unknown host '%s'", name);
6939		b = gen_gateway(cstate, eaddr, res, proto, dir);
6940		cstate->ai = NULL;
6941		freeaddrinfo(res);
6942		if (b == NULL)
6943			bpf_error(cstate, "unknown host '%s'", name);
6944		return b;
6945#else
6946		bpf_error(cstate, "'gateway' not supported in this configuration");
6947#endif /*INET6*/
6948
6949	case Q_PROTO:
6950		real_proto = lookup_proto(cstate, name, proto);
6951		if (real_proto >= 0)
6952			return gen_proto(cstate, real_proto, proto, dir);
6953		else
6954			bpf_error(cstate, "unknown protocol: %s", name);
6955
6956#if !defined(NO_PROTOCHAIN)
6957	case Q_PROTOCHAIN:
6958		real_proto = lookup_proto(cstate, name, proto);
6959		if (real_proto >= 0)
6960			return gen_protochain(cstate, real_proto, proto);
6961		else
6962			bpf_error(cstate, "unknown protocol: %s", name);
6963#endif /* !defined(NO_PROTOCHAIN) */
6964
6965	case Q_UNDEF:
6966		syntax(cstate);
6967		/*NOTREACHED*/
6968	}
6969	abort();
6970	/*NOTREACHED*/
6971}
6972
6973struct block *
6974gen_mcode(compiler_state_t *cstate, const char *s1, const char *s2,
6975    bpf_u_int32 masklen, struct qual q)
6976{
6977	register int nlen, mlen;
6978	bpf_u_int32 n, m;
6979
6980	/*
6981	 * Catch errors reported by us and routines below us, and return NULL
6982	 * on an error.
6983	 */
6984	if (setjmp(cstate->top_ctx))
6985		return (NULL);
6986
6987	nlen = __pcap_atoin(s1, &n);
6988	if (nlen < 0)
6989		bpf_error(cstate, "invalid IPv4 address '%s'", s1);
6990	/* Promote short ipaddr */
6991	n <<= 32 - nlen;
6992
6993	if (s2 != NULL) {
6994		mlen = __pcap_atoin(s2, &m);
6995		if (mlen < 0)
6996			bpf_error(cstate, "invalid IPv4 address '%s'", s2);
6997		/* Promote short ipaddr */
6998		m <<= 32 - mlen;
6999		if ((n & ~m) != 0)
7000			bpf_error(cstate, "non-network bits set in \"%s mask %s\"",
7001			    s1, s2);
7002	} else {
7003		/* Convert mask len to mask */
7004		if (masklen > 32)
7005			bpf_error(cstate, "mask length must be <= 32");
7006		if (masklen == 0) {
7007			/*
7008			 * X << 32 is not guaranteed by C to be 0; it's
7009			 * undefined.
7010			 */
7011			m = 0;
7012		} else
7013			m = 0xffffffff << (32 - masklen);
7014		if ((n & ~m) != 0)
7015			bpf_error(cstate, "non-network bits set in \"%s/%d\"",
7016			    s1, masklen);
7017	}
7018
7019	switch (q.addr) {
7020
7021	case Q_NET:
7022		return gen_host(cstate, n, m, q.proto, q.dir, q.addr);
7023
7024	default:
7025		bpf_error(cstate, "Mask syntax for networks only");
7026		/*NOTREACHED*/
7027	}
7028	/*NOTREACHED*/
7029}
7030
7031struct block *
7032gen_ncode(compiler_state_t *cstate, const char *s, bpf_u_int32 v, struct qual q)
7033{
7034	bpf_u_int32 mask;
7035	int proto;
7036	int dir;
7037	register int vlen;
7038
7039	/*
7040	 * Catch errors reported by us and routines below us, and return NULL
7041	 * on an error.
7042	 */
7043	if (setjmp(cstate->top_ctx))
7044		return (NULL);
7045
7046	proto = q.proto;
7047	dir = q.dir;
7048	if (s == NULL)
7049		vlen = 32;
7050	else if (q.proto == Q_DECNET) {
7051		vlen = __pcap_atodn(s, &v);
7052		if (vlen == 0)
7053			bpf_error(cstate, "malformed decnet address '%s'", s);
7054	} else {
7055		vlen = __pcap_atoin(s, &v);
7056		if (vlen < 0)
7057			bpf_error(cstate, "invalid IPv4 address '%s'", s);
7058	}
7059
7060	switch (q.addr) {
7061
7062	case Q_DEFAULT:
7063	case Q_HOST:
7064	case Q_NET:
7065		if (proto == Q_DECNET)
7066			return gen_host(cstate, v, 0, proto, dir, q.addr);
7067		else if (proto == Q_LINK) {
7068			bpf_error(cstate, "illegal link layer address");
7069		} else {
7070			mask = 0xffffffff;
7071			if (s == NULL && q.addr == Q_NET) {
7072				/* Promote short net number */
7073				while (v && (v & 0xff000000) == 0) {
7074					v <<= 8;
7075					mask <<= 8;
7076				}
7077			} else {
7078				/* Promote short ipaddr */
7079				v <<= 32 - vlen;
7080				mask <<= 32 - vlen ;
7081			}
7082			return gen_host(cstate, v, mask, proto, dir, q.addr);
7083		}
7084
7085	case Q_PORT:
7086		if (proto == Q_UDP)
7087			proto = IPPROTO_UDP;
7088		else if (proto == Q_TCP)
7089			proto = IPPROTO_TCP;
7090		else if (proto == Q_SCTP)
7091			proto = IPPROTO_SCTP;
7092		else if (proto == Q_DEFAULT)
7093			proto = PROTO_UNDEF;
7094		else
7095			bpf_error(cstate, "illegal qualifier of 'port'");
7096
7097		if (v > 65535)
7098			bpf_error(cstate, "illegal port number %u > 65535", v);
7099
7100	    {
7101		struct block *b;
7102		b = gen_port(cstate, v, proto, dir);
7103		gen_or(gen_port6(cstate, v, proto, dir), b);
7104		return b;
7105	    }
7106
7107	case Q_PORTRANGE:
7108		if (proto == Q_UDP)
7109			proto = IPPROTO_UDP;
7110		else if (proto == Q_TCP)
7111			proto = IPPROTO_TCP;
7112		else if (proto == Q_SCTP)
7113			proto = IPPROTO_SCTP;
7114		else if (proto == Q_DEFAULT)
7115			proto = PROTO_UNDEF;
7116		else
7117			bpf_error(cstate, "illegal qualifier of 'portrange'");
7118
7119		if (v > 65535)
7120			bpf_error(cstate, "illegal port number %u > 65535", v);
7121
7122	    {
7123		struct block *b;
7124		b = gen_portrange(cstate, v, v, proto, dir);
7125		gen_or(gen_portrange6(cstate, v, v, proto, dir), b);
7126		return b;
7127	    }
7128
7129	case Q_GATEWAY:
7130		bpf_error(cstate, "'gateway' requires a name");
7131		/*NOTREACHED*/
7132
7133	case Q_PROTO:
7134		return gen_proto(cstate, v, proto, dir);
7135
7136#if !defined(NO_PROTOCHAIN)
7137	case Q_PROTOCHAIN:
7138		return gen_protochain(cstate, v, proto);
7139#endif
7140
7141	case Q_UNDEF:
7142		syntax(cstate);
7143		/*NOTREACHED*/
7144
7145	default:
7146		abort();
7147		/*NOTREACHED*/
7148	}
7149	/*NOTREACHED*/
7150}
7151
7152#ifdef INET6
7153struct block *
7154gen_mcode6(compiler_state_t *cstate, const char *s1, const char *s2,
7155    bpf_u_int32 masklen, struct qual q)
7156{
7157	struct addrinfo *res;
7158	struct in6_addr *addr;
7159	struct in6_addr mask;
7160	struct block *b;
7161	uint32_t *a, *m;
7162
7163	/*
7164	 * Catch errors reported by us and routines below us, and return NULL
7165	 * on an error.
7166	 */
7167	if (setjmp(cstate->top_ctx))
7168		return (NULL);
7169
7170	if (s2)
7171		bpf_error(cstate, "no mask %s supported", s2);
7172
7173	res = pcap_nametoaddrinfo(s1);
7174	if (!res)
7175		bpf_error(cstate, "invalid ip6 address %s", s1);
7176	cstate->ai = res;
7177	if (res->ai_next)
7178		bpf_error(cstate, "%s resolved to multiple address", s1);
7179	addr = &((struct sockaddr_in6 *)res->ai_addr)->sin6_addr;
7180
7181	if (masklen > sizeof(mask.s6_addr) * 8)
7182		bpf_error(cstate, "mask length must be <= %u", (unsigned int)(sizeof(mask.s6_addr) * 8));
7183	memset(&mask, 0, sizeof(mask));
7184	memset(&mask.s6_addr, 0xff, masklen / 8);
7185	if (masklen % 8) {
7186		mask.s6_addr[masklen / 8] =
7187			(0xff << (8 - masklen % 8)) & 0xff;
7188	}
7189
7190	a = (uint32_t *)addr;
7191	m = (uint32_t *)&mask;
7192	if ((a[0] & ~m[0]) || (a[1] & ~m[1])
7193	 || (a[2] & ~m[2]) || (a[3] & ~m[3])) {
7194		bpf_error(cstate, "non-network bits set in \"%s/%d\"", s1, masklen);
7195	}
7196
7197	switch (q.addr) {
7198
7199	case Q_DEFAULT:
7200	case Q_HOST:
7201		if (masklen != 128)
7202			bpf_error(cstate, "Mask syntax for networks only");
7203		/* FALLTHROUGH */
7204
7205	case Q_NET:
7206		b = gen_host6(cstate, addr, &mask, q.proto, q.dir, q.addr);
7207		cstate->ai = NULL;
7208		freeaddrinfo(res);
7209		return b;
7210
7211	default:
7212		bpf_error(cstate, "invalid qualifier against IPv6 address");
7213		/*NOTREACHED*/
7214	}
7215}
7216#endif /*INET6*/
7217
7218struct block *
7219gen_ecode(compiler_state_t *cstate, const char *s, struct qual q)
7220{
7221	struct block *b, *tmp;
7222
7223	/*
7224	 * Catch errors reported by us and routines below us, and return NULL
7225	 * on an error.
7226	 */
7227	if (setjmp(cstate->top_ctx))
7228		return (NULL);
7229
7230	if ((q.addr == Q_HOST || q.addr == Q_DEFAULT) && q.proto == Q_LINK) {
7231		cstate->e = pcap_ether_aton(s);
7232		if (cstate->e == NULL)
7233			bpf_error(cstate, "malloc");
7234		switch (cstate->linktype) {
7235		case DLT_EN10MB:
7236		case DLT_NETANALYZER:
7237		case DLT_NETANALYZER_TRANSPARENT:
7238			tmp = gen_prevlinkhdr_check(cstate);
7239			b = gen_ehostop(cstate, cstate->e, (int)q.dir);
7240			if (tmp != NULL)
7241				gen_and(tmp, b);
7242			break;
7243		case DLT_FDDI:
7244			b = gen_fhostop(cstate, cstate->e, (int)q.dir);
7245			break;
7246		case DLT_IEEE802:
7247			b = gen_thostop(cstate, cstate->e, (int)q.dir);
7248			break;
7249		case DLT_IEEE802_11:
7250		case DLT_PRISM_HEADER:
7251		case DLT_IEEE802_11_RADIO_AVS:
7252		case DLT_IEEE802_11_RADIO:
7253		case DLT_PPI:
7254			b = gen_wlanhostop(cstate, cstate->e, (int)q.dir);
7255			break;
7256		case DLT_IP_OVER_FC:
7257			b = gen_ipfchostop(cstate, cstate->e, (int)q.dir);
7258			break;
7259		default:
7260			free(cstate->e);
7261			cstate->e = NULL;
7262			bpf_error(cstate, "ethernet addresses supported only on ethernet/FDDI/token ring/802.11/ATM LANE/Fibre Channel");
7263			/*NOTREACHED*/
7264		}
7265		free(cstate->e);
7266		cstate->e = NULL;
7267		return (b);
7268	}
7269	bpf_error(cstate, "ethernet address used in non-ether expression");
7270	/*NOTREACHED*/
7271}
7272
7273void
7274sappend(struct slist *s0, struct slist *s1)
7275{
7276	/*
7277	 * This is definitely not the best way to do this, but the
7278	 * lists will rarely get long.
7279	 */
7280	while (s0->next)
7281		s0 = s0->next;
7282	s0->next = s1;
7283}
7284
7285static struct slist *
7286xfer_to_x(compiler_state_t *cstate, struct arth *a)
7287{
7288	struct slist *s;
7289
7290	s = new_stmt(cstate, BPF_LDX|BPF_MEM);
7291	s->s.k = a->regno;
7292	return s;
7293}
7294
7295static struct slist *
7296xfer_to_a(compiler_state_t *cstate, struct arth *a)
7297{
7298	struct slist *s;
7299
7300	s = new_stmt(cstate, BPF_LD|BPF_MEM);
7301	s->s.k = a->regno;
7302	return s;
7303}
7304
7305/*
7306 * Modify "index" to use the value stored into its register as an
7307 * offset relative to the beginning of the header for the protocol
7308 * "proto", and allocate a register and put an item "size" bytes long
7309 * (1, 2, or 4) at that offset into that register, making it the register
7310 * for "index".
7311 */
7312static struct arth *
7313gen_load_internal(compiler_state_t *cstate, int proto, struct arth *inst,
7314    bpf_u_int32 size)
7315{
7316	int size_code;
7317	struct slist *s, *tmp;
7318	struct block *b;
7319	int regno = alloc_reg(cstate);
7320
7321	free_reg(cstate, inst->regno);
7322	switch (size) {
7323
7324	default:
7325		bpf_error(cstate, "data size must be 1, 2, or 4");
7326		/*NOTREACHED*/
7327
7328	case 1:
7329		size_code = BPF_B;
7330		break;
7331
7332	case 2:
7333		size_code = BPF_H;
7334		break;
7335
7336	case 4:
7337		size_code = BPF_W;
7338		break;
7339	}
7340	switch (proto) {
7341	default:
7342		bpf_error(cstate, "unsupported index operation");
7343
7344	case Q_RADIO:
7345		/*
7346		 * The offset is relative to the beginning of the packet
7347		 * data, if we have a radio header.  (If we don't, this
7348		 * is an error.)
7349		 */
7350		if (cstate->linktype != DLT_IEEE802_11_RADIO_AVS &&
7351		    cstate->linktype != DLT_IEEE802_11_RADIO &&
7352		    cstate->linktype != DLT_PRISM_HEADER)
7353			bpf_error(cstate, "radio information not present in capture");
7354
7355		/*
7356		 * Load into the X register the offset computed into the
7357		 * register specified by "index".
7358		 */
7359		s = xfer_to_x(cstate, inst);
7360
7361		/*
7362		 * Load the item at that offset.
7363		 */
7364		tmp = new_stmt(cstate, BPF_LD|BPF_IND|size_code);
7365		sappend(s, tmp);
7366		sappend(inst->s, s);
7367		break;
7368
7369	case Q_LINK:
7370		/*
7371		 * The offset is relative to the beginning of
7372		 * the link-layer header.
7373		 *
7374		 * XXX - what about ATM LANE?  Should the index be
7375		 * relative to the beginning of the AAL5 frame, so
7376		 * that 0 refers to the beginning of the LE Control
7377		 * field, or relative to the beginning of the LAN
7378		 * frame, so that 0 refers, for Ethernet LANE, to
7379		 * the beginning of the destination address?
7380		 */
7381		s = gen_abs_offset_varpart(cstate, &cstate->off_linkhdr);
7382
7383		/*
7384		 * If "s" is non-null, it has code to arrange that the
7385		 * X register contains the length of the prefix preceding
7386		 * the link-layer header.  Add to it the offset computed
7387		 * into the register specified by "index", and move that
7388		 * into the X register.  Otherwise, just load into the X
7389		 * register the offset computed into the register specified
7390		 * by "index".
7391		 */
7392		if (s != NULL) {
7393			sappend(s, xfer_to_a(cstate, inst));
7394			sappend(s, new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_X));
7395			sappend(s, new_stmt(cstate, BPF_MISC|BPF_TAX));
7396		} else
7397			s = xfer_to_x(cstate, inst);
7398
7399		/*
7400		 * Load the item at the sum of the offset we've put in the
7401		 * X register and the offset of the start of the link
7402		 * layer header (which is 0 if the radio header is
7403		 * variable-length; that header length is what we put
7404		 * into the X register and then added to the index).
7405		 */
7406		tmp = new_stmt(cstate, BPF_LD|BPF_IND|size_code);
7407		tmp->s.k = cstate->off_linkhdr.constant_part;
7408		sappend(s, tmp);
7409		sappend(inst->s, s);
7410		break;
7411
7412	case Q_IP:
7413	case Q_ARP:
7414	case Q_RARP:
7415	case Q_ATALK:
7416	case Q_DECNET:
7417	case Q_SCA:
7418	case Q_LAT:
7419	case Q_MOPRC:
7420	case Q_MOPDL:
7421	case Q_IPV6:
7422		/*
7423		 * The offset is relative to the beginning of
7424		 * the network-layer header.
7425		 * XXX - are there any cases where we want
7426		 * cstate->off_nl_nosnap?
7427		 */
7428		s = gen_abs_offset_varpart(cstate, &cstate->off_linkpl);
7429
7430		/*
7431		 * If "s" is non-null, it has code to arrange that the
7432		 * X register contains the variable part of the offset
7433		 * of the link-layer payload.  Add to it the offset
7434		 * computed into the register specified by "index",
7435		 * and move that into the X register.  Otherwise, just
7436		 * load into the X register the offset computed into
7437		 * the register specified by "index".
7438		 */
7439		if (s != NULL) {
7440			sappend(s, xfer_to_a(cstate, inst));
7441			sappend(s, new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_X));
7442			sappend(s, new_stmt(cstate, BPF_MISC|BPF_TAX));
7443		} else
7444			s = xfer_to_x(cstate, inst);
7445
7446		/*
7447		 * Load the item at the sum of the offset we've put in the
7448		 * X register, the offset of the start of the network
7449		 * layer header from the beginning of the link-layer
7450		 * payload, and the constant part of the offset of the
7451		 * start of the link-layer payload.
7452		 */
7453		tmp = new_stmt(cstate, BPF_LD|BPF_IND|size_code);
7454		tmp->s.k = cstate->off_linkpl.constant_part + cstate->off_nl;
7455		sappend(s, tmp);
7456		sappend(inst->s, s);
7457
7458		/*
7459		 * Do the computation only if the packet contains
7460		 * the protocol in question.
7461		 */
7462		b = gen_proto_abbrev_internal(cstate, proto);
7463		if (inst->b)
7464			gen_and(inst->b, b);
7465		inst->b = b;
7466		break;
7467
7468	case Q_SCTP:
7469	case Q_TCP:
7470	case Q_UDP:
7471	case Q_ICMP:
7472	case Q_IGMP:
7473	case Q_IGRP:
7474	case Q_PIM:
7475	case Q_VRRP:
7476	case Q_CARP:
7477		/*
7478		 * The offset is relative to the beginning of
7479		 * the transport-layer header.
7480		 *
7481		 * Load the X register with the length of the IPv4 header
7482		 * (plus the offset of the link-layer header, if it's
7483		 * a variable-length header), in bytes.
7484		 *
7485		 * XXX - are there any cases where we want
7486		 * cstate->off_nl_nosnap?
7487		 * XXX - we should, if we're built with
7488		 * IPv6 support, generate code to load either
7489		 * IPv4, IPv6, or both, as appropriate.
7490		 */
7491		s = gen_loadx_iphdrlen(cstate);
7492
7493		/*
7494		 * The X register now contains the sum of the variable
7495		 * part of the offset of the link-layer payload and the
7496		 * length of the network-layer header.
7497		 *
7498		 * Load into the A register the offset relative to
7499		 * the beginning of the transport layer header,
7500		 * add the X register to that, move that to the
7501		 * X register, and load with an offset from the
7502		 * X register equal to the sum of the constant part of
7503		 * the offset of the link-layer payload and the offset,
7504		 * relative to the beginning of the link-layer payload,
7505		 * of the network-layer header.
7506		 */
7507		sappend(s, xfer_to_a(cstate, inst));
7508		sappend(s, new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_X));
7509		sappend(s, new_stmt(cstate, BPF_MISC|BPF_TAX));
7510		sappend(s, tmp = new_stmt(cstate, BPF_LD|BPF_IND|size_code));
7511		tmp->s.k = cstate->off_linkpl.constant_part + cstate->off_nl;
7512		sappend(inst->s, s);
7513
7514		/*
7515		 * Do the computation only if the packet contains
7516		 * the protocol in question - which is true only
7517		 * if this is an IP datagram and is the first or
7518		 * only fragment of that datagram.
7519		 */
7520		gen_and(gen_proto_abbrev_internal(cstate, proto), b = gen_ipfrag(cstate));
7521		if (inst->b)
7522			gen_and(inst->b, b);
7523		gen_and(gen_proto_abbrev_internal(cstate, Q_IP), b);
7524		inst->b = b;
7525		break;
7526	case Q_ICMPV6:
7527        /*
7528        * Do the computation only if the packet contains
7529        * the protocol in question.
7530        */
7531        b = gen_proto_abbrev_internal(cstate, Q_IPV6);
7532        if (inst->b) {
7533            gen_and(inst->b, b);
7534        }
7535        inst->b = b;
7536
7537        /*
7538        * Check if we have an icmp6 next header
7539        */
7540        b = gen_cmp(cstate, OR_LINKPL, 6, BPF_B, 58);
7541        if (inst->b) {
7542            gen_and(inst->b, b);
7543        }
7544        inst->b = b;
7545
7546
7547        s = gen_abs_offset_varpart(cstate, &cstate->off_linkpl);
7548        /*
7549        * If "s" is non-null, it has code to arrange that the
7550        * X register contains the variable part of the offset
7551        * of the link-layer payload.  Add to it the offset
7552        * computed into the register specified by "index",
7553        * and move that into the X register.  Otherwise, just
7554        * load into the X register the offset computed into
7555        * the register specified by "index".
7556        */
7557        if (s != NULL) {
7558            sappend(s, xfer_to_a(cstate, inst));
7559            sappend(s, new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_X));
7560            sappend(s, new_stmt(cstate, BPF_MISC|BPF_TAX));
7561        } else {
7562            s = xfer_to_x(cstate, inst);
7563        }
7564
7565        /*
7566        * Load the item at the sum of the offset we've put in the
7567        * X register, the offset of the start of the network
7568        * layer header from the beginning of the link-layer
7569        * payload, and the constant part of the offset of the
7570        * start of the link-layer payload.
7571        */
7572        tmp = new_stmt(cstate, BPF_LD|BPF_IND|size_code);
7573        tmp->s.k = cstate->off_linkpl.constant_part + cstate->off_nl + 40;
7574
7575        sappend(s, tmp);
7576        sappend(inst->s, s);
7577
7578        break;
7579	}
7580	inst->regno = regno;
7581	s = new_stmt(cstate, BPF_ST);
7582	s->s.k = regno;
7583	sappend(inst->s, s);
7584
7585	return inst;
7586}
7587
7588struct arth *
7589gen_load(compiler_state_t *cstate, int proto, struct arth *inst,
7590    bpf_u_int32 size)
7591{
7592	/*
7593	 * Catch errors reported by us and routines below us, and return NULL
7594	 * on an error.
7595	 */
7596	if (setjmp(cstate->top_ctx))
7597		return (NULL);
7598
7599	return gen_load_internal(cstate, proto, inst, size);
7600}
7601
7602static struct block *
7603gen_relation_internal(compiler_state_t *cstate, int code, struct arth *a0,
7604    struct arth *a1, int reversed)
7605{
7606	struct slist *s0, *s1, *s2;
7607	struct block *b, *tmp;
7608
7609	s0 = xfer_to_x(cstate, a1);
7610	s1 = xfer_to_a(cstate, a0);
7611	if (code == BPF_JEQ) {
7612		s2 = new_stmt(cstate, BPF_ALU|BPF_SUB|BPF_X);
7613		b = new_block(cstate, JMP(code));
7614		sappend(s1, s2);
7615	}
7616	else
7617		b = new_block(cstate, BPF_JMP|code|BPF_X);
7618	if (reversed)
7619		gen_not(b);
7620
7621	sappend(s0, s1);
7622	sappend(a1->s, s0);
7623	sappend(a0->s, a1->s);
7624
7625	b->stmts = a0->s;
7626
7627	free_reg(cstate, a0->regno);
7628	free_reg(cstate, a1->regno);
7629
7630	/* 'and' together protocol checks */
7631	if (a0->b) {
7632		if (a1->b) {
7633			gen_and(a0->b, tmp = a1->b);
7634		}
7635		else
7636			tmp = a0->b;
7637	} else
7638		tmp = a1->b;
7639
7640	if (tmp)
7641		gen_and(tmp, b);
7642
7643	return b;
7644}
7645
7646struct block *
7647gen_relation(compiler_state_t *cstate, int code, struct arth *a0,
7648    struct arth *a1, int reversed)
7649{
7650	/*
7651	 * Catch errors reported by us and routines below us, and return NULL
7652	 * on an error.
7653	 */
7654	if (setjmp(cstate->top_ctx))
7655		return (NULL);
7656
7657	return gen_relation_internal(cstate, code, a0, a1, reversed);
7658}
7659
7660struct arth *
7661gen_loadlen(compiler_state_t *cstate)
7662{
7663	int regno;
7664	struct arth *a;
7665	struct slist *s;
7666
7667	/*
7668	 * Catch errors reported by us and routines below us, and return NULL
7669	 * on an error.
7670	 */
7671	if (setjmp(cstate->top_ctx))
7672		return (NULL);
7673
7674	regno = alloc_reg(cstate);
7675	a = (struct arth *)newchunk(cstate, sizeof(*a));
7676	s = new_stmt(cstate, BPF_LD|BPF_LEN);
7677	s->next = new_stmt(cstate, BPF_ST);
7678	s->next->s.k = regno;
7679	a->s = s;
7680	a->regno = regno;
7681
7682	return a;
7683}
7684
7685static struct arth *
7686gen_loadi_internal(compiler_state_t *cstate, bpf_u_int32 val)
7687{
7688	struct arth *a;
7689	struct slist *s;
7690	int reg;
7691
7692	a = (struct arth *)newchunk(cstate, sizeof(*a));
7693
7694	reg = alloc_reg(cstate);
7695
7696	s = new_stmt(cstate, BPF_LD|BPF_IMM);
7697	s->s.k = val;
7698	s->next = new_stmt(cstate, BPF_ST);
7699	s->next->s.k = reg;
7700	a->s = s;
7701	a->regno = reg;
7702
7703	return a;
7704}
7705
7706struct arth *
7707gen_loadi(compiler_state_t *cstate, bpf_u_int32 val)
7708{
7709	/*
7710	 * Catch errors reported by us and routines below us, and return NULL
7711	 * on an error.
7712	 */
7713	if (setjmp(cstate->top_ctx))
7714		return (NULL);
7715
7716	return gen_loadi_internal(cstate, val);
7717}
7718
7719/*
7720 * The a_arg dance is to avoid annoying whining by compilers that
7721 * a might be clobbered by longjmp - yeah, it might, but *WHO CARES*?
7722 * It's not *used* after setjmp returns.
7723 */
7724struct arth *
7725gen_neg(compiler_state_t *cstate, struct arth *a_arg)
7726{
7727	struct arth *a = a_arg;
7728	struct slist *s;
7729
7730	/*
7731	 * Catch errors reported by us and routines below us, and return NULL
7732	 * on an error.
7733	 */
7734	if (setjmp(cstate->top_ctx))
7735		return (NULL);
7736
7737	s = xfer_to_a(cstate, a);
7738	sappend(a->s, s);
7739	s = new_stmt(cstate, BPF_ALU|BPF_NEG);
7740	s->s.k = 0;
7741	sappend(a->s, s);
7742	s = new_stmt(cstate, BPF_ST);
7743	s->s.k = a->regno;
7744	sappend(a->s, s);
7745
7746	return a;
7747}
7748
7749/*
7750 * The a0_arg dance is to avoid annoying whining by compilers that
7751 * a0 might be clobbered by longjmp - yeah, it might, but *WHO CARES*?
7752 * It's not *used* after setjmp returns.
7753 */
7754struct arth *
7755gen_arth(compiler_state_t *cstate, int code, struct arth *a0_arg,
7756    struct arth *a1)
7757{
7758	struct arth *a0 = a0_arg;
7759	struct slist *s0, *s1, *s2;
7760
7761	/*
7762	 * Catch errors reported by us and routines below us, and return NULL
7763	 * on an error.
7764	 */
7765	if (setjmp(cstate->top_ctx))
7766		return (NULL);
7767
7768	/*
7769	 * Disallow division by, or modulus by, zero; we do this here
7770	 * so that it gets done even if the optimizer is disabled.
7771	 *
7772	 * Also disallow shifts by a value greater than 31; we do this
7773	 * here, for the same reason.
7774	 */
7775	if (code == BPF_DIV) {
7776		if (a1->s->s.code == (BPF_LD|BPF_IMM) && a1->s->s.k == 0)
7777			bpf_error(cstate, "division by zero");
7778	} else if (code == BPF_MOD) {
7779		if (a1->s->s.code == (BPF_LD|BPF_IMM) && a1->s->s.k == 0)
7780			bpf_error(cstate, "modulus by zero");
7781	} else if (code == BPF_LSH || code == BPF_RSH) {
7782		if (a1->s->s.code == (BPF_LD|BPF_IMM) && a1->s->s.k > 31)
7783			bpf_error(cstate, "shift by more than 31 bits");
7784	}
7785	s0 = xfer_to_x(cstate, a1);
7786	s1 = xfer_to_a(cstate, a0);
7787	s2 = new_stmt(cstate, BPF_ALU|BPF_X|code);
7788
7789	sappend(s1, s2);
7790	sappend(s0, s1);
7791	sappend(a1->s, s0);
7792	sappend(a0->s, a1->s);
7793
7794	free_reg(cstate, a0->regno);
7795	free_reg(cstate, a1->regno);
7796
7797	s0 = new_stmt(cstate, BPF_ST);
7798	a0->regno = s0->s.k = alloc_reg(cstate);
7799	sappend(a0->s, s0);
7800
7801	return a0;
7802}
7803
7804/*
7805 * Initialize the table of used registers and the current register.
7806 */
7807static void
7808init_regs(compiler_state_t *cstate)
7809{
7810	cstate->curreg = 0;
7811	memset(cstate->regused, 0, sizeof cstate->regused);
7812}
7813
7814/*
7815 * Return the next free register.
7816 */
7817static int
7818alloc_reg(compiler_state_t *cstate)
7819{
7820	int n = BPF_MEMWORDS;
7821
7822	while (--n >= 0) {
7823		if (cstate->regused[cstate->curreg])
7824			cstate->curreg = (cstate->curreg + 1) % BPF_MEMWORDS;
7825		else {
7826			cstate->regused[cstate->curreg] = 1;
7827			return cstate->curreg;
7828		}
7829	}
7830	bpf_error(cstate, "too many registers needed to evaluate expression");
7831	/*NOTREACHED*/
7832}
7833
7834/*
7835 * Return a register to the table so it can
7836 * be used later.
7837 */
7838static void
7839free_reg(compiler_state_t *cstate, int n)
7840{
7841	cstate->regused[n] = 0;
7842}
7843
7844static struct block *
7845gen_len(compiler_state_t *cstate, int jmp, int n)
7846{
7847	struct slist *s;
7848	struct block *b;
7849
7850	s = new_stmt(cstate, BPF_LD|BPF_LEN);
7851	b = new_block(cstate, JMP(jmp));
7852	b->stmts = s;
7853	b->s.k = n;
7854
7855	return b;
7856}
7857
7858struct block *
7859gen_greater(compiler_state_t *cstate, int n)
7860{
7861	/*
7862	 * Catch errors reported by us and routines below us, and return NULL
7863	 * on an error.
7864	 */
7865	if (setjmp(cstate->top_ctx))
7866		return (NULL);
7867
7868	return gen_len(cstate, BPF_JGE, n);
7869}
7870
7871/*
7872 * Actually, this is less than or equal.
7873 */
7874struct block *
7875gen_less(compiler_state_t *cstate, int n)
7876{
7877	struct block *b;
7878
7879	/*
7880	 * Catch errors reported by us and routines below us, and return NULL
7881	 * on an error.
7882	 */
7883	if (setjmp(cstate->top_ctx))
7884		return (NULL);
7885
7886	b = gen_len(cstate, BPF_JGT, n);
7887	gen_not(b);
7888
7889	return b;
7890}
7891
7892/*
7893 * This is for "byte {idx} {op} {val}"; "idx" is treated as relative to
7894 * the beginning of the link-layer header.
7895 * XXX - that means you can't test values in the radiotap header, but
7896 * as that header is difficult if not impossible to parse generally
7897 * without a loop, that might not be a severe problem.  A new keyword
7898 * "radio" could be added for that, although what you'd really want
7899 * would be a way of testing particular radio header values, which
7900 * would generate code appropriate to the radio header in question.
7901 */
7902struct block *
7903gen_byteop(compiler_state_t *cstate, int op, int idx, bpf_u_int32 val)
7904{
7905	struct block *b;
7906	struct slist *s;
7907
7908	/*
7909	 * Catch errors reported by us and routines below us, and return NULL
7910	 * on an error.
7911	 */
7912	if (setjmp(cstate->top_ctx))
7913		return (NULL);
7914
7915	switch (op) {
7916	default:
7917		abort();
7918
7919	case '=':
7920		return gen_cmp(cstate, OR_LINKHDR, (u_int)idx, BPF_B, val);
7921
7922	case '<':
7923		b = gen_cmp_lt(cstate, OR_LINKHDR, (u_int)idx, BPF_B, val);
7924		return b;
7925
7926	case '>':
7927		b = gen_cmp_gt(cstate, OR_LINKHDR, (u_int)idx, BPF_B, val);
7928		return b;
7929
7930	case '|':
7931		s = new_stmt(cstate, BPF_ALU|BPF_OR|BPF_K);
7932		break;
7933
7934	case '&':
7935		s = new_stmt(cstate, BPF_ALU|BPF_AND|BPF_K);
7936		break;
7937	}
7938	s->s.k = val;
7939	b = new_block(cstate, JMP(BPF_JEQ));
7940	b->stmts = s;
7941	gen_not(b);
7942
7943	return b;
7944}
7945
7946static const u_char abroadcast[] = { 0x0 };
7947
7948struct block *
7949gen_broadcast(compiler_state_t *cstate, int proto)
7950{
7951	bpf_u_int32 hostmask;
7952	struct block *b0, *b1, *b2;
7953	static const u_char ebroadcast[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
7954
7955	/*
7956	 * Catch errors reported by us and routines below us, and return NULL
7957	 * on an error.
7958	 */
7959	if (setjmp(cstate->top_ctx))
7960		return (NULL);
7961
7962	switch (proto) {
7963
7964	case Q_DEFAULT:
7965	case Q_LINK:
7966		switch (cstate->linktype) {
7967		case DLT_ARCNET:
7968		case DLT_ARCNET_LINUX:
7969			return gen_ahostop(cstate, abroadcast, Q_DST);
7970		case DLT_EN10MB:
7971		case DLT_NETANALYZER:
7972		case DLT_NETANALYZER_TRANSPARENT:
7973			b1 = gen_prevlinkhdr_check(cstate);
7974			b0 = gen_ehostop(cstate, ebroadcast, Q_DST);
7975			if (b1 != NULL)
7976				gen_and(b1, b0);
7977			return b0;
7978		case DLT_FDDI:
7979			return gen_fhostop(cstate, ebroadcast, Q_DST);
7980		case DLT_IEEE802:
7981			return gen_thostop(cstate, ebroadcast, Q_DST);
7982		case DLT_IEEE802_11:
7983		case DLT_PRISM_HEADER:
7984		case DLT_IEEE802_11_RADIO_AVS:
7985		case DLT_IEEE802_11_RADIO:
7986		case DLT_PPI:
7987			return gen_wlanhostop(cstate, ebroadcast, Q_DST);
7988		case DLT_IP_OVER_FC:
7989			return gen_ipfchostop(cstate, ebroadcast, Q_DST);
7990		default:
7991			bpf_error(cstate, "not a broadcast link");
7992		}
7993		/*NOTREACHED*/
7994
7995	case Q_IP:
7996		/*
7997		 * We treat a netmask of PCAP_NETMASK_UNKNOWN (0xffffffff)
7998		 * as an indication that we don't know the netmask, and fail
7999		 * in that case.
8000		 */
8001		if (cstate->netmask == PCAP_NETMASK_UNKNOWN)
8002			bpf_error(cstate, "netmask not known, so 'ip broadcast' not supported");
8003		b0 = gen_linktype(cstate, ETHERTYPE_IP);
8004		hostmask = ~cstate->netmask;
8005		b1 = gen_mcmp(cstate, OR_LINKPL, 16, BPF_W, 0, hostmask);
8006		b2 = gen_mcmp(cstate, OR_LINKPL, 16, BPF_W,
8007			      ~0 & hostmask, hostmask);
8008		gen_or(b1, b2);
8009		gen_and(b0, b2);
8010		return b2;
8011	}
8012	bpf_error(cstate, "only link-layer/IP broadcast filters supported");
8013	/*NOTREACHED*/
8014}
8015
8016/*
8017 * Generate code to test the low-order bit of a MAC address (that's
8018 * the bottom bit of the *first* byte).
8019 */
8020static struct block *
8021gen_mac_multicast(compiler_state_t *cstate, int offset)
8022{
8023	register struct block *b0;
8024	register struct slist *s;
8025
8026	/* link[offset] & 1 != 0 */
8027	s = gen_load_a(cstate, OR_LINKHDR, offset, BPF_B);
8028	b0 = new_block(cstate, JMP(BPF_JSET));
8029	b0->s.k = 1;
8030	b0->stmts = s;
8031	return b0;
8032}
8033
8034struct block *
8035gen_multicast(compiler_state_t *cstate, int proto)
8036{
8037	register struct block *b0, *b1, *b2;
8038	register struct slist *s;
8039
8040	/*
8041	 * Catch errors reported by us and routines below us, and return NULL
8042	 * on an error.
8043	 */
8044	if (setjmp(cstate->top_ctx))
8045		return (NULL);
8046
8047	switch (proto) {
8048
8049	case Q_DEFAULT:
8050	case Q_LINK:
8051		switch (cstate->linktype) {
8052		case DLT_ARCNET:
8053		case DLT_ARCNET_LINUX:
8054			/* all ARCnet multicasts use the same address */
8055			return gen_ahostop(cstate, abroadcast, Q_DST);
8056		case DLT_EN10MB:
8057		case DLT_NETANALYZER:
8058		case DLT_NETANALYZER_TRANSPARENT:
8059			b1 = gen_prevlinkhdr_check(cstate);
8060			/* ether[0] & 1 != 0 */
8061			b0 = gen_mac_multicast(cstate, 0);
8062			if (b1 != NULL)
8063				gen_and(b1, b0);
8064			return b0;
8065		case DLT_FDDI:
8066			/*
8067			 * XXX TEST THIS: MIGHT NOT PORT PROPERLY XXX
8068			 *
8069			 * XXX - was that referring to bit-order issues?
8070			 */
8071			/* fddi[1] & 1 != 0 */
8072			return gen_mac_multicast(cstate, 1);
8073		case DLT_IEEE802:
8074			/* tr[2] & 1 != 0 */
8075			return gen_mac_multicast(cstate, 2);
8076		case DLT_IEEE802_11:
8077		case DLT_PRISM_HEADER:
8078		case DLT_IEEE802_11_RADIO_AVS:
8079		case DLT_IEEE802_11_RADIO:
8080		case DLT_PPI:
8081			/*
8082			 * Oh, yuk.
8083			 *
8084			 *	For control frames, there is no DA.
8085			 *
8086			 *	For management frames, DA is at an
8087			 *	offset of 4 from the beginning of
8088			 *	the packet.
8089			 *
8090			 *	For data frames, DA is at an offset
8091			 *	of 4 from the beginning of the packet
8092			 *	if To DS is clear and at an offset of
8093			 *	16 from the beginning of the packet
8094			 *	if To DS is set.
8095			 */
8096
8097			/*
8098			 * Generate the tests to be done for data frames.
8099			 *
8100			 * First, check for To DS set, i.e. "link[1] & 0x01".
8101			 */
8102			s = gen_load_a(cstate, OR_LINKHDR, 1, BPF_B);
8103			b1 = new_block(cstate, JMP(BPF_JSET));
8104			b1->s.k = 0x01;	/* To DS */
8105			b1->stmts = s;
8106
8107			/*
8108			 * If To DS is set, the DA is at 16.
8109			 */
8110			b0 = gen_mac_multicast(cstate, 16);
8111			gen_and(b1, b0);
8112
8113			/*
8114			 * Now, check for To DS not set, i.e. check
8115			 * "!(link[1] & 0x01)".
8116			 */
8117			s = gen_load_a(cstate, OR_LINKHDR, 1, BPF_B);
8118			b2 = new_block(cstate, JMP(BPF_JSET));
8119			b2->s.k = 0x01;	/* To DS */
8120			b2->stmts = s;
8121			gen_not(b2);
8122
8123			/*
8124			 * If To DS is not set, the DA is at 4.
8125			 */
8126			b1 = gen_mac_multicast(cstate, 4);
8127			gen_and(b2, b1);
8128
8129			/*
8130			 * Now OR together the last two checks.  That gives
8131			 * the complete set of checks for data frames.
8132			 */
8133			gen_or(b1, b0);
8134
8135			/*
8136			 * Now check for a data frame.
8137			 * I.e, check "link[0] & 0x08".
8138			 */
8139			s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
8140			b1 = new_block(cstate, JMP(BPF_JSET));
8141			b1->s.k = 0x08;
8142			b1->stmts = s;
8143
8144			/*
8145			 * AND that with the checks done for data frames.
8146			 */
8147			gen_and(b1, b0);
8148
8149			/*
8150			 * If the high-order bit of the type value is 0, this
8151			 * is a management frame.
8152			 * I.e, check "!(link[0] & 0x08)".
8153			 */
8154			s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
8155			b2 = new_block(cstate, JMP(BPF_JSET));
8156			b2->s.k = 0x08;
8157			b2->stmts = s;
8158			gen_not(b2);
8159
8160			/*
8161			 * For management frames, the DA is at 4.
8162			 */
8163			b1 = gen_mac_multicast(cstate, 4);
8164			gen_and(b2, b1);
8165
8166			/*
8167			 * OR that with the checks done for data frames.
8168			 * That gives the checks done for management and
8169			 * data frames.
8170			 */
8171			gen_or(b1, b0);
8172
8173			/*
8174			 * If the low-order bit of the type value is 1,
8175			 * this is either a control frame or a frame
8176			 * with a reserved type, and thus not a
8177			 * frame with an SA.
8178			 *
8179			 * I.e., check "!(link[0] & 0x04)".
8180			 */
8181			s = gen_load_a(cstate, OR_LINKHDR, 0, BPF_B);
8182			b1 = new_block(cstate, JMP(BPF_JSET));
8183			b1->s.k = 0x04;
8184			b1->stmts = s;
8185			gen_not(b1);
8186
8187			/*
8188			 * AND that with the checks for data and management
8189			 * frames.
8190			 */
8191			gen_and(b1, b0);
8192			return b0;
8193		case DLT_IP_OVER_FC:
8194			b0 = gen_mac_multicast(cstate, 2);
8195			return b0;
8196		default:
8197			break;
8198		}
8199		/* Link not known to support multicasts */
8200		break;
8201
8202	case Q_IP:
8203		b0 = gen_linktype(cstate, ETHERTYPE_IP);
8204		b1 = gen_cmp_ge(cstate, OR_LINKPL, 16, BPF_B, 224);
8205		gen_and(b0, b1);
8206		return b1;
8207
8208	case Q_IPV6:
8209		b0 = gen_linktype(cstate, ETHERTYPE_IPV6);
8210		b1 = gen_cmp(cstate, OR_LINKPL, 24, BPF_B, 255);
8211		gen_and(b0, b1);
8212		return b1;
8213	}
8214	bpf_error(cstate, "link-layer multicast filters supported only on ethernet/FDDI/token ring/ARCNET/802.11/ATM LANE/Fibre Channel");
8215	/*NOTREACHED*/
8216}
8217
8218struct block *
8219gen_ifindex(compiler_state_t *cstate, int ifindex)
8220{
8221	register struct block *b0;
8222
8223	/*
8224	 * Catch errors reported by us and routines below us, and return NULL
8225	 * on an error.
8226	 */
8227	if (setjmp(cstate->top_ctx))
8228		return (NULL);
8229
8230	/*
8231	 * Only some data link types support ifindex qualifiers.
8232	 */
8233	switch (cstate->linktype) {
8234	case DLT_LINUX_SLL2:
8235		/* match packets on this interface */
8236		b0 = gen_cmp(cstate, OR_LINKHDR, 4, BPF_W, ifindex);
8237		break;
8238        default:
8239#if defined(linux)
8240		/*
8241		 * This is Linux; we require PF_PACKET support.
8242		 * If this is a *live* capture, we can look at
8243		 * special meta-data in the filter expression;
8244		 * if it's a savefile, we can't.
8245		 */
8246		if (cstate->bpf_pcap->rfile != NULL) {
8247			/* We have a FILE *, so this is a savefile */
8248			bpf_error(cstate, "ifindex not supported on %s when reading savefiles",
8249			    pcap_datalink_val_to_description_or_dlt(cstate->linktype));
8250			b0 = NULL;
8251			/*NOTREACHED*/
8252		}
8253		/* match ifindex */
8254		b0 = gen_cmp(cstate, OR_LINKHDR, SKF_AD_OFF + SKF_AD_IFINDEX, BPF_W,
8255		             ifindex);
8256#else /* defined(linux) */
8257		bpf_error(cstate, "ifindex not supported on %s",
8258		    pcap_datalink_val_to_description_or_dlt(cstate->linktype));
8259		/*NOTREACHED*/
8260#endif /* defined(linux) */
8261	}
8262	return (b0);
8263}
8264
8265/*
8266 * Filter on inbound (dir == 0) or outbound (dir == 1) traffic.
8267 * Outbound traffic is sent by this machine, while inbound traffic is
8268 * sent by a remote machine (and may include packets destined for a
8269 * unicast or multicast link-layer address we are not subscribing to).
8270 * These are the same definitions implemented by pcap_setdirection().
8271 * Capturing only unicast traffic destined for this host is probably
8272 * better accomplished using a higher-layer filter.
8273 */
8274struct block *
8275gen_inbound(compiler_state_t *cstate, int dir)
8276{
8277	register struct block *b0;
8278
8279	/*
8280	 * Catch errors reported by us and routines below us, and return NULL
8281	 * on an error.
8282	 */
8283	if (setjmp(cstate->top_ctx))
8284		return (NULL);
8285
8286	/*
8287	 * Only some data link types support inbound/outbound qualifiers.
8288	 */
8289	switch (cstate->linktype) {
8290	case DLT_SLIP:
8291		b0 = gen_relation_internal(cstate, BPF_JEQ,
8292			  gen_load_internal(cstate, Q_LINK, gen_loadi_internal(cstate, 0), 1),
8293			  gen_loadi_internal(cstate, 0),
8294			  dir);
8295		break;
8296
8297	case DLT_IPNET:
8298		if (dir) {
8299			/* match outgoing packets */
8300			b0 = gen_cmp(cstate, OR_LINKHDR, 2, BPF_H, IPNET_OUTBOUND);
8301		} else {
8302			/* match incoming packets */
8303			b0 = gen_cmp(cstate, OR_LINKHDR, 2, BPF_H, IPNET_INBOUND);
8304		}
8305		break;
8306
8307	case DLT_LINUX_SLL:
8308		/* match outgoing packets */
8309		b0 = gen_cmp(cstate, OR_LINKHDR, 0, BPF_H, LINUX_SLL_OUTGOING);
8310		if (!dir) {
8311			/* to filter on inbound traffic, invert the match */
8312			gen_not(b0);
8313		}
8314		break;
8315
8316	case DLT_LINUX_SLL2:
8317		/* match outgoing packets */
8318		b0 = gen_cmp(cstate, OR_LINKHDR, 10, BPF_B, LINUX_SLL_OUTGOING);
8319		if (!dir) {
8320			/* to filter on inbound traffic, invert the match */
8321			gen_not(b0);
8322		}
8323		break;
8324
8325	case DLT_PFLOG:
8326		b0 = gen_cmp(cstate, OR_LINKHDR, offsetof(struct pfloghdr, dir), BPF_B,
8327		    ((dir == 0) ? PF_IN : PF_OUT));
8328		break;
8329
8330	case DLT_PPP_PPPD:
8331		if (dir) {
8332			/* match outgoing packets */
8333			b0 = gen_cmp(cstate, OR_LINKHDR, 0, BPF_B, PPP_PPPD_OUT);
8334		} else {
8335			/* match incoming packets */
8336			b0 = gen_cmp(cstate, OR_LINKHDR, 0, BPF_B, PPP_PPPD_IN);
8337		}
8338		break;
8339
8340        case DLT_JUNIPER_MFR:
8341        case DLT_JUNIPER_MLFR:
8342        case DLT_JUNIPER_MLPPP:
8343	case DLT_JUNIPER_ATM1:
8344	case DLT_JUNIPER_ATM2:
8345	case DLT_JUNIPER_PPPOE:
8346	case DLT_JUNIPER_PPPOE_ATM:
8347        case DLT_JUNIPER_GGSN:
8348        case DLT_JUNIPER_ES:
8349        case DLT_JUNIPER_MONITOR:
8350        case DLT_JUNIPER_SERVICES:
8351        case DLT_JUNIPER_ETHER:
8352        case DLT_JUNIPER_PPP:
8353        case DLT_JUNIPER_FRELAY:
8354        case DLT_JUNIPER_CHDLC:
8355        case DLT_JUNIPER_VP:
8356        case DLT_JUNIPER_ST:
8357        case DLT_JUNIPER_ISM:
8358        case DLT_JUNIPER_VS:
8359        case DLT_JUNIPER_SRX_E2E:
8360        case DLT_JUNIPER_FIBRECHANNEL:
8361	case DLT_JUNIPER_ATM_CEMIC:
8362
8363		/* juniper flags (including direction) are stored
8364		 * the byte after the 3-byte magic number */
8365		if (dir) {
8366			/* match outgoing packets */
8367			b0 = gen_mcmp(cstate, OR_LINKHDR, 3, BPF_B, 0, 0x01);
8368		} else {
8369			/* match incoming packets */
8370			b0 = gen_mcmp(cstate, OR_LINKHDR, 3, BPF_B, 1, 0x01);
8371		}
8372		break;
8373
8374	default:
8375		/*
8376		 * If we have packet meta-data indicating a direction,
8377		 * and that metadata can be checked by BPF code, check
8378		 * it.  Otherwise, give up, as this link-layer type has
8379		 * nothing in the packet data.
8380		 *
8381		 * Currently, the only platform where a BPF filter can
8382		 * check that metadata is Linux with the in-kernel
8383		 * BPF interpreter.  If other packet capture mechanisms
8384		 * and BPF filters also supported this, it would be
8385		 * nice.  It would be even better if they made that
8386		 * metadata available so that we could provide it
8387		 * with newer capture APIs, allowing it to be saved
8388		 * in pcapng files.
8389		 */
8390#if defined(linux)
8391		/*
8392		 * This is Linux; we require PF_PACKET support.
8393		 * If this is a *live* capture, we can look at
8394		 * special meta-data in the filter expression;
8395		 * if it's a savefile, we can't.
8396		 */
8397		if (cstate->bpf_pcap->rfile != NULL) {
8398			/* We have a FILE *, so this is a savefile */
8399			bpf_error(cstate, "inbound/outbound not supported on %s when reading savefiles",
8400			    pcap_datalink_val_to_description_or_dlt(cstate->linktype));
8401			/*NOTREACHED*/
8402		}
8403		/* match outgoing packets */
8404		b0 = gen_cmp(cstate, OR_LINKHDR, SKF_AD_OFF + SKF_AD_PKTTYPE, BPF_H,
8405		             PACKET_OUTGOING);
8406		if (!dir) {
8407			/* to filter on inbound traffic, invert the match */
8408			gen_not(b0);
8409		}
8410#else /* defined(linux) */
8411		bpf_error(cstate, "inbound/outbound not supported on %s",
8412		    pcap_datalink_val_to_description_or_dlt(cstate->linktype));
8413		/*NOTREACHED*/
8414#endif /* defined(linux) */
8415	}
8416	return (b0);
8417}
8418
8419/* PF firewall log matched interface */
8420struct block *
8421gen_pf_ifname(compiler_state_t *cstate, const char *ifname)
8422{
8423	struct block *b0;
8424	u_int len, off;
8425
8426	/*
8427	 * Catch errors reported by us and routines below us, and return NULL
8428	 * on an error.
8429	 */
8430	if (setjmp(cstate->top_ctx))
8431		return (NULL);
8432
8433	if (cstate->linktype != DLT_PFLOG) {
8434		bpf_error(cstate, "ifname supported only on PF linktype");
8435		/*NOTREACHED*/
8436	}
8437	len = sizeof(((struct pfloghdr *)0)->ifname);
8438	off = offsetof(struct pfloghdr, ifname);
8439	if (strlen(ifname) >= len) {
8440		bpf_error(cstate, "ifname interface names can only be %d characters",
8441		    len-1);
8442		/*NOTREACHED*/
8443	}
8444	b0 = gen_bcmp(cstate, OR_LINKHDR, off, (u_int)strlen(ifname),
8445	    (const u_char *)ifname);
8446	return (b0);
8447}
8448
8449/* PF firewall log ruleset name */
8450struct block *
8451gen_pf_ruleset(compiler_state_t *cstate, char *ruleset)
8452{
8453	struct block *b0;
8454
8455	/*
8456	 * Catch errors reported by us and routines below us, and return NULL
8457	 * on an error.
8458	 */
8459	if (setjmp(cstate->top_ctx))
8460		return (NULL);
8461
8462	if (cstate->linktype != DLT_PFLOG) {
8463		bpf_error(cstate, "ruleset supported only on PF linktype");
8464		/*NOTREACHED*/
8465	}
8466
8467	if (strlen(ruleset) >= sizeof(((struct pfloghdr *)0)->ruleset)) {
8468		bpf_error(cstate, "ruleset names can only be %ld characters",
8469		    (long)(sizeof(((struct pfloghdr *)0)->ruleset) - 1));
8470		/*NOTREACHED*/
8471	}
8472
8473	b0 = gen_bcmp(cstate, OR_LINKHDR, offsetof(struct pfloghdr, ruleset),
8474	    (u_int)strlen(ruleset), (const u_char *)ruleset);
8475	return (b0);
8476}
8477
8478/* PF firewall log rule number */
8479struct block *
8480gen_pf_rnr(compiler_state_t *cstate, int rnr)
8481{
8482	struct block *b0;
8483
8484	/*
8485	 * Catch errors reported by us and routines below us, and return NULL
8486	 * on an error.
8487	 */
8488	if (setjmp(cstate->top_ctx))
8489		return (NULL);
8490
8491	if (cstate->linktype != DLT_PFLOG) {
8492		bpf_error(cstate, "rnr supported only on PF linktype");
8493		/*NOTREACHED*/
8494	}
8495
8496	b0 = gen_cmp(cstate, OR_LINKHDR, offsetof(struct pfloghdr, rulenr), BPF_W,
8497		 (bpf_u_int32)rnr);
8498	return (b0);
8499}
8500
8501/* PF firewall log sub-rule number */
8502struct block *
8503gen_pf_srnr(compiler_state_t *cstate, int srnr)
8504{
8505	struct block *b0;
8506
8507	/*
8508	 * Catch errors reported by us and routines below us, and return NULL
8509	 * on an error.
8510	 */
8511	if (setjmp(cstate->top_ctx))
8512		return (NULL);
8513
8514	if (cstate->linktype != DLT_PFLOG) {
8515		bpf_error(cstate, "srnr supported only on PF linktype");
8516		/*NOTREACHED*/
8517	}
8518
8519	b0 = gen_cmp(cstate, OR_LINKHDR, offsetof(struct pfloghdr, subrulenr), BPF_W,
8520	    (bpf_u_int32)srnr);
8521	return (b0);
8522}
8523
8524/* PF firewall log reason code */
8525struct block *
8526gen_pf_reason(compiler_state_t *cstate, int reason)
8527{
8528	struct block *b0;
8529
8530	/*
8531	 * Catch errors reported by us and routines below us, and return NULL
8532	 * on an error.
8533	 */
8534	if (setjmp(cstate->top_ctx))
8535		return (NULL);
8536
8537	if (cstate->linktype != DLT_PFLOG) {
8538		bpf_error(cstate, "reason supported only on PF linktype");
8539		/*NOTREACHED*/
8540	}
8541
8542	b0 = gen_cmp(cstate, OR_LINKHDR, offsetof(struct pfloghdr, reason), BPF_B,
8543	    (bpf_u_int32)reason);
8544	return (b0);
8545}
8546
8547/* PF firewall log action */
8548struct block *
8549gen_pf_action(compiler_state_t *cstate, int action)
8550{
8551	struct block *b0;
8552
8553	/*
8554	 * Catch errors reported by us and routines below us, and return NULL
8555	 * on an error.
8556	 */
8557	if (setjmp(cstate->top_ctx))
8558		return (NULL);
8559
8560	if (cstate->linktype != DLT_PFLOG) {
8561		bpf_error(cstate, "action supported only on PF linktype");
8562		/*NOTREACHED*/
8563	}
8564
8565	b0 = gen_cmp(cstate, OR_LINKHDR, offsetof(struct pfloghdr, action), BPF_B,
8566	    (bpf_u_int32)action);
8567	return (b0);
8568}
8569
8570/* IEEE 802.11 wireless header */
8571struct block *
8572gen_p80211_type(compiler_state_t *cstate, bpf_u_int32 type, bpf_u_int32 mask)
8573{
8574	struct block *b0;
8575
8576	/*
8577	 * Catch errors reported by us and routines below us, and return NULL
8578	 * on an error.
8579	 */
8580	if (setjmp(cstate->top_ctx))
8581		return (NULL);
8582
8583	switch (cstate->linktype) {
8584
8585	case DLT_IEEE802_11:
8586	case DLT_PRISM_HEADER:
8587	case DLT_IEEE802_11_RADIO_AVS:
8588	case DLT_IEEE802_11_RADIO:
8589		b0 = gen_mcmp(cstate, OR_LINKHDR, 0, BPF_B, type, mask);
8590		break;
8591
8592	default:
8593		bpf_error(cstate, "802.11 link-layer types supported only on 802.11");
8594		/*NOTREACHED*/
8595	}
8596
8597	return (b0);
8598}
8599
8600struct block *
8601gen_p80211_fcdir(compiler_state_t *cstate, bpf_u_int32 fcdir)
8602{
8603	struct block *b0;
8604
8605	/*
8606	 * Catch errors reported by us and routines below us, and return NULL
8607	 * on an error.
8608	 */
8609	if (setjmp(cstate->top_ctx))
8610		return (NULL);
8611
8612	switch (cstate->linktype) {
8613
8614	case DLT_IEEE802_11:
8615	case DLT_PRISM_HEADER:
8616	case DLT_IEEE802_11_RADIO_AVS:
8617	case DLT_IEEE802_11_RADIO:
8618		break;
8619
8620	default:
8621		bpf_error(cstate, "frame direction supported only with 802.11 headers");
8622		/*NOTREACHED*/
8623	}
8624
8625	b0 = gen_mcmp(cstate, OR_LINKHDR, 1, BPF_B, fcdir,
8626	    IEEE80211_FC1_DIR_MASK);
8627
8628	return (b0);
8629}
8630
8631struct block *
8632gen_acode(compiler_state_t *cstate, const char *s, struct qual q)
8633{
8634	struct block *b;
8635
8636	/*
8637	 * Catch errors reported by us and routines below us, and return NULL
8638	 * on an error.
8639	 */
8640	if (setjmp(cstate->top_ctx))
8641		return (NULL);
8642
8643	switch (cstate->linktype) {
8644
8645	case DLT_ARCNET:
8646	case DLT_ARCNET_LINUX:
8647		if ((q.addr == Q_HOST || q.addr == Q_DEFAULT) &&
8648		    q.proto == Q_LINK) {
8649			cstate->e = pcap_ether_aton(s);
8650			if (cstate->e == NULL)
8651				bpf_error(cstate, "malloc");
8652			b = gen_ahostop(cstate, cstate->e, (int)q.dir);
8653			free(cstate->e);
8654			cstate->e = NULL;
8655			return (b);
8656		} else
8657			bpf_error(cstate, "ARCnet address used in non-arc expression");
8658		/*NOTREACHED*/
8659
8660	default:
8661		bpf_error(cstate, "aid supported only on ARCnet");
8662		/*NOTREACHED*/
8663	}
8664}
8665
8666static struct block *
8667gen_ahostop(compiler_state_t *cstate, const u_char *eaddr, int dir)
8668{
8669	register struct block *b0, *b1;
8670
8671	switch (dir) {
8672	/* src comes first, different from Ethernet */
8673	case Q_SRC:
8674		return gen_bcmp(cstate, OR_LINKHDR, 0, 1, eaddr);
8675
8676	case Q_DST:
8677		return gen_bcmp(cstate, OR_LINKHDR, 1, 1, eaddr);
8678
8679	case Q_AND:
8680		b0 = gen_ahostop(cstate, eaddr, Q_SRC);
8681		b1 = gen_ahostop(cstate, eaddr, Q_DST);
8682		gen_and(b0, b1);
8683		return b1;
8684
8685	case Q_DEFAULT:
8686	case Q_OR:
8687		b0 = gen_ahostop(cstate, eaddr, Q_SRC);
8688		b1 = gen_ahostop(cstate, eaddr, Q_DST);
8689		gen_or(b0, b1);
8690		return b1;
8691
8692	case Q_ADDR1:
8693		bpf_error(cstate, "'addr1' and 'address1' are only supported on 802.11");
8694		/*NOTREACHED*/
8695
8696	case Q_ADDR2:
8697		bpf_error(cstate, "'addr2' and 'address2' are only supported on 802.11");
8698		/*NOTREACHED*/
8699
8700	case Q_ADDR3:
8701		bpf_error(cstate, "'addr3' and 'address3' are only supported on 802.11");
8702		/*NOTREACHED*/
8703
8704	case Q_ADDR4:
8705		bpf_error(cstate, "'addr4' and 'address4' are only supported on 802.11");
8706		/*NOTREACHED*/
8707
8708	case Q_RA:
8709		bpf_error(cstate, "'ra' is only supported on 802.11");
8710		/*NOTREACHED*/
8711
8712	case Q_TA:
8713		bpf_error(cstate, "'ta' is only supported on 802.11");
8714		/*NOTREACHED*/
8715	}
8716	abort();
8717	/*NOTREACHED*/
8718}
8719
8720static struct block *
8721gen_vlan_tpid_test(compiler_state_t *cstate)
8722{
8723	struct block *b0, *b1;
8724
8725	/* check for VLAN, including 802.1ad and QinQ */
8726	b0 = gen_linktype(cstate, ETHERTYPE_8021Q);
8727	b1 = gen_linktype(cstate, ETHERTYPE_8021AD);
8728	gen_or(b0,b1);
8729	b0 = b1;
8730	b1 = gen_linktype(cstate, ETHERTYPE_8021QINQ);
8731	gen_or(b0,b1);
8732
8733	return b1;
8734}
8735
8736static struct block *
8737gen_vlan_vid_test(compiler_state_t *cstate, bpf_u_int32 vlan_num)
8738{
8739	if (vlan_num > 0x0fff) {
8740		bpf_error(cstate, "VLAN tag %u greater than maximum %u",
8741		    vlan_num, 0x0fff);
8742	}
8743	return gen_mcmp(cstate, OR_LINKPL, 0, BPF_H, vlan_num, 0x0fff);
8744}
8745
8746static struct block *
8747gen_vlan_no_bpf_extensions(compiler_state_t *cstate, bpf_u_int32 vlan_num,
8748    int has_vlan_tag)
8749{
8750	struct block *b0, *b1;
8751
8752	b0 = gen_vlan_tpid_test(cstate);
8753
8754	if (has_vlan_tag) {
8755		b1 = gen_vlan_vid_test(cstate, vlan_num);
8756		gen_and(b0, b1);
8757		b0 = b1;
8758	}
8759
8760	/*
8761	 * Both payload and link header type follow the VLAN tags so that
8762	 * both need to be updated.
8763	 */
8764	cstate->off_linkpl.constant_part += 4;
8765	cstate->off_linktype.constant_part += 4;
8766
8767	return b0;
8768}
8769
8770#if defined(SKF_AD_VLAN_TAG_PRESENT)
8771/* add v to variable part of off */
8772static void
8773gen_vlan_vloffset_add(compiler_state_t *cstate, bpf_abs_offset *off,
8774    bpf_u_int32 v, struct slist *s)
8775{
8776	struct slist *s2;
8777
8778	if (!off->is_variable)
8779		off->is_variable = 1;
8780	if (off->reg == -1)
8781		off->reg = alloc_reg(cstate);
8782
8783	s2 = new_stmt(cstate, BPF_LD|BPF_MEM);
8784	s2->s.k = off->reg;
8785	sappend(s, s2);
8786	s2 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_IMM);
8787	s2->s.k = v;
8788	sappend(s, s2);
8789	s2 = new_stmt(cstate, BPF_ST);
8790	s2->s.k = off->reg;
8791	sappend(s, s2);
8792}
8793
8794/*
8795 * patch block b_tpid (VLAN TPID test) to update variable parts of link payload
8796 * and link type offsets first
8797 */
8798static void
8799gen_vlan_patch_tpid_test(compiler_state_t *cstate, struct block *b_tpid)
8800{
8801	struct slist s;
8802
8803	/* offset determined at run time, shift variable part */
8804	s.next = NULL;
8805	cstate->is_vlan_vloffset = 1;
8806	gen_vlan_vloffset_add(cstate, &cstate->off_linkpl, 4, &s);
8807	gen_vlan_vloffset_add(cstate, &cstate->off_linktype, 4, &s);
8808
8809	/* we get a pointer to a chain of or-ed blocks, patch first of them */
8810	sappend(s.next, b_tpid->head->stmts);
8811	b_tpid->head->stmts = s.next;
8812}
8813
8814/*
8815 * patch block b_vid (VLAN id test) to load VID value either from packet
8816 * metadata (using BPF extensions) if SKF_AD_VLAN_TAG_PRESENT is true
8817 */
8818static void
8819gen_vlan_patch_vid_test(compiler_state_t *cstate, struct block *b_vid)
8820{
8821	struct slist *s, *s2, *sjeq;
8822	unsigned cnt;
8823
8824	s = new_stmt(cstate, BPF_LD|BPF_B|BPF_ABS);
8825	s->s.k = SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT;
8826
8827	/* true -> next instructions, false -> beginning of b_vid */
8828	sjeq = new_stmt(cstate, JMP(BPF_JEQ));
8829	sjeq->s.k = 1;
8830	sjeq->s.jf = b_vid->stmts;
8831	sappend(s, sjeq);
8832
8833	s2 = new_stmt(cstate, BPF_LD|BPF_B|BPF_ABS);
8834	s2->s.k = SKF_AD_OFF + SKF_AD_VLAN_TAG;
8835	sappend(s, s2);
8836	sjeq->s.jt = s2;
8837
8838	/* Jump to the test in b_vid. We need to jump one instruction before
8839	 * the end of the b_vid block so that we only skip loading the TCI
8840	 * from packet data and not the 'and' instruction extractging VID.
8841	 */
8842	cnt = 0;
8843	for (s2 = b_vid->stmts; s2; s2 = s2->next)
8844		cnt++;
8845	s2 = new_stmt(cstate, JMP(BPF_JA));
8846	s2->s.k = cnt - 1;
8847	sappend(s, s2);
8848
8849	/* insert our statements at the beginning of b_vid */
8850	sappend(s, b_vid->stmts);
8851	b_vid->stmts = s;
8852}
8853
8854/*
8855 * Generate check for "vlan" or "vlan <id>" on systems with support for BPF
8856 * extensions.  Even if kernel supports VLAN BPF extensions, (outermost) VLAN
8857 * tag can be either in metadata or in packet data; therefore if the
8858 * SKF_AD_VLAN_TAG_PRESENT test is negative, we need to check link
8859 * header for VLAN tag. As the decision is done at run time, we need
8860 * update variable part of the offsets
8861 */
8862static struct block *
8863gen_vlan_bpf_extensions(compiler_state_t *cstate, bpf_u_int32 vlan_num,
8864    int has_vlan_tag)
8865{
8866        struct block *b0, *b_tpid, *b_vid = NULL;
8867        struct slist *s;
8868
8869        /* generate new filter code based on extracting packet
8870         * metadata */
8871        s = new_stmt(cstate, BPF_LD|BPF_B|BPF_ABS);
8872        s->s.k = SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT;
8873
8874        b0 = new_block(cstate, JMP(BPF_JEQ));
8875        b0->stmts = s;
8876        b0->s.k = 1;
8877
8878	/*
8879	 * This is tricky. We need to insert the statements updating variable
8880	 * parts of offsets before the traditional TPID and VID tests so
8881	 * that they are called whenever SKF_AD_VLAN_TAG_PRESENT fails but
8882	 * we do not want this update to affect those checks. That's why we
8883	 * generate both test blocks first and insert the statements updating
8884	 * variable parts of both offsets after that. This wouldn't work if
8885	 * there already were variable length link header when entering this
8886	 * function but gen_vlan_bpf_extensions() isn't called in that case.
8887	 */
8888	b_tpid = gen_vlan_tpid_test(cstate);
8889	if (has_vlan_tag)
8890		b_vid = gen_vlan_vid_test(cstate, vlan_num);
8891
8892	gen_vlan_patch_tpid_test(cstate, b_tpid);
8893	gen_or(b0, b_tpid);
8894	b0 = b_tpid;
8895
8896	if (has_vlan_tag) {
8897		gen_vlan_patch_vid_test(cstate, b_vid);
8898		gen_and(b0, b_vid);
8899		b0 = b_vid;
8900	}
8901
8902        return b0;
8903}
8904#endif
8905
8906/*
8907 * support IEEE 802.1Q VLAN trunk over ethernet
8908 */
8909struct block *
8910gen_vlan(compiler_state_t *cstate, bpf_u_int32 vlan_num, int has_vlan_tag)
8911{
8912	struct	block	*b0;
8913
8914	/*
8915	 * Catch errors reported by us and routines below us, and return NULL
8916	 * on an error.
8917	 */
8918	if (setjmp(cstate->top_ctx))
8919		return (NULL);
8920
8921	/* can't check for VLAN-encapsulated packets inside MPLS */
8922	if (cstate->label_stack_depth > 0)
8923		bpf_error(cstate, "no VLAN match after MPLS");
8924
8925	/*
8926	 * Check for a VLAN packet, and then change the offsets to point
8927	 * to the type and data fields within the VLAN packet.  Just
8928	 * increment the offsets, so that we can support a hierarchy, e.g.
8929	 * "vlan 300 && vlan 200" to capture VLAN 200 encapsulated within
8930	 * VLAN 100.
8931	 *
8932	 * XXX - this is a bit of a kludge.  If we were to split the
8933	 * compiler into a parser that parses an expression and
8934	 * generates an expression tree, and a code generator that
8935	 * takes an expression tree (which could come from our
8936	 * parser or from some other parser) and generates BPF code,
8937	 * we could perhaps make the offsets parameters of routines
8938	 * and, in the handler for an "AND" node, pass to subnodes
8939	 * other than the VLAN node the adjusted offsets.
8940	 *
8941	 * This would mean that "vlan" would, instead of changing the
8942	 * behavior of *all* tests after it, change only the behavior
8943	 * of tests ANDed with it.  That would change the documented
8944	 * semantics of "vlan", which might break some expressions.
8945	 * However, it would mean that "(vlan and ip) or ip" would check
8946	 * both for VLAN-encapsulated IP and IP-over-Ethernet, rather than
8947	 * checking only for VLAN-encapsulated IP, so that could still
8948	 * be considered worth doing; it wouldn't break expressions
8949	 * that are of the form "vlan and ..." or "vlan N and ...",
8950	 * which I suspect are the most common expressions involving
8951	 * "vlan".  "vlan or ..." doesn't necessarily do what the user
8952	 * would really want, now, as all the "or ..." tests would
8953	 * be done assuming a VLAN, even though the "or" could be viewed
8954	 * as meaning "or, if this isn't a VLAN packet...".
8955	 */
8956	switch (cstate->linktype) {
8957
8958	case DLT_EN10MB:
8959	case DLT_NETANALYZER:
8960	case DLT_NETANALYZER_TRANSPARENT:
8961#if defined(SKF_AD_VLAN_TAG_PRESENT)
8962		/* Verify that this is the outer part of the packet and
8963		 * not encapsulated somehow. */
8964		if (cstate->vlan_stack_depth == 0 && !cstate->off_linkhdr.is_variable &&
8965		    cstate->off_linkhdr.constant_part ==
8966		    cstate->off_outermostlinkhdr.constant_part) {
8967			/*
8968			 * Do we need special VLAN handling?
8969			 */
8970			if (cstate->bpf_pcap->bpf_codegen_flags & BPF_SPECIAL_VLAN_HANDLING)
8971				b0 = gen_vlan_bpf_extensions(cstate, vlan_num,
8972				    has_vlan_tag);
8973			else
8974				b0 = gen_vlan_no_bpf_extensions(cstate,
8975				    vlan_num, has_vlan_tag);
8976		} else
8977#endif
8978			b0 = gen_vlan_no_bpf_extensions(cstate, vlan_num,
8979			    has_vlan_tag);
8980                break;
8981
8982	case DLT_IEEE802_11:
8983	case DLT_PRISM_HEADER:
8984	case DLT_IEEE802_11_RADIO_AVS:
8985	case DLT_IEEE802_11_RADIO:
8986		b0 = gen_vlan_no_bpf_extensions(cstate, vlan_num, has_vlan_tag);
8987		break;
8988
8989	default:
8990		bpf_error(cstate, "no VLAN support for %s",
8991		      pcap_datalink_val_to_description_or_dlt(cstate->linktype));
8992		/*NOTREACHED*/
8993	}
8994
8995        cstate->vlan_stack_depth++;
8996
8997	return (b0);
8998}
8999
9000/*
9001 * support for MPLS
9002 *
9003 * The label_num_arg dance is to avoid annoying whining by compilers that
9004 * label_num might be clobbered by longjmp - yeah, it might, but *WHO CARES*?
9005 * It's not *used* after setjmp returns.
9006 */
9007struct block *
9008gen_mpls(compiler_state_t *cstate, bpf_u_int32 label_num_arg,
9009    int has_label_num)
9010{
9011	volatile bpf_u_int32 label_num = label_num_arg;
9012	struct	block	*b0, *b1;
9013
9014	/*
9015	 * Catch errors reported by us and routines below us, and return NULL
9016	 * on an error.
9017	 */
9018	if (setjmp(cstate->top_ctx))
9019		return (NULL);
9020
9021        if (cstate->label_stack_depth > 0) {
9022            /* just match the bottom-of-stack bit clear */
9023            b0 = gen_mcmp(cstate, OR_PREVMPLSHDR, 2, BPF_B, 0, 0x01);
9024        } else {
9025            /*
9026             * We're not in an MPLS stack yet, so check the link-layer
9027             * type against MPLS.
9028             */
9029            switch (cstate->linktype) {
9030
9031            case DLT_C_HDLC: /* fall through */
9032            case DLT_HDLC:
9033            case DLT_EN10MB:
9034            case DLT_NETANALYZER:
9035            case DLT_NETANALYZER_TRANSPARENT:
9036                    b0 = gen_linktype(cstate, ETHERTYPE_MPLS);
9037                    break;
9038
9039            case DLT_PPP:
9040                    b0 = gen_linktype(cstate, PPP_MPLS_UCAST);
9041                    break;
9042
9043                    /* FIXME add other DLT_s ...
9044                     * for Frame-Relay/and ATM this may get messy due to SNAP headers
9045                     * leave it for now */
9046
9047            default:
9048                    bpf_error(cstate, "no MPLS support for %s",
9049                          pcap_datalink_val_to_description_or_dlt(cstate->linktype));
9050                    /*NOTREACHED*/
9051            }
9052        }
9053
9054	/* If a specific MPLS label is requested, check it */
9055	if (has_label_num) {
9056		if (label_num > 0xFFFFF) {
9057			bpf_error(cstate, "MPLS label %u greater than maximum %u",
9058			    label_num, 0xFFFFF);
9059		}
9060		label_num = label_num << 12; /* label is shifted 12 bits on the wire */
9061		b1 = gen_mcmp(cstate, OR_LINKPL, 0, BPF_W, label_num,
9062		    0xfffff000); /* only compare the first 20 bits */
9063		gen_and(b0, b1);
9064		b0 = b1;
9065	}
9066
9067        /*
9068         * Change the offsets to point to the type and data fields within
9069         * the MPLS packet.  Just increment the offsets, so that we
9070         * can support a hierarchy, e.g. "mpls 100000 && mpls 1024" to
9071         * capture packets with an outer label of 100000 and an inner
9072         * label of 1024.
9073         *
9074         * Increment the MPLS stack depth as well; this indicates that
9075         * we're checking MPLS-encapsulated headers, to make sure higher
9076         * level code generators don't try to match against IP-related
9077         * protocols such as Q_ARP, Q_RARP etc.
9078         *
9079         * XXX - this is a bit of a kludge.  See comments in gen_vlan().
9080         */
9081        cstate->off_nl_nosnap += 4;
9082        cstate->off_nl += 4;
9083        cstate->label_stack_depth++;
9084	return (b0);
9085}
9086
9087/*
9088 * Support PPPOE discovery and session.
9089 */
9090struct block *
9091gen_pppoed(compiler_state_t *cstate)
9092{
9093	/*
9094	 * Catch errors reported by us and routines below us, and return NULL
9095	 * on an error.
9096	 */
9097	if (setjmp(cstate->top_ctx))
9098		return (NULL);
9099
9100	/* check for PPPoE discovery */
9101	return gen_linktype(cstate, ETHERTYPE_PPPOED);
9102}
9103
9104struct block *
9105gen_pppoes(compiler_state_t *cstate, bpf_u_int32 sess_num, int has_sess_num)
9106{
9107	struct block *b0, *b1;
9108
9109	/*
9110	 * Catch errors reported by us and routines below us, and return NULL
9111	 * on an error.
9112	 */
9113	if (setjmp(cstate->top_ctx))
9114		return (NULL);
9115
9116	/*
9117	 * Test against the PPPoE session link-layer type.
9118	 */
9119	b0 = gen_linktype(cstate, ETHERTYPE_PPPOES);
9120
9121	/* If a specific session is requested, check PPPoE session id */
9122	if (has_sess_num) {
9123		if (sess_num > 0x0000ffff) {
9124			bpf_error(cstate, "PPPoE session number %u greater than maximum %u",
9125			    sess_num, 0x0000ffff);
9126		}
9127		b1 = gen_mcmp(cstate, OR_LINKPL, 0, BPF_W, sess_num, 0x0000ffff);
9128		gen_and(b0, b1);
9129		b0 = b1;
9130	}
9131
9132	/*
9133	 * Change the offsets to point to the type and data fields within
9134	 * the PPP packet, and note that this is PPPoE rather than
9135	 * raw PPP.
9136	 *
9137	 * XXX - this is a bit of a kludge.  See the comments in
9138	 * gen_vlan().
9139	 *
9140	 * The "network-layer" protocol is PPPoE, which has a 6-byte
9141	 * PPPoE header, followed by a PPP packet.
9142	 *
9143	 * There is no HDLC encapsulation for the PPP packet (it's
9144	 * encapsulated in PPPoES instead), so the link-layer type
9145	 * starts at the first byte of the PPP packet.  For PPPoE,
9146	 * that offset is relative to the beginning of the total
9147	 * link-layer payload, including any 802.2 LLC header, so
9148	 * it's 6 bytes past cstate->off_nl.
9149	 */
9150	PUSH_LINKHDR(cstate, DLT_PPP, cstate->off_linkpl.is_variable,
9151	    cstate->off_linkpl.constant_part + cstate->off_nl + 6, /* 6 bytes past the PPPoE header */
9152	    cstate->off_linkpl.reg);
9153
9154	cstate->off_linktype = cstate->off_linkhdr;
9155	cstate->off_linkpl.constant_part = cstate->off_linkhdr.constant_part + 2;
9156
9157	cstate->off_nl = 0;
9158	cstate->off_nl_nosnap = 0;	/* no 802.2 LLC */
9159
9160	return b0;
9161}
9162
9163/* Check that this is Geneve and the VNI is correct if
9164 * specified. Parameterized to handle both IPv4 and IPv6. */
9165static struct block *
9166gen_geneve_check(compiler_state_t *cstate,
9167    struct block *(*gen_portfn)(compiler_state_t *, u_int, int, int),
9168    enum e_offrel offrel, bpf_u_int32 vni, int has_vni)
9169{
9170	struct block *b0, *b1;
9171
9172	b0 = gen_portfn(cstate, GENEVE_PORT, IPPROTO_UDP, Q_DST);
9173
9174	/* Check that we are operating on version 0. Otherwise, we
9175	 * can't decode the rest of the fields. The version is 2 bits
9176	 * in the first byte of the Geneve header. */
9177	b1 = gen_mcmp(cstate, offrel, 8, BPF_B, 0, 0xc0);
9178	gen_and(b0, b1);
9179	b0 = b1;
9180
9181	if (has_vni) {
9182		if (vni > 0xffffff) {
9183			bpf_error(cstate, "Geneve VNI %u greater than maximum %u",
9184			    vni, 0xffffff);
9185		}
9186		vni <<= 8; /* VNI is in the upper 3 bytes */
9187		b1 = gen_mcmp(cstate, offrel, 12, BPF_W, vni, 0xffffff00);
9188		gen_and(b0, b1);
9189		b0 = b1;
9190	}
9191
9192	return b0;
9193}
9194
9195/* The IPv4 and IPv6 Geneve checks need to do two things:
9196 * - Verify that this actually is Geneve with the right VNI.
9197 * - Place the IP header length (plus variable link prefix if
9198 *   needed) into register A to be used later to compute
9199 *   the inner packet offsets. */
9200static struct block *
9201gen_geneve4(compiler_state_t *cstate, bpf_u_int32 vni, int has_vni)
9202{
9203	struct block *b0, *b1;
9204	struct slist *s, *s1;
9205
9206	b0 = gen_geneve_check(cstate, gen_port, OR_TRAN_IPV4, vni, has_vni);
9207
9208	/* Load the IP header length into A. */
9209	s = gen_loadx_iphdrlen(cstate);
9210
9211	s1 = new_stmt(cstate, BPF_MISC|BPF_TXA);
9212	sappend(s, s1);
9213
9214	/* Forcibly append these statements to the true condition
9215	 * of the protocol check by creating a new block that is
9216	 * always true and ANDing them. */
9217	b1 = new_block(cstate, BPF_JMP|BPF_JEQ|BPF_X);
9218	b1->stmts = s;
9219	b1->s.k = 0;
9220
9221	gen_and(b0, b1);
9222
9223	return b1;
9224}
9225
9226static struct block *
9227gen_geneve6(compiler_state_t *cstate, bpf_u_int32 vni, int has_vni)
9228{
9229	struct block *b0, *b1;
9230	struct slist *s, *s1;
9231
9232	b0 = gen_geneve_check(cstate, gen_port6, OR_TRAN_IPV6, vni, has_vni);
9233
9234	/* Load the IP header length. We need to account for a
9235	 * variable length link prefix if there is one. */
9236	s = gen_abs_offset_varpart(cstate, &cstate->off_linkpl);
9237	if (s) {
9238		s1 = new_stmt(cstate, BPF_LD|BPF_IMM);
9239		s1->s.k = 40;
9240		sappend(s, s1);
9241
9242		s1 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_X);
9243		s1->s.k = 0;
9244		sappend(s, s1);
9245	} else {
9246		s = new_stmt(cstate, BPF_LD|BPF_IMM);
9247		s->s.k = 40;
9248	}
9249
9250	/* Forcibly append these statements to the true condition
9251	 * of the protocol check by creating a new block that is
9252	 * always true and ANDing them. */
9253	s1 = new_stmt(cstate, BPF_MISC|BPF_TAX);
9254	sappend(s, s1);
9255
9256	b1 = new_block(cstate, BPF_JMP|BPF_JEQ|BPF_X);
9257	b1->stmts = s;
9258	b1->s.k = 0;
9259
9260	gen_and(b0, b1);
9261
9262	return b1;
9263}
9264
9265/* We need to store three values based on the Geneve header::
9266 * - The offset of the linktype.
9267 * - The offset of the end of the Geneve header.
9268 * - The offset of the end of the encapsulated MAC header. */
9269static struct slist *
9270gen_geneve_offsets(compiler_state_t *cstate)
9271{
9272	struct slist *s, *s1, *s_proto;
9273
9274	/* First we need to calculate the offset of the Geneve header
9275	 * itself. This is composed of the IP header previously calculated
9276	 * (include any variable link prefix) and stored in A plus the
9277	 * fixed sized headers (fixed link prefix, MAC length, and UDP
9278	 * header). */
9279	s = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
9280	s->s.k = cstate->off_linkpl.constant_part + cstate->off_nl + 8;
9281
9282	/* Stash this in X since we'll need it later. */
9283	s1 = new_stmt(cstate, BPF_MISC|BPF_TAX);
9284	sappend(s, s1);
9285
9286	/* The EtherType in Geneve is 2 bytes in. Calculate this and
9287	 * store it. */
9288	s1 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
9289	s1->s.k = 2;
9290	sappend(s, s1);
9291
9292	cstate->off_linktype.reg = alloc_reg(cstate);
9293	cstate->off_linktype.is_variable = 1;
9294	cstate->off_linktype.constant_part = 0;
9295
9296	s1 = new_stmt(cstate, BPF_ST);
9297	s1->s.k = cstate->off_linktype.reg;
9298	sappend(s, s1);
9299
9300	/* Load the Geneve option length and mask and shift to get the
9301	 * number of bytes. It is stored in the first byte of the Geneve
9302	 * header. */
9303	s1 = new_stmt(cstate, BPF_LD|BPF_IND|BPF_B);
9304	s1->s.k = 0;
9305	sappend(s, s1);
9306
9307	s1 = new_stmt(cstate, BPF_ALU|BPF_AND|BPF_K);
9308	s1->s.k = 0x3f;
9309	sappend(s, s1);
9310
9311	s1 = new_stmt(cstate, BPF_ALU|BPF_MUL|BPF_K);
9312	s1->s.k = 4;
9313	sappend(s, s1);
9314
9315	/* Add in the rest of the Geneve base header. */
9316	s1 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
9317	s1->s.k = 8;
9318	sappend(s, s1);
9319
9320	/* Add the Geneve header length to its offset and store. */
9321	s1 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_X);
9322	s1->s.k = 0;
9323	sappend(s, s1);
9324
9325	/* Set the encapsulated type as Ethernet. Even though we may
9326	 * not actually have Ethernet inside there are two reasons this
9327	 * is useful:
9328	 * - The linktype field is always in EtherType format regardless
9329	 *   of whether it is in Geneve or an inner Ethernet frame.
9330	 * - The only link layer that we have specific support for is
9331	 *   Ethernet. We will confirm that the packet actually is
9332	 *   Ethernet at runtime before executing these checks. */
9333	PUSH_LINKHDR(cstate, DLT_EN10MB, 1, 0, alloc_reg(cstate));
9334
9335	s1 = new_stmt(cstate, BPF_ST);
9336	s1->s.k = cstate->off_linkhdr.reg;
9337	sappend(s, s1);
9338
9339	/* Calculate whether we have an Ethernet header or just raw IP/
9340	 * MPLS/etc. If we have Ethernet, advance the end of the MAC offset
9341	 * and linktype by 14 bytes so that the network header can be found
9342	 * seamlessly. Otherwise, keep what we've calculated already. */
9343
9344	/* We have a bare jmp so we can't use the optimizer. */
9345	cstate->no_optimize = 1;
9346
9347	/* Load the EtherType in the Geneve header, 2 bytes in. */
9348	s1 = new_stmt(cstate, BPF_LD|BPF_IND|BPF_H);
9349	s1->s.k = 2;
9350	sappend(s, s1);
9351
9352	/* Load X with the end of the Geneve header. */
9353	s1 = new_stmt(cstate, BPF_LDX|BPF_MEM);
9354	s1->s.k = cstate->off_linkhdr.reg;
9355	sappend(s, s1);
9356
9357	/* Check if the EtherType is Transparent Ethernet Bridging. At the
9358	 * end of this check, we should have the total length in X. In
9359	 * the non-Ethernet case, it's already there. */
9360	s_proto = new_stmt(cstate, JMP(BPF_JEQ));
9361	s_proto->s.k = ETHERTYPE_TEB;
9362	sappend(s, s_proto);
9363
9364	s1 = new_stmt(cstate, BPF_MISC|BPF_TXA);
9365	sappend(s, s1);
9366	s_proto->s.jt = s1;
9367
9368	/* Since this is Ethernet, use the EtherType of the payload
9369	 * directly as the linktype. Overwrite what we already have. */
9370	s1 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
9371	s1->s.k = 12;
9372	sappend(s, s1);
9373
9374	s1 = new_stmt(cstate, BPF_ST);
9375	s1->s.k = cstate->off_linktype.reg;
9376	sappend(s, s1);
9377
9378	/* Advance two bytes further to get the end of the Ethernet
9379	 * header. */
9380	s1 = new_stmt(cstate, BPF_ALU|BPF_ADD|BPF_K);
9381	s1->s.k = 2;
9382	sappend(s, s1);
9383
9384	/* Move the result to X. */
9385	s1 = new_stmt(cstate, BPF_MISC|BPF_TAX);
9386	sappend(s, s1);
9387
9388	/* Store the final result of our linkpl calculation. */
9389	cstate->off_linkpl.reg = alloc_reg(cstate);
9390	cstate->off_linkpl.is_variable = 1;
9391	cstate->off_linkpl.constant_part = 0;
9392
9393	s1 = new_stmt(cstate, BPF_STX);
9394	s1->s.k = cstate->off_linkpl.reg;
9395	sappend(s, s1);
9396	s_proto->s.jf = s1;
9397
9398	cstate->off_nl = 0;
9399
9400	return s;
9401}
9402
9403/* Check to see if this is a Geneve packet. */
9404struct block *
9405gen_geneve(compiler_state_t *cstate, bpf_u_int32 vni, int has_vni)
9406{
9407	struct block *b0, *b1;
9408	struct slist *s;
9409
9410	/*
9411	 * Catch errors reported by us and routines below us, and return NULL
9412	 * on an error.
9413	 */
9414	if (setjmp(cstate->top_ctx))
9415		return (NULL);
9416
9417	b0 = gen_geneve4(cstate, vni, has_vni);
9418	b1 = gen_geneve6(cstate, vni, has_vni);
9419
9420	gen_or(b0, b1);
9421	b0 = b1;
9422
9423	/* Later filters should act on the payload of the Geneve frame,
9424	 * update all of the header pointers. Attach this code so that
9425	 * it gets executed in the event that the Geneve filter matches. */
9426	s = gen_geneve_offsets(cstate);
9427
9428	b1 = gen_true(cstate);
9429	sappend(s, b1->stmts);
9430	b1->stmts = s;
9431
9432	gen_and(b0, b1);
9433
9434	cstate->is_geneve = 1;
9435
9436	return b1;
9437}
9438
9439/* Check that the encapsulated frame has a link layer header
9440 * for Ethernet filters. */
9441static struct block *
9442gen_geneve_ll_check(compiler_state_t *cstate)
9443{
9444	struct block *b0;
9445	struct slist *s, *s1;
9446
9447	/* The easiest way to see if there is a link layer present
9448	 * is to check if the link layer header and payload are not
9449	 * the same. */
9450
9451	/* Geneve always generates pure variable offsets so we can
9452	 * compare only the registers. */
9453	s = new_stmt(cstate, BPF_LD|BPF_MEM);
9454	s->s.k = cstate->off_linkhdr.reg;
9455
9456	s1 = new_stmt(cstate, BPF_LDX|BPF_MEM);
9457	s1->s.k = cstate->off_linkpl.reg;
9458	sappend(s, s1);
9459
9460	b0 = new_block(cstate, BPF_JMP|BPF_JEQ|BPF_X);
9461	b0->stmts = s;
9462	b0->s.k = 0;
9463	gen_not(b0);
9464
9465	return b0;
9466}
9467
9468static struct block *
9469gen_atmfield_code_internal(compiler_state_t *cstate, int atmfield,
9470    bpf_u_int32 jvalue, int jtype, int reverse)
9471{
9472	struct block *b0;
9473
9474	switch (atmfield) {
9475
9476	case A_VPI:
9477		if (!cstate->is_atm)
9478			bpf_error(cstate, "'vpi' supported only on raw ATM");
9479		if (cstate->off_vpi == OFFSET_NOT_SET)
9480			abort();
9481		b0 = gen_ncmp(cstate, OR_LINKHDR, cstate->off_vpi, BPF_B,
9482		    0xffffffffU, jtype, reverse, jvalue);
9483		break;
9484
9485	case A_VCI:
9486		if (!cstate->is_atm)
9487			bpf_error(cstate, "'vci' supported only on raw ATM");
9488		if (cstate->off_vci == OFFSET_NOT_SET)
9489			abort();
9490		b0 = gen_ncmp(cstate, OR_LINKHDR, cstate->off_vci, BPF_H,
9491		    0xffffffffU, jtype, reverse, jvalue);
9492		break;
9493
9494	case A_PROTOTYPE:
9495		if (cstate->off_proto == OFFSET_NOT_SET)
9496			abort();	/* XXX - this isn't on FreeBSD */
9497		b0 = gen_ncmp(cstate, OR_LINKHDR, cstate->off_proto, BPF_B,
9498		    0x0fU, jtype, reverse, jvalue);
9499		break;
9500
9501	case A_MSGTYPE:
9502		if (cstate->off_payload == OFFSET_NOT_SET)
9503			abort();
9504		b0 = gen_ncmp(cstate, OR_LINKHDR, cstate->off_payload + MSG_TYPE_POS, BPF_B,
9505		    0xffffffffU, jtype, reverse, jvalue);
9506		break;
9507
9508	case A_CALLREFTYPE:
9509		if (!cstate->is_atm)
9510			bpf_error(cstate, "'callref' supported only on raw ATM");
9511		if (cstate->off_proto == OFFSET_NOT_SET)
9512			abort();
9513		b0 = gen_ncmp(cstate, OR_LINKHDR, cstate->off_proto, BPF_B,
9514		    0xffffffffU, jtype, reverse, jvalue);
9515		break;
9516
9517	default:
9518		abort();
9519	}
9520	return b0;
9521}
9522
9523static struct block *
9524gen_atmtype_metac(compiler_state_t *cstate)
9525{
9526	struct block *b0, *b1;
9527
9528	b0 = gen_atmfield_code_internal(cstate, A_VPI, 0, BPF_JEQ, 0);
9529	b1 = gen_atmfield_code_internal(cstate, A_VCI, 1, BPF_JEQ, 0);
9530	gen_and(b0, b1);
9531	return b1;
9532}
9533
9534static struct block *
9535gen_atmtype_sc(compiler_state_t *cstate)
9536{
9537	struct block *b0, *b1;
9538
9539	b0 = gen_atmfield_code_internal(cstate, A_VPI, 0, BPF_JEQ, 0);
9540	b1 = gen_atmfield_code_internal(cstate, A_VCI, 5, BPF_JEQ, 0);
9541	gen_and(b0, b1);
9542	return b1;
9543}
9544
9545static struct block *
9546gen_atmtype_llc(compiler_state_t *cstate)
9547{
9548	struct block *b0;
9549
9550	b0 = gen_atmfield_code_internal(cstate, A_PROTOTYPE, PT_LLC, BPF_JEQ, 0);
9551	cstate->linktype = cstate->prevlinktype;
9552	return b0;
9553}
9554
9555struct block *
9556gen_atmfield_code(compiler_state_t *cstate, int atmfield,
9557    bpf_u_int32 jvalue, int jtype, int reverse)
9558{
9559	/*
9560	 * Catch errors reported by us and routines below us, and return NULL
9561	 * on an error.
9562	 */
9563	if (setjmp(cstate->top_ctx))
9564		return (NULL);
9565
9566	return gen_atmfield_code_internal(cstate, atmfield, jvalue, jtype,
9567	    reverse);
9568}
9569
9570struct block *
9571gen_atmtype_abbrev(compiler_state_t *cstate, int type)
9572{
9573	struct block *b0, *b1;
9574
9575	/*
9576	 * Catch errors reported by us and routines below us, and return NULL
9577	 * on an error.
9578	 */
9579	if (setjmp(cstate->top_ctx))
9580		return (NULL);
9581
9582	switch (type) {
9583
9584	case A_METAC:
9585		/* Get all packets in Meta signalling Circuit */
9586		if (!cstate->is_atm)
9587			bpf_error(cstate, "'metac' supported only on raw ATM");
9588		b1 = gen_atmtype_metac(cstate);
9589		break;
9590
9591	case A_BCC:
9592		/* Get all packets in Broadcast Circuit*/
9593		if (!cstate->is_atm)
9594			bpf_error(cstate, "'bcc' supported only on raw ATM");
9595		b0 = gen_atmfield_code_internal(cstate, A_VPI, 0, BPF_JEQ, 0);
9596		b1 = gen_atmfield_code_internal(cstate, A_VCI, 2, BPF_JEQ, 0);
9597		gen_and(b0, b1);
9598		break;
9599
9600	case A_OAMF4SC:
9601		/* Get all cells in Segment OAM F4 circuit*/
9602		if (!cstate->is_atm)
9603			bpf_error(cstate, "'oam4sc' supported only on raw ATM");
9604		b0 = gen_atmfield_code_internal(cstate, A_VPI, 0, BPF_JEQ, 0);
9605		b1 = gen_atmfield_code_internal(cstate, A_VCI, 3, BPF_JEQ, 0);
9606		gen_and(b0, b1);
9607		break;
9608
9609	case A_OAMF4EC:
9610		/* Get all cells in End-to-End OAM F4 Circuit*/
9611		if (!cstate->is_atm)
9612			bpf_error(cstate, "'oam4ec' supported only on raw ATM");
9613		b0 = gen_atmfield_code_internal(cstate, A_VPI, 0, BPF_JEQ, 0);
9614		b1 = gen_atmfield_code_internal(cstate, A_VCI, 4, BPF_JEQ, 0);
9615		gen_and(b0, b1);
9616		break;
9617
9618	case A_SC:
9619		/*  Get all packets in connection Signalling Circuit */
9620		if (!cstate->is_atm)
9621			bpf_error(cstate, "'sc' supported only on raw ATM");
9622		b1 = gen_atmtype_sc(cstate);
9623		break;
9624
9625	case A_ILMIC:
9626		/* Get all packets in ILMI Circuit */
9627		if (!cstate->is_atm)
9628			bpf_error(cstate, "'ilmic' supported only on raw ATM");
9629		b0 = gen_atmfield_code_internal(cstate, A_VPI, 0, BPF_JEQ, 0);
9630		b1 = gen_atmfield_code_internal(cstate, A_VCI, 16, BPF_JEQ, 0);
9631		gen_and(b0, b1);
9632		break;
9633
9634	case A_LANE:
9635		/* Get all LANE packets */
9636		if (!cstate->is_atm)
9637			bpf_error(cstate, "'lane' supported only on raw ATM");
9638		b1 = gen_atmfield_code_internal(cstate, A_PROTOTYPE, PT_LANE, BPF_JEQ, 0);
9639
9640		/*
9641		 * Arrange that all subsequent tests assume LANE
9642		 * rather than LLC-encapsulated packets, and set
9643		 * the offsets appropriately for LANE-encapsulated
9644		 * Ethernet.
9645		 *
9646		 * We assume LANE means Ethernet, not Token Ring.
9647		 */
9648		PUSH_LINKHDR(cstate, DLT_EN10MB, 0,
9649		    cstate->off_payload + 2,	/* Ethernet header */
9650		    -1);
9651		cstate->off_linktype.constant_part = cstate->off_linkhdr.constant_part + 12;
9652		cstate->off_linkpl.constant_part = cstate->off_linkhdr.constant_part + 14;	/* Ethernet */
9653		cstate->off_nl = 0;			/* Ethernet II */
9654		cstate->off_nl_nosnap = 3;		/* 802.3+802.2 */
9655		break;
9656
9657	case A_LLC:
9658		/* Get all LLC-encapsulated packets */
9659		if (!cstate->is_atm)
9660			bpf_error(cstate, "'llc' supported only on raw ATM");
9661		b1 = gen_atmtype_llc(cstate);
9662		break;
9663
9664	default:
9665		abort();
9666	}
9667	return b1;
9668}
9669
9670/*
9671 * Filtering for MTP2 messages based on li value
9672 * FISU, length is null
9673 * LSSU, length is 1 or 2
9674 * MSU, length is 3 or more
9675 * For MTP2_HSL, sequences are on 2 bytes, and length on 9 bits
9676 */
9677struct block *
9678gen_mtp2type_abbrev(compiler_state_t *cstate, int type)
9679{
9680	struct block *b0, *b1;
9681
9682	/*
9683	 * Catch errors reported by us and routines below us, and return NULL
9684	 * on an error.
9685	 */
9686	if (setjmp(cstate->top_ctx))
9687		return (NULL);
9688
9689	switch (type) {
9690
9691	case M_FISU:
9692		if ( (cstate->linktype != DLT_MTP2) &&
9693		     (cstate->linktype != DLT_ERF) &&
9694		     (cstate->linktype != DLT_MTP2_WITH_PHDR) )
9695			bpf_error(cstate, "'fisu' supported only on MTP2");
9696		/* gen_ncmp(cstate, offrel, offset, size, mask, jtype, reverse, value) */
9697		b0 = gen_ncmp(cstate, OR_PACKET, cstate->off_li, BPF_B,
9698		    0x3fU, BPF_JEQ, 0, 0U);
9699		break;
9700
9701	case M_LSSU:
9702		if ( (cstate->linktype != DLT_MTP2) &&
9703		     (cstate->linktype != DLT_ERF) &&
9704		     (cstate->linktype != DLT_MTP2_WITH_PHDR) )
9705			bpf_error(cstate, "'lssu' supported only on MTP2");
9706		b0 = gen_ncmp(cstate, OR_PACKET, cstate->off_li, BPF_B,
9707		    0x3fU, BPF_JGT, 1, 2U);
9708		b1 = gen_ncmp(cstate, OR_PACKET, cstate->off_li, BPF_B,
9709		    0x3fU, BPF_JGT, 0, 0U);
9710		gen_and(b1, b0);
9711		break;
9712
9713	case M_MSU:
9714		if ( (cstate->linktype != DLT_MTP2) &&
9715		     (cstate->linktype != DLT_ERF) &&
9716		     (cstate->linktype != DLT_MTP2_WITH_PHDR) )
9717			bpf_error(cstate, "'msu' supported only on MTP2");
9718		b0 = gen_ncmp(cstate, OR_PACKET, cstate->off_li, BPF_B,
9719		    0x3fU, BPF_JGT, 0, 2U);
9720		break;
9721
9722	case MH_FISU:
9723		if ( (cstate->linktype != DLT_MTP2) &&
9724		     (cstate->linktype != DLT_ERF) &&
9725		     (cstate->linktype != DLT_MTP2_WITH_PHDR) )
9726			bpf_error(cstate, "'hfisu' supported only on MTP2_HSL");
9727		/* gen_ncmp(cstate, offrel, offset, size, mask, jtype, reverse, value) */
9728		b0 = gen_ncmp(cstate, OR_PACKET, cstate->off_li_hsl, BPF_H,
9729		    0xff80U, BPF_JEQ, 0, 0U);
9730		break;
9731
9732	case MH_LSSU:
9733		if ( (cstate->linktype != DLT_MTP2) &&
9734		     (cstate->linktype != DLT_ERF) &&
9735		     (cstate->linktype != DLT_MTP2_WITH_PHDR) )
9736			bpf_error(cstate, "'hlssu' supported only on MTP2_HSL");
9737		b0 = gen_ncmp(cstate, OR_PACKET, cstate->off_li_hsl, BPF_H,
9738		    0xff80U, BPF_JGT, 1, 0x0100U);
9739		b1 = gen_ncmp(cstate, OR_PACKET, cstate->off_li_hsl, BPF_H,
9740		    0xff80U, BPF_JGT, 0, 0U);
9741		gen_and(b1, b0);
9742		break;
9743
9744	case MH_MSU:
9745		if ( (cstate->linktype != DLT_MTP2) &&
9746		     (cstate->linktype != DLT_ERF) &&
9747		     (cstate->linktype != DLT_MTP2_WITH_PHDR) )
9748			bpf_error(cstate, "'hmsu' supported only on MTP2_HSL");
9749		b0 = gen_ncmp(cstate, OR_PACKET, cstate->off_li_hsl, BPF_H,
9750		    0xff80U, BPF_JGT, 0, 0x0100U);
9751		break;
9752
9753	default:
9754		abort();
9755	}
9756	return b0;
9757}
9758
9759/*
9760 * The jvalue_arg dance is to avoid annoying whining by compilers that
9761 * jvalue might be clobbered by longjmp - yeah, it might, but *WHO CARES*?
9762 * It's not *used* after setjmp returns.
9763 */
9764struct block *
9765gen_mtp3field_code(compiler_state_t *cstate, int mtp3field,
9766    bpf_u_int32 jvalue_arg, int jtype, int reverse)
9767{
9768	volatile bpf_u_int32 jvalue = jvalue_arg;
9769	struct block *b0;
9770	bpf_u_int32 val1 , val2 , val3;
9771	u_int newoff_sio;
9772	u_int newoff_opc;
9773	u_int newoff_dpc;
9774	u_int newoff_sls;
9775
9776	/*
9777	 * Catch errors reported by us and routines below us, and return NULL
9778	 * on an error.
9779	 */
9780	if (setjmp(cstate->top_ctx))
9781		return (NULL);
9782
9783	newoff_sio = cstate->off_sio;
9784	newoff_opc = cstate->off_opc;
9785	newoff_dpc = cstate->off_dpc;
9786	newoff_sls = cstate->off_sls;
9787	switch (mtp3field) {
9788
9789	case MH_SIO:
9790		newoff_sio += 3; /* offset for MTP2_HSL */
9791		/* FALLTHROUGH */
9792
9793	case M_SIO:
9794		if (cstate->off_sio == OFFSET_NOT_SET)
9795			bpf_error(cstate, "'sio' supported only on SS7");
9796		/* sio coded on 1 byte so max value 255 */
9797		if(jvalue > 255)
9798		        bpf_error(cstate, "sio value %u too big; max value = 255",
9799		            jvalue);
9800		b0 = gen_ncmp(cstate, OR_PACKET, newoff_sio, BPF_B, 0xffffffffU,
9801		    jtype, reverse, jvalue);
9802		break;
9803
9804	case MH_OPC:
9805		newoff_opc += 3;
9806
9807		/* FALLTHROUGH */
9808        case M_OPC:
9809	        if (cstate->off_opc == OFFSET_NOT_SET)
9810			bpf_error(cstate, "'opc' supported only on SS7");
9811		/* opc coded on 14 bits so max value 16383 */
9812		if (jvalue > 16383)
9813		        bpf_error(cstate, "opc value %u too big; max value = 16383",
9814		            jvalue);
9815		/* the following instructions are made to convert jvalue
9816		 * to the form used to write opc in an ss7 message*/
9817		val1 = jvalue & 0x00003c00;
9818		val1 = val1 >>10;
9819		val2 = jvalue & 0x000003fc;
9820		val2 = val2 <<6;
9821		val3 = jvalue & 0x00000003;
9822		val3 = val3 <<22;
9823		jvalue = val1 + val2 + val3;
9824		b0 = gen_ncmp(cstate, OR_PACKET, newoff_opc, BPF_W, 0x00c0ff0fU,
9825		    jtype, reverse, jvalue);
9826		break;
9827
9828	case MH_DPC:
9829		newoff_dpc += 3;
9830		/* FALLTHROUGH */
9831
9832	case M_DPC:
9833	        if (cstate->off_dpc == OFFSET_NOT_SET)
9834			bpf_error(cstate, "'dpc' supported only on SS7");
9835		/* dpc coded on 14 bits so max value 16383 */
9836		if (jvalue > 16383)
9837		        bpf_error(cstate, "dpc value %u too big; max value = 16383",
9838		            jvalue);
9839		/* the following instructions are made to convert jvalue
9840		 * to the forme used to write dpc in an ss7 message*/
9841		val1 = jvalue & 0x000000ff;
9842		val1 = val1 << 24;
9843		val2 = jvalue & 0x00003f00;
9844		val2 = val2 << 8;
9845		jvalue = val1 + val2;
9846		b0 = gen_ncmp(cstate, OR_PACKET, newoff_dpc, BPF_W, 0xff3f0000U,
9847		    jtype, reverse, jvalue);
9848		break;
9849
9850	case MH_SLS:
9851		newoff_sls += 3;
9852		/* FALLTHROUGH */
9853
9854	case M_SLS:
9855	        if (cstate->off_sls == OFFSET_NOT_SET)
9856			bpf_error(cstate, "'sls' supported only on SS7");
9857		/* sls coded on 4 bits so max value 15 */
9858		if (jvalue > 15)
9859		         bpf_error(cstate, "sls value %u too big; max value = 15",
9860		             jvalue);
9861		/* the following instruction is made to convert jvalue
9862		 * to the forme used to write sls in an ss7 message*/
9863		jvalue = jvalue << 4;
9864		b0 = gen_ncmp(cstate, OR_PACKET, newoff_sls, BPF_B, 0xf0U,
9865		    jtype, reverse, jvalue);
9866		break;
9867
9868	default:
9869		abort();
9870	}
9871	return b0;
9872}
9873
9874static struct block *
9875gen_msg_abbrev(compiler_state_t *cstate, int type)
9876{
9877	struct block *b1;
9878
9879	/*
9880	 * Q.2931 signalling protocol messages for handling virtual circuits
9881	 * establishment and teardown
9882	 */
9883	switch (type) {
9884
9885	case A_SETUP:
9886		b1 = gen_atmfield_code_internal(cstate, A_MSGTYPE, SETUP, BPF_JEQ, 0);
9887		break;
9888
9889	case A_CALLPROCEED:
9890		b1 = gen_atmfield_code_internal(cstate, A_MSGTYPE, CALL_PROCEED, BPF_JEQ, 0);
9891		break;
9892
9893	case A_CONNECT:
9894		b1 = gen_atmfield_code_internal(cstate, A_MSGTYPE, CONNECT, BPF_JEQ, 0);
9895		break;
9896
9897	case A_CONNECTACK:
9898		b1 = gen_atmfield_code_internal(cstate, A_MSGTYPE, CONNECT_ACK, BPF_JEQ, 0);
9899		break;
9900
9901	case A_RELEASE:
9902		b1 = gen_atmfield_code_internal(cstate, A_MSGTYPE, RELEASE, BPF_JEQ, 0);
9903		break;
9904
9905	case A_RELEASE_DONE:
9906		b1 = gen_atmfield_code_internal(cstate, A_MSGTYPE, RELEASE_DONE, BPF_JEQ, 0);
9907		break;
9908
9909	default:
9910		abort();
9911	}
9912	return b1;
9913}
9914
9915struct block *
9916gen_atmmulti_abbrev(compiler_state_t *cstate, int type)
9917{
9918	struct block *b0, *b1;
9919
9920	/*
9921	 * Catch errors reported by us and routines below us, and return NULL
9922	 * on an error.
9923	 */
9924	if (setjmp(cstate->top_ctx))
9925		return (NULL);
9926
9927	switch (type) {
9928
9929	case A_OAM:
9930		if (!cstate->is_atm)
9931			bpf_error(cstate, "'oam' supported only on raw ATM");
9932		/* OAM F4 type */
9933		b0 = gen_atmfield_code_internal(cstate, A_VCI, 3, BPF_JEQ, 0);
9934		b1 = gen_atmfield_code_internal(cstate, A_VCI, 4, BPF_JEQ, 0);
9935		gen_or(b0, b1);
9936		b0 = gen_atmfield_code_internal(cstate, A_VPI, 0, BPF_JEQ, 0);
9937		gen_and(b0, b1);
9938		break;
9939
9940	case A_OAMF4:
9941		if (!cstate->is_atm)
9942			bpf_error(cstate, "'oamf4' supported only on raw ATM");
9943		/* OAM F4 type */
9944		b0 = gen_atmfield_code_internal(cstate, A_VCI, 3, BPF_JEQ, 0);
9945		b1 = gen_atmfield_code_internal(cstate, A_VCI, 4, BPF_JEQ, 0);
9946		gen_or(b0, b1);
9947		b0 = gen_atmfield_code_internal(cstate, A_VPI, 0, BPF_JEQ, 0);
9948		gen_and(b0, b1);
9949		break;
9950
9951	case A_CONNECTMSG:
9952		/*
9953		 * Get Q.2931 signalling messages for switched
9954		 * virtual connection
9955		 */
9956		if (!cstate->is_atm)
9957			bpf_error(cstate, "'connectmsg' supported only on raw ATM");
9958		b0 = gen_msg_abbrev(cstate, A_SETUP);
9959		b1 = gen_msg_abbrev(cstate, A_CALLPROCEED);
9960		gen_or(b0, b1);
9961		b0 = gen_msg_abbrev(cstate, A_CONNECT);
9962		gen_or(b0, b1);
9963		b0 = gen_msg_abbrev(cstate, A_CONNECTACK);
9964		gen_or(b0, b1);
9965		b0 = gen_msg_abbrev(cstate, A_RELEASE);
9966		gen_or(b0, b1);
9967		b0 = gen_msg_abbrev(cstate, A_RELEASE_DONE);
9968		gen_or(b0, b1);
9969		b0 = gen_atmtype_sc(cstate);
9970		gen_and(b0, b1);
9971		break;
9972
9973	case A_METACONNECT:
9974		if (!cstate->is_atm)
9975			bpf_error(cstate, "'metaconnect' supported only on raw ATM");
9976		b0 = gen_msg_abbrev(cstate, A_SETUP);
9977		b1 = gen_msg_abbrev(cstate, A_CALLPROCEED);
9978		gen_or(b0, b1);
9979		b0 = gen_msg_abbrev(cstate, A_CONNECT);
9980		gen_or(b0, b1);
9981		b0 = gen_msg_abbrev(cstate, A_RELEASE);
9982		gen_or(b0, b1);
9983		b0 = gen_msg_abbrev(cstate, A_RELEASE_DONE);
9984		gen_or(b0, b1);
9985		b0 = gen_atmtype_metac(cstate);
9986		gen_and(b0, b1);
9987		break;
9988
9989	default:
9990		abort();
9991	}
9992	return b1;
9993}
9994