1478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 2478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996 3478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * The Regents of the University of California. All rights reserved. 4478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 5478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Redistribution and use in source and binary forms, with or without 6478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * modification, are permitted provided that: (1) source code distributions 7478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * retain the above copyright notice and this paragraph in its entirety, (2) 8478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * distributions including binary code include the above copyright notice and 9478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * this paragraph in its entirety in the documentation or other materials 10478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * provided with the distribution, and (3) all advertising materials mentioning 11478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * features or use of this software display the following acknowledgement: 12478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ``This product includes software developed by the University of California, 13478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 14478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * the University nor the names of its contributors may be used to endorse 15478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * or promote products derived from this software without specific prior 16478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * written permission. 17478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 18478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 19478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 20478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 21478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.60.2.11 2007/06/11 09:52:04 guy Exp $ (LBL) 22478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 23478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 24478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 25478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ATM support: 26478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 27478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Copyright (c) 1997 Yen Yen Lim and North Dakota State University 28478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * All rights reserved. 29478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 30478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Redistribution and use in source and binary forms, with or without 31478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * modification, are permitted provided that the following conditions 32478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * are met: 33478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 34478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * notice, this list of conditions and the following disclaimer. 35478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 36478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 37478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * documentation and/or other materials provided with the distribution. 38478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 3. All advertising materials mentioning features or use of this software 39478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * must display the following acknowledgement: 40478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * This product includes software developed by Yen Yen Lim and 41478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * North Dakota State University 42478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 4. The name of the author may not be used to endorse or promote products 43478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * derived from this software without specific prior written permission. 44478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * 45478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 46478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 47478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 48478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 49478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 50478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 51478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 52478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 53478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 54478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 55478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * POSSIBILITY OF SUCH DAMAGE. 56478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 57478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 58478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifndef HAVE___ATTRIBUTE__ 59478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define __attribute__(x) 60478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif /* HAVE___ATTRIBUTE__ */ 61478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 62478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Address qualifiers. */ 63478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 64478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_HOST 1 65478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_NET 2 66478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_PORT 3 67478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_GATEWAY 4 68478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_PROTO 5 69478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_PROTOCHAIN 6 70478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_PORTRANGE 7 71478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 72478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Protocol qualifiers. */ 73478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 74478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_LINK 1 75478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_IP 2 76478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ARP 3 77478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_RARP 4 78478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_SCTP 5 79478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_TCP 6 80478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_UDP 7 81478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ICMP 8 82478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_IGMP 9 83478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_IGRP 10 84478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 85478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 86478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ATALK 11 87478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_DECNET 12 88478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_LAT 13 89478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_SCA 14 90478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_MOPRC 15 91478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_MOPDL 16 92478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 93478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 94478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_IPV6 17 95478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ICMPV6 18 96478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_AH 19 97478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ESP 20 98478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 99478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_PIM 21 100478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_VRRP 22 101478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 102478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_AARP 23 103478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 104478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISO 24 105478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ESIS 25 106478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS 26 107478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_CLNP 27 108478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 109478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_STP 28 110478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 111478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_IPX 29 112478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 113478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_NETBEUI 30 114478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 115478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* IS-IS Levels */ 116478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_L1 31 117478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_L2 32 118478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* PDU types */ 119478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_IIH 33 120478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_LAN_IIH 34 121478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_PTP_IIH 35 122478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_SNP 36 123478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_CSNP 37 124478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_PSNP 38 125478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_ISIS_LSP 39 126478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 127478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_RADIO 40 128478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 129478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Directional qualifiers. */ 130478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_SRC 1 132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_DST 2 133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_OR 3 134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_AND 4 135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_DEFAULT 0 137478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_UNDEF 255 138478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 139478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* ATM types */ 140478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_METAC 22 /* Meta signalling Circuit */ 141478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_BCC 23 /* Broadcast Circuit */ 142478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4SC 24 /* Segment OAM F4 Circuit */ 143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4EC 25 /* End-to-End OAM F4 Circuit */ 144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_SC 26 /* Signalling Circuit*/ 145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_ILMIC 27 /* ILMI Circuit */ 146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAM 28 /* OAM cells : F4 only */ 147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4 29 /* OAM F4 cells: Segment + End-to-end */ 148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_LANE 30 /* LANE traffic */ 149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_LLC 31 /* LLC-encapsulated traffic */ 150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Based on Q.2931 signalling protocol */ 152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_SETUP 41 /* Setup message */ 153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CALLPROCEED 42 /* Call proceeding message */ 154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECT 43 /* Connect message */ 155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECTACK 44 /* Connect Ack message */ 156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_RELEASE 45 /* Release message */ 157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_RELEASE_DONE 46 /* Release message */ 158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* ATM field types */ 160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_VPI 51 161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_VCI 52 162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_PROTOTYPE 53 163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_MSGTYPE 54 164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CALLREFTYPE 55 165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECTMSG 70 /* returns Q.2931 signalling messages for 167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project establishing and destroying switched 168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project virtual connection */ 169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_METACONNECT 71 /* returns Q.2931 signalling messages for 170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project establishing and destroying predefined 171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project virtual circuits, such as broadcast 172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project circuit, oamf4 segment circuit, oamf4 173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project end-to-end circuits, ILMI circuits or 174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project connection signalling circuit. */ 175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* MTP2 types */ 177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_FISU 22 /* FISU */ 178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_LSSU 23 /* LSSU */ 179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_MSU 24 /* MSU */ 180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* MTP3 field types */ 182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_SIO 1 183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_OPC 2 184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_DPC 3 185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_SLS 4 186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct slist; 189478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 190478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct stmt { 191478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int code; 192478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct slist *jt; /*only for relative jump in block*/ 193478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct slist *jf; /*only for relative jump in block*/ 194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_int32 k; 195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct slist { 198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct stmt s; 199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct slist *next; 200478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 201478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 202478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 203478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * A bit vector to represent definition sets. We assume TOT_REGISTERS 204478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * is smaller than 8*sizeof(atomset). 205478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef bpf_u_int32 atomset; 207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define ATOMMASK(n) (1 << (n)) 208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define ATOMELEM(d, n) (d & ATOMMASK(n)) 209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * An unbounded set. 212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef bpf_u_int32 *uset; 214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Total number of atomic entities, including accumulator (A) and index (X). 217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * We treat all these guys similarly during flow analysis. 218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define N_ATOMS (BPF_MEMWORDS+2) 220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct edge { 222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int id; 223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int code; 224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project uset edom; 225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *succ; 226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *pred; 227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct edge *next; /* link list of incoming edges for a node */ 228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block { 231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int id; 232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct slist *stmts; /* side effect stmts */ 233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct stmt s; /* branch stmt */ 234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int mark; 235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int longjt; /* jt branch requires long jump */ 236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int longjf; /* jf branch requires long jump */ 237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int level; 238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int offset; 239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int sense; 240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct edge et; 241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct edge ef; 242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *head; 243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *link; /* link field used by optimizer */ 244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project uset dom; 245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project uset closure; 246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct edge *in_edges; 247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project atomset def, kill; 248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project atomset in_use; 249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project atomset out_use; 250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int oval; 251478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int val[N_ATOMS]; 252478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 253478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 254478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth { 255478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *b; /* protocol checks */ 256478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct slist *s; /* stmt list */ 257478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int regno; /* virtual register number of result */ 258478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 259478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 260478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct qual { 261478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project unsigned char addr; 262478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project unsigned char proto; 263478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project unsigned char dir; 264478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project unsigned char pad; 265478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 266478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 267478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_loadi(int); 268478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_load(int, struct arth *, int); 269478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_loadlen(void); 270478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_neg(struct arth *); 271478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_arth(int, struct arth *, struct arth *); 272478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 273478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_and(struct block *, struct block *); 274478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_or(struct block *, struct block *); 275478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_not(struct block *); 276478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 277478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_scode(const char *, struct qual); 278478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_ecode(const u_char *, struct qual); 279478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_acode(const u_char *, struct qual); 280478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mcode(const char *, const char *, int, struct qual); 281478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6 282478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mcode6(const char *, const char *, int, struct qual); 283478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 284478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_ncode(const char *, bpf_u_int32, struct qual); 285478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_proto_abbrev(int); 286478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_relation(int, struct arth *, struct arth *, int); 287478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_less(int); 288478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_greater(int); 289478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_byteop(int, int, int); 290478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_broadcast(int); 291478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_multicast(int); 292478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_inbound(int); 293478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 294478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_vlan(int); 295478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mpls(int); 296478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 297478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pppoed(void); 298478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pppoes(void); 299478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 300478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtype, int reverse); 301478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmtype_abbrev(int type); 302478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmmulti_abbrev(int type); 303478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 304478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mtp2type_abbrev(int type); 305478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse); 306478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 307478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_ifname(const char *); 308478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_rnr(int); 309478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_srnr(int); 310478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_ruleset(char *); 311478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_reason(int); 312478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_action(int); 313478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_dir(int); 314478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 315478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid bpf_optimize(struct block **); 316478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid bpf_error(const char *, ...) 317478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project __attribute__((noreturn, format (printf, 1, 2))); 318478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 319478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid finish_parse(struct block *); 320478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar *sdup(const char *); 321478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 322478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct bpf_insn *icode_to_fcode(struct block *, int *); 323478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_parse(void); 324478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid lex_init(const char *); 325478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid lex_cleanup(void); 326478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid sappend(struct slist *, struct slist *); 327478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 328478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* XXX */ 329478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define JT(b) ((b)->et.succ) 330478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define JF(b) ((b)->ef.succ) 331478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 332478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern int no_optimize; 333