|
|
1.1 root 1: /*- 1.1.1.2 ! root 2: * Copyright (c) 1990-1991 The Regents of the University of California. 1.1 root 3: * All rights reserved. 4: * 5: * This code is derived from the Stanford/CMU enet packet filter, 6: * (net/enet.c) distributed as part of 4.3BSD, and code contributed 1.1.1.2 ! root 7: * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence ! 8: * Berkeley Laboratory. 1.1 root 9: * 10: * Redistribution and use in source and binary forms, with or without 11: * modification, are permitted provided that the following conditions 12: * are met: 13: * 1. Redistributions of source code must retain the above copyright 14: * notice, this list of conditions and the following disclaimer. 15: * 2. Redistributions in binary form must reproduce the above copyright 16: * notice, this list of conditions and the following disclaimer in the 17: * documentation and/or other materials provided with the distribution. 18: * 3. All advertising materials mentioning features or use of this software 19: * must display the following acknowledgement: 1.1.1.2 ! root 20: * This product includes software developed by the University of ! 21: * California, Berkeley and its contributors. 1.1 root 22: * 4. Neither the name of the University nor the names of its contributors 23: * may be used to endorse or promote products derived from this software 24: * without specific prior written permission. 25: * 26: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 27: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 30: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 31: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36: * SUCH DAMAGE. 37: * 1.1.1.2 ! root 38: * @(#)bpf.h 7.1 (Berkeley) 5/7/91 1.1 root 39: * 1.1.1.2 ! root 40: * @(#) $Header: /cvsroot/src/sys/net/bpf.h,v 1.2 1993/03/25 00:27:52 cgd Exp $ (LBL) 1.1 root 41: */ 42: 43: /* 44: * Alignment macros. BPF_WORDALIGN rounds up to the next 45: * even multiple of BPF_ALIGNMENT. 46: */ 47: #define BPF_ALIGNMENT sizeof(long) 48: #define BPF_WORDALIGN(x) (((x)+(BPF_ALIGNMENT-1))&~(BPF_ALIGNMENT-1)) 49: 50: #define BPF_MAXINSNS 512 51: #define BPF_MAXBUFSIZE 0x8000 1.1.1.2 ! root 52: #define BPF_MINBUFSIZE 32 1.1 root 53: 54: /* 55: * Structure for BIOCSETF. 56: */ 57: struct bpf_program { 58: u_int bf_len; 59: struct bpf_insn *bf_insns; 60: }; 61: 62: /* 63: * Struct returned by BIOCGSTATS. 64: */ 65: struct bpf_stat { 66: u_int bs_recv; /* number of packets received */ 67: u_int bs_drop; /* number of packets dropped */ 68: }; 69: 70: /* 1.1.1.2 ! root 71: * Struct return by BIOCVERSION. This represents the version number of ! 72: * the filter language described by the instruction encodings below. ! 73: * bpf understands a program iff kernel_major == filter_major && ! 74: * kernel_minor >= filter_minor, that is, if the value returned by the ! 75: * running kernel has the same major number and a minor number equal ! 76: * equal to or less than the filter being downloaded. Otherwise, the ! 77: * results are undefined, meaning an error may be returned or packets ! 78: * may be accepted haphazardly. ! 79: * It has nothing to do with the source code version. ! 80: */ ! 81: struct bpf_version { ! 82: u_short bv_major; ! 83: u_short bv_minor; ! 84: }; ! 85: /* Current version number. */ ! 86: #define BPF_MAJOR_VERSION 1 ! 87: #define BPF_MINOR_VERSION 1 ! 88: ! 89: /* 1.1 root 90: * BPF ioctls 91: * 92: * The first set is for compatibility with Sun's pcc style 93: * header files. If your using gcc, we assume that you 94: * have run fixincludes so the latter set should work. 95: */ 1.1.1.2 ! root 96: #if (defined(sun) || defined(ibm032)) && !defined(__GNUC__) 1.1 root 97: #define BIOCGBLEN _IOR(B,102, u_int) 1.1.1.2 ! root 98: #define BIOCSBLEN _IOWR(B,102, u_int) 1.1 root 99: #define BIOCSETF _IOW(B,103, struct bpf_program) 100: #define BIOCFLUSH _IO(B,104) 101: #define BIOCPROMISC _IO(B,105) 102: #define BIOCGDLT _IOR(B,106, u_int) 103: #define BIOCGETIF _IOR(B,107, struct ifreq) 104: #define BIOCSETIF _IOW(B,108, struct ifreq) 105: #define BIOCSRTIMEOUT _IOW(B,109, struct timeval) 106: #define BIOCGRTIMEOUT _IOR(B,110, struct timeval) 107: #define BIOCGSTATS _IOR(B,111, struct bpf_stat) 108: #define BIOCIMMEDIATE _IOW(B,112, u_int) 1.1.1.2 ! root 109: #define BIOCVERSION _IOR(B,113, struct bpf_version) 1.1 root 110: #else 111: #define BIOCGBLEN _IOR('B',102, u_int) 1.1.1.2 ! root 112: #define BIOCSBLEN _IOWR('B',102, u_int) 1.1 root 113: #define BIOCSETF _IOW('B',103, struct bpf_program) 114: #define BIOCFLUSH _IO('B',104) 115: #define BIOCPROMISC _IO('B',105) 116: #define BIOCGDLT _IOR('B',106, u_int) 117: #define BIOCGETIF _IOR('B',107, struct ifreq) 118: #define BIOCSETIF _IOW('B',108, struct ifreq) 119: #define BIOCSRTIMEOUT _IOW('B',109, struct timeval) 120: #define BIOCGRTIMEOUT _IOR('B',110, struct timeval) 121: #define BIOCGSTATS _IOR('B',111, struct bpf_stat) 122: #define BIOCIMMEDIATE _IOW('B',112, u_int) 1.1.1.2 ! root 123: #define BIOCVERSION _IOR('B',113, struct bpf_version) 1.1 root 124: #endif 125: 126: /* 127: * Structure prepended to each packet. 128: */ 129: struct bpf_hdr { 130: struct timeval bh_tstamp; /* time stamp */ 131: u_long bh_caplen; /* length of captured portion */ 132: u_long bh_datalen; /* original length of packet */ 133: u_short bh_hdrlen; /* length of bpf header (this struct 134: plus alignment padding) */ 135: }; 136: /* 137: * Because the structure above is not a multiple of 4 bytes, some compilers 138: * will insist on inserting padding; hence, sizeof(struct bpf_hdr) won't work. 139: * Only the kernel needs to know about it; applications use bh_hdrlen. 140: */ 141: #ifdef KERNEL 142: #define SIZEOF_BPF_HDR 18 143: #endif 144: 145: /* 146: * Data-link level type codes. 147: * Currently, only DLT_EN10MB and DLT_SLIP are supported. 148: */ 1.1.1.2 ! root 149: #define DLT_NULL 0 /* no link-layer encapsulation */ 1.1 root 150: #define DLT_EN10MB 1 /* Ethernet (10Mb) */ 151: #define DLT_EN3MB 2 /* Experimental Ethernet (3Mb) */ 152: #define DLT_AX25 3 /* Amateur Radio AX.25 */ 153: #define DLT_PRONET 4 /* Proteon ProNET Token Ring */ 154: #define DLT_CHAOS 5 /* Chaos */ 155: #define DLT_IEEE802 6 /* IEEE 802 Networks */ 156: #define DLT_ARCNET 7 /* ARCNET */ 157: #define DLT_SLIP 8 /* Serial Line IP */ 158: #define DLT_PPP 9 /* Point-to-point Protocol */ 159: #define DLT_FDDI 10 /* FDDI */ 160: 161: /* 162: * The instruction encondings. 163: */ 1.1.1.2 ! root 164: /* instruction classes */ 1.1 root 165: #define BPF_CLASS(code) ((code) & 0x07) 166: #define BPF_LD 0x00 167: #define BPF_LDX 0x01 168: #define BPF_ST 0x02 169: #define BPF_STX 0x03 170: #define BPF_ALU 0x04 171: #define BPF_JMP 0x05 172: #define BPF_RET 0x06 173: #define BPF_MISC 0x07 174: 175: /* ld/ldx fields */ 176: #define BPF_SIZE(code) ((code) & 0x18) 177: #define BPF_W 0x00 178: #define BPF_H 0x08 179: #define BPF_B 0x10 180: #define BPF_MODE(code) ((code) & 0xe0) 181: #define BPF_IMM 0x00 182: #define BPF_ABS 0x20 183: #define BPF_IND 0x40 184: #define BPF_MEM 0x60 185: #define BPF_LEN 0x80 186: #define BPF_MSH 0xa0 187: 188: /* alu/jmp fields */ 189: #define BPF_OP(code) ((code) & 0xf0) 190: #define BPF_ADD 0x00 191: #define BPF_SUB 0x10 192: #define BPF_MUL 0x20 193: #define BPF_DIV 0x30 194: #define BPF_OR 0x40 195: #define BPF_AND 0x50 196: #define BPF_LSH 0x60 197: #define BPF_RSH 0x70 198: #define BPF_NEG 0x80 199: #define BPF_JA 0x00 200: #define BPF_JEQ 0x10 201: #define BPF_JGT 0x20 202: #define BPF_JGE 0x30 203: #define BPF_JSET 0x40 204: #define BPF_SRC(code) ((code) & 0x08) 205: #define BPF_K 0x00 206: #define BPF_X 0x08 207: 208: /* ret - BPF_K and BPF_X also apply */ 209: #define BPF_RVAL(code) ((code) & 0x18) 210: #define BPF_A 0x10 211: 212: /* misc */ 213: #define BPF_MISCOP(code) ((code) & 0xf8) 214: #define BPF_TAX 0x00 215: #define BPF_TXA 0x80 216: 217: /* 218: * The instruction data structure. 219: */ 220: struct bpf_insn { 221: u_short code; 222: u_char jt; 223: u_char jf; 224: long k; 225: }; 226: 227: /* 228: * Macros for insn array initializers. 229: */ 230: #define BPF_STMT(code, k) { (u_short)(code), 0, 0, k } 231: #define BPF_JUMP(code, k, jt, jf) { (u_short)(code), jt, jf, k } 232: 233: #ifdef KERNEL 234: extern u_int bpf_filter(); 235: extern void bpfattach(); 236: extern void bpf_tap(); 237: extern void bpf_mtap(); 238: #endif 239: 240: /* 241: * Number of scratch memory words (for BPF_LD|BPF_MEM and BPF_ST). 242: */ 243: #define BPF_MEMWORDS 16 1.1.1.2 ! root 244:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.