GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: lib/libpcap/grammar.c Lines: 93 337 27.6 %
Date: 2017-11-07 Branches: 52 292 17.8 %

Line Branch Exec Source
1
#include <stdlib.h>
2
#include <string.h>
3
#define YYBYACC 1
4
#define YYMAJOR 1
5
#define YYMINOR 9
6
#define YYLEX yylex()
7
#define YYEMPTY -1
8
#define yyclearin (yychar=(YYEMPTY))
9
#define yyerrok (yyerrflag=0)
10
#define YYRECOVERING() (yyerrflag!=0)
11
#define yyparse pcap_yyparse
12
#define yylex pcap_yylex
13
#define yyerror pcap_yyerror
14
#define yychar pcap_yychar
15
#define yyval pcap_yyval
16
#define yylval pcap_yylval
17
#define yydebug pcap_yydebug
18
#define yynerrs pcap_yynerrs
19
#define yyerrflag pcap_yyerrflag
20
#define yyss pcap_yyss
21
#define yysslim pcap_yysslim
22
#define yyssp pcap_yyssp
23
#define yyvs pcap_yyvs
24
#define yyvsp pcap_yyvsp
25
#define yystacksize pcap_yystacksize
26
#define yylhs pcap_yylhs
27
#define yylen pcap_yylen
28
#define yydefred pcap_yydefred
29
#define yydgoto pcap_yydgoto
30
#define yysindex pcap_yysindex
31
#define yyrindex pcap_yyrindex
32
#define yygindex pcap_yygindex
33
#define yytable pcap_yytable
34
#define yycheck pcap_yycheck
35
#define yyname pcap_yyname
36
#define yyrule pcap_yyrule
37
#define YYPREFIX "pcap_yy"
38
#line 2 "grammar.y"
39
/*	$OpenBSD: grammar.y,v 1.19 2009/10/27 23:59:30 deraadt Exp $	*/
40
41
/*
42
 * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996
43
 *	The Regents of the University of California.  All rights reserved.
44
 *
45
 * Redistribution and use in source and binary forms, with or without
46
 * modification, are permitted provided that: (1) source code distributions
47
 * retain the above copyright notice and this paragraph in its entirety, (2)
48
 * distributions including binary code include the above copyright notice and
49
 * this paragraph in its entirety in the documentation or other materials
50
 * provided with the distribution, and (3) all advertising materials mentioning
51
 * features or use of this software display the following acknowledgement:
52
 * ``This product includes software developed by the University of California,
53
 * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
54
 * the University nor the names of its contributors may be used to endorse
55
 * or promote products derived from this software without specific prior
56
 * written permission.
57
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
58
 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
59
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
60
 *
61
 */
62
63
#include <sys/types.h>
64
#include <sys/time.h>
65
#include <sys/socket.h>
66
67
struct mbuf;
68
struct rtentry;
69
70
#include <net/if.h>
71
72
#include <netinet/in.h>
73
#include <netinet/if_ether.h>
74
75
#include <net/pfvar.h>
76
77
#include <net80211/ieee80211.h>
78
79
#include <stdio.h>
80
#include <string.h>
81
82
#include "pcap-int.h"
83
84
#include "gencode.h"
85
#include <pcap-namedb.h>
86
87
#ifdef HAVE_OS_PROTO_H
88
#include "os-proto.h"
89
#endif
90
91
#define QSET(q, p, d, a) (q).proto = (p),\
92
			 (q).dir = (d),\
93
			 (q).addr = (a)
94
95
int n_errors = 0;
96
97
static struct qual qerr = { Q_UNDEF, Q_UNDEF, Q_UNDEF, Q_UNDEF };
98
99
static void
100
yyerror(char *msg)
101
{
102
	++n_errors;
103
	bpf_error("%s", msg);
104
	/* NOTREACHED */
105
}
106
107
#ifndef YYBISON
108
int yyparse(void);
109
110
int
111
pcap_parse()
112
{
113
	return (yyparse());
114
}
115
#endif
116
117
#line 82 "grammar.y"
118
#ifndef YYSTYPE_DEFINED
119
#define YYSTYPE_DEFINED
120
typedef union {
121
	int i;
122
	bpf_u_int32 h;
123
	u_char *e;
124
	char *s;
125
	struct stmt *stmt;
126
	struct arth *a;
127
	struct {
128
		struct qual q;
129
		struct block *b;
130
	} blk;
131
	struct block *rblk;
132
} YYSTYPE;
133
#endif /* YYSTYPE_DEFINED */
134
#line 135 "grammar.c"
135
#define DST 257
136
2
#define SRC 258
137
#define HOST 259
138
2
#define GATEWAY 260
139
#define NET 261
140
2
#define MASK 262
141
2
#define PORT 263
142
#define LESS 264
143
2
#define GREATER 265
144
2
#define PROTO 266
145
#define PROTOCHAIN 267
146
#define BYTE 268
147
#define ARP 269
148
2
#define RARP 270
149
2
#define IP 271
150
#define TCP 272
151
#define UDP 273
152
#define ICMP 274
153
#define IGMP 275
154
#define IGRP 276
155
#define PIM 277
156
#define ATALK 278
157
#define DECNET 279
158
#define LAT 280
159
#define SCA 281
160
#define MOPRC 282
161
#define MOPDL 283
162
#define STP 284
163
#define TK_BROADCAST 285
164
#define TK_MULTICAST 286
165
#define NUM 287
166
#define INBOUND 288
167
#define OUTBOUND 289
168
#define PF_IFNAME 290
169
#define PF_RSET 291
170
#define PF_RNR 292
171
#define PF_SRNR 293
172
#define PF_REASON 294
173
#define PF_ACTION 295
174
#define TYPE 296
175
#define SUBTYPE 297
176
#define DIR 298
177
#define ADDR1 299
178
#define ADDR2 300
179
#define ADDR3 301
180
#define ADDR4 302
181
#define LINK 303
182
#define GEQ 304
183
#define LEQ 305
184
#define NEQ 306
185
#define ID 307
186
#define EID 308
187
#define HID 309
188
#define HID6 310
189
#define LSH 311
190
#define RSH 312
191
#define LEN 313
192
#define IPV6 314
193
#define ICMPV6 315
194
#define AH 316
195
#define ESP 317
196
#define VLAN 318
197
#define OR 319
198
#define AND 320
199
#define UMINUS 321
200
#define YYERRCODE 256
201
const short pcap_yylhs[] =
202
	{                                        -1,
203
    0,    0,   24,    1,    1,    1,    1,    1,   20,   21,
204
    2,    2,    2,    3,    3,    3,    3,    3,    3,    3,
205
    3,   23,   22,    4,    4,    4,    7,    7,    5,    5,
206
    8,    8,    8,    8,    8,    8,    6,    6,    6,    6,
207
    6,    6,    9,    9,   10,   10,   10,   10,   10,   10,
208
   10,   10,   10,   10,   11,   11,   11,   12,   16,   16,
209
   16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
210
   16,   16,   16,   16,   16,   16,   16,   16,   16,   25,
211
   25,   25,   25,   25,   25,   25,   25,   25,   25,   25,
212
   26,   26,   26,   26,   26,   26,   29,   29,   28,   27,
213
   27,   27,   27,   30,   30,   31,   31,   32,   32,   18,
214
   18,   18,   19,   19,   19,   13,   13,   14,   14,   14,
215
   14,   14,   14,   14,   14,   14,   14,   14,   14,   14,
216
   15,   15,   15,   15,   15,   17,   17,
217
};
218
const short pcap_yylen[] =
219
2
	{                                         2,
220
4
    2,    1,    0,    1,    3,    3,    3,    3,    1,    1,
221
2
    1,    1,    3,    1,    3,    3,    1,    3,    1,    1,
222
2
    2,    1,    1,    1,    3,    3,    1,    1,    1,    2,
223
    3,    2,    2,    2,    2,    2,    2,    3,    1,    3,
224
    3,    1,    1,    0,    1,    1,    3,    3,    3,    3,
225
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
226
    1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
227
    1,    1,    1,    1,    1,    1,    1,    1,    1,    2,
228
    2,    2,    2,    4,    1,    1,    2,    1,    1,    2,
229
    2,    2,    2,    2,    2,    2,    1,    1,    1,    4,
230
    2,    2,    2,    1,    1,    1,    1,    1,    1,    1,
231
    1,    1,    1,    1,    1,    1,    1,    4,    6,    3,
232
    3,    3,    3,    3,    3,    3,    3,    2,    3,    1,
233
    1,    1,    1,    1,    1,    1,    3,
234
};
235
const short pcap_yydefred[] =
236
	{                                      3,
237
    0,    0,    0,    0,    0,   61,   62,   60,   63,   64,
238
   65,   66,   67,   68,   69,   70,   71,   72,   74,   73,
239
   79,  136,   85,   86,    0,    0,    0,    0,    0,    0,
240
   59,  130,   75,   76,   77,   78,    0,   22,    0,   23,
241
    0,    4,   29,    0,    0,    0,  117,    0,  116,    0,
242
    0,   42,   89,   82,   83,    0,   91,   92,   93,   94,
243
   97,   98,   95,   99,   96,   87,    0,  128,    0,    0,
244
   10,    9,    0,    0,   14,   20,    0,    0,   37,   11,
245
   12,    0,    0,    0,    0,   55,   58,   56,   57,   34,
246
   35,   80,   81,    0,    0,    0,   51,   52,   53,   54,
247
    0,   33,   36,   90,  111,  113,  115,    0,    0,    0,
248
    0,    0,    0,    0,    0,  110,  112,  114,    0,    0,
249
    0,    0,    0,    0,   30,  132,  131,  134,  135,  133,
250
    0,    0,    0,    6,    5,    0,    0,    0,    8,    7,
251
    0,    0,    0,   24,    0,    0,    0,   21,    0,    0,
252
    0,    0,  104,  105,    0,  106,  107,  102,  108,  109,
253
  103,   31,    0,    0,    0,    0,    0,    0,  122,  123,
254
    0,    0,    0,   38,  129,  137,   84,    0,   16,   15,
255
   18,   13,    0,    0,   48,   50,   47,   49,    0,  118,
256
    0,   25,   26,  100,    0,  119,
257
};
258
const short pcap_yydgoto[] =
259
	{                                       1,
260
  122,  148,   80,  145,   42,   43,  146,   44,   45,  101,
261
  102,  103,   46,   47,  131,   69,   49,  119,  120,   73,
262
   74,   70,   83,    2,   52,   53,  104,   65,   63,  155,
263
  158,  161,
264
};
265
const short pcap_yysindex[] =
266
	{                                      0,
267
2
    0,  237, -277, -266, -263,    0,    0,    0,    0,    0,
268
4
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
269
2
    0,    0,    0,    0, -274, -260, -232, -225, -275, -254,
270
    0,    0,    0,    0,    0,    0,  -34,    0,  289,    0,
271
 -283,    0,    0,   64,  478,  536,    0,  -25,    0,  237,
272
  237,    0,    0,    0,    0,  126,    0,    0,    0,    0,
273
    0,    0,    0,    0,    0,    0,  -34,    0,  -25,  289,
274
    0,    0,  182,  182,    0,    0,  -45,   21,    0,    0,
275
    0,   64,   64, -228, -226,    0,    0,    0,    0,    0,
276
    0,    0,    0, -273, -268, -264,    0,    0,    0,    0,
277
 -234,    0,    0,    0,    0,    0,    0,  289,  289,  289,
278
  289,  289,  289,  289,  289,    0,    0,    0,  289,  289,
279
  289,  -41,   29,   36,    0,    0,    0,    0,    0,    0,
280
 -207,   36,  156,    0,    0,    0,  182,  182,    0,    0,
281
 -224, -201, -198,    0,   62, -283,   36,    0, -153, -150,
282
 -145, -142,    0,    0, -180,    0,    0,    0,    0,    0,
283
    0,    0,  135,  135,  192,  -38,   -7,   -7,    0,    0,
284
  156,  156,  125,    0,    0,    0,    0,   36,    0,    0,
285
    0,    0,   64,   64,    0,    0,    0,    0, -268,    0,
286
 -162,    0,    0,    0,   35,    0,};
287
const short pcap_yyrindex[] =
288
	{                                      0,
289
    0,  143,    0,    0,    0,    0,    0,    0,    0,    0,
290
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
291
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
292
    0,    0,    0,    0,    0,    0,   11,    0,    0,    0,
293
  130,    0,    0,    0,    0,    0,    0,    1,    0,  524,
294
  524,    0,    0,    0,    0,    0,    0,    0,    0,    0,
295
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
296
    0,    0,  524,  524,    0,    0,   16,   18,    0,    0,
297
    0,    0,    0,  -18,  323,    0,    0,    0,    0,    0,
298
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
299
  337,    0,    0,    0,    0,    0,    0,    0,    0,    0,
300
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
301
    0,    0,  574,  610,    0,    0,    0,    0,    0,    0,
302
    0,    0,    0,    0,    0,    3,  524,  524,    0,    0,
303
    0,    0,    0,    0, -196,    0, -187,    0,    0,    0,
304
    0,    0,    0,    0,   20,    0,    0,    0,    0,    0,
305
    0,    0,   49,   78,   60,   88,   13,   38,    0,    0,
306
   26,   28,    0,    0,    0,    0,    0,  114,    0,    0,
307
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
308
    0,    0,    0,    0,    0,    0,};
309
const short pcap_yygindex[] =
310
	{                                      0,
311
  132,   40,  -65,    0,  -43,    0,    0,    0,    0,    0,
312
   34,    0,  598,   32,    0,  158,  614,    0,    0,   -5,
313
   -2,  612,  592,    0,    0,    0,    0,    0,    0,    0,
314
  -44,    0,
315
};
316
#define YYTABLESIZE 922
317
const short pcap_yytable[] =
318
	{                                     174,
319
   39,  142,   12,  114,  112,   40,  113,  125,  115,   54,
320
   88,   61,  120,  153,   46,   17,  144,   19,  156,  101,
321
   55,   46,  159,   56,   86,   40,   88,   41,   89,  135,
322
  140,   62,   57,  154,  114,   71,   72,  121,  157,  115,
323
  116,   39,  160,   12,  116,  116,   58,  116,  126,  116,
324
  120,   88,   64,  120,   59,  120,   17,  120,   19,  125,
325
  101,   60,  116,  116,  116,  121,   40,  143,   41,  175,
326
  120,  144,  120,  120,  120,  121,  176,  127,  121,  177,
327
  121,  123,  121,   79,  179,  180,  126,  124,  181,  126,
328
  149,  150,  151,  152,  125,  121,   38,  121,  121,  121,
329
  125,  123,  182,   40,  185,  120,  126,  186,  126,  126,
330
  126,  187,  134,  139,  188,  127,  189,  125,  127,  125,
331
  125,  125,   28,   28,  195,  124,  116,  196,  124,    1,
332
  121,   27,   27,   41,  162,  127,  120,  127,  127,  127,
333
  183,  126,    2,  184,  194,  124,    0,  124,  124,  124,
334
    0,  116,  125,    0,    0,  116,  116,    0,  116,   48,
335
  116,  121,  111,  127,    0,    0,  114,  112,  123,  113,
336
  127,  115,  126,  116,  116,  116,  114,  112,    0,  113,
337
  124,  115,  191,  125,    0,  130,  129,  128,    0,    0,
338
    0,    0,    0,  111,    0,    0,    0,  114,  112,    0,
339
  113,  127,  115,    0,    0,    0,    0,   48,   48,    0,
340
    0,  124,    0,    0,   38,    0,  141,  190,    0,    0,
341
    0,   40,  192,  193,    0,    0,   39,    0,    0,  111,
342
   48,   48,    0,  114,  112,    0,  113,  116,  115,    0,
343
   46,    0,   46,    0,   46,    0,    0,    0,  110,  126,
344
    0,    0,   22,    0,    0,    0,    0,   43,   43,   43,
345
   43,   43,    0,   43,    0,    0,   43,   43,   46,   38,
346
    0,    0,  108,  109,    0,    0,   40,   71,   72,  110,
347
    0,   39,    0,    0,    0,   43,   43,    0,   46,   46,
348
   46,   46,    0,    0,   48,   48,   43,   43,   43,   43,
349
   43,   43,   43,    0,    0,    0,  116,  116,  116,    0,
350
    0,    0,    0,  116,  116,    0,  120,  120,  120,   39,
351
   39,   12,   12,  120,  120,    0,    0,    0,   40,   88,
352
   88,  120,  120,   39,   17,   17,   19,   19,  101,  101,
353
    0,  121,  121,  121,   40,   40,   41,   41,  121,  121,
354
   22,    0,  126,  126,  126,   45,  121,  121,    0,  126,
355
  126,    0,   45,  125,  125,  125,    0,  126,  126,   32,
356
   75,   76,   77,   78,    0,    0,   32,    0,  125,  125,
357
    0,  127,  127,  127,    0,    0,    0,    0,  127,  127,
358
    0,  124,  124,  124,    0,    0,  127,  127,    0,   44,
359
   44,   44,   44,   44,    0,   44,  124,  124,   44,   44,
360
    0,    0,    0,    0,    0,    0,    0,  116,  116,  116,
361
    0,    0,    0,    0,  116,  116,    0,   44,   44,    0,
362
    0,    0,   27,   27,    0,  108,  109,    0,   44,   44,
363
   44,   44,   44,   44,   44,    3,    4,    0,    0,    5,
364
    6,    7,    8,    9,   10,   11,   12,   13,   14,   15,
365
   16,   17,   18,   19,   20,   21,  108,  109,   22,   23,
366
   24,   25,   26,   27,   28,   29,   30,    0,    0,    0,
367
    0,    0,    0,    0,   31,    0,    0,    0,   75,   76,
368
   77,   78,    0,    0,   32,   33,   34,   35,   36,   37,
369
    3,    4,  108,  109,    5,    6,    7,    8,    9,   10,
370
   11,   12,   13,   14,   15,   16,   17,   18,   19,   20,
371
   21,    0,    0,   22,   23,   24,   25,   26,   27,   28,
372
   29,   30,    0,    0,    0,    0,    0,    0,    0,   31,
373
    0,    0,    0,    0,    0,    0,    0,    0,    0,   32,
374
   33,   34,   35,   36,   37,    0,    0,    6,    7,    8,
375
    9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
376
   19,   20,   21,  111,    0,   22,    0,  114,  112,    0,
377
  113,   45,  115,   45,    0,   45,    0,    0,    0,    0,
378
    0,   31,    0,   51,    0,  118,  117,  116,    0,    0,
379
    0,   32,   33,   34,   35,   36,    0,    0,    0,   45,
380
    0,  117,    0,   50,    0,  117,  117,    0,  117,    0,
381
  117,    0,    0,   32,    0,    0,    0,    0,    0,   45,
382
   45,   45,   45,  117,  117,  117,   68,    0,    0,    0,
383
    0,   51,   51,   32,   32,   32,   32,  116,   67,    0,
384
   66,  116,  116,    0,  116,   82,  116,   81,    0,  110,
385
    0,   50,   50,  124,  138,  138,    0,  133,    0,  116,
386
  116,  116,    0,    0,    0,    0,    0,    0,   67,    0,
387
  132,    0,    0,  124,  137,  137,  136,  136,    0,    0,
388
    0,    0,    0,   67,   82,  147,   81,  117,    0,    0,
389
    0,    0,    0,    0,    0,  163,  164,  165,  166,  167,
390
  168,  169,  170,    0,    0,    0,  171,  172,  173,    0,
391
    0,    0,    0,    0,    0,    0,    0,    0,  138,  138,
392
    0,    0,    0,  116,   84,   85,   86,   87,   88,    0,
393
   89,    0,    0,   90,   91,    0,    0,    0,   50,  137,
394
  178,  136,    0,    0,    0,    0,    0,    0,    0,    0,
395
    0,    0,   92,   93,    0,    0,    0,    0,    0,    0,
396
    0,    0,    0,   94,   95,   96,   97,   98,   99,  100,
397
   44,   44,   44,   44,   44,    0,   44,    0,    0,   44,
398
   44,    0,    0,    0,   82,   82,   81,   81,    0,    0,
399
    0,    0,    0,    0,    0,    0,    0,    0,   44,   44,
400
    0,    0,    0,    0,    0,    0,    0,    0,    0,   44,
401
   44,   44,   44,   44,   44,   44,    0,    0,    0,    0,
402
    0,    0,    0,    0,    0,    0,    0,    0,    0,  105,
403
  106,  107,    0,    0,    0,    0,  108,  109,    0,    0,
404
2
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
405
2
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
406
    0,    0,    0,    0,    0,    0,    0,  117,  117,  117,
407
    0,    0,    0,    0,  117,  117,    0,    0,    0,    0,
408
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
409
    0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
410
4
    0,    0,    0,  116,  116,  116,    0,    0,    0,    0,
411
4
  116,  116,
412
};
413
2
const short pcap_yycheck[] =
414
2
	{                                      41,
415
    0,   47,    0,   42,   43,   40,   45,   51,   47,  287,
416
    0,  287,    0,  287,   33,    0,   82,    0,  287,    0,
417
  287,   40,  287,  287,  259,    0,  261,    0,  263,   73,
418
   74,  307,  307,  307,   42,  319,  320,    0,  307,   47,
419
   38,   41,  307,   41,   42,   43,  307,   45,    0,   47,
420
   38,   41,  307,   41,  287,   43,   41,   45,   41,    0,
421
   41,  287,   60,   61,   62,   91,   41,   47,   41,   41,
422
   58,  137,   60,   61,   62,   38,   41,    0,   41,  287,
423
   43,   50,   45,   44,  309,  287,   38,    0,  287,   41,
424
  319,  320,  319,  320,  138,   58,   33,   60,   61,   62,
425
   41,   70,   41,   40,  258,   93,   58,  258,   60,   61,
426
   62,  257,   73,   74,  257,   38,  297,   58,   41,   60,
427
   61,   62,  319,  320,  287,   38,  124,   93,   41,    0,
428
   93,  319,  320,    2,  101,   58,  124,   60,   61,   62,
429
  146,   93,    0,  146,  189,   58,   -1,   60,   61,   62,
430
   -1,   38,   93,   -1,   -1,   42,   43,   -1,   45,    2,
431
   47,  124,   38,   38,   -1,   -1,   42,   43,  137,   45,
432
   93,   47,  124,   60,   61,   62,   42,   43,   -1,   45,
433
   93,   47,   58,  124,   -1,   60,   61,   62,   -1,   -1,
434
   -1,   -1,   -1,   38,   -1,   -1,   -1,   42,   43,   -1,
435
   45,  124,   47,   -1,   -1,   -1,   -1,   50,   51,   -1,
436
   -1,  124,   -1,   -1,   33,   -1,  262,   93,   -1,   -1,
437
   -1,   40,  183,  184,   -1,   -1,   45,   -1,   -1,   38,
438
   73,   74,   -1,   42,   43,   -1,   45,  124,   47,   -1,
439
  259,   -1,  261,   -1,  263,   -1,   -1,   -1,  124,  124,
440
   -1,   -1,  287,   -1,   -1,   -1,   -1,  257,  258,  259,
441
  260,  261,   -1,  263,   -1,   -1,  266,  267,  287,   33,
442
   -1,   -1,  311,  312,   -1,   -1,   40,  319,  320,  124,
443
   -1,   45,   -1,   -1,   -1,  285,  286,   -1,  307,  308,
444
  309,  310,   -1,   -1,  137,  138,  296,  297,  298,  299,
445
  300,  301,  302,   -1,   -1,   -1,  304,  305,  306,   -1,
446
   -1,   -1,   -1,  311,  312,   -1,  304,  305,  306,  319,
447
  320,  319,  320,  311,  312,   -1,   -1,   -1,   40,  319,
448
  320,  319,  320,   45,  319,  320,  319,  320,  319,  320,
449
   -1,  304,  305,  306,  319,  320,  319,  320,  311,  312,
450
  287,   -1,  304,  305,  306,   33,  319,  320,   -1,  311,
451
  312,   -1,   40,  304,  305,  306,   -1,  319,  320,   33,
452
  307,  308,  309,  310,   -1,   -1,   40,   -1,  319,  320,
453
   -1,  304,  305,  306,   -1,   -1,   -1,   -1,  311,  312,
454
   -1,  304,  305,  306,   -1,   -1,  319,  320,   -1,  257,
455
  258,  259,  260,  261,   -1,  263,  319,  320,  266,  267,
456
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,
457
   -1,   -1,   -1,   -1,  311,  312,   -1,  285,  286,   -1,
458
   -1,   -1,  319,  320,   -1,  311,  312,   -1,  296,  297,
459
  298,  299,  300,  301,  302,  264,  265,   -1,   -1,  268,
460
  269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
461
  279,  280,  281,  282,  283,  284,  311,  312,  287,  288,
462
  289,  290,  291,  292,  293,  294,  295,   -1,   -1,   -1,
463
   -1,   -1,   -1,   -1,  303,   -1,   -1,   -1,  307,  308,
464
  309,  310,   -1,   -1,  313,  314,  315,  316,  317,  318,
465
  264,  265,  311,  312,  268,  269,  270,  271,  272,  273,
466
  274,  275,  276,  277,  278,  279,  280,  281,  282,  283,
467
  284,   -1,   -1,  287,  288,  289,  290,  291,  292,  293,
468
  294,  295,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  303,
469
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  313,
470
  314,  315,  316,  317,  318,   -1,   -1,  269,  270,  271,
471
  272,  273,  274,  275,  276,  277,  278,  279,  280,  281,
472
  282,  283,  284,   38,   -1,  287,   -1,   42,   43,   -1,
473
   45,  259,   47,  261,   -1,  263,   -1,   -1,   -1,   -1,
474
   -1,  303,   -1,    2,   -1,   60,   61,   62,   -1,   -1,
475
   -1,  313,  314,  315,  316,  317,   -1,   -1,   -1,  287,
476
   -1,   38,   -1,    2,   -1,   42,   43,   -1,   45,   -1,
477
   47,   -1,   -1,  287,   -1,   -1,   -1,   -1,   -1,  307,
478
  308,  309,  310,   60,   61,   62,   39,   -1,   -1,   -1,
479
   -1,   50,   51,  307,  308,  309,  310,   38,   37,   -1,
480
   37,   42,   43,   -1,   45,   44,   47,   44,   -1,  124,
481
   -1,   50,   51,   50,   73,   74,   -1,   70,   -1,   60,
482
   61,   62,   -1,   -1,   -1,   -1,   -1,   -1,   67,   -1,
483
   67,   -1,   -1,   70,   73,   74,   73,   74,   -1,   -1,
484
   -1,   -1,   -1,   82,   83,   82,   83,  124,   -1,   -1,
485
   -1,   -1,   -1,   -1,   -1,  108,  109,  110,  111,  112,
486
  113,  114,  115,   -1,   -1,   -1,  119,  120,  121,   -1,
487
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  137,  138,
488
   -1,   -1,   -1,  124,  257,  258,  259,  260,  261,   -1,
489
  263,   -1,   -1,  266,  267,   -1,   -1,   -1,  137,  138,
490
  137,  138,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
491
   -1,   -1,  285,  286,   -1,   -1,   -1,   -1,   -1,   -1,
492
   -1,   -1,   -1,  296,  297,  298,  299,  300,  301,  302,
493
  257,  258,  259,  260,  261,   -1,  263,   -1,   -1,  266,
494
  267,   -1,   -1,   -1,  183,  184,  183,  184,   -1,   -1,
495
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  285,  286,
496
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  296,
497
  297,  298,  299,  300,  301,  302,   -1,   -1,   -1,   -1,
498
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,
499
  305,  306,   -1,   -1,   -1,   -1,  311,  312,   -1,   -1,
500
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
501
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
502
   -1,   -1,   -1,   -1,   -1,   -1,   -1,  304,  305,  306,
503
   -1,   -1,   -1,   -1,  311,  312,   -1,   -1,   -1,   -1,
504
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
505
   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
506
   -1,   -1,   -1,  304,  305,  306,   -1,   -1,   -1,   -1,
507
  311,  312,
508
};
509
#define YYFINAL 1
510
#ifndef YYDEBUG
511
#define YYDEBUG 0
512
#endif
513
#define YYMAXTOKEN 321
514
#if YYDEBUG
515
const char * const pcap_yyname[] =
516
	{
517
"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
518
"'!'",0,0,0,0,"'&'",0,"'('","')'","'*'","'+'",0,"'-'",0,"'/'",0,0,0,0,0,0,0,0,0,
519
0,"':'",0,"'<'","'='","'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
520
0,0,"'['",0,"']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
521
"'|'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
522
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
523
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
524
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"DST","SRC","HOST","GATEWAY","NET","MASK","PORT",
525
"LESS","GREATER","PROTO","PROTOCHAIN","BYTE","ARP","RARP","IP","TCP","UDP",
526
"ICMP","IGMP","IGRP","PIM","ATALK","DECNET","LAT","SCA","MOPRC","MOPDL","STP",
527
"TK_BROADCAST","TK_MULTICAST","NUM","INBOUND","OUTBOUND","PF_IFNAME","PF_RSET",
528
"PF_RNR","PF_SRNR","PF_REASON","PF_ACTION","TYPE","SUBTYPE","DIR","ADDR1",
529
"ADDR2","ADDR3","ADDR4","LINK","GEQ","LEQ","NEQ","ID","EID","HID","HID6","LSH",
530
"RSH","LEN","IPV6","ICMPV6","AH","ESP","VLAN","OR","AND","UMINUS",
531
};
532
const char * const pcap_yyrule[] =
533
	{"$accept : prog",
534
"prog : null expr",
535
"prog : null",
536
"null :",
537
"expr : term",
538
"expr : expr and term",
539
"expr : expr and id",
540
"expr : expr or term",
541
"expr : expr or id",
542
"and : AND",
543
"or : OR",
544
"id : nid",
545
"id : pnum",
546
"id : paren pid ')'",
547
"nid : ID",
548
"nid : HID '/' NUM",
549
"nid : HID MASK HID",
550
"nid : HID",
551
"nid : HID6 '/' NUM",
552
"nid : HID6",
553
"nid : EID",
554
"nid : not id",
555
"not : '!'",
556
"paren : '('",
557
"pid : nid",
558
"pid : qid and id",
559
"pid : qid or id",
560
"qid : pnum",
561
"qid : pid",
562
"term : rterm",
563
"term : not term",
564
"head : pqual dqual aqual",
565
"head : pqual dqual",
566
"head : pqual aqual",
567
"head : pqual PROTO",
568
"head : pqual PROTOCHAIN",
569
"head : pqual ndaqual",
570
"rterm : head id",
571
"rterm : paren expr ')'",
572
"rterm : pname",
573
"rterm : arth relop arth",
574
"rterm : arth irelop arth",
575
"rterm : other",
576
"pqual : pname",
577
"pqual :",
578
"dqual : SRC",
579
"dqual : DST",
580
"dqual : SRC OR DST",
581
"dqual : DST OR SRC",
582
"dqual : SRC AND DST",
583
"dqual : DST AND SRC",
584
"dqual : ADDR1",
585
"dqual : ADDR2",
586
"dqual : ADDR3",
587
"dqual : ADDR4",
588
"aqual : HOST",
589
"aqual : NET",
590
"aqual : PORT",
591
"ndaqual : GATEWAY",
592
"pname : LINK",
593
"pname : IP",
594
"pname : ARP",
595
"pname : RARP",
596
"pname : TCP",
597
"pname : UDP",
598
"pname : ICMP",
599
"pname : IGMP",
600
"pname : IGRP",
601
"pname : PIM",
602
"pname : ATALK",
603
"pname : DECNET",
604
"pname : LAT",
605
"pname : SCA",
606
"pname : MOPDL",
607
"pname : MOPRC",
608
"pname : IPV6",
609
"pname : ICMPV6",
610
"pname : AH",
611
"pname : ESP",
612
"pname : STP",
613
"other : pqual TK_BROADCAST",
614
"other : pqual TK_MULTICAST",
615
"other : LESS NUM",
616
"other : GREATER NUM",
617
"other : BYTE NUM byteop NUM",
618
"other : INBOUND",
619
"other : OUTBOUND",
620
"other : VLAN pnum",
621
"other : VLAN",
622
"other : pfvar",
623
"other : pqual p80211",
624
"pfvar : PF_IFNAME ID",
625
"pfvar : PF_RSET ID",
626
"pfvar : PF_RNR NUM",
627
"pfvar : PF_SRNR NUM",
628
"pfvar : PF_REASON reason",
629
"pfvar : PF_ACTION action",
630
"reason : NUM",
631
"reason : ID",
632
"action : ID",
633
"p80211 : TYPE type SUBTYPE subtype",
634
"p80211 : TYPE type",
635
"p80211 : SUBTYPE subtype",
636
"p80211 : DIR dir",
637
"type : NUM",
638
"type : ID",
639
"subtype : NUM",
640
"subtype : ID",
641
"dir : NUM",
642
"dir : ID",
643
"relop : '>'",
644
"relop : GEQ",
645
"relop : '='",
646
"irelop : LEQ",
647
"irelop : '<'",
648
"irelop : NEQ",
649
"arth : pnum",
650
"arth : narth",
651
"narth : pname '[' arth ']'",
652
"narth : pname '[' arth ':' NUM ']'",
653
"narth : arth '+' arth",
654
"narth : arth '-' arth",
655
"narth : arth '*' arth",
656
"narth : arth '/' arth",
657
"narth : arth '&' arth",
658
"narth : arth '|' arth",
659
"narth : arth LSH arth",
660
"narth : arth RSH arth",
661
"narth : '-' arth",
662
"narth : paren narth ')'",
663
"narth : LEN",
664
"byteop : '&'",
665
"byteop : '|'",
666
"byteop : '<'",
667
"byteop : '>'",
668
"byteop : '='",
669
"pnum : NUM",
670
"pnum : paren pnum ')'",
671
};
672
#endif
673
#ifdef YYSTACKSIZE
674
#undef YYMAXDEPTH
675
#define YYMAXDEPTH YYSTACKSIZE
676
#else
677
#ifdef YYMAXDEPTH
678
#define YYSTACKSIZE YYMAXDEPTH
679
#else
680
#define YYSTACKSIZE 10000
681
#define YYMAXDEPTH 10000
682
#endif
683
#endif
684
#define YYINITSTACKSIZE 200
685
/* LINTUSED */
686
int yydebug;
687
int yynerrs;
688
int yyerrflag;
689
int yychar;
690
short *yyssp;
691
YYSTYPE *yyvsp;
692
YYSTYPE yyval;
693
YYSTYPE yylval;
694
short *yyss;
695
short *yysslim;
696
YYSTYPE *yyvs;
697
unsigned int yystacksize;
698
int yyparse(void);
699
/* allocate initial stack or double stack size, up to YYMAXDEPTH */
700
static int yygrowstack(void)
701
{
702
    unsigned int newsize;
703
    long sslen;
704
    short *newss;
705
    YYSTYPE *newvs;
706
707
4
    if ((newsize = yystacksize) == 0)
708
2
        newsize = YYINITSTACKSIZE;
709
    else if (newsize >= YYMAXDEPTH)
710
        return -1;
711
    else if ((newsize *= 2) > YYMAXDEPTH)
712
        newsize = YYMAXDEPTH;
713
2
    sslen = yyssp - yyss;
714
#ifdef SIZE_MAX
715
#define YY_SIZE_MAX SIZE_MAX
716
#else
717
#define YY_SIZE_MAX 0xffffffffU
718
#endif
719

4
    if (newsize && YY_SIZE_MAX / newsize < sizeof *newss)
720
        goto bail;
721
4
    newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
722
2
      (short *)malloc(newsize * sizeof *newss); /* overflow check above */
723
2
    if (newss == NULL)
724
        goto bail;
725
2
    yyss = newss;
726
2
    yyssp = newss + sslen;
727

4
    if (newsize && YY_SIZE_MAX / newsize < sizeof *newvs)
728
        goto bail;
729
4
    newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
730
2
      (YYSTYPE *)malloc(newsize * sizeof *newvs); /* overflow check above */
731
2
    if (newvs == NULL)
732
        goto bail;
733
2
    yyvs = newvs;
734
2
    yyvsp = newvs + sslen;
735
2
    yystacksize = newsize;
736
2
    yysslim = yyss + newsize - 1;
737
2
    return 0;
738
bail:
739
    if (yyss)
740
            free(yyss);
741
    if (yyvs)
742
            free(yyvs);
743
    yyss = yyssp = NULL;
744
    yyvs = yyvsp = NULL;
745
    yystacksize = 0;
746
    return -1;
747
2
}
748
749
#define YYABORT goto yyabort
750
#define YYREJECT goto yyabort
751
#define YYACCEPT goto yyaccept
752
#define YYERROR goto yyerrlab
753
int
754
yyparse(void)
755
{
756
    int yym, yyn, yystate;
757
#if YYDEBUG
758
    const char *yys;
759
760
    if ((yys = getenv("YYDEBUG")))
761
    {
762
        yyn = *yys;
763
        if (yyn >= '0' && yyn <= '9')
764
            yydebug = yyn - '0';
765
    }
766
#endif /* YYDEBUG */
767
768
4
    yynerrs = 0;
769
2
    yyerrflag = 0;
770
2
    yychar = (-1);
771
772

4
    if (yyss == NULL && yygrowstack()) goto yyoverflow;
773
2
    yyssp = yyss;
774
2
    yyvsp = yyvs;
775
2
    *yyssp = yystate = 0;
776
777
yyloop:
778
52
    if ((yyn = yydefred[yystate]) != 0) goto yyreduce;
779
22
    if (yychar < 0)
780
    {
781
18
        if ((yychar = yylex()) < 0) yychar = 0;
782
#if YYDEBUG
783
        if (yydebug)
784
        {
785
            yys = 0;
786
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
787
            if (!yys) yys = "illegal-symbol";
788
            printf("%sdebug: state %d, reading %d (%s)\n",
789
                    YYPREFIX, yystate, yychar, yys);
790
        }
791
#endif
792
18
    }
793

86
    if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
794
42
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
795
    {
796
#if YYDEBUG
797
        if (yydebug)
798
            printf("%sdebug: state %d, shifting to state %d\n",
799
                    YYPREFIX, yystate, yytable[yyn]);
800
#endif
801

16
        if (yyssp >= yysslim && yygrowstack())
802
        {
803
            goto yyoverflow;
804
        }
805
16
        *++yyssp = yystate = yytable[yyn];
806
16
        *++yyvsp = yylval;
807
16
        yychar = (-1);
808
16
        if (yyerrflag > 0)  --yyerrflag;
809
        goto yyloop;
810
    }
811

24
    if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
812
12
            yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
813
    {
814
6
        yyn = yytable[yyn];
815
6
        goto yyreduce;
816
    }
817
    if (yyerrflag) goto yyinrecovery;
818
#if defined(__GNUC__)
819
    goto yynewerror;
820
#endif
821
yynewerror:
822
    yyerror("syntax error");
823
#if defined(__GNUC__)
824
    goto yyerrlab;
825
#endif
826
yyerrlab:
827
    ++yynerrs;
828
yyinrecovery:
829
    if (yyerrflag < 3)
830
    {
831
        yyerrflag = 3;
832
        for (;;)
833
        {
834
            if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
835
                    yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
836
            {
837
#if YYDEBUG
838
                if (yydebug)
839
                    printf("%sdebug: state %d, error recovery shifting\
840
 to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
841
#endif
842
                if (yyssp >= yysslim && yygrowstack())
843
                {
844
                    goto yyoverflow;
845
                }
846
                *++yyssp = yystate = yytable[yyn];
847
                *++yyvsp = yylval;
848
                goto yyloop;
849
            }
850
            else
851
            {
852
#if YYDEBUG
853
                if (yydebug)
854
                    printf("%sdebug: error recovery discarding state %d\n",
855
                            YYPREFIX, *yyssp);
856
#endif
857
                if (yyssp <= yyss) goto yyabort;
858
                --yyssp;
859
                --yyvsp;
860
            }
861
        }
862
    }
863
    else
864
    {
865
        if (yychar == 0) goto yyabort;
866
#if YYDEBUG
867
        if (yydebug)
868
        {
869
            yys = 0;
870
            if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
871
            if (!yys) yys = "illegal-symbol";
872
            printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
873
                    YYPREFIX, yystate, yychar, yys);
874
        }
875
#endif
876
        yychar = (-1);
877
        goto yyloop;
878
    }
879
yyreduce:
880
#if YYDEBUG
881
    if (yydebug)
882
        printf("%sdebug: state %d, reducing by rule %d (%s)\n",
883
                YYPREFIX, yystate, yyn, yyrule[yyn]);
884
#endif
885
36
    yym = yylen[yyn];
886
36
    if (yym)
887
34
        yyval = yyvsp[1-yym];
888
    else
889
2
        memset(&yyval, 0, sizeof yyval);
890































60
    switch (yyn)
891
    {
892
case 1:
893
#line 135 "grammar.y"
894
{
895
	finish_parse(yyvsp[0].blk.b);
896
}
897
break;
898
case 3:
899
#line 140 "grammar.y"
900
{ yyval.blk.q = qerr; }
901
break;
902
case 5:
903
#line 143 "grammar.y"
904
{ gen_and(yyvsp[-2].blk.b, yyvsp[0].blk.b); yyval.blk = yyvsp[0].blk; }
905
break;
906
case 6:
907
#line 144 "grammar.y"
908
{ gen_and(yyvsp[-2].blk.b, yyvsp[0].blk.b); yyval.blk = yyvsp[0].blk; }
909
break;
910
case 7:
911
#line 145 "grammar.y"
912
{ gen_or(yyvsp[-2].blk.b, yyvsp[0].blk.b); yyval.blk = yyvsp[0].blk; }
913
break;
914
case 8:
915
#line 146 "grammar.y"
916
{ gen_or(yyvsp[-2].blk.b, yyvsp[0].blk.b); yyval.blk = yyvsp[0].blk; }
917
break;
918
case 9:
919
#line 148 "grammar.y"
920
{ yyval.blk = yyvsp[-1].blk; }
921
break;
922
case 10:
923
#line 150 "grammar.y"
924
{ yyval.blk = yyvsp[-1].blk; }
925
break;
926
case 12:
927
#line 153 "grammar.y"
928
{ yyval.blk.b = gen_ncode(NULL, (bpf_u_int32)yyvsp[0].i,
929
						   yyval.blk.q = yyvsp[-1].blk.q); }
930
break;
931
case 13:
932
#line 155 "grammar.y"
933
{ yyval.blk = yyvsp[-1].blk; }
934
break;
935
case 14:
936
#line 157 "grammar.y"
937
{ yyval.blk.b = gen_scode(yyvsp[0].s, yyval.blk.q = yyvsp[-1].blk.q); }
938
break;
939
case 15:
940
#line 158 "grammar.y"
941
{ yyval.blk.b = gen_mcode(yyvsp[-2].s, NULL, yyvsp[0].i,
942
				    yyval.blk.q = yyvsp[-3].blk.q); }
943
break;
944
case 16:
945
#line 160 "grammar.y"
946
{ yyval.blk.b = gen_mcode(yyvsp[-2].s, yyvsp[0].s, 0,
947
				    yyval.blk.q = yyvsp[-3].blk.q); }
948
break;
949
case 17:
950
#line 162 "grammar.y"
951
{
952
				  /* Decide how to parse HID based on proto */
953
				  yyval.blk.q = yyvsp[-1].blk.q;
954
				  switch (yyval.blk.q.proto) {
955
				  case Q_DECNET:
956
					yyval.blk.b = gen_ncode(yyvsp[0].s, 0, yyval.blk.q);
957
					break;
958
				  default:
959
					yyval.blk.b = gen_ncode(yyvsp[0].s, 0, yyval.blk.q);
960
					break;
961
				  }
962
				}
963
break;
964
case 18:
965
#line 174 "grammar.y"
966
{
967
#ifdef INET6
968
				  yyval.blk.b = gen_mcode6(yyvsp[-2].s, NULL, yyvsp[0].i,
969
				    yyval.blk.q = yyvsp[-3].blk.q);
970
#else
971
				  bpf_error("'ip6addr/prefixlen' not supported "
972
					"in this configuration");
973
#endif /*INET6*/
974
				}
975
break;
976
case 19:
977
#line 183 "grammar.y"
978
{
979
#ifdef INET6
980
				  yyval.blk.b = gen_mcode6(yyvsp[0].s, 0, 128,
981
				    yyval.blk.q = yyvsp[-1].blk.q);
982
#else
983
				  bpf_error("'ip6addr' not supported "
984
					"in this configuration");
985
#endif /*INET6*/
986
				}
987
break;
988
case 20:
989
#line 192 "grammar.y"
990
{ yyval.blk.b = gen_ecode(yyvsp[0].e, yyval.blk.q = yyvsp[-1].blk.q); }
991
break;
992
case 21:
993
#line 193 "grammar.y"
994
{ gen_not(yyvsp[0].blk.b); yyval.blk = yyvsp[0].blk; }
995
break;
996
case 22:
997
#line 195 "grammar.y"
998
{ yyval.blk = yyvsp[-1].blk; }
999
break;
1000
case 23:
1001
#line 197 "grammar.y"
1002
{ yyval.blk = yyvsp[-1].blk; }
1003
break;
1004
case 25:
1005
#line 200 "grammar.y"
1006
{ gen_and(yyvsp[-2].blk.b, yyvsp[0].blk.b); yyval.blk = yyvsp[0].blk; }
1007
break;
1008
case 26:
1009
#line 201 "grammar.y"
1010
{ gen_or(yyvsp[-2].blk.b, yyvsp[0].blk.b); yyval.blk = yyvsp[0].blk; }
1011
break;
1012
case 27:
1013
#line 203 "grammar.y"
1014
{ yyval.blk.b = gen_ncode(NULL, (bpf_u_int32)yyvsp[0].i,
1015
						   yyval.blk.q = yyvsp[-1].blk.q); }
1016
break;
1017
case 30:
1018
#line 208 "grammar.y"
1019
{ gen_not(yyvsp[0].blk.b); yyval.blk = yyvsp[0].blk; }
1020
break;
1021
case 31:
1022
#line 210 "grammar.y"
1023
{ QSET(yyval.blk.q, yyvsp[-2].i, yyvsp[-1].i, yyvsp[0].i); }
1024
break;
1025
case 32:
1026
#line 211 "grammar.y"
1027
{ QSET(yyval.blk.q, yyvsp[-1].i, yyvsp[0].i, Q_DEFAULT); }
1028
break;
1029
case 33:
1030
#line 212 "grammar.y"
1031
{ QSET(yyval.blk.q, yyvsp[-1].i, Q_DEFAULT, yyvsp[0].i); }
1032
break;
1033
case 34:
1034
#line 213 "grammar.y"
1035
{ QSET(yyval.blk.q, yyvsp[-1].i, Q_DEFAULT, Q_PROTO); }
1036
break;
1037
case 35:
1038
#line 214 "grammar.y"
1039
{ QSET(yyval.blk.q, yyvsp[-1].i, Q_DEFAULT, Q_PROTOCHAIN); }
1040
break;
1041
case 36:
1042
#line 215 "grammar.y"
1043
{ QSET(yyval.blk.q, yyvsp[-1].i, Q_DEFAULT, yyvsp[0].i); }
1044
break;
1045
case 37:
1046
#line 217 "grammar.y"
1047
{ yyval.blk = yyvsp[0].blk; }
1048
break;
1049
case 38:
1050
#line 218 "grammar.y"
1051
{ yyval.blk.b = yyvsp[-1].blk.b; yyval.blk.q = yyvsp[-2].blk.q; }
1052
break;
1053
case 39:
1054
#line 219 "grammar.y"
1055
{ yyval.blk.b = gen_proto_abbrev(yyvsp[0].i); yyval.blk.q = qerr; }
1056
break;
1057
case 40:
1058
#line 220 "grammar.y"
1059
{ yyval.blk.b = gen_relation(yyvsp[-1].i, yyvsp[-2].a, yyvsp[0].a, 0);
1060
				  yyval.blk.q = qerr; }
1061
break;
1062
case 41:
1063
#line 222 "grammar.y"
1064
{ yyval.blk.b = gen_relation(yyvsp[-1].i, yyvsp[-2].a, yyvsp[0].a, 1);
1065
				  yyval.blk.q = qerr; }
1066
break;
1067
case 42:
1068
#line 224 "grammar.y"
1069
{ yyval.blk.b = yyvsp[0].rblk; yyval.blk.q = qerr; }
1070
break;
1071
case 44:
1072
#line 228 "grammar.y"
1073
{ yyval.i = Q_DEFAULT; }
1074
break;
1075
case 45:
1076
#line 231 "grammar.y"
1077
{ yyval.i = Q_SRC; }
1078
break;
1079
case 46:
1080
#line 232 "grammar.y"
1081
{ yyval.i = Q_DST; }
1082
break;
1083
case 47:
1084
#line 233 "grammar.y"
1085
{ yyval.i = Q_OR; }
1086
break;
1087
case 48:
1088
#line 234 "grammar.y"
1089
{ yyval.i = Q_OR; }
1090
break;
1091
case 49:
1092
#line 235 "grammar.y"
1093
{ yyval.i = Q_AND; }
1094
break;
1095
case 50:
1096
#line 236 "grammar.y"
1097
{ yyval.i = Q_AND; }
1098
break;
1099
case 51:
1100
#line 237 "grammar.y"
1101
{ yyval.i = Q_ADDR1; }
1102
break;
1103
case 52:
1104
#line 238 "grammar.y"
1105
{ yyval.i = Q_ADDR2; }
1106
break;
1107
case 53:
1108
#line 239 "grammar.y"
1109
{ yyval.i = Q_ADDR3; }
1110
break;
1111
case 54:
1112
#line 240 "grammar.y"
1113
{ yyval.i = Q_ADDR4; }
1114
break;
1115
case 55:
1116
#line 244 "grammar.y"
1117
{ yyval.i = Q_HOST; }
1118
break;
1119
case 56:
1120
#line 245 "grammar.y"
1121
{ yyval.i = Q_NET; }
1122
break;
1123
case 57:
1124
#line 246 "grammar.y"
1125
{ yyval.i = Q_PORT; }
1126
break;
1127
case 58:
1128
#line 249 "grammar.y"
1129
{ yyval.i = Q_GATEWAY; }
1130
break;
1131
case 59:
1132
#line 251 "grammar.y"
1133
{ yyval.i = Q_LINK; }
1134
break;
1135
case 60:
1136
#line 252 "grammar.y"
1137
{ yyval.i = Q_IP; }
1138
break;
1139
case 61:
1140
#line 253 "grammar.y"
1141
{ yyval.i = Q_ARP; }
1142
break;
1143
case 62:
1144
#line 254 "grammar.y"
1145
{ yyval.i = Q_RARP; }
1146
break;
1147
case 63:
1148
#line 255 "grammar.y"
1149
{ yyval.i = Q_TCP; }
1150
break;
1151
case 64:
1152
#line 256 "grammar.y"
1153
{ yyval.i = Q_UDP; }
1154
break;
1155
case 65:
1156
#line 257 "grammar.y"
1157
{ yyval.i = Q_ICMP; }
1158
break;
1159
case 66:
1160
#line 258 "grammar.y"
1161
{ yyval.i = Q_IGMP; }
1162
break;
1163
case 67:
1164
#line 259 "grammar.y"
1165
{ yyval.i = Q_IGRP; }
1166
break;
1167
case 68:
1168
#line 260 "grammar.y"
1169
{ yyval.i = Q_PIM; }
1170
break;
1171
case 69:
1172
#line 261 "grammar.y"
1173
{ yyval.i = Q_ATALK; }
1174
break;
1175
case 70:
1176
#line 262 "grammar.y"
1177
{ yyval.i = Q_DECNET; }
1178
break;
1179
case 71:
1180
#line 263 "grammar.y"
1181
{ yyval.i = Q_LAT; }
1182
break;
1183
case 72:
1184
#line 264 "grammar.y"
1185
{ yyval.i = Q_SCA; }
1186
break;
1187
case 73:
1188
#line 265 "grammar.y"
1189
{ yyval.i = Q_MOPDL; }
1190
break;
1191
case 74:
1192
#line 266 "grammar.y"
1193
{ yyval.i = Q_MOPRC; }
1194
break;
1195
case 75:
1196
#line 267 "grammar.y"
1197
{ yyval.i = Q_IPV6; }
1198
break;
1199
case 76:
1200
#line 268 "grammar.y"
1201
{ yyval.i = Q_ICMPV6; }
1202
break;
1203
case 77:
1204
#line 269 "grammar.y"
1205
{ yyval.i = Q_AH; }
1206
break;
1207
case 78:
1208
#line 270 "grammar.y"
1209
{ yyval.i = Q_ESP; }
1210
break;
1211
case 79:
1212
#line 271 "grammar.y"
1213
{ yyval.i = Q_STP; }
1214
break;
1215
case 80:
1216
#line 273 "grammar.y"
1217
{ yyval.rblk = gen_broadcast(yyvsp[-1].i); }
1218
break;
1219
case 81:
1220
#line 274 "grammar.y"
1221
{ yyval.rblk = gen_multicast(yyvsp[-1].i); }
1222
break;
1223
case 82:
1224
#line 275 "grammar.y"
1225
{ yyval.rblk = gen_less(yyvsp[0].i); }
1226
break;
1227
case 83:
1228
#line 276 "grammar.y"
1229
{ yyval.rblk = gen_greater(yyvsp[0].i); }
1230
break;
1231
case 84:
1232
#line 277 "grammar.y"
1233
{ yyval.rblk = gen_byteop(yyvsp[-1].i, yyvsp[-2].i, yyvsp[0].i); }
1234
break;
1235
case 85:
1236
#line 278 "grammar.y"
1237
{ yyval.rblk = gen_inbound(0); }
1238
break;
1239
case 86:
1240
#line 279 "grammar.y"
1241
{ yyval.rblk = gen_inbound(1); }
1242
break;
1243
case 87:
1244
#line 280 "grammar.y"
1245
{ yyval.rblk = gen_vlan(yyvsp[0].i); }
1246
break;
1247
case 88:
1248
#line 281 "grammar.y"
1249
{ yyval.rblk = gen_vlan(-1); }
1250
break;
1251
case 89:
1252
#line 282 "grammar.y"
1253
{ yyval.rblk = yyvsp[0].rblk; }
1254
break;
1255
case 90:
1256
#line 283 "grammar.y"
1257
{ yyval.rblk = yyvsp[0].rblk; }
1258
break;
1259
case 91:
1260
#line 286 "grammar.y"
1261
{ yyval.rblk = gen_pf_ifname(yyvsp[0].s); }
1262
break;
1263
case 92:
1264
#line 287 "grammar.y"
1265
{ yyval.rblk = gen_pf_ruleset(yyvsp[0].s); }
1266
break;
1267
case 93:
1268
#line 288 "grammar.y"
1269
{ yyval.rblk = gen_pf_rnr(yyvsp[0].i); }
1270
break;
1271
case 94:
1272
#line 289 "grammar.y"
1273
{ yyval.rblk = gen_pf_srnr(yyvsp[0].i); }
1274
break;
1275
case 95:
1276
#line 290 "grammar.y"
1277
{ yyval.rblk = gen_pf_reason(yyvsp[0].i); }
1278
break;
1279
case 96:
1280
#line 291 "grammar.y"
1281
{ yyval.rblk = gen_pf_action(yyvsp[0].i); }
1282
break;
1283
case 97:
1284
#line 294 "grammar.y"
1285
{ yyval.i = yyvsp[0].i; }
1286
break;
1287
case 98:
1288
#line 295 "grammar.y"
1289
{ const char *reasons[] = PFRES_NAMES;
1290
				  int i;
1291
				  for (i = 0; reasons[i]; i++) {
1292
					  if (strcasecmp(yyvsp[0].s, reasons[i]) == 0) {
1293
						  yyval.i = i;
1294
						  break;
1295
					  }
1296
				  }
1297
				  if (reasons[i] == NULL)
1298
					  bpf_error("unknown PF reason");
1299
				}
1300
break;
1301
case 99:
1302
#line 308 "grammar.y"
1303
{ if (strcasecmp(yyvsp[0].s, "pass") == 0 ||
1304
				      strcasecmp(yyvsp[0].s, "accept") == 0)
1305
					yyval.i = PF_PASS;
1306
				  else if (strcasecmp(yyvsp[0].s, "drop") == 0 ||
1307
				      strcasecmp(yyvsp[0].s, "block") == 0)
1308
					yyval.i = PF_DROP;
1309
				  else if (strcasecmp(yyvsp[0].s, "match") == 0)
1310
					yyval.i = PF_MATCH;
1311
				  else if (strcasecmp(yyvsp[0].s, "rdr") == 0)
1312
				  	yyval.i = PF_RDR;
1313
				  else if (strcasecmp(yyvsp[0].s, "nat") == 0)
1314
				  	yyval.i = PF_NAT;
1315
				  else if (strcasecmp(yyvsp[0].s, "binat") == 0)
1316
				  	yyval.i = PF_BINAT;
1317
				  else if (strcasecmp(yyvsp[0].s, "scrub") == 0)
1318
				  	yyval.i = PF_SCRUB;
1319
				  else
1320
					  bpf_error("unknown PF action");
1321
				}
1322
break;
1323
case 100:
1324
#line 330 "grammar.y"
1325
{ yyval.rblk = gen_p80211_type(yyvsp[-2].i | yyvsp[0].i,
1326
					IEEE80211_FC0_TYPE_MASK |
1327
					IEEE80211_FC0_SUBTYPE_MASK);
1328
				}
1329
break;
1330
case 101:
1331
#line 334 "grammar.y"
1332
{ yyval.rblk = gen_p80211_type(yyvsp[0].i,
1333
					IEEE80211_FC0_TYPE_MASK); }
1334
break;
1335
case 102:
1336
#line 336 "grammar.y"
1337
{ yyval.rblk = gen_p80211_type(yyvsp[0].i,
1338
					IEEE80211_FC0_SUBTYPE_MASK); }
1339
break;
1340
case 103:
1341
#line 338 "grammar.y"
1342
{ yyval.rblk = gen_p80211_fcdir(yyvsp[0].i); }
1343
break;
1344
case 105:
1345
#line 342 "grammar.y"
1346
{ if (strcasecmp(yyvsp[0].s, "data") == 0)
1347
					yyval.i = IEEE80211_FC0_TYPE_DATA;
1348
				  else if (strcasecmp(yyvsp[0].s, "mgt") == 0 ||
1349
					strcasecmp(yyvsp[0].s, "management") == 0)
1350
					yyval.i = IEEE80211_FC0_TYPE_MGT;
1351
				  else if (strcasecmp(yyvsp[0].s, "ctl") == 0 ||
1352
					strcasecmp(yyvsp[0].s, "control") == 0)
1353
					yyval.i = IEEE80211_FC0_TYPE_CTL;
1354
				  else
1355
					  bpf_error("unknown 802.11 type");
1356
				}
1357
break;
1358
case 107:
1359
#line 356 "grammar.y"
1360
{ if (strcasecmp(yyvsp[0].s, "assocreq") == 0)
1361
					yyval.i = IEEE80211_FC0_SUBTYPE_ASSOC_REQ;
1362
				  else if (strcasecmp(yyvsp[0].s, "assocresp") == 0)
1363
					yyval.i = IEEE80211_FC0_SUBTYPE_ASSOC_RESP;
1364
				  else if (strcasecmp(yyvsp[0].s, "reassocreq") == 0)
1365
					yyval.i = IEEE80211_FC0_SUBTYPE_REASSOC_REQ;
1366
				  else if (strcasecmp(yyvsp[0].s, "reassocresp") == 0)
1367
					yyval.i = IEEE80211_FC0_SUBTYPE_REASSOC_RESP;
1368
				  else if (strcasecmp(yyvsp[0].s, "probereq") == 0)
1369
					yyval.i = IEEE80211_FC0_SUBTYPE_PROBE_REQ;
1370
				  else if (strcasecmp(yyvsp[0].s, "proberesp") == 0)
1371
					yyval.i = IEEE80211_FC0_SUBTYPE_PROBE_RESP;
1372
				  else if (strcasecmp(yyvsp[0].s, "beacon") == 0)
1373
					yyval.i = IEEE80211_FC0_SUBTYPE_BEACON;
1374
				  else if (strcasecmp(yyvsp[0].s, "atim") == 0)
1375
					yyval.i = IEEE80211_FC0_SUBTYPE_ATIM;
1376
				  else if (strcasecmp(yyvsp[0].s, "disassoc") == 0 ||
1377
				      strcasecmp(yyvsp[0].s, "disassociation") == 0)
1378
					yyval.i = IEEE80211_FC0_SUBTYPE_DISASSOC;
1379
				  else if (strcasecmp(yyvsp[0].s, "auth") == 0 ||
1380
				      strcasecmp(yyvsp[0].s, "authentication") == 0)
1381
					yyval.i = IEEE80211_FC0_SUBTYPE_AUTH;
1382
				  else if (strcasecmp(yyvsp[0].s, "deauth") == 0 ||
1383
				      strcasecmp(yyvsp[0].s, "deauthentication") == 0)
1384
					yyval.i = IEEE80211_FC0_SUBTYPE_DEAUTH;
1385
				  else if (strcasecmp(yyvsp[0].s, "data") == 0)
1386
					yyval.i = IEEE80211_FC0_SUBTYPE_DATA;
1387
				  else
1388
					  bpf_error("unknown 802.11 subtype");
1389
				}
1390
break;
1391
case 109:
1392
#line 389 "grammar.y"
1393
{ if (strcasecmp(yyvsp[0].s, "nods") == 0)
1394
					yyval.i = IEEE80211_FC1_DIR_NODS;
1395
				  else if (strcasecmp(yyvsp[0].s, "tods") == 0)
1396
					yyval.i = IEEE80211_FC1_DIR_TODS;
1397
				  else if (strcasecmp(yyvsp[0].s, "fromds") == 0)
1398
					yyval.i = IEEE80211_FC1_DIR_FROMDS;
1399
				  else if (strcasecmp(yyvsp[0].s, "dstods") == 0)
1400
					yyval.i = IEEE80211_FC1_DIR_DSTODS;
1401
				  else
1402
					bpf_error("unknown 802.11 direction");
1403
				}
1404
break;
1405
case 110:
1406
#line 402 "grammar.y"
1407
{ yyval.i = BPF_JGT; }
1408
break;
1409
case 111:
1410
#line 403 "grammar.y"
1411
{ yyval.i = BPF_JGE; }
1412
break;
1413
case 112:
1414
#line 404 "grammar.y"
1415
{ yyval.i = BPF_JEQ; }
1416
break;
1417
case 113:
1418
#line 406 "grammar.y"
1419
{ yyval.i = BPF_JGT; }
1420
break;
1421
case 114:
1422
#line 407 "grammar.y"
1423
{ yyval.i = BPF_JGE; }
1424
break;
1425
case 115:
1426
#line 408 "grammar.y"
1427
{ yyval.i = BPF_JEQ; }
1428
break;
1429
case 116:
1430
#line 410 "grammar.y"
1431
{ yyval.a = gen_loadi(yyvsp[0].i); }
1432
break;
1433
case 118:
1434
#line 413 "grammar.y"
1435
{ yyval.a = gen_load(yyvsp[-3].i, yyvsp[-1].a, 1); }
1436
break;
1437
case 119:
1438
#line 414 "grammar.y"
1439
{ yyval.a = gen_load(yyvsp[-5].i, yyvsp[-3].a, yyvsp[-1].i); }
1440
break;
1441
case 120:
1442
#line 415 "grammar.y"
1443
{ yyval.a = gen_arth(BPF_ADD, yyvsp[-2].a, yyvsp[0].a); }
1444
break;
1445
case 121:
1446
#line 416 "grammar.y"
1447
{ yyval.a = gen_arth(BPF_SUB, yyvsp[-2].a, yyvsp[0].a); }
1448
break;
1449
case 122:
1450
#line 417 "grammar.y"
1451
{ yyval.a = gen_arth(BPF_MUL, yyvsp[-2].a, yyvsp[0].a); }
1452
break;
1453
case 123:
1454
#line 418 "grammar.y"
1455
{ yyval.a = gen_arth(BPF_DIV, yyvsp[-2].a, yyvsp[0].a); }
1456
break;
1457
case 124:
1458
#line 419 "grammar.y"
1459
{ yyval.a = gen_arth(BPF_AND, yyvsp[-2].a, yyvsp[0].a); }
1460
break;
1461
case 125:
1462
#line 420 "grammar.y"
1463
{ yyval.a = gen_arth(BPF_OR, yyvsp[-2].a, yyvsp[0].a); }
1464
break;
1465
case 126:
1466
#line 421 "grammar.y"
1467
{ yyval.a = gen_arth(BPF_LSH, yyvsp[-2].a, yyvsp[0].a); }
1468
break;
1469
case 127:
1470
#line 422 "grammar.y"
1471
{ yyval.a = gen_arth(BPF_RSH, yyvsp[-2].a, yyvsp[0].a); }
1472
break;
1473
case 128:
1474
#line 423 "grammar.y"
1475
{ yyval.a = gen_neg(yyvsp[0].a); }
1476
break;
1477
case 129:
1478
#line 424 "grammar.y"
1479
{ yyval.a = yyvsp[-1].a; }
1480
break;
1481
case 130:
1482
#line 425 "grammar.y"
1483
{ yyval.a = gen_loadlen(); }
1484
break;
1485
case 131:
1486
#line 427 "grammar.y"
1487
{ yyval.i = '&'; }
1488
break;
1489
case 132:
1490
#line 428 "grammar.y"
1491
{ yyval.i = '|'; }
1492
break;
1493
case 133:
1494
#line 429 "grammar.y"
1495
{ yyval.i = '<'; }
1496
break;
1497
case 134:
1498
#line 430 "grammar.y"
1499
{ yyval.i = '>'; }
1500
break;
1501
case 135:
1502
#line 431 "grammar.y"
1503
36
{ yyval.i = '='; }
1504
36
break;
1505
36
case 137:
1506
36
#line 434 "grammar.y"
1507
36
{ yyval.i = yyvsp[-1].i; }
1508
break;
1509
#line 1502 "grammar.c"
1510
    }
1511
    yyssp -= yym;
1512
    yystate = *yyssp;
1513
    yyvsp -= yym;
1514
    yym = yylhs[yyn];
1515
2
    if (yystate == 0 && yym == 0)
1516
2
    {
1517
2
#if YYDEBUG
1518
        if (yydebug)
1519
            printf("%sdebug: after reduction, shifting from state 0 to\
1520
 state %d\n", YYPREFIX, YYFINAL);
1521
#endif
1522
        yystate = YYFINAL;
1523
        *++yyssp = YYFINAL;
1524
        *++yyvsp = yyval;
1525
        if (yychar < 0)
1526
        {
1527
            if ((yychar = yylex()) < 0) yychar = 0;
1528
#if YYDEBUG
1529
            if (yydebug)
1530
            {
1531
2
                yys = 0;
1532
                if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
1533
                if (!yys) yys = "illegal-symbol";
1534

110
                printf("%sdebug: state %d, reading %d (%s)\n",
1535
50
                        YYPREFIX, YYFINAL, yychar, yys);
1536
14
            }
1537
#endif
1538
20
        }
1539
        if (yychar == 0) goto yyaccept;
1540
        goto yyloop;
1541
    }
1542
    if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
1543
            yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
1544

34
        yystate = yytable[yyn];
1545
    else
1546
        yystate = yydgoto[yym];
1547
#if YYDEBUG
1548
34
    if (yydebug)
1549
34
        printf("%sdebug: after reduction, shifting from state %d \
1550
34
to state %d\n", YYPREFIX, *yyssp, yystate);
1551
#endif
1552
    if (yyssp >= yysslim && yygrowstack())
1553
    {
1554
        goto yyoverflow;
1555
    }
1556
    *++yyssp = yystate;
1557
    *++yyvsp = yyval;
1558
    goto yyloop;
1559
yyoverflow:
1560
    yyerror("yacc stack overflow");
1561
yyabort:
1562
    if (yyss)
1563
2
            free(yyss);
1564
2
    if (yyvs)
1565
2
            free(yyvs);
1566
2
    yyss = yyssp = NULL;
1567
2
    yyvs = yyvsp = NULL;
1568
2
    yystacksize = 0;
1569
2
    return (1);
1570
2
yyaccept:
1571
2
    if (yyss)
1572
            free(yyss);
1573
    if (yyvs)
1574
            free(yyvs);
1575
    yyss = yyssp = NULL;
1576
    yyvs = yyvsp = NULL;
1577
    yystacksize = 0;
1578
    return (0);
1579
}