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_ = 25511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall "@(#) $Header: /tcpdump/master/libpcap/grammar.y,v 1.101 2007-11-18 02:03:52 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> 48511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#include <arpa/inet.h> 49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* WIN32 */ 50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <stdio.h> 52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "pcap-int.h" 54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 55478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "gencode.h" 56478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef HAVE_NET_PFVAR_H 57478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <net/if.h> 58478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <net/pfvar.h> 59478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include <net/if_pflog.h> 60478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 61511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#include "ieee80211.h" 62511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#include <pcap/namedb.h> 63478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 64478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef HAVE_OS_PROTO_H 65478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#include "os-proto.h" 66478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 67478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 68478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define QSET(q, p, d, a) (q).proto = (p),\ 69478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project (q).dir = (d),\ 70478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project (q).addr = (a) 71478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 72511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct tok { 73511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int v; /* value */ 74511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall const char *s; /* string */ 75511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall}; 76511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 77511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstatic const struct tok ieee80211_types[] = { 78511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_TYPE_DATA, "data" }, 79511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_TYPE_MGT, "mgt" }, 80511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_TYPE_MGT, "management" }, 81511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_TYPE_CTL, "ctl" }, 82511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_TYPE_CTL, "control" }, 83511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { 0, NULL } 84511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall}; 85511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstatic const struct tok ieee80211_mgt_subtypes[] = { 86511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_ASSOC_REQ, "assocreq" }, 87511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_ASSOC_REQ, "assoc-req" }, 88511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_ASSOC_RESP, "assocresp" }, 89511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_ASSOC_RESP, "assoc-resp" }, 90511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_REASSOC_REQ, "reassocreq" }, 91511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_REASSOC_REQ, "reassoc-req" }, 92511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_REASSOC_RESP, "reassocresp" }, 93511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_REASSOC_RESP, "reassoc-resp" }, 94511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_PROBE_REQ, "probereq" }, 95511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_PROBE_REQ, "probe-req" }, 96511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_PROBE_RESP, "proberesp" }, 97511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_PROBE_RESP, "probe-resp" }, 98511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_BEACON, "beacon" }, 99511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_ATIM, "atim" }, 100511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_DISASSOC, "disassoc" }, 101511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_DISASSOC, "disassociation" }, 102511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_AUTH, "auth" }, 103511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_AUTH, "authentication" }, 104511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_DEAUTH, "deauth" }, 105511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_DEAUTH, "deauthentication" }, 106511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { 0, NULL } 107511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall}; 108511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstatic const struct tok ieee80211_ctl_subtypes[] = { 109511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_PS_POLL, "ps-poll" }, 110511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_RTS, "rts" }, 111511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_CTS, "cts" }, 112511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_ACK, "ack" }, 113511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_CF_END, "cf-end" }, 114511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_CF_END_ACK, "cf-end-ack" }, 115511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { 0, NULL } 116511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall}; 117511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstatic const struct tok ieee80211_data_subtypes[] = { 118511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_DATA, "data" }, 119511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_CF_ACK, "data-cf-ack" }, 120511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_CF_POLL, "data-cf-poll" }, 121511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_CF_ACPL, "data-cf-ack-poll" }, 122511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_NODATA, "null" }, 123511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_NODATA_CF_ACK, "cf-ack" }, 124511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_NODATA_CF_POLL, "cf-poll" }, 125511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_NODATA_CF_ACPL, "cf-ack-poll" }, 126511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_QOS|IEEE80211_FC0_SUBTYPE_DATA, "qos-data" }, 127511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_QOS|IEEE80211_FC0_SUBTYPE_CF_ACK, "qos-data-cf-ack" }, 128511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_QOS|IEEE80211_FC0_SUBTYPE_CF_POLL, "qos-data-cf-poll" }, 129511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_QOS|IEEE80211_FC0_SUBTYPE_CF_ACPL, "qos-data-cf-ack-poll" }, 130511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_QOS|IEEE80211_FC0_SUBTYPE_NODATA, "qos" }, 131511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_QOS|IEEE80211_FC0_SUBTYPE_NODATA_CF_POLL, "qos-cf-poll" }, 132511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_SUBTYPE_QOS|IEEE80211_FC0_SUBTYPE_NODATA_CF_ACPL, "qos-cf-ack-poll" }, 133511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { 0, NULL } 134511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall}; 135511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct type2tok { 136511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int type; 137511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall const struct tok *tok; 138511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall}; 139511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstatic const struct type2tok ieee80211_type_subtypes[] = { 140511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_TYPE_MGT, ieee80211_mgt_subtypes }, 141511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_TYPE_CTL, ieee80211_ctl_subtypes }, 142511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { IEEE80211_FC0_TYPE_DATA, ieee80211_data_subtypes }, 143511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { 0, NULL } 144511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall}; 145511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 146511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstatic int 147511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstr2tok(const char *str, const struct tok *toks) 148511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall{ 149511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int i; 150511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 151511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall for (i = 0; toks[i].s != NULL; i++) { 152511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall if (pcap_strcasecmp(toks[i].s, str) == 0) 153511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall return (toks[i].v); 154511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 155511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall return (-1); 156511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall} 157511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint n_errors = 0; 159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic struct qual qerr = { Q_UNDEF, Q_UNDEF, Q_UNDEF, Q_UNDEF }; 161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic void 163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectyyerror(const char *msg) 164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ++n_errors; 166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("%s", msg); 167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* NOTREACHED */ 168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 170511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifdef NEED_YYPARSE_WRAPPER 171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint yyparse(void); 172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint 174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpcap_parse() 175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project return (yyparse()); 177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef HAVE_NET_PFVAR_H 181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic int 182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpfreason_to_num(const char *reason) 183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project const char *reasons[] = PFRES_NAMES; 185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int i; 186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project for (i = 0; reasons[i]; i++) { 188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (pcap_strcasecmp(reason, reasons[i]) == 0) 189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project return (i); 190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("unknown PF reason"); 192478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /*NOTREACHED*/ 193478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic int 196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpfaction_to_num(const char *action) 197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if (pcap_strcasecmp(action, "pass") == 0 || 199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project pcap_strcasecmp(action, "accept") == 0) 200478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project return (PF_PASS); 201478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else if (pcap_strcasecmp(action, "drop") == 0 || 202478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project pcap_strcasecmp(action, "block") == 0) 203478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project return (PF_DROP); 204511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#if HAVE_PF_NAT_THROUGH_PF_NORDR 205511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else if (pcap_strcasecmp(action, "rdr") == 0) 206511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall return (PF_RDR); 207511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else if (pcap_strcasecmp(action, "nat") == 0) 208511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall return (PF_NAT); 209511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else if (pcap_strcasecmp(action, "binat") == 0) 210511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall return (PF_BINAT); 211511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else if (pcap_strcasecmp(action, "nordr") == 0) 212511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall return (PF_NORDR); 213511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif 214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project else { 215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("unknown PF action"); 216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /*NOTREACHED*/ 217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else /* !HAVE_NET_PFVAR_H */ 220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic int 221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpfreason_to_num(const char *reason) 222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("libpcap was compiled on a machine without pf support"); 224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /*NOTREACHED*/ 225511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 226511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall /* this is to make the VC compiler happy */ 227511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall return -1; 228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstatic int 231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpfaction_to_num(const char *action) 232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("libpcap was compiled on a machine without pf support"); 234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /*NOTREACHED*/ 235511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 236511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall /* this is to make the VC compiler happy */ 237511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall return -1; 238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* HAVE_NET_PFVAR_H */ 240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%} 241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%union { 243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int i; 244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_u_int32 h; 245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project u_char *e; 246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project char *s; 247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct stmt *stmt; 248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct arth *a; 249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct { 250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct qual q; 251478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int atmfieldtype; 252478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int mtp3fieldtype; 253478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *b; 254478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } blk; 255478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *rblk; 256478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 257478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 258478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> expr id nid pid term rterm qid 259478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> head 260478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <i> pqual dqual aqual ndaqual 261478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <a> arth narth 262478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <i> byteop pname pnum relop irelop 263478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> and or paren not null prog 264511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall%type <rblk> other pfvar p80211 265478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <i> atmtype atmmultitype 266478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> atmfield 267478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> atmfieldvalue atmvalue atmlistvalue 268478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <i> mtp2type 269478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> mtp3field 270478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <blk> mtp3fieldvalue mtp3value mtp3listvalue 271478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 272478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 273478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token DST SRC HOST GATEWAY 274478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token NET NETMASK PORT PORTRANGE LESS GREATER PROTO PROTOCHAIN CBYTE 275511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall%token ARP RARP IP SCTP TCP UDP ICMP IGMP IGRP PIM VRRP CARP 276478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token ATALK AARP DECNET LAT SCA MOPRC MOPDL 277478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token TK_BROADCAST TK_MULTICAST 278478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token NUM INBOUND OUTBOUND 279478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token PF_IFNAME PF_RSET PF_RNR PF_SRNR PF_REASON PF_ACTION 280511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall%token TYPE SUBTYPE DIR ADDR1 ADDR2 ADDR3 ADDR4 RA TA 281478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token LINK 282478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token GEQ LEQ NEQ 283478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token ID EID HID HID6 AID 284478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token LSH RSH 285478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token LEN 286478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token IPV6 ICMPV6 AH ESP 287478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token VLAN MPLS 288478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token PPPOED PPPOES 289478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token ISO ESIS CLNP ISIS L1 L2 IIH LSP SNP CSNP PSNP 290478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token STP 291478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token IPX 292478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token NETBEUI 293478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token LANE LLC METAC BCC SC ILMIC OAMF4EC OAMF4SC 294478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token OAM OAMF4 CONNECTMSG METACONNECT 295478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token VPI VCI 296478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%token RADIO 297511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall%token FISU LSSU MSU HFISU HLSSU HMSU 298511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall%token SIO OPC DPC SLS HSIO HOPC HDPC HSLS 299511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 300478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 301478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <s> ID 302478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <e> EID 303478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <e> AID 304478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%type <s> HID HID6 305511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall%type <i> NUM action reason type subtype type_subtype dir 306478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 307478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left OR AND 308478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%nonassoc '!' 309478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left '|' 310478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left '&' 311478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left LSH RSH 312478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left '+' '-' 313478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%left '*' '/' 314478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%nonassoc UMINUS 315478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%% 316478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectprog: null expr 317478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project{ 318478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project finish_parse($2.b); 319478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project} 320478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | null 321478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 322478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnull: /* null */ { $$.q = qerr; } 323478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 324478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectexpr: term 325478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | expr and term { gen_and($1.b, $3.b); $$ = $3; } 326478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | expr and id { gen_and($1.b, $3.b); $$ = $3; } 327478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | expr or term { gen_or($1.b, $3.b); $$ = $3; } 328478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | expr or id { gen_or($1.b, $3.b); $$ = $3; } 329478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 330478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectand: AND { $$ = $<blk>0; } 331478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 332478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projector: OR { $$ = $<blk>0; } 333478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 334478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectid: nid 335478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pnum { $$.b = gen_ncode(NULL, (bpf_u_int32)$1, 336478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); } 337478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren pid ')' { $$ = $2; } 338478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 339478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnid: ID { $$.b = gen_scode($1, $$.q = $<blk>0.q); } 340478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | HID '/' NUM { $$.b = gen_mcode($1, NULL, $3, 341478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); } 342478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | HID NETMASK HID { $$.b = gen_mcode($1, $3, 0, 343478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); } 344478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | HID { 345478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* Decide how to parse HID based on proto */ 346478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q; 347511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall if ($$.q.addr == Q_PORT) 348511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall bpf_error("'port' modifier applied to ip host"); 349511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else if ($$.q.addr == Q_PORTRANGE) 350511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall bpf_error("'portrange' modifier applied to ip host"); 351511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else if ($$.q.addr == Q_PROTO) 352511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall bpf_error("'proto' modifier applied to ip host"); 353511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else if ($$.q.addr == Q_PROTOCHAIN) 354511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall bpf_error("'protochain' modifier applied to ip host"); 355478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_ncode($1, 0, $$.q); 356478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 357478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | HID6 '/' NUM { 358478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6 359478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_mcode6($1, NULL, $3, 360478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); 361478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else 362478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("'ip6addr/prefixlen' not supported " 363478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project "in this configuration"); 364478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /*INET6*/ 365478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 366478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | HID6 { 367478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6 368478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_mcode6($1, 0, 128, 369478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); 370478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#else 371478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_error("'ip6addr' not supported " 372478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project "in this configuration"); 373478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /*INET6*/ 374478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 375478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | EID { 376478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_ecode($1, $$.q = $<blk>0.q); 377478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* 378478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * $1 was allocated by "pcap_ether_aton()", 379478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * so we must free it now that we're done 380478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * with it. 381478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 382478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project free($1); 383478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 384478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | AID { 385478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_acode($1, $$.q = $<blk>0.q); 386478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* 387478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * $1 was allocated by "pcap_ether_aton()", 388478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * so we must free it now that we're done 389478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * with it. 390478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 391478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project free($1); 392478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 393478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | not id { gen_not($2.b); $$ = $2; } 394478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 395478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnot: '!' { $$ = $<blk>0; } 396478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 397478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectparen: '(' { $$ = $<blk>0; } 398478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 399478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpid: nid 400478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | qid and id { gen_and($1.b, $3.b); $$ = $3; } 401478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | qid or id { gen_or($1.b, $3.b); $$ = $3; } 402478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 403478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectqid: pnum { $$.b = gen_ncode(NULL, (bpf_u_int32)$1, 404478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = $<blk>0.q); } 405478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pid 406478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 407478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectterm: rterm 408478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | not term { gen_not($2.b); $$ = $2; } 409478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 410478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecthead: pqual dqual aqual { QSET($$.q, $1, $2, $3); } 411478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual dqual { QSET($$.q, $1, $2, Q_DEFAULT); } 412478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual aqual { QSET($$.q, $1, Q_DEFAULT, $2); } 413478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual PROTO { QSET($$.q, $1, Q_DEFAULT, Q_PROTO); } 414478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual PROTOCHAIN { QSET($$.q, $1, Q_DEFAULT, Q_PROTOCHAIN); } 415478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual ndaqual { QSET($$.q, $1, Q_DEFAULT, $2); } 416478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 417478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrterm: head id { $$ = $2; } 418478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren expr ')' { $$.b = $2.b; $$.q = $1.q; } 419478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pname { $$.b = gen_proto_abbrev($1); $$.q = qerr; } 420478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth relop arth { $$.b = gen_relation($2, $1, $3, 0); 421478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = qerr; } 422478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth irelop arth { $$.b = gen_relation($2, $1, $3, 1); 423478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.q = qerr; } 424478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | other { $$.b = $1; $$.q = qerr; } 425478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | atmtype { $$.b = gen_atmtype_abbrev($1); $$.q = qerr; } 426478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | atmmultitype { $$.b = gen_atmmulti_abbrev($1); $$.q = qerr; } 427478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | atmfield atmvalue { $$.b = $2.b; $$.q = qerr; } 428478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | mtp2type { $$.b = gen_mtp2type_abbrev($1); $$.q = qerr; } 429478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | mtp3field mtp3value { $$.b = $2.b; $$.q = qerr; } 430478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 431478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* protocol level qualifiers */ 432478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpqual: pname 433478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | { $$ = Q_DEFAULT; } 434478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 435478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 'direction' qualifiers */ 436478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectdqual: SRC { $$ = Q_SRC; } 437478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | DST { $$ = Q_DST; } 438478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SRC OR DST { $$ = Q_OR; } 439478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | DST OR SRC { $$ = Q_OR; } 440478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SRC AND DST { $$ = Q_AND; } 441478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | DST AND SRC { $$ = Q_AND; } 442511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | ADDR1 { $$ = Q_ADDR1; } 443511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | ADDR2 { $$ = Q_ADDR2; } 444511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | ADDR3 { $$ = Q_ADDR3; } 445511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | ADDR4 { $$ = Q_ADDR4; } 446511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | RA { $$ = Q_RA; } 447511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | TA { $$ = Q_TA; } 448478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 449478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* address type qualifiers */ 450478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectaqual: HOST { $$ = Q_HOST; } 451478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | NET { $$ = Q_NET; } 452478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PORT { $$ = Q_PORT; } 453478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PORTRANGE { $$ = Q_PORTRANGE; } 454478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 455478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* non-directional address type qualifiers */ 456478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectndaqual: GATEWAY { $$ = Q_GATEWAY; } 457478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 458478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpname: LINK { $$ = Q_LINK; } 459478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IP { $$ = Q_IP; } 460478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ARP { $$ = Q_ARP; } 461478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | RARP { $$ = Q_RARP; } 462478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SCTP { $$ = Q_SCTP; } 463478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | TCP { $$ = Q_TCP; } 464478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | UDP { $$ = Q_UDP; } 465478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ICMP { $$ = Q_ICMP; } 466478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IGMP { $$ = Q_IGMP; } 467478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IGRP { $$ = Q_IGRP; } 468478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PIM { $$ = Q_PIM; } 469478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | VRRP { $$ = Q_VRRP; } 470511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | CARP { $$ = Q_CARP; } 471478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ATALK { $$ = Q_ATALK; } 472478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | AARP { $$ = Q_AARP; } 473478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | DECNET { $$ = Q_DECNET; } 474478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LAT { $$ = Q_LAT; } 475478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SCA { $$ = Q_SCA; } 476478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | MOPDL { $$ = Q_MOPDL; } 477478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | MOPRC { $$ = Q_MOPRC; } 478478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IPV6 { $$ = Q_IPV6; } 479478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ICMPV6 { $$ = Q_ICMPV6; } 480478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | AH { $$ = Q_AH; } 481478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ESP { $$ = Q_ESP; } 482478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ISO { $$ = Q_ISO; } 483478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ESIS { $$ = Q_ESIS; } 484478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ISIS { $$ = Q_ISIS; } 485478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | L1 { $$ = Q_ISIS_L1; } 486478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | L2 { $$ = Q_ISIS_L2; } 487478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IIH { $$ = Q_ISIS_IIH; } 488478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LSP { $$ = Q_ISIS_LSP; } 489478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SNP { $$ = Q_ISIS_SNP; } 490478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PSNP { $$ = Q_ISIS_PSNP; } 491478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | CSNP { $$ = Q_ISIS_CSNP; } 492478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | CLNP { $$ = Q_CLNP; } 493478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | STP { $$ = Q_STP; } 494478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | IPX { $$ = Q_IPX; } 495478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | NETBEUI { $$ = Q_NETBEUI; } 496478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | RADIO { $$ = Q_RADIO; } 497478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 498478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectother: pqual TK_BROADCAST { $$ = gen_broadcast($1); } 499478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pqual TK_MULTICAST { $$ = gen_multicast($1); } 500478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LESS NUM { $$ = gen_less($2); } 501478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | GREATER NUM { $$ = gen_greater($2); } 502478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | CBYTE NUM byteop NUM { $$ = gen_byteop($3, $2, $4); } 503478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | INBOUND { $$ = gen_inbound(0); } 504478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | OUTBOUND { $$ = gen_inbound(1); } 505478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | VLAN pnum { $$ = gen_vlan($2); } 506478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | VLAN { $$ = gen_vlan(-1); } 507478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | MPLS pnum { $$ = gen_mpls($2); } 508478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | MPLS { $$ = gen_mpls(-1); } 509478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PPPOED { $$ = gen_pppoed(); } 510511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | PPPOES pnum { $$ = gen_pppoes($2); } 511511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | PPPOES { $$ = gen_pppoes(-1); } 512478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pfvar { $$ = $1; } 513511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | pqual p80211 { $$ = $2; } 514478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 515478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 516478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpfvar: PF_IFNAME ID { $$ = gen_pf_ifname($2); } 517478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PF_RSET ID { $$ = gen_pf_ruleset($2); } 518478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PF_RNR NUM { $$ = gen_pf_rnr($2); } 519478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PF_SRNR NUM { $$ = gen_pf_srnr($2); } 520478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PF_REASON reason { $$ = gen_pf_reason($2); } 521478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | PF_ACTION action { $$ = gen_pf_action($2); } 522478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 523478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 524511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallp80211: TYPE type SUBTYPE subtype 525511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall { $$ = gen_p80211_type($2 | $4, 526511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall IEEE80211_FC0_TYPE_MASK | 527511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall IEEE80211_FC0_SUBTYPE_MASK); 528511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 529511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | TYPE type { $$ = gen_p80211_type($2, 530511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall IEEE80211_FC0_TYPE_MASK); 531511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 532511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | SUBTYPE type_subtype { $$ = gen_p80211_type($2, 533511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall IEEE80211_FC0_TYPE_MASK | 534511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall IEEE80211_FC0_SUBTYPE_MASK); 535511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 536511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | DIR dir { $$ = gen_p80211_fcdir($2); } 537511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ; 538511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 539511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltype: NUM 540511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | ID { $$ = str2tok($1, ieee80211_types); 541511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall if ($$ == -1) 542511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall bpf_error("unknown 802.11 type name"); 543511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 544511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ; 545511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 546511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallsubtype: NUM 547511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | ID { const struct tok *types = NULL; 548511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall int i; 549511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall for (i = 0;; i++) { 550511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall if (ieee80211_type_subtypes[i].tok == NULL) { 551511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall /* Ran out of types */ 552511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall bpf_error("unknown 802.11 type"); 553511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall break; 554511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 555511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall if ($<i>-1 == ieee80211_type_subtypes[i].type) { 556511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall types = ieee80211_type_subtypes[i].tok; 557511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall break; 558511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 559511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 560511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 561511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$ = str2tok($1, types); 562511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall if ($$ == -1) 563511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall bpf_error("unknown 802.11 subtype name"); 564511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 565511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ; 566511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 567511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralltype_subtype: ID { int i; 568511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall for (i = 0;; i++) { 569511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall if (ieee80211_type_subtypes[i].tok == NULL) { 570511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall /* Ran out of types */ 571511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall bpf_error("unknown 802.11 type name"); 572511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall break; 573511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 574511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$ = str2tok($1, ieee80211_type_subtypes[i].tok); 575511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall if ($$ != -1) { 576511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$ |= ieee80211_type_subtypes[i].type; 577511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall break; 578511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 579511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 580511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 581511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ; 582511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 583511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgralldir: NUM 584511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | ID { if (pcap_strcasecmp($1, "nods") == 0) 585511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$ = IEEE80211_FC1_DIR_NODS; 586511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else if (pcap_strcasecmp($1, "tods") == 0) 587511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$ = IEEE80211_FC1_DIR_TODS; 588511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else if (pcap_strcasecmp($1, "fromds") == 0) 589511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$ = IEEE80211_FC1_DIR_FROMDS; 590511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else if (pcap_strcasecmp($1, "dstods") == 0) 591511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$ = IEEE80211_FC1_DIR_DSTODS; 592511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall else 593511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall bpf_error("unknown 802.11 direction"); 594511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall } 595511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ; 596511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 597478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectreason: NUM { $$ = $1; } 598478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ID { $$ = pfreason_to_num($1); } 599478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 600478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 601478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectaction: ID { $$ = pfaction_to_num($1); } 602478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 603478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 604478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectrelop: '>' { $$ = BPF_JGT; } 605478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | GEQ { $$ = BPF_JGE; } 606478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '=' { $$ = BPF_JEQ; } 607478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 608478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectirelop: LEQ { $$ = BPF_JGT; } 609478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '<' { $$ = BPF_JGE; } 610478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | NEQ { $$ = BPF_JEQ; } 611478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 612478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectarth: pnum { $$ = gen_loadi($1); } 613478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | narth 614478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 615478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectnarth: pname '[' arth ']' { $$ = gen_load($1, $3, 1); } 616478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | pname '[' arth ':' NUM ']' { $$ = gen_load($1, $3, $5); } 617478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '+' arth { $$ = gen_arth(BPF_ADD, $1, $3); } 618478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '-' arth { $$ = gen_arth(BPF_SUB, $1, $3); } 619478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '*' arth { $$ = gen_arth(BPF_MUL, $1, $3); } 620478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '/' arth { $$ = gen_arth(BPF_DIV, $1, $3); } 621478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '&' arth { $$ = gen_arth(BPF_AND, $1, $3); } 622478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth '|' arth { $$ = gen_arth(BPF_OR, $1, $3); } 623478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth LSH arth { $$ = gen_arth(BPF_LSH, $1, $3); } 624478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | arth RSH arth { $$ = gen_arth(BPF_RSH, $1, $3); } 625478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '-' arth %prec UMINUS { $$ = gen_neg($2); } 626478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren narth ')' { $$ = $2; } 627478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LEN { $$ = gen_loadlen(); } 628478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 629478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectbyteop: '&' { $$ = '&'; } 630478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '|' { $$ = '|'; } 631478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '<' { $$ = '<'; } 632478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '>' { $$ = '>'; } 633478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | '=' { $$ = '='; } 634478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 635478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectpnum: NUM 636478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren pnum ')' { $$ = $2; } 637478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 638478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmtype: LANE { $$ = A_LANE; } 639478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LLC { $$ = A_LLC; } 640478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | METAC { $$ = A_METAC; } 641478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | BCC { $$ = A_BCC; } 642478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | OAMF4EC { $$ = A_OAMF4EC; } 643478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | OAMF4SC { $$ = A_OAMF4SC; } 644478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SC { $$ = A_SC; } 645478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | ILMIC { $$ = A_ILMIC; } 646478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 647478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmmultitype: OAM { $$ = A_OAM; } 648478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | OAMF4 { $$ = A_OAMF4; } 649478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | CONNECTMSG { $$ = A_CONNECTMSG; } 650478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | METACONNECT { $$ = A_METACONNECT; } 651478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 652478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* ATM field types quantifier */ 653478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmfield: VPI { $$.atmfieldtype = A_VPI; } 654478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | VCI { $$.atmfieldtype = A_VCI; } 655478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 656478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmvalue: atmfieldvalue 657478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | relop NUM { $$.b = gen_atmfield_code($<blk>0.atmfieldtype, (bpf_int32)$2, (bpf_u_int32)$1, 0); } 658478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | irelop NUM { $$.b = gen_atmfield_code($<blk>0.atmfieldtype, (bpf_int32)$2, (bpf_u_int32)$1, 1); } 659478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren atmlistvalue ')' { $$.b = $2.b; $$.q = qerr; } 660478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 661478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmfieldvalue: NUM { 662478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.atmfieldtype = $<blk>0.atmfieldtype; 663478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if ($$.atmfieldtype == A_VPI || 664478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.atmfieldtype == A_VCI) 665478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_atmfield_code($$.atmfieldtype, (bpf_int32) $1, BPF_JEQ, 0); 666478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 667478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 668478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectatmlistvalue: atmfieldvalue 669478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | atmlistvalue or atmfieldvalue { gen_or($1.b, $3.b); $$ = $3; } 670478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 671478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* MTP2 types quantifier */ 672478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmtp2type: FISU { $$ = M_FISU; } 673478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | LSSU { $$ = M_LSSU; } 674478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | MSU { $$ = M_MSU; } 675511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | HFISU { $$ = MH_FISU; } 676511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | HLSSU { $$ = MH_LSSU; } 677511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | HMSU { $$ = MH_MSU; } 678478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 679478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project /* MTP3 field types quantifier */ 680478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmtp3field: SIO { $$.mtp3fieldtype = M_SIO; } 681478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | OPC { $$.mtp3fieldtype = M_OPC; } 682478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | DPC { $$.mtp3fieldtype = M_DPC; } 683478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | SLS { $$.mtp3fieldtype = M_SLS; } 684511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | HSIO { $$.mtp3fieldtype = MH_SIO; } 685511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | HOPC { $$.mtp3fieldtype = MH_OPC; } 686511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | HDPC { $$.mtp3fieldtype = MH_DPC; } 687511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall | HSLS { $$.mtp3fieldtype = MH_SLS; } 688478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 689478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmtp3value: mtp3fieldvalue 690478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | relop NUM { $$.b = gen_mtp3field_code($<blk>0.mtp3fieldtype, (u_int)$2, (u_int)$1, 0); } 691478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | irelop NUM { $$.b = gen_mtp3field_code($<blk>0.mtp3fieldtype, (u_int)$2, (u_int)$1, 1); } 692478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | paren mtp3listvalue ')' { $$.b = $2.b; $$.q = qerr; } 693478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 694478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmtp3fieldvalue: NUM { 695478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.mtp3fieldtype = $<blk>0.mtp3fieldtype; 696478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project if ($$.mtp3fieldtype == M_SIO || 697478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.mtp3fieldtype == M_OPC || 698478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.mtp3fieldtype == M_DPC || 699511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$.mtp3fieldtype == M_SLS || 700511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$.mtp3fieldtype == MH_SIO || 701511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$.mtp3fieldtype == MH_OPC || 702511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$.mtp3fieldtype == MH_DPC || 703511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall $$.mtp3fieldtype == MH_SLS) 704478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project $$.b = gen_mtp3field_code($$.mtp3fieldtype, (u_int) $1, BPF_JEQ, 0); 705478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project } 706478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 707478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectmtp3listvalue: mtp3fieldvalue 708478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project | mtp3listvalue or mtp3fieldvalue { gen_or($1.b, $3.b); $$ = $3; } 709478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project ; 710478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project%% 711