1/* 2 * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * The contents of this file constitute Original Code as defined in and 7 * are subject to the Apple Public Source License Version 1.1 (the 8 * "License"). You may not use this file except in compliance with the 9 * License. Please obtain a copy of the License at 10 * http://www.apple.com/publicsource and read it before using this file. 11 * 12 * This Original Code and all software distributed under the License are 13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 17 * License for the specific language governing rights and limitations 18 * under the License. 19 * 20 * @APPLE_LICENSE_HEADER_END@ 21 */ 22/* 23 * Copyright (c) 1990, 1991, 1993 24 * The Regents of the University of California. All rights reserved. 25 * 26 * This code is derived from the Stanford/CMU enet packet filter, 27 * (net/enet.c) distributed as part of 4.3BSD, and code contributed 28 * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 29 * Berkeley Laboratory. 30 * 31 * Redistribution and use in source and binary forms, with or without 32 * modification, are permitted provided that the following conditions 33 * are met: 34 * 1. Redistributions of source code must retain the above copyright 35 * notice, this list of conditions and the following disclaimer. 36 * 2. Redistributions in binary form must reproduce the above copyright 37 * notice, this list of conditions and the following disclaimer in the 38 * documentation and/or other materials provided with the distribution. 39 * 3. All advertising materials mentioning features or use of this software 40 * must display the following acknowledgement: 41 * This product includes software developed by the University of 42 * California, Berkeley and its contributors. 43 * 4. Neither the name of the University nor the names of its contributors 44 * may be used to endorse or promote products derived from this software 45 * without specific prior written permission. 46 * 47 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 48 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 49 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 50 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 51 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 52 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 53 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 54 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 55 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 56 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 57 * SUCH DAMAGE. 58 * 59 * @(#)bpfdesc.h 8.1 (Berkeley) 6/10/93 60 * 61 * $FreeBSD: src/sys/net/bpfdesc.h,v 1.14.2.1 2000/03/19 05:55:36 rwatson Exp $ 62 */ 63 64#ifndef _NET_BPFDESC_H_ 65#define _NET_BPFDESC_H_ 66#include <sys/appleapiopts.h> 67#ifdef KERNEL_PRIVATE 68/* 69 * The items in this header file should be wrapped in #ifdef KERNEL. 70 */ 71 72#include <sys/select.h> 73 74/* 75 * Descriptor associated with each open bpf file. 76 */ 77struct bpf_d { 78 struct bpf_d *bd_next; /* Linked list of descriptors */ 79 /* 80 * Buffer slots: two mbuf clusters buffer the incoming packets. 81 * The model has three slots. Sbuf is always occupied. 82 * sbuf (store) - Receive interrupt puts packets here. 83 * hbuf (hold) - When sbuf is full, put cluster here and 84 * wakeup read (replace sbuf with fbuf). 85 * fbuf (free) - When read is done, put cluster here. 86 * On receiving, if sbuf is full and fbuf is 0, packet is dropped. 87 */ 88 caddr_t bd_sbuf; /* store slot */ 89 caddr_t bd_hbuf; /* hold slot */ 90 caddr_t bd_fbuf; /* free slot */ 91 int bd_slen; /* current length of store buffer */ 92 int bd_hlen; /* current length of hold buffer */ 93 94 int bd_bufsize; /* absolute length of buffers */ 95 96 struct bpf_if * bd_bif; /* interface descriptor */ 97 u_long bd_rtout; /* Read timeout in 'ticks' */ 98 struct bpf_insn *bd_filter; /* filter code */ 99 u_long bd_rcount; /* number of packets received */ 100 u_long bd_dcount; /* number of packets dropped */ 101 102 u_char bd_promisc; /* true if listening promiscuously */ 103 u_char bd_state; /* idle, waiting, or timed out */ 104 u_char bd_immediate; /* true to return on packet arrival */ 105 int bd_async; /* non-zero if packet reception should generate signal */ 106 int bd_sig; /* signal to send upon packet reception */ 107#ifdef __APPLE__ 108 pid_t bd_sigio; 109#else 110 struct sigio * bd_sigio; /* information for async I/O */ 111#endif 112 113#if BSD < 199103 114 u_char bd_selcoll; /* true if selects collide */ 115 int bd_timedout; 116 struct proc * bd_selproc; /* process that last selected us */ 117#else 118 u_char bd_pad; /* explicit alignment */ 119 struct selinfo bd_sel; /* bsd select info */ 120#endif 121 int bd_hdrcmplt; /* false to fill in src lladdr automatically */ 122 int bd_seesent; /* true if bpf should see sent packets */ 123 124}; 125 126/* 127 * Descriptor associated with each attached hardware interface. 128 */ 129struct bpf_if { 130 struct bpf_if *bif_next; /* list of all interfaces */ 131 struct bpf_d *bif_dlist; /* descriptor list */ 132 u_int bif_dlt; /* link layer type */ 133 u_int bif_hdrlen; /* length of header (with padding) */ 134 struct ifnet *bif_ifp; /* corresponding interface */ 135}; 136 137#endif /* KERNEL_PRIVATE */ 138#endif 139

