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 * 21511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall * @(#) $Header: /tcpdump/master/libpcap/gencode.h,v 1.71 2007-11-18 02:03:52 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 129511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_CARP 41 130511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 131478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Directional qualifiers. */ 132478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 133478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_SRC 1 134478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_DST 2 135478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_OR 3 136478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_AND 4 137511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_ADDR1 5 138511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_ADDR2 6 139511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_ADDR3 7 140511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_ADDR4 8 141511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_RA 9 142511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define Q_TA 10 143478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 144478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_DEFAULT 0 145478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define Q_UNDEF 255 146478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 147478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* ATM types */ 148478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_METAC 22 /* Meta signalling Circuit */ 149478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_BCC 23 /* Broadcast Circuit */ 150478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4SC 24 /* Segment OAM F4 Circuit */ 151478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4EC 25 /* End-to-End OAM F4 Circuit */ 152478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_SC 26 /* Signalling Circuit*/ 153478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_ILMIC 27 /* ILMI Circuit */ 154478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAM 28 /* OAM cells : F4 only */ 155478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_OAMF4 29 /* OAM F4 cells: Segment + End-to-end */ 156478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_LANE 30 /* LANE traffic */ 157478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_LLC 31 /* LLC-encapsulated traffic */ 158478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 159478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* Based on Q.2931 signalling protocol */ 160478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_SETUP 41 /* Setup message */ 161478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CALLPROCEED 42 /* Call proceeding message */ 162478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECT 43 /* Connect message */ 163478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECTACK 44 /* Connect Ack message */ 164478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_RELEASE 45 /* Release message */ 165478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_RELEASE_DONE 46 /* Release message */ 166478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 167478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* ATM field types */ 168478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_VPI 51 169478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_VCI 52 170478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_PROTOTYPE 53 171478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_MSGTYPE 54 172478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CALLREFTYPE 55 173478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 174478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_CONNECTMSG 70 /* returns Q.2931 signalling messages for 175478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project establishing and destroying switched 176478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project virtual connection */ 177478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define A_METACONNECT 71 /* returns Q.2931 signalling messages for 178478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project establishing and destroying predefined 179478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project virtual circuits, such as broadcast 180478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project circuit, oamf4 segment circuit, oamf4 181478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project end-to-end circuits, ILMI circuits or 182478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project connection signalling circuit. */ 183478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 184478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* MTP2 types */ 185478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_FISU 22 /* FISU */ 186478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_LSSU 23 /* LSSU */ 187478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_MSU 24 /* MSU */ 188478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 189511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* MTP2 HSL types */ 190511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_FISU 25 /* FISU for HSL */ 191511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_LSSU 26 /* LSSU */ 192511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_MSU 27 /* MSU */ 193511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 194478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* MTP3 field types */ 195478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_SIO 1 196478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_OPC 2 197478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_DPC 3 198478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define M_SLS 4 199478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 200511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall/* MTP3 field types in case of MTP2 HSL */ 201511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_SIO 5 202511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_OPC 6 203511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_DPC 7 204511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#define MH_SLS 8 205511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 206478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 207478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct slist; 208478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 209478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct stmt { 210478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int code; 211478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct slist *jt; /*only for relative jump in block*/ 212478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct slist *jf; /*only for relative jump in block*/ 213478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project bpf_int32 k; 214478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 215478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 216478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct slist { 217478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct stmt s; 218478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct slist *next; 219478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 220478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 221478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 222478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * A bit vector to represent definition sets. We assume TOT_REGISTERS 223478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * is smaller than 8*sizeof(atomset). 224478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 225478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef bpf_u_int32 atomset; 226478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define ATOMMASK(n) (1 << (n)) 227478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define ATOMELEM(d, n) (d & ATOMMASK(n)) 228478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 229478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 230478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * An unbounded set. 231478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 232478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projecttypedef bpf_u_int32 *uset; 233478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 234478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* 235478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * Total number of atomic entities, including accumulator (A) and index (X). 236478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project * We treat all these guys similarly during flow analysis. 237478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project */ 238478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define N_ATOMS (BPF_MEMWORDS+2) 239478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 240478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct edge { 241478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int id; 242478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int code; 243478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project uset edom; 244478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *succ; 245478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *pred; 246478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct edge *next; /* link list of incoming edges for a node */ 247478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 248478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 249478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block { 250478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int id; 251478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct slist *stmts; /* side effect stmts */ 252478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct stmt s; /* branch stmt */ 253478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int mark; 254511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall u_int longjt; /* jt branch requires long jump */ 255511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall u_int longjf; /* jf branch requires long jump */ 256478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int level; 257478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int offset; 258478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int sense; 259478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct edge et; 260478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct edge ef; 261478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *head; 262478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *link; /* link field used by optimizer */ 263478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project uset dom; 264478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project uset closure; 265478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct edge *in_edges; 266478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project atomset def, kill; 267478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project atomset in_use; 268478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project atomset out_use; 269478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int oval; 270478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int val[N_ATOMS]; 271478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 272478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 273478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth { 274478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct block *b; /* protocol checks */ 275478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project struct slist *s; /* stmt list */ 276478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project int regno; /* virtual register number of result */ 277478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 278478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 279478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct qual { 280478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project unsigned char addr; 281478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project unsigned char proto; 282478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project unsigned char dir; 283478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project unsigned char pad; 284478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project}; 285478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 286478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_loadi(int); 287478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_load(int, struct arth *, int); 288478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_loadlen(void); 289478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_neg(struct arth *); 290478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct arth *gen_arth(int, struct arth *, struct arth *); 291478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 292478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_and(struct block *, struct block *); 293478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_or(struct block *, struct block *); 294478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid gen_not(struct block *); 295478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 296478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_scode(const char *, struct qual); 297478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_ecode(const u_char *, struct qual); 298478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_acode(const u_char *, struct qual); 299478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mcode(const char *, const char *, int, struct qual); 300478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#ifdef INET6 301478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mcode6(const char *, const char *, int, struct qual); 302478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#endif 303478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_ncode(const char *, bpf_u_int32, struct qual); 304478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_proto_abbrev(int); 305478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_relation(int, struct arth *, struct arth *, int); 306478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_less(int); 307478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_greater(int); 308478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_byteop(int, int, int); 309478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_broadcast(int); 310478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_multicast(int); 311478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_inbound(int); 312478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 313478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_vlan(int); 314478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mpls(int); 315478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 316478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pppoed(void); 317511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct block *gen_pppoes(int); 318478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 319478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtype, int reverse); 320478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmtype_abbrev(int type); 321478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_atmmulti_abbrev(int type); 322478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 323478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mtp2type_abbrev(int type); 324478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse); 325478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 326478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_ifname(const char *); 327478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_rnr(int); 328478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_srnr(int); 329478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_ruleset(char *); 330478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_reason(int); 331478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_action(int); 332478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectstruct block *gen_pf_dir(int); 333478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 334511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct block *gen_p80211_type(int, int); 335511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct block *gen_p80211_fcdir(int); 336511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall 337478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid bpf_optimize(struct block **); 338478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid bpf_error(const char *, ...) 339511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall __attribute__((noreturn)) 340511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#ifdef __ATTRIBUTE___FORMAT_OK 341511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall __attribute__((format (printf, 1, 2))) 342511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall#endif /* __ATTRIBUTE___FORMAT_OK */ 343511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrall ; 344478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 345478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid finish_parse(struct block *); 346478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectchar *sdup(const char *); 347478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 348511eca30a483e912c274e1d8ba3a0f8f081e2227JP Abgrallstruct bpf_insn *icode_to_fcode(struct block *, u_int *); 349478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectint pcap_parse(void); 350478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid lex_init(const char *); 351478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid lex_cleanup(void); 352478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectvoid sappend(struct slist *, struct slist *); 353478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 354478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project/* XXX */ 355478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define JT(b) ((b)->et.succ) 356478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project#define JF(b) ((b)->ef.succ) 357478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Project 358478ab6c8b5bc982589be32eae1e5736efe721b58The Android Open Source Projectextern int no_optimize; 359