1478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%{ 2478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 3478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Copyright (c) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996 4478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * The Regents of the University of California. All rights reserved. 5478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 6478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Redistribution and use in source and binary forms, with or without 7478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * modification, are permitted provided that: (1) source code distributions 8478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * retain the above copyright notice and this paragraph in its entirety, (2) 9478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * distributions including binary code include the above copyright notice and 10478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * this paragraph in its entirety in the documentation or other materials 11478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * provided with the distribution, and (3) all advertising materials mentioning 12478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * features or use of this software display the following acknowledgement: 13478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ``This product includes software developed by the University of California, 14478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 15478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * the University nor the names of its contributors may be used to endorse 16478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * or promote products derived from this software without specific prior 17478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * written permission. 18478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 19478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 20478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 21478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 22478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 23478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef lint 24478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic const char rcsid[] _U_ = 25478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project "@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.86.2.9 2007/09/12 19:17:25 guy Exp $ (LBL)"; 26478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 27478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 28478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef HAVE_CONFIG_H 29478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "config.h" 30478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 31478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 32478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef WIN32 33478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <pcap-stdinc.h> 34478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* WIN32 */ 35478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <sys/types.h> 36478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <sys/socket.h> 37478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32 */ 38478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 39478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <stdlib.h> 40478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 41478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef WIN32 42478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#if __STDC__ 43478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct mbuf; 44478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct rtentry; 45478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 46478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 47478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <netinet/in.h> 48478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32 */ 49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <stdio.h> 51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "pcap-int.h" 53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "gencode.h" 55478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef HAVE_NET_PFVAR_H 56478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <net/if.h> 57478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <net/pfvar.h> 58478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <net/if_pflog.h> 59478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 60478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <pcap-namedb.h> 61478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 62478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef HAVE_OS_PROTO_H 63478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "os-proto.h" 64478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 65478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 66478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define QSET(q, p, d, a) (q).proto = (p),\ 67478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project (q).dir = (d),\ 68478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project (q).addr = (a) 69478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 70478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint n_errors = 0; 71478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 72478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic struct qual qerr = { Q_UNDEF, Q_UNDEF, Q_UNDEF, Q_UNDEF }; 73478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 74478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic void 75478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectyyerror(const char *msg) 76478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 77478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ++n_errors; 78478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("%s", msg); 79478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* NOTREACHED */ 80478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 81478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 82478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef YYBISON 83478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint yyparse(void); 84478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 85478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint 86478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_parse() 87478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 88478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project return (yyparse()); 89478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 90478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 91478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 92478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef HAVE_NET_PFVAR_H 93478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic int 94478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpfreason_to_num(const char *reason) 95478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 96478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project const char *reasons[] = PFRES_NAMES; 97478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int i; 98478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 99478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project for (i = 0; reasons[i]; i++) { 100478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (pcap_strcasecmp(reason, reasons[i]) == 0) 101478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project return (i); 102478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 103478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("unknown PF reason"); 104478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /*NOTREACHED*/ 105478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 106478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 107478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic int 108478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpfaction_to_num(const char *action) 109478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 110478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (pcap_strcasecmp(action, "pass") == 0 || 111478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project pcap_strcasecmp(action, "accept") == 0) 112478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project return (PF_PASS); 113478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else if (pcap_strcasecmp(action, "drop") == 0 || 114478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project pcap_strcasecmp(action, "block") == 0) 115478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project return (PF_DROP); 116478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else { 117478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("unknown PF action"); 118478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /*NOTREACHED*/ 119478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 120478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 121478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* !HAVE_NET_PFVAR_H */ 122478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic int 123478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpfreason_to_num(const char *reason) 124478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 125478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("libpcap was compiled on a machine without pf support"); 126478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /*NOTREACHED*/ 127478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 128478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 129478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic int 130478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpfaction_to_num(const char *action) 131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("libpcap was compiled on a machine without pf support"); 133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /*NOTREACHED*/ 134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* HAVE_NET_PFVAR_H */ 136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%} 137478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 138478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%union { 139478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int i; 140478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_u_int32 h; 141478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project u_char *e; 142478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project char *s; 143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct stmt *stmt; 144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct arth *a; 145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct { 146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct qual q; 147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int atmfieldtype; 148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int mtp3fieldtype; 149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *b; 150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } blk; 151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *rblk; 152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> expr id nid pid term rterm qid 155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> head 156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <i> pqual dqual aqual ndaqual 157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <a> arth narth 158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <i> byteop pname pnum relop irelop 159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> and or paren not null prog 160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <rblk> other pfvar 161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <i> atmtype atmmultitype 162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> atmfield 163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> atmfieldvalue atmvalue atmlistvalue 164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <i> mtp2type 165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> mtp3field 166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> mtp3fieldvalue mtp3value mtp3listvalue 167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token DST SRC HOST GATEWAY 170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token NET NETMASK PORT PORTRANGE LESS GREATER PROTO PROTOCHAIN CBYTE 171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token ARP RARP IP SCTP TCP UDP ICMP IGMP IGRP PIM VRRP 172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token ATALK AARP DECNET LAT SCA MOPRC MOPDL 173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token TK_BROADCAST TK_MULTICAST 174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token NUM INBOUND OUTBOUND 175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token PF_IFNAME PF_RSET PF_RNR PF_SRNR PF_REASON PF_ACTION 176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token LINK 177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token GEQ LEQ NEQ 178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token ID EID HID HID6 AID 179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token LSH RSH 180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token LEN 181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token IPV6 ICMPV6 AH ESP 182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token VLAN MPLS 183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token PPPOED PPPOES 184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token ISO ESIS CLNP ISIS L1 L2 IIH LSP SNP CSNP PSNP 185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token STP 186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token IPX 187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token NETBEUI 188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token LANE LLC METAC BCC SC ILMIC OAMF4EC OAMF4SC 189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token OAM OAMF4 CONNECTMSG METACONNECT 190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token VPI VCI 191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token RADIO 192478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token FISU LSSU MSU 193478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token SIO OPC DPC SLS 194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <s> ID 196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <e> EID 197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <e> AID 198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <s> HID HID6 199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <i> NUM action reason 200478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 201478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left OR AND 202478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%nonassoc '!' 203478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left '|' 204478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left '&' 205478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left LSH RSH 206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left '+' '-' 207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left '*' '/' 208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%nonassoc UMINUS 209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%% 210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectprog: null expr 211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project finish_parse($2.b); 213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | null 215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnull: /* null */ { $$.q = qerr; } 217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectexpr: term 219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | expr and term { gen_and($1.b, $3.b); $$ = $3; } 220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | expr and id { gen_and($1.b, $3.b); $$ = $3; } 221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | expr or term { gen_or($1.b, $3.b); $$ = $3; } 222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | expr or id { gen_or($1.b, $3.b); $$ = $3; } 223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectand: AND { $$ = $<blk>0; } 225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projector: OR { $$ = $<blk>0; } 227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectid: nid 229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pnum { $$.b = gen_ncode(NULL, (bpf_u_int32)$1, 230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); } 231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren pid ')' { $$ = $2; } 232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnid: ID { $$.b = gen_scode($1, $$.q = $<blk>0.q); } 234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | HID '/' NUM { $$.b = gen_mcode($1, NULL, $3, 235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); } 236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | HID NETMASK HID { $$.b = gen_mcode($1, $3, 0, 237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); } 238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | HID { 239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* Decide how to parse HID based on proto */ 240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q; 241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_ncode($1, 0, $$.q); 242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | HID6 '/' NUM { 244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6 245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_mcode6($1, NULL, $3, 246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); 247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else 248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("'ip6addr/prefixlen' not supported " 249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project "in this configuration"); 250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /*INET6*/ 251478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 252478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | HID6 { 253478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6 254478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_mcode6($1, 0, 128, 255478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); 256478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else 257478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("'ip6addr' not supported " 258478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project "in this configuration"); 259478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /*INET6*/ 260478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 261478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | EID { 262478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_ecode($1, $$.q = $<blk>0.q); 263478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* 264478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * $1 was allocated by "pcap_ether_aton()", 265478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * so we must free it now that we're done 266478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * with it. 267478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 268478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project free($1); 269478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 270478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | AID { 271478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_acode($1, $$.q = $<blk>0.q); 272478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* 273478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * $1 was allocated by "pcap_ether_aton()", 274478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * so we must free it now that we're done 275478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * with it. 276478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 277478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project free($1); 278478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 279478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | not id { gen_not($2.b); $$ = $2; } 280478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 281478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnot: '!' { $$ = $<blk>0; } 282478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 283478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectparen: '(' { $$ = $<blk>0; } 284478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 285478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpid: nid 286478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | qid and id { gen_and($1.b, $3.b); $$ = $3; } 287478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | qid or id { gen_or($1.b, $3.b); $$ = $3; } 288478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 289478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectqid: pnum { $$.b = gen_ncode(NULL, (bpf_u_int32)$1, 290478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); } 291478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pid 292478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 293478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectterm: rterm 294478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | not term { gen_not($2.b); $$ = $2; } 295478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 296478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecthead: pqual dqual aqual { QSET($$.q, $1, $2, $3); } 297478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual dqual { QSET($$.q, $1, $2, Q_DEFAULT); } 298478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual aqual { QSET($$.q, $1, Q_DEFAULT, $2); } 299478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual PROTO { QSET($$.q, $1, Q_DEFAULT, Q_PROTO); } 300478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual PROTOCHAIN { QSET($$.q, $1, Q_DEFAULT, Q_PROTOCHAIN); } 301478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual ndaqual { QSET($$.q, $1, Q_DEFAULT, $2); } 302478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 303478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrterm: head id { $$ = $2; } 304478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren expr ')' { $$.b = $2.b; $$.q = $1.q; } 305478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pname { $$.b = gen_proto_abbrev($1); $$.q = qerr; } 306478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth relop arth { $$.b = gen_relation($2, $1, $3, 0); 307478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = qerr; } 308478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth irelop arth { $$.b = gen_relation($2, $1, $3, 1); 309478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = qerr; } 310478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | other { $$.b = $1; $$.q = qerr; } 311478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | atmtype { $$.b = gen_atmtype_abbrev($1); $$.q = qerr; } 312478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | atmmultitype { $$.b = gen_atmmulti_abbrev($1); $$.q = qerr; } 313478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | atmfield atmvalue { $$.b = $2.b; $$.q = qerr; } 314478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | mtp2type { $$.b = gen_mtp2type_abbrev($1); $$.q = qerr; } 315478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | mtp3field mtp3value { $$.b = $2.b; $$.q = qerr; } 316478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 317478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* protocol level qualifiers */ 318478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpqual: pname 319478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | { $$ = Q_DEFAULT; } 320478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 321478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 'direction' qualifiers */ 322478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdqual: SRC { $$ = Q_SRC; } 323478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | DST { $$ = Q_DST; } 324478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SRC OR DST { $$ = Q_OR; } 325478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | DST OR SRC { $$ = Q_OR; } 326478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SRC AND DST { $$ = Q_AND; } 327478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | DST AND SRC { $$ = Q_AND; } 328478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 329478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* address type qualifiers */ 330478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectaqual: HOST { $$ = Q_HOST; } 331478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | NET { $$ = Q_NET; } 332478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PORT { $$ = Q_PORT; } 333478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PORTRANGE { $$ = Q_PORTRANGE; } 334478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 335478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* non-directional address type qualifiers */ 336478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectndaqual: GATEWAY { $$ = Q_GATEWAY; } 337478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 338478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpname: LINK { $$ = Q_LINK; } 339478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IP { $$ = Q_IP; } 340478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ARP { $$ = Q_ARP; } 341478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | RARP { $$ = Q_RARP; } 342478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SCTP { $$ = Q_SCTP; } 343478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | TCP { $$ = Q_TCP; } 344478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | UDP { $$ = Q_UDP; } 345478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ICMP { $$ = Q_ICMP; } 346478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IGMP { $$ = Q_IGMP; } 347478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IGRP { $$ = Q_IGRP; } 348478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PIM { $$ = Q_PIM; } 349478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | VRRP { $$ = Q_VRRP; } 350478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ATALK { $$ = Q_ATALK; } 351478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | AARP { $$ = Q_AARP; } 352478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | DECNET { $$ = Q_DECNET; } 353478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LAT { $$ = Q_LAT; } 354478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SCA { $$ = Q_SCA; } 355478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | MOPDL { $$ = Q_MOPDL; } 356478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | MOPRC { $$ = Q_MOPRC; } 357478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IPV6 { $$ = Q_IPV6; } 358478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ICMPV6 { $$ = Q_ICMPV6; } 359478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | AH { $$ = Q_AH; } 360478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ESP { $$ = Q_ESP; } 361478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ISO { $$ = Q_ISO; } 362478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ESIS { $$ = Q_ESIS; } 363478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ISIS { $$ = Q_ISIS; } 364478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | L1 { $$ = Q_ISIS_L1; } 365478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | L2 { $$ = Q_ISIS_L2; } 366478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IIH { $$ = Q_ISIS_IIH; } 367478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LSP { $$ = Q_ISIS_LSP; } 368478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SNP { $$ = Q_ISIS_SNP; } 369478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PSNP { $$ = Q_ISIS_PSNP; } 370478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | CSNP { $$ = Q_ISIS_CSNP; } 371478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | CLNP { $$ = Q_CLNP; } 372478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | STP { $$ = Q_STP; } 373478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IPX { $$ = Q_IPX; } 374478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | NETBEUI { $$ = Q_NETBEUI; } 375478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | RADIO { $$ = Q_RADIO; } 376478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 377478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectother: pqual TK_BROADCAST { $$ = gen_broadcast($1); } 378478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual TK_MULTICAST { $$ = gen_multicast($1); } 379478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LESS NUM { $$ = gen_less($2); } 380478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | GREATER NUM { $$ = gen_greater($2); } 381478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | CBYTE NUM byteop NUM { $$ = gen_byteop($3, $2, $4); } 382478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | INBOUND { $$ = gen_inbound(0); } 383478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | OUTBOUND { $$ = gen_inbound(1); } 384478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | VLAN pnum { $$ = gen_vlan($2); } 385478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | VLAN { $$ = gen_vlan(-1); } 386478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | MPLS pnum { $$ = gen_mpls($2); } 387478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | MPLS { $$ = gen_mpls(-1); } 388478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PPPOED { $$ = gen_pppoed(); } 389478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PPPOES { $$ = gen_pppoes(); } 390478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pfvar { $$ = $1; } 391478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 392478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 393478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpfvar: PF_IFNAME ID { $$ = gen_pf_ifname($2); } 394478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PF_RSET ID { $$ = gen_pf_ruleset($2); } 395478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PF_RNR NUM { $$ = gen_pf_rnr($2); } 396478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PF_SRNR NUM { $$ = gen_pf_srnr($2); } 397478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PF_REASON reason { $$ = gen_pf_reason($2); } 398478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PF_ACTION action { $$ = gen_pf_action($2); } 399478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 400478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 401478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectreason: NUM { $$ = $1; } 402478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ID { $$ = pfreason_to_num($1); } 403478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 404478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 405478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectaction: ID { $$ = pfaction_to_num($1); } 406478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 407478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 408478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrelop: '>' { $$ = BPF_JGT; } 409478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | GEQ { $$ = BPF_JGE; } 410478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '=' { $$ = BPF_JEQ; } 411478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 412478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectirelop: LEQ { $$ = BPF_JGT; } 413478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '<' { $$ = BPF_JGE; } 414478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | NEQ { $$ = BPF_JEQ; } 415478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 416478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectarth: pnum { $$ = gen_loadi($1); } 417478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | narth 418478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 419478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnarth: pname '[' arth ']' { $$ = gen_load($1, $3, 1); } 420478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pname '[' arth ':' NUM ']' { $$ = gen_load($1, $3, $5); } 421478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '+' arth { $$ = gen_arth(BPF_ADD, $1, $3); } 422478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '-' arth { $$ = gen_arth(BPF_SUB, $1, $3); } 423478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '*' arth { $$ = gen_arth(BPF_MUL, $1, $3); } 424478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '/' arth { $$ = gen_arth(BPF_DIV, $1, $3); } 425478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '&' arth { $$ = gen_arth(BPF_AND, $1, $3); } 426478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '|' arth { $$ = gen_arth(BPF_OR, $1, $3); } 427478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth LSH arth { $$ = gen_arth(BPF_LSH, $1, $3); } 428478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth RSH arth { $$ = gen_arth(BPF_RSH, $1, $3); } 429478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '-' arth %prec UMINUS { $$ = gen_neg($2); } 430478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren narth ')' { $$ = $2; } 431478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LEN { $$ = gen_loadlen(); } 432478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 433478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectbyteop: '&' { $$ = '&'; } 434478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '|' { $$ = '|'; } 435478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '<' { $$ = '<'; } 436478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '>' { $$ = '>'; } 437478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '=' { $$ = '='; } 438478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 439478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpnum: NUM 440478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren pnum ')' { $$ = $2; } 441478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 442478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmtype: LANE { $$ = A_LANE; } 443478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LLC { $$ = A_LLC; } 444478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | METAC { $$ = A_METAC; } 445478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | BCC { $$ = A_BCC; } 446478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | OAMF4EC { $$ = A_OAMF4EC; } 447478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | OAMF4SC { $$ = A_OAMF4SC; } 448478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SC { $$ = A_SC; } 449478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ILMIC { $$ = A_ILMIC; } 450478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 451478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmmultitype: OAM { $$ = A_OAM; } 452478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | OAMF4 { $$ = A_OAMF4; } 453478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | CONNECTMSG { $$ = A_CONNECTMSG; } 454478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | METACONNECT { $$ = A_METACONNECT; } 455478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 456478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* ATM field types quantifier */ 457478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmfield: VPI { $$.atmfieldtype = A_VPI; } 458478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | VCI { $$.atmfieldtype = A_VCI; } 459478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 460478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmvalue: atmfieldvalue 461478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | relop NUM { $$.b = gen_atmfield_code($<blk>0.atmfieldtype, (bpf_int32)$2, (bpf_u_int32)$1, 0); } 462478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | irelop NUM { $$.b = gen_atmfield_code($<blk>0.atmfieldtype, (bpf_int32)$2, (bpf_u_int32)$1, 1); } 463478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren atmlistvalue ')' { $$.b = $2.b; $$.q = qerr; } 464478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 465478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmfieldvalue: NUM { 466478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.atmfieldtype = $<blk>0.atmfieldtype; 467478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if ($$.atmfieldtype == A_VPI || 468478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.atmfieldtype == A_VCI) 469478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_atmfield_code($$.atmfieldtype, (bpf_int32) $1, BPF_JEQ, 0); 470478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 471478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 472478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmlistvalue: atmfieldvalue 473478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | atmlistvalue or atmfieldvalue { gen_or($1.b, $3.b); $$ = $3; } 474478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 475478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* MTP2 types quantifier */ 476478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmtp2type: FISU { $$ = M_FISU; } 477478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LSSU { $$ = M_LSSU; } 478478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | MSU { $$ = M_MSU; } 479478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 480478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* MTP3 field types quantifier */ 481478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmtp3field: SIO { $$.mtp3fieldtype = M_SIO; } 482478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | OPC { $$.mtp3fieldtype = M_OPC; } 483478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | DPC { $$.mtp3fieldtype = M_DPC; } 484478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SLS { $$.mtp3fieldtype = M_SLS; } 485478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 486478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmtp3value: mtp3fieldvalue 487478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | relop NUM { $$.b = gen_mtp3field_code($<blk>0.mtp3fieldtype, (u_int)$2, (u_int)$1, 0); } 488478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | irelop NUM { $$.b = gen_mtp3field_code($<blk>0.mtp3fieldtype, (u_int)$2, (u_int)$1, 1); } 489478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren mtp3listvalue ')' { $$.b = $2.b; $$.q = qerr; } 490478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 491478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmtp3fieldvalue: NUM { 492478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.mtp3fieldtype = $<blk>0.mtp3fieldtype; 493478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if ($$.mtp3fieldtype == M_SIO || 494478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.mtp3fieldtype == M_OPC || 495478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.mtp3fieldtype == M_DPC || 496478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.mtp3fieldtype == M_SLS ) 497478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_mtp3field_code($$.mtp3fieldtype, (u_int) $1, BPF_JEQ, 0); 498478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 499478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 500478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmtp3listvalue: mtp3fieldvalue 501478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | mtp3listvalue or mtp3fieldvalue { gen_or($1.b, $3.b); $$ = $3; } 502478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 503478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%% 504