1*d56f51eaSDavid van Moolenbroek /* $NetBSD: gencode.h,v 1.3 2015/03/31 21:39:42 christos Exp $ */ 2*d56f51eaSDavid van Moolenbroek 3*d56f51eaSDavid van Moolenbroek /* 4*d56f51eaSDavid van Moolenbroek * Copyright (c) 1990, 1991, 1992, 1993, 1994, 1995, 1996 5*d56f51eaSDavid van Moolenbroek * The Regents of the University of California. All rights reserved. 6*d56f51eaSDavid van Moolenbroek * 7*d56f51eaSDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 8*d56f51eaSDavid van Moolenbroek * modification, are permitted provided that: (1) source code distributions 9*d56f51eaSDavid van Moolenbroek * retain the above copyright notice and this paragraph in its entirety, (2) 10*d56f51eaSDavid van Moolenbroek * distributions including binary code include the above copyright notice and 11*d56f51eaSDavid van Moolenbroek * this paragraph in its entirety in the documentation or other materials 12*d56f51eaSDavid van Moolenbroek * provided with the distribution, and (3) all advertising materials mentioning 13*d56f51eaSDavid van Moolenbroek * features or use of this software display the following acknowledgement: 14*d56f51eaSDavid van Moolenbroek * ``This product includes software developed by the University of California, 15*d56f51eaSDavid van Moolenbroek * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of 16*d56f51eaSDavid van Moolenbroek * the University nor the names of its contributors may be used to endorse 17*d56f51eaSDavid van Moolenbroek * or promote products derived from this software without specific prior 18*d56f51eaSDavid van Moolenbroek * written permission. 19*d56f51eaSDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 20*d56f51eaSDavid van Moolenbroek * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 21*d56f51eaSDavid van Moolenbroek * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 22*d56f51eaSDavid van Moolenbroek */ 23*d56f51eaSDavid van Moolenbroek 24*d56f51eaSDavid van Moolenbroek /* 25*d56f51eaSDavid van Moolenbroek * ATM support: 26*d56f51eaSDavid van Moolenbroek * 27*d56f51eaSDavid van Moolenbroek * Copyright (c) 1997 Yen Yen Lim and North Dakota State University 28*d56f51eaSDavid van Moolenbroek * All rights reserved. 29*d56f51eaSDavid van Moolenbroek * 30*d56f51eaSDavid van Moolenbroek * Redistribution and use in source and binary forms, with or without 31*d56f51eaSDavid van Moolenbroek * modification, are permitted provided that the following conditions 32*d56f51eaSDavid van Moolenbroek * are met: 33*d56f51eaSDavid van Moolenbroek * 1. Redistributions of source code must retain the above copyright 34*d56f51eaSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer. 35*d56f51eaSDavid van Moolenbroek * 2. Redistributions in binary form must reproduce the above copyright 36*d56f51eaSDavid van Moolenbroek * notice, this list of conditions and the following disclaimer in the 37*d56f51eaSDavid van Moolenbroek * documentation and/or other materials provided with the distribution. 38*d56f51eaSDavid van Moolenbroek * 3. All advertising materials mentioning features or use of this software 39*d56f51eaSDavid van Moolenbroek * must display the following acknowledgement: 40*d56f51eaSDavid van Moolenbroek * This product includes software developed by Yen Yen Lim and 41*d56f51eaSDavid van Moolenbroek * North Dakota State University 42*d56f51eaSDavid van Moolenbroek * 4. The name of the author may not be used to endorse or promote products 43*d56f51eaSDavid van Moolenbroek * derived from this software without specific prior written permission. 44*d56f51eaSDavid van Moolenbroek * 45*d56f51eaSDavid van Moolenbroek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 46*d56f51eaSDavid van Moolenbroek * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 47*d56f51eaSDavid van Moolenbroek * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 48*d56f51eaSDavid van Moolenbroek * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 49*d56f51eaSDavid van Moolenbroek * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 50*d56f51eaSDavid van Moolenbroek * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 51*d56f51eaSDavid van Moolenbroek * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 52*d56f51eaSDavid van Moolenbroek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 53*d56f51eaSDavid van Moolenbroek * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 54*d56f51eaSDavid van Moolenbroek * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 55*d56f51eaSDavid van Moolenbroek * POSSIBILITY OF SUCH DAMAGE. 56*d56f51eaSDavid van Moolenbroek */ 57*d56f51eaSDavid van Moolenbroek 58*d56f51eaSDavid van Moolenbroek #ifndef HAVE___ATTRIBUTE__ 59*d56f51eaSDavid van Moolenbroek #define __attribute__(x) 60*d56f51eaSDavid van Moolenbroek #endif /* HAVE___ATTRIBUTE__ */ 61*d56f51eaSDavid van Moolenbroek 62*d56f51eaSDavid van Moolenbroek /* Address qualifiers. */ 63*d56f51eaSDavid van Moolenbroek 64*d56f51eaSDavid van Moolenbroek #define Q_HOST 1 65*d56f51eaSDavid van Moolenbroek #define Q_NET 2 66*d56f51eaSDavid van Moolenbroek #define Q_PORT 3 67*d56f51eaSDavid van Moolenbroek #define Q_GATEWAY 4 68*d56f51eaSDavid van Moolenbroek #define Q_PROTO 5 69*d56f51eaSDavid van Moolenbroek #define Q_PROTOCHAIN 6 70*d56f51eaSDavid van Moolenbroek #define Q_PORTRANGE 7 71*d56f51eaSDavid van Moolenbroek 72*d56f51eaSDavid van Moolenbroek /* Protocol qualifiers. */ 73*d56f51eaSDavid van Moolenbroek 74*d56f51eaSDavid van Moolenbroek #define Q_LINK 1 75*d56f51eaSDavid van Moolenbroek #define Q_IP 2 76*d56f51eaSDavid van Moolenbroek #define Q_ARP 3 77*d56f51eaSDavid van Moolenbroek #define Q_RARP 4 78*d56f51eaSDavid van Moolenbroek #define Q_SCTP 5 79*d56f51eaSDavid van Moolenbroek #define Q_TCP 6 80*d56f51eaSDavid van Moolenbroek #define Q_UDP 7 81*d56f51eaSDavid van Moolenbroek #define Q_ICMP 8 82*d56f51eaSDavid van Moolenbroek #define Q_IGMP 9 83*d56f51eaSDavid van Moolenbroek #define Q_IGRP 10 84*d56f51eaSDavid van Moolenbroek 85*d56f51eaSDavid van Moolenbroek 86*d56f51eaSDavid van Moolenbroek #define Q_ATALK 11 87*d56f51eaSDavid van Moolenbroek #define Q_DECNET 12 88*d56f51eaSDavid van Moolenbroek #define Q_LAT 13 89*d56f51eaSDavid van Moolenbroek #define Q_SCA 14 90*d56f51eaSDavid van Moolenbroek #define Q_MOPRC 15 91*d56f51eaSDavid van Moolenbroek #define Q_MOPDL 16 92*d56f51eaSDavid van Moolenbroek 93*d56f51eaSDavid van Moolenbroek 94*d56f51eaSDavid van Moolenbroek #define Q_IPV6 17 95*d56f51eaSDavid van Moolenbroek #define Q_ICMPV6 18 96*d56f51eaSDavid van Moolenbroek #define Q_AH 19 97*d56f51eaSDavid van Moolenbroek #define Q_ESP 20 98*d56f51eaSDavid van Moolenbroek 99*d56f51eaSDavid van Moolenbroek #define Q_PIM 21 100*d56f51eaSDavid van Moolenbroek #define Q_VRRP 22 101*d56f51eaSDavid van Moolenbroek 102*d56f51eaSDavid van Moolenbroek #define Q_AARP 23 103*d56f51eaSDavid van Moolenbroek 104*d56f51eaSDavid van Moolenbroek #define Q_ISO 24 105*d56f51eaSDavid van Moolenbroek #define Q_ESIS 25 106*d56f51eaSDavid van Moolenbroek #define Q_ISIS 26 107*d56f51eaSDavid van Moolenbroek #define Q_CLNP 27 108*d56f51eaSDavid van Moolenbroek 109*d56f51eaSDavid van Moolenbroek #define Q_STP 28 110*d56f51eaSDavid van Moolenbroek 111*d56f51eaSDavid van Moolenbroek #define Q_IPX 29 112*d56f51eaSDavid van Moolenbroek 113*d56f51eaSDavid van Moolenbroek #define Q_NETBEUI 30 114*d56f51eaSDavid van Moolenbroek 115*d56f51eaSDavid van Moolenbroek /* IS-IS Levels */ 116*d56f51eaSDavid van Moolenbroek #define Q_ISIS_L1 31 117*d56f51eaSDavid van Moolenbroek #define Q_ISIS_L2 32 118*d56f51eaSDavid van Moolenbroek /* PDU types */ 119*d56f51eaSDavid van Moolenbroek #define Q_ISIS_IIH 33 120*d56f51eaSDavid van Moolenbroek #define Q_ISIS_LAN_IIH 34 121*d56f51eaSDavid van Moolenbroek #define Q_ISIS_PTP_IIH 35 122*d56f51eaSDavid van Moolenbroek #define Q_ISIS_SNP 36 123*d56f51eaSDavid van Moolenbroek #define Q_ISIS_CSNP 37 124*d56f51eaSDavid van Moolenbroek #define Q_ISIS_PSNP 38 125*d56f51eaSDavid van Moolenbroek #define Q_ISIS_LSP 39 126*d56f51eaSDavid van Moolenbroek 127*d56f51eaSDavid van Moolenbroek #define Q_RADIO 40 128*d56f51eaSDavid van Moolenbroek 129*d56f51eaSDavid van Moolenbroek #define Q_CARP 41 130*d56f51eaSDavid van Moolenbroek 131*d56f51eaSDavid van Moolenbroek /* Directional qualifiers. */ 132*d56f51eaSDavid van Moolenbroek 133*d56f51eaSDavid van Moolenbroek #define Q_SRC 1 134*d56f51eaSDavid van Moolenbroek #define Q_DST 2 135*d56f51eaSDavid van Moolenbroek #define Q_OR 3 136*d56f51eaSDavid van Moolenbroek #define Q_AND 4 137*d56f51eaSDavid van Moolenbroek #define Q_ADDR1 5 138*d56f51eaSDavid van Moolenbroek #define Q_ADDR2 6 139*d56f51eaSDavid van Moolenbroek #define Q_ADDR3 7 140*d56f51eaSDavid van Moolenbroek #define Q_ADDR4 8 141*d56f51eaSDavid van Moolenbroek #define Q_RA 9 142*d56f51eaSDavid van Moolenbroek #define Q_TA 10 143*d56f51eaSDavid van Moolenbroek 144*d56f51eaSDavid van Moolenbroek #define Q_DEFAULT 0 145*d56f51eaSDavid van Moolenbroek #define Q_UNDEF 255 146*d56f51eaSDavid van Moolenbroek 147*d56f51eaSDavid van Moolenbroek /* ATM types */ 148*d56f51eaSDavid van Moolenbroek #define A_METAC 22 /* Meta signalling Circuit */ 149*d56f51eaSDavid van Moolenbroek #define A_BCC 23 /* Broadcast Circuit */ 150*d56f51eaSDavid van Moolenbroek #define A_OAMF4SC 24 /* Segment OAM F4 Circuit */ 151*d56f51eaSDavid van Moolenbroek #define A_OAMF4EC 25 /* End-to-End OAM F4 Circuit */ 152*d56f51eaSDavid van Moolenbroek #define A_SC 26 /* Signalling Circuit*/ 153*d56f51eaSDavid van Moolenbroek #define A_ILMIC 27 /* ILMI Circuit */ 154*d56f51eaSDavid van Moolenbroek #define A_OAM 28 /* OAM cells : F4 only */ 155*d56f51eaSDavid van Moolenbroek #define A_OAMF4 29 /* OAM F4 cells: Segment + End-to-end */ 156*d56f51eaSDavid van Moolenbroek #define A_LANE 30 /* LANE traffic */ 157*d56f51eaSDavid van Moolenbroek #define A_LLC 31 /* LLC-encapsulated traffic */ 158*d56f51eaSDavid van Moolenbroek 159*d56f51eaSDavid van Moolenbroek /* Based on Q.2931 signalling protocol */ 160*d56f51eaSDavid van Moolenbroek #define A_SETUP 41 /* Setup message */ 161*d56f51eaSDavid van Moolenbroek #define A_CALLPROCEED 42 /* Call proceeding message */ 162*d56f51eaSDavid van Moolenbroek #define A_CONNECT 43 /* Connect message */ 163*d56f51eaSDavid van Moolenbroek #define A_CONNECTACK 44 /* Connect Ack message */ 164*d56f51eaSDavid van Moolenbroek #define A_RELEASE 45 /* Release message */ 165*d56f51eaSDavid van Moolenbroek #define A_RELEASE_DONE 46 /* Release message */ 166*d56f51eaSDavid van Moolenbroek 167*d56f51eaSDavid van Moolenbroek /* ATM field types */ 168*d56f51eaSDavid van Moolenbroek #define A_VPI 51 169*d56f51eaSDavid van Moolenbroek #define A_VCI 52 170*d56f51eaSDavid van Moolenbroek #define A_PROTOTYPE 53 171*d56f51eaSDavid van Moolenbroek #define A_MSGTYPE 54 172*d56f51eaSDavid van Moolenbroek #define A_CALLREFTYPE 55 173*d56f51eaSDavid van Moolenbroek 174*d56f51eaSDavid van Moolenbroek #define A_CONNECTMSG 70 /* returns Q.2931 signalling messages for 175*d56f51eaSDavid van Moolenbroek establishing and destroying switched 176*d56f51eaSDavid van Moolenbroek virtual connection */ 177*d56f51eaSDavid van Moolenbroek #define A_METACONNECT 71 /* returns Q.2931 signalling messages for 178*d56f51eaSDavid van Moolenbroek establishing and destroying predefined 179*d56f51eaSDavid van Moolenbroek virtual circuits, such as broadcast 180*d56f51eaSDavid van Moolenbroek circuit, oamf4 segment circuit, oamf4 181*d56f51eaSDavid van Moolenbroek end-to-end circuits, ILMI circuits or 182*d56f51eaSDavid van Moolenbroek connection signalling circuit. */ 183*d56f51eaSDavid van Moolenbroek 184*d56f51eaSDavid van Moolenbroek /* MTP2 types */ 185*d56f51eaSDavid van Moolenbroek #define M_FISU 22 /* FISU */ 186*d56f51eaSDavid van Moolenbroek #define M_LSSU 23 /* LSSU */ 187*d56f51eaSDavid van Moolenbroek #define M_MSU 24 /* MSU */ 188*d56f51eaSDavid van Moolenbroek 189*d56f51eaSDavid van Moolenbroek /* MTP2 HSL types */ 190*d56f51eaSDavid van Moolenbroek #define MH_FISU 25 /* FISU for HSL */ 191*d56f51eaSDavid van Moolenbroek #define MH_LSSU 26 /* LSSU */ 192*d56f51eaSDavid van Moolenbroek #define MH_MSU 27 /* MSU */ 193*d56f51eaSDavid van Moolenbroek 194*d56f51eaSDavid van Moolenbroek /* MTP3 field types */ 195*d56f51eaSDavid van Moolenbroek #define M_SIO 1 196*d56f51eaSDavid van Moolenbroek #define M_OPC 2 197*d56f51eaSDavid van Moolenbroek #define M_DPC 3 198*d56f51eaSDavid van Moolenbroek #define M_SLS 4 199*d56f51eaSDavid van Moolenbroek 200*d56f51eaSDavid van Moolenbroek /* MTP3 field types in case of MTP2 HSL */ 201*d56f51eaSDavid van Moolenbroek #define MH_SIO 5 202*d56f51eaSDavid van Moolenbroek #define MH_OPC 6 203*d56f51eaSDavid van Moolenbroek #define MH_DPC 7 204*d56f51eaSDavid van Moolenbroek #define MH_SLS 8 205*d56f51eaSDavid van Moolenbroek 206*d56f51eaSDavid van Moolenbroek 207*d56f51eaSDavid van Moolenbroek struct slist; 208*d56f51eaSDavid van Moolenbroek 209*d56f51eaSDavid van Moolenbroek struct stmt { 210*d56f51eaSDavid van Moolenbroek int code; 211*d56f51eaSDavid van Moolenbroek struct slist *jt; /*only for relative jump in block*/ 212*d56f51eaSDavid van Moolenbroek struct slist *jf; /*only for relative jump in block*/ 213*d56f51eaSDavid van Moolenbroek bpf_int32 k; 214*d56f51eaSDavid van Moolenbroek }; 215*d56f51eaSDavid van Moolenbroek 216*d56f51eaSDavid van Moolenbroek struct slist { 217*d56f51eaSDavid van Moolenbroek struct stmt s; 218*d56f51eaSDavid van Moolenbroek struct slist *next; 219*d56f51eaSDavid van Moolenbroek }; 220*d56f51eaSDavid van Moolenbroek 221*d56f51eaSDavid van Moolenbroek /* 222*d56f51eaSDavid van Moolenbroek * A bit vector to represent definition sets. We assume TOT_REGISTERS 223*d56f51eaSDavid van Moolenbroek * is smaller than 8*sizeof(atomset). 224*d56f51eaSDavid van Moolenbroek */ 225*d56f51eaSDavid van Moolenbroek typedef bpf_u_int32 atomset; 226*d56f51eaSDavid van Moolenbroek #define ATOMMASK(n) (1 << (n)) 227*d56f51eaSDavid van Moolenbroek #define ATOMELEM(d, n) (d & ATOMMASK(n)) 228*d56f51eaSDavid van Moolenbroek 229*d56f51eaSDavid van Moolenbroek /* 230*d56f51eaSDavid van Moolenbroek * An unbounded set. 231*d56f51eaSDavid van Moolenbroek */ 232*d56f51eaSDavid van Moolenbroek typedef bpf_u_int32 *uset; 233*d56f51eaSDavid van Moolenbroek 234*d56f51eaSDavid van Moolenbroek /* 235*d56f51eaSDavid van Moolenbroek * Total number of atomic entities, including accumulator (A) and index (X). 236*d56f51eaSDavid van Moolenbroek * We treat all these guys similarly during flow analysis. 237*d56f51eaSDavid van Moolenbroek */ 238*d56f51eaSDavid van Moolenbroek #define N_ATOMS (BPF_MEMWORDS+2) 239*d56f51eaSDavid van Moolenbroek 240*d56f51eaSDavid van Moolenbroek struct edge { 241*d56f51eaSDavid van Moolenbroek int id; 242*d56f51eaSDavid van Moolenbroek int code; 243*d56f51eaSDavid van Moolenbroek uset edom; 244*d56f51eaSDavid van Moolenbroek struct block *succ; 245*d56f51eaSDavid van Moolenbroek struct block *pred; 246*d56f51eaSDavid van Moolenbroek struct edge *next; /* link list of incoming edges for a node */ 247*d56f51eaSDavid van Moolenbroek }; 248*d56f51eaSDavid van Moolenbroek 249*d56f51eaSDavid van Moolenbroek struct block { 250*d56f51eaSDavid van Moolenbroek int id; 251*d56f51eaSDavid van Moolenbroek struct slist *stmts; /* side effect stmts */ 252*d56f51eaSDavid van Moolenbroek struct stmt s; /* branch stmt */ 253*d56f51eaSDavid van Moolenbroek int mark; 254*d56f51eaSDavid van Moolenbroek u_int longjt; /* jt branch requires long jump */ 255*d56f51eaSDavid van Moolenbroek u_int longjf; /* jf branch requires long jump */ 256*d56f51eaSDavid van Moolenbroek int level; 257*d56f51eaSDavid van Moolenbroek int offset; 258*d56f51eaSDavid van Moolenbroek int sense; 259*d56f51eaSDavid van Moolenbroek struct edge et; 260*d56f51eaSDavid van Moolenbroek struct edge ef; 261*d56f51eaSDavid van Moolenbroek struct block *head; 262*d56f51eaSDavid van Moolenbroek struct block *link; /* link field used by optimizer */ 263*d56f51eaSDavid van Moolenbroek uset dom; 264*d56f51eaSDavid van Moolenbroek uset closure; 265*d56f51eaSDavid van Moolenbroek struct edge *in_edges; 266*d56f51eaSDavid van Moolenbroek atomset def, kill; 267*d56f51eaSDavid van Moolenbroek atomset in_use; 268*d56f51eaSDavid van Moolenbroek atomset out_use; 269*d56f51eaSDavid van Moolenbroek int oval; 270*d56f51eaSDavid van Moolenbroek int val[N_ATOMS]; 271*d56f51eaSDavid van Moolenbroek }; 272*d56f51eaSDavid van Moolenbroek 273*d56f51eaSDavid van Moolenbroek struct arth { 274*d56f51eaSDavid van Moolenbroek struct block *b; /* protocol checks */ 275*d56f51eaSDavid van Moolenbroek struct slist *s; /* stmt list */ 276*d56f51eaSDavid van Moolenbroek int regno; /* virtual register number of result */ 277*d56f51eaSDavid van Moolenbroek }; 278*d56f51eaSDavid van Moolenbroek 279*d56f51eaSDavid van Moolenbroek struct qual { 280*d56f51eaSDavid van Moolenbroek unsigned char addr; 281*d56f51eaSDavid van Moolenbroek unsigned char proto; 282*d56f51eaSDavid van Moolenbroek unsigned char dir; 283*d56f51eaSDavid van Moolenbroek unsigned char pad; 284*d56f51eaSDavid van Moolenbroek }; 285*d56f51eaSDavid van Moolenbroek 286*d56f51eaSDavid van Moolenbroek struct arth *gen_loadi(int); 287*d56f51eaSDavid van Moolenbroek struct arth *gen_load(int, struct arth *, int); 288*d56f51eaSDavid van Moolenbroek struct arth *gen_loadlen(void); 289*d56f51eaSDavid van Moolenbroek struct arth *gen_neg(struct arth *); 290*d56f51eaSDavid van Moolenbroek struct arth *gen_arth(int, struct arth *, struct arth *); 291*d56f51eaSDavid van Moolenbroek 292*d56f51eaSDavid van Moolenbroek void gen_and(struct block *, struct block *); 293*d56f51eaSDavid van Moolenbroek void gen_or(struct block *, struct block *); 294*d56f51eaSDavid van Moolenbroek void gen_not(struct block *); 295*d56f51eaSDavid van Moolenbroek 296*d56f51eaSDavid van Moolenbroek struct block *gen_scode(const char *, struct qual); 297*d56f51eaSDavid van Moolenbroek struct block *gen_ecode(const u_char *, struct qual); 298*d56f51eaSDavid van Moolenbroek struct block *gen_acode(const u_char *, struct qual); 299*d56f51eaSDavid van Moolenbroek struct block *gen_mcode(const char *, const char *, unsigned int, struct qual); 300*d56f51eaSDavid van Moolenbroek #ifdef INET6 301*d56f51eaSDavid van Moolenbroek struct block *gen_mcode6(const char *, const char *, unsigned int, struct qual); 302*d56f51eaSDavid van Moolenbroek #endif 303*d56f51eaSDavid van Moolenbroek struct block *gen_ncode(const char *, bpf_u_int32, struct qual); 304*d56f51eaSDavid van Moolenbroek struct block *gen_proto_abbrev(int); 305*d56f51eaSDavid van Moolenbroek struct block *gen_relation(int, struct arth *, struct arth *, int); 306*d56f51eaSDavid van Moolenbroek struct block *gen_less(int); 307*d56f51eaSDavid van Moolenbroek struct block *gen_greater(int); 308*d56f51eaSDavid van Moolenbroek struct block *gen_byteop(int, int, int); 309*d56f51eaSDavid van Moolenbroek struct block *gen_broadcast(int); 310*d56f51eaSDavid van Moolenbroek struct block *gen_multicast(int); 311*d56f51eaSDavid van Moolenbroek struct block *gen_inbound(int); 312*d56f51eaSDavid van Moolenbroek 313*d56f51eaSDavid van Moolenbroek struct block *gen_llc(void); 314*d56f51eaSDavid van Moolenbroek struct block *gen_llc_i(void); 315*d56f51eaSDavid van Moolenbroek struct block *gen_llc_s(void); 316*d56f51eaSDavid van Moolenbroek struct block *gen_llc_u(void); 317*d56f51eaSDavid van Moolenbroek struct block *gen_llc_s_subtype(bpf_u_int32); 318*d56f51eaSDavid van Moolenbroek struct block *gen_llc_u_subtype(bpf_u_int32); 319*d56f51eaSDavid van Moolenbroek 320*d56f51eaSDavid van Moolenbroek struct block *gen_vlan(int); 321*d56f51eaSDavid van Moolenbroek struct block *gen_mpls(int); 322*d56f51eaSDavid van Moolenbroek 323*d56f51eaSDavid van Moolenbroek struct block *gen_pppoed(void); 324*d56f51eaSDavid van Moolenbroek struct block *gen_pppoes(int); 325*d56f51eaSDavid van Moolenbroek 326*d56f51eaSDavid van Moolenbroek struct block *gen_geneve(int); 327*d56f51eaSDavid van Moolenbroek 328*d56f51eaSDavid van Moolenbroek struct block *gen_atmfield_code(int atmfield, bpf_int32 jvalue, bpf_u_int32 jtype, int reverse); 329*d56f51eaSDavid van Moolenbroek struct block *gen_atmtype_abbrev(int type); 330*d56f51eaSDavid van Moolenbroek struct block *gen_atmmulti_abbrev(int type); 331*d56f51eaSDavid van Moolenbroek 332*d56f51eaSDavid van Moolenbroek struct block *gen_mtp2type_abbrev(int type); 333*d56f51eaSDavid van Moolenbroek struct block *gen_mtp3field_code(int mtp3field, bpf_u_int32 jvalue, bpf_u_int32 jtype, int reverse); 334*d56f51eaSDavid van Moolenbroek 335*d56f51eaSDavid van Moolenbroek struct block *gen_pf_ifname(const char *); 336*d56f51eaSDavid van Moolenbroek struct block *gen_pf_rnr(int); 337*d56f51eaSDavid van Moolenbroek struct block *gen_pf_srnr(int); 338*d56f51eaSDavid van Moolenbroek struct block *gen_pf_ruleset(char *); 339*d56f51eaSDavid van Moolenbroek struct block *gen_pf_reason(int); 340*d56f51eaSDavid van Moolenbroek struct block *gen_pf_action(int); 341*d56f51eaSDavid van Moolenbroek struct block *gen_pf_dir(int); 342*d56f51eaSDavid van Moolenbroek 343*d56f51eaSDavid van Moolenbroek struct block *gen_p80211_type(int, int); 344*d56f51eaSDavid van Moolenbroek struct block *gen_p80211_fcdir(int); 345*d56f51eaSDavid van Moolenbroek 346*d56f51eaSDavid van Moolenbroek void bpf_optimize(struct block **); 347*d56f51eaSDavid van Moolenbroek void bpf_error(const char *, ...) 348*d56f51eaSDavid van Moolenbroek __attribute__((noreturn)) 349*d56f51eaSDavid van Moolenbroek #ifdef __ATTRIBUTE___FORMAT_OK 350*d56f51eaSDavid van Moolenbroek __attribute__((format (printf, 1, 2))) 351*d56f51eaSDavid van Moolenbroek #endif /* __ATTRIBUTE___FORMAT_OK */ 352*d56f51eaSDavid van Moolenbroek ; 353*d56f51eaSDavid van Moolenbroek 354*d56f51eaSDavid van Moolenbroek void finish_parse(struct block *); 355*d56f51eaSDavid van Moolenbroek char *sdup(const char *); 356*d56f51eaSDavid van Moolenbroek 357*d56f51eaSDavid van Moolenbroek struct bpf_insn *icode_to_fcode(struct block *, u_int *); 358*d56f51eaSDavid van Moolenbroek int pcap_parse(void); 359*d56f51eaSDavid van Moolenbroek void lex_init(const char *); 360*d56f51eaSDavid van Moolenbroek void lex_cleanup(void); 361*d56f51eaSDavid van Moolenbroek void sappend(struct slist *, struct slist *); 362*d56f51eaSDavid van Moolenbroek 363*d56f51eaSDavid van Moolenbroek /* XXX */ 364*d56f51eaSDavid van Moolenbroek #define JT(b) ((b)->et.succ) 365*d56f51eaSDavid van Moolenbroek #define JF(b) ((b)->ef.succ) 366*d56f51eaSDavid van Moolenbroek 367*d56f51eaSDavid van Moolenbroek extern int no_optimize; 368