bpf.c (56057) | bpf.c (58192) |
---|---|
1/* 2 * Copyright (c) 1990, 1991, 1993 3 * The Regents of the University of California. 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 7 * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 8 * Berkeley Laboratory. --- 23 unchanged lines hidden (view full) --- 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 * 38 * @(#)bpf.c 8.2 (Berkeley) 3/28/94 39 * | 1/* 2 * Copyright (c) 1990, 1991, 1993 3 * The Regents of the University of California. 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 7 * to Berkeley by Steven McCanne and Van Jacobson both of Lawrence 8 * Berkeley Laboratory. --- 23 unchanged lines hidden (view full) --- 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 * 38 * @(#)bpf.c 8.2 (Berkeley) 3/28/94 39 * |
40 * $FreeBSD: head/sys/net/bpf.c 56057 2000-01-15 19:46:12Z phk $ | 40 * $FreeBSD: head/sys/net/bpf.c 58192 2000-03-18 06:30:42Z rwatson $ |
41 */ 42 43#include "bpf.h" 44 45#ifndef __GNUC__ 46#define inline 47#else 48#define inline __inline --- 305 unchanged lines hidden (view full) --- 354 if (d) 355 return (EBUSY); 356 make_dev(&bpf_cdevsw, minor(dev), 0, 0, 0600, "bpf%d", lminor(dev)); 357 MALLOC(d, struct bpf_d *, sizeof(*d), M_BPF, M_WAITOK); 358 bzero(d, sizeof(*d)); 359 dev->si_drv1 = d; 360 d->bd_bufsize = bpf_bufsize; 361 d->bd_sig = SIGIO; | 41 */ 42 43#include "bpf.h" 44 45#ifndef __GNUC__ 46#define inline 47#else 48#define inline __inline --- 305 unchanged lines hidden (view full) --- 354 if (d) 355 return (EBUSY); 356 make_dev(&bpf_cdevsw, minor(dev), 0, 0, 0600, "bpf%d", lminor(dev)); 357 MALLOC(d, struct bpf_d *, sizeof(*d), M_BPF, M_WAITOK); 358 bzero(d, sizeof(*d)); 359 dev->si_drv1 = d; 360 d->bd_bufsize = bpf_bufsize; 361 d->bd_sig = SIGIO; |
362 d->bd_seesent = 1; |
|
362 363 return (0); 364} 365 366/* 367 * Close the descriptor by detaching it from its interface, 368 * deallocating its buffers, and marking it free. 369 */ --- 258 unchanged lines hidden (view full) --- 628 * BIOCSETIF Set interface. 629 * BIOCSRTIMEOUT Set read timeout. 630 * BIOCGRTIMEOUT Get read timeout. 631 * BIOCGSTATS Get packet stats. 632 * BIOCIMMEDIATE Set immediate mode. 633 * BIOCVERSION Get filter language version. 634 * BIOCGHDRCMPLT Get "header already complete" flag 635 * BIOCSHDRCMPLT Set "header already complete" flag | 363 364 return (0); 365} 366 367/* 368 * Close the descriptor by detaching it from its interface, 369 * deallocating its buffers, and marking it free. 370 */ --- 258 unchanged lines hidden (view full) --- 629 * BIOCSETIF Set interface. 630 * BIOCSRTIMEOUT Set read timeout. 631 * BIOCGRTIMEOUT Get read timeout. 632 * BIOCGSTATS Get packet stats. 633 * BIOCIMMEDIATE Set immediate mode. 634 * BIOCVERSION Get filter language version. 635 * BIOCGHDRCMPLT Get "header already complete" flag 636 * BIOCSHDRCMPLT Set "header already complete" flag |
637 * BIOCGSEESENT Get "see packets sent" flag 638 * BIOCSSEESENT Set "see packets sent" flag |
|
636 */ 637/* ARGSUSED */ 638static int 639bpfioctl(dev, cmd, addr, flags, p) 640 dev_t dev; 641 u_long cmd; 642 caddr_t addr; 643 int flags; --- 199 unchanged lines hidden (view full) --- 843 844 /* 845 * Set "header already complete" flag 846 */ 847 case BIOCSHDRCMPLT: 848 d->bd_hdrcmplt = *(u_int *)addr ? 1 : 0; 849 break; 850 | 639 */ 640/* ARGSUSED */ 641static int 642bpfioctl(dev, cmd, addr, flags, p) 643 dev_t dev; 644 u_long cmd; 645 caddr_t addr; 646 int flags; --- 199 unchanged lines hidden (view full) --- 846 847 /* 848 * Set "header already complete" flag 849 */ 850 case BIOCSHDRCMPLT: 851 d->bd_hdrcmplt = *(u_int *)addr ? 1 : 0; 852 break; 853 |
854 /* 855 * Get "see sent packets" flag 856 */ 857 case BIOCGSEESENT: 858 *(u_int *)addr = d->bd_seesent; 859 break; 860 861 /* 862 * Set "see sent packets" flag 863 */ 864 case BIOCSSEESENT: 865 d->bd_seesent = *(u_int *)addr; 866 break; 867 |
|
851 case FIONBIO: /* Non-blocking I/O */ 852 break; 853 854 case FIOASYNC: /* Send signal on receive packets */ 855 d->bd_async = *(int *)addr; 856 break; 857 858 case FIOSETOWN: --- 239 unchanged lines hidden (view full) --- 1098 u_int pktlen, slen; 1099 struct mbuf *m0; 1100 1101 pktlen = 0; 1102 for (m0 = m; m0 != 0; m0 = m0->m_next) 1103 pktlen += m0->m_len; 1104 1105 for (d = bp->bif_dlist; d != 0; d = d->bd_next) { | 868 case FIONBIO: /* Non-blocking I/O */ 869 break; 870 871 case FIOASYNC: /* Send signal on receive packets */ 872 d->bd_async = *(int *)addr; 873 break; 874 875 case FIOSETOWN: --- 239 unchanged lines hidden (view full) --- 1115 u_int pktlen, slen; 1116 struct mbuf *m0; 1117 1118 pktlen = 0; 1119 for (m0 = m; m0 != 0; m0 = m0->m_next) 1120 pktlen += m0->m_len; 1121 1122 for (d = bp->bif_dlist; d != 0; d = d->bd_next) { |
1123 if (!d->bd_seesent && (m->m_pkthdr.rcvif == NULL)) 1124 continue; |
|
1106 ++d->bd_rcount; 1107 slen = bpf_filter(d->bd_filter, (u_char *)m, pktlen, 0); 1108 if (slen != 0) 1109 catchpacket(d, (u_char *)m, pktlen, slen, bpf_mcopy); 1110 } 1111} 1112 1113/* --- 210 unchanged lines hidden --- | 1125 ++d->bd_rcount; 1126 slen = bpf_filter(d->bd_filter, (u_char *)m, pktlen, 0); 1127 if (slen != 0) 1128 catchpacket(d, (u_char *)m, pktlen, slen, bpf_mcopy); 1129 } 1130} 1131 1132/* --- 210 unchanged lines hidden --- |