xref: /freebsd/sys/net/bpf.c (revision 0640d357f29fb1c0daaaffadd0416c5981413afd)
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.
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:
20  *	This product includes software developed by the University of
21  *	California, Berkeley and its contributors.
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  *
38  *      @(#)bpf.c	8.2 (Berkeley) 3/28/94
39  *
40  * $Id: bpf.c,v 1.43 1998/10/04 23:04:48 alex Exp $
41  */
42 
43 #include "bpfilter.h"
44 
45 #if NBPFILTER > 0
46 
47 #ifndef __GNUC__
48 #define inline
49 #else
50 #define inline __inline
51 #endif
52 
53 #include <sys/param.h>
54 #include <sys/systm.h>
55 #include <sys/conf.h>
56 #include <sys/malloc.h>
57 #include <sys/mbuf.h>
58 #include <sys/time.h>
59 #include <sys/proc.h>
60 #include <sys/signalvar.h>
61 #include <sys/filio.h>
62 #include <sys/sockio.h>
63 #include <sys/ttycom.h>
64 
65 #if defined(sparc) && BSD < 199103
66 #include <sys/stream.h>
67 #endif
68 #include <sys/poll.h>
69 
70 #include <sys/socket.h>
71 #include <sys/vnode.h>
72 
73 #include <net/if.h>
74 #include <net/bpf.h>
75 #include <net/bpfdesc.h>
76 
77 #include <netinet/in.h>
78 #include <netinet/if_ether.h>
79 #include <sys/kernel.h>
80 #include <sys/sysctl.h>
81 
82 #include "opt_devfs.h"
83 
84 #ifdef DEVFS
85 #include <sys/devfsext.h>
86 #endif /*DEVFS*/
87 
88 
89 /*
90  * Older BSDs don't have kernel malloc.
91  */
92 #if BSD < 199103
93 extern bcopy();
94 static caddr_t bpf_alloc();
95 #include <net/bpf_compat.h>
96 #define BPF_BUFSIZE (MCLBYTES-8)
97 #define UIOMOVE(cp, len, code, uio) uiomove(cp, len, code, uio)
98 #else
99 #define BPF_BUFSIZE 4096
100 #define UIOMOVE(cp, len, code, uio) uiomove(cp, len, uio)
101 #endif
102 
103 #define PRINET  26			/* interruptible */
104 
105 /*
106  * The default read buffer size is patchable.
107  */
108 static int bpf_bufsize = BPF_BUFSIZE;
109 SYSCTL_INT(_debug, OID_AUTO, bpf_bufsize, CTLFLAG_RW,
110 	&bpf_bufsize, 0, "");
111 
112 /*
113  *  bpf_iflist is the list of interfaces; each corresponds to an ifnet
114  *  bpf_dtab holds the descriptors, indexed by minor device #
115  */
116 static struct bpf_if	*bpf_iflist;
117 static struct bpf_d	bpf_dtab[NBPFILTER];
118 static int		bpf_dtab_init;
119 
120 static int	bpf_allocbufs __P((struct bpf_d *));
121 static void	bpf_attachd __P((struct bpf_d *d, struct bpf_if *bp));
122 static void	bpf_detachd __P((struct bpf_d *d));
123 static void	bpf_freed __P((struct bpf_d *));
124 static void	bpf_ifname __P((struct ifnet *, struct ifreq *));
125 static void	bpf_mcopy __P((const void *, void *, size_t));
126 static int	bpf_movein __P((struct uio *, int,
127 		    struct mbuf **, struct sockaddr *, int *));
128 static int	bpf_setif __P((struct bpf_d *, struct ifreq *));
129 static inline void
130 		bpf_wakeup __P((struct bpf_d *));
131 static void	catchpacket __P((struct bpf_d *, u_char *, u_int,
132 		    u_int, void (*)(const void *, void *, size_t)));
133 static void	reset_d __P((struct bpf_d *));
134 static int	 bpf_setf __P((struct bpf_d *, struct bpf_program *));
135 
136 static	d_open_t	bpfopen;
137 static	d_close_t	bpfclose;
138 static	d_read_t	bpfread;
139 static	d_write_t	bpfwrite;
140 static	d_ioctl_t	bpfioctl;
141 static	d_poll_t	bpfpoll;
142 
143 #define CDEV_MAJOR 23
144 static struct cdevsw bpf_cdevsw =
145  	{ bpfopen,	bpfclose,	bpfread,	bpfwrite,	/*23*/
146  	  bpfioctl,	nostop,		nullreset,	nodevtotty,/* bpf */
147  	  bpfpoll,	nommap,		NULL,	"bpf",	NULL,	-1 };
148 
149 
150 static int
151 bpf_movein(uio, linktype, mp, sockp, datlen)
152 	register struct uio *uio;
153 	int linktype, *datlen;
154 	register struct mbuf **mp;
155 	register struct sockaddr *sockp;
156 {
157 	struct mbuf *m;
158 	int error;
159 	int len;
160 	int hlen;
161 
162 	/*
163 	 * Build a sockaddr based on the data link layer type.
164 	 * We do this at this level because the ethernet header
165 	 * is copied directly into the data field of the sockaddr.
166 	 * In the case of SLIP, there is no header and the packet
167 	 * is forwarded as is.
168 	 * Also, we are careful to leave room at the front of the mbuf
169 	 * for the link level header.
170 	 */
171 	switch (linktype) {
172 
173 	case DLT_SLIP:
174 		sockp->sa_family = AF_INET;
175 		hlen = 0;
176 		break;
177 
178 	case DLT_EN10MB:
179 		sockp->sa_family = AF_UNSPEC;
180 		/* XXX Would MAXLINKHDR be better? */
181 		hlen = sizeof(struct ether_header);
182 		break;
183 
184 	case DLT_FDDI:
185 #if defined(__FreeBSD__) || defined(__bsdi__)
186 		sockp->sa_family = AF_IMPLINK;
187 		hlen = 0;
188 #else
189 		sockp->sa_family = AF_UNSPEC;
190 		/* XXX 4(FORMAC)+6(dst)+6(src)+3(LLC)+5(SNAP) */
191 		hlen = 24;
192 #endif
193 		break;
194 
195 	case DLT_RAW:
196 	case DLT_NULL:
197 		sockp->sa_family = AF_UNSPEC;
198 		hlen = 0;
199 		break;
200 
201 #ifdef __FreeBSD__
202 	case DLT_ATM_RFC1483:
203 		/*
204 		 * en atm driver requires 4-byte atm pseudo header.
205 		 * though it isn't standard, vpi:vci needs to be
206 		 * specified anyway.
207 		 */
208 		sockp->sa_family = AF_UNSPEC;
209 		hlen = 12; 	/* XXX 4(ATM_PH) + 3(LLC) + 5(SNAP) */
210 		break;
211 #endif
212 
213 	default:
214 		return (EIO);
215 	}
216 
217 	len = uio->uio_resid;
218 	*datlen = len - hlen;
219 	if ((unsigned)len > MCLBYTES)
220 		return (EIO);
221 
222 	MGETHDR(m, M_WAIT, MT_DATA);
223 	if (m == 0)
224 		return (ENOBUFS);
225 	if (len > MHLEN) {
226 #if BSD >= 199103
227 		MCLGET(m, M_WAIT);
228 		if ((m->m_flags & M_EXT) == 0) {
229 #else
230 		MCLGET(m);
231 		if (m->m_len != MCLBYTES) {
232 #endif
233 			error = ENOBUFS;
234 			goto bad;
235 		}
236 	}
237 	m->m_pkthdr.len = m->m_len = len;
238 	m->m_pkthdr.rcvif = NULL;
239 	*mp = m;
240 	/*
241 	 * Make room for link header.
242 	 */
243 	if (hlen != 0) {
244 		m->m_pkthdr.len -= hlen;
245 		m->m_len -= hlen;
246 #if BSD >= 199103
247 		m->m_data += hlen; /* XXX */
248 #else
249 		m->m_off += hlen;
250 #endif
251 		error = UIOMOVE((caddr_t)sockp->sa_data, hlen, UIO_WRITE, uio);
252 		if (error)
253 			goto bad;
254 	}
255 	error = UIOMOVE(mtod(m, caddr_t), len - hlen, UIO_WRITE, uio);
256 	if (!error)
257 		return (0);
258  bad:
259 	m_freem(m);
260 	return (error);
261 }
262 
263 /*
264  * Attach file to the bpf interface, i.e. make d listen on bp.
265  * Must be called at splimp.
266  */
267 static void
268 bpf_attachd(d, bp)
269 	struct bpf_d *d;
270 	struct bpf_if *bp;
271 {
272 	/*
273 	 * Point d at bp, and add d to the interface's list of listeners.
274 	 * Finally, point the driver's bpf cookie at the interface so
275 	 * it will divert packets to bpf.
276 	 */
277 	d->bd_bif = bp;
278 	d->bd_next = bp->bif_dlist;
279 	bp->bif_dlist = d;
280 
281 	bp->bif_ifp->if_bpf = bp;
282 }
283 
284 /*
285  * Detach a file from its interface.
286  */
287 static void
288 bpf_detachd(d)
289 	struct bpf_d *d;
290 {
291 	struct bpf_d **p;
292 	struct bpf_if *bp;
293 
294 	bp = d->bd_bif;
295 	/*
296 	 * Check if this descriptor had requested promiscuous mode.
297 	 * If so, turn it off.
298 	 */
299 	if (d->bd_promisc) {
300 		d->bd_promisc = 0;
301 		if (ifpromisc(bp->bif_ifp, 0))
302 			/*
303 			 * Something is really wrong if we were able to put
304 			 * the driver into promiscuous mode, but can't
305 			 * take it out.
306 			 */
307 			panic("bpf: ifpromisc failed");
308 	}
309 	/* Remove d from the interface's descriptor list. */
310 	p = &bp->bif_dlist;
311 	while (*p != d) {
312 		p = &(*p)->bd_next;
313 		if (*p == 0)
314 			panic("bpf_detachd: descriptor not in list");
315 	}
316 	*p = (*p)->bd_next;
317 	if (bp->bif_dlist == 0)
318 		/*
319 		 * Let the driver know that there are no more listeners.
320 		 */
321 		d->bd_bif->bif_ifp->if_bpf = 0;
322 	d->bd_bif = 0;
323 }
324 
325 
326 /*
327  * Mark a descriptor free by making it point to itself.
328  * This is probably cheaper than marking with a constant since
329  * the address should be in a register anyway.
330  */
331 #define D_ISFREE(d) ((d) == (d)->bd_next)
332 #define D_MARKFREE(d) ((d)->bd_next = (d))
333 #define D_MARKUSED(d) ((d)->bd_next = 0)
334 
335 /*
336  * Open ethernet device.  Returns ENXIO for illegal minor device number,
337  * EBUSY if file is open by another process.
338  */
339 /* ARGSUSED */
340 static	int
341 bpfopen(dev, flags, fmt, p)
342 	dev_t dev;
343 	int flags;
344 	int fmt;
345 	struct proc *p;
346 {
347 	register struct bpf_d *d;
348 
349 	if (minor(dev) >= NBPFILTER)
350 		return (ENXIO);
351 	/*
352 	 * Each minor can be opened by only one process.  If the requested
353 	 * minor is in use, return EBUSY.
354 	 */
355 	d = &bpf_dtab[minor(dev)];
356 	if (!D_ISFREE(d))
357 		return (EBUSY);
358 
359 	/* Mark "free" and do most initialization. */
360 	bzero((char *)d, sizeof(*d));
361 	d->bd_bufsize = bpf_bufsize;
362 	d->bd_sig = SIGIO;
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  */
371 /* ARGSUSED */
372 static	int
373 bpfclose(dev, flags, fmt, p)
374 	dev_t dev;
375 	int flags;
376 	int fmt;
377 	struct proc *p;
378 {
379 	register struct bpf_d *d = &bpf_dtab[minor(dev)];
380 	register int s;
381 
382 	s = splimp();
383 	if (d->bd_bif)
384 		bpf_detachd(d);
385 	splx(s);
386 	bpf_freed(d);
387 
388 	return (0);
389 }
390 
391 /*
392  * Support for SunOS, which does not have tsleep.
393  */
394 #if BSD < 199103
395 static
396 bpf_timeout(arg)
397 	caddr_t arg;
398 {
399 	struct bpf_d *d = (struct bpf_d *)arg;
400 	d->bd_timedout = 1;
401 	wakeup(arg);
402 }
403 
404 #define BPF_SLEEP(chan, pri, s, t) bpf_sleep((struct bpf_d *)chan)
405 
406 int
407 bpf_sleep(d)
408 	register struct bpf_d *d;
409 {
410 	register int rto = d->bd_rtout;
411 	register int st;
412 
413 	if (rto != 0) {
414 		d->bd_timedout = 0;
415 		timeout(bpf_timeout, (caddr_t)d, rto);
416 	}
417 	st = sleep((caddr_t)d, PRINET|PCATCH);
418 	if (rto != 0) {
419 		if (d->bd_timedout == 0)
420 			untimeout(bpf_timeout, (caddr_t)d);
421 		else if (st == 0)
422 			return EWOULDBLOCK;
423 	}
424 	return (st != 0) ? EINTR : 0;
425 }
426 #else
427 #define BPF_SLEEP tsleep
428 #endif
429 
430 /*
431  * Rotate the packet buffers in descriptor d.  Move the store buffer
432  * into the hold slot, and the free buffer into the store slot.
433  * Zero the length of the new store buffer.
434  */
435 #define ROTATE_BUFFERS(d) \
436 	(d)->bd_hbuf = (d)->bd_sbuf; \
437 	(d)->bd_hlen = (d)->bd_slen; \
438 	(d)->bd_sbuf = (d)->bd_fbuf; \
439 	(d)->bd_slen = 0; \
440 	(d)->bd_fbuf = 0;
441 /*
442  *  bpfread - read next chunk of packets from buffers
443  */
444 static	int
445 bpfread(dev, uio, ioflag)
446 	dev_t dev;
447 	register struct uio *uio;
448 	int ioflag;
449 {
450 	register struct bpf_d *d = &bpf_dtab[minor(dev)];
451 	int error;
452 	int s;
453 
454 	/*
455 	 * Restrict application to use a buffer the same size as
456 	 * as kernel buffers.
457 	 */
458 	if (uio->uio_resid != d->bd_bufsize)
459 		return (EINVAL);
460 
461 	s = splimp();
462 	/*
463 	 * If the hold buffer is empty, then do a timed sleep, which
464 	 * ends when the timeout expires or when enough packets
465 	 * have arrived to fill the store buffer.
466 	 */
467 	while (d->bd_hbuf == 0) {
468 		if (d->bd_immediate && d->bd_slen != 0) {
469 			/*
470 			 * A packet(s) either arrived since the previous
471 			 * read or arrived while we were asleep.
472 			 * Rotate the buffers and return what's here.
473 			 */
474 			ROTATE_BUFFERS(d);
475 			break;
476 		}
477 		if (ioflag & IO_NDELAY)
478 			error = EWOULDBLOCK;
479 		else
480 			error = BPF_SLEEP((caddr_t)d, PRINET|PCATCH, "bpf",
481 					  d->bd_rtout);
482 		if (error == EINTR || error == ERESTART) {
483 			splx(s);
484 			return (error);
485 		}
486 		if (error == EWOULDBLOCK) {
487 			/*
488 			 * On a timeout, return what's in the buffer,
489 			 * which may be nothing.  If there is something
490 			 * in the store buffer, we can rotate the buffers.
491 			 */
492 			if (d->bd_hbuf)
493 				/*
494 				 * We filled up the buffer in between
495 				 * getting the timeout and arriving
496 				 * here, so we don't need to rotate.
497 				 */
498 				break;
499 
500 			if (d->bd_slen == 0) {
501 				splx(s);
502 				return (0);
503 			}
504 			ROTATE_BUFFERS(d);
505 			break;
506 		}
507 	}
508 	/*
509 	 * At this point, we know we have something in the hold slot.
510 	 */
511 	splx(s);
512 
513 	/*
514 	 * Move data from hold buffer into user space.
515 	 * We know the entire buffer is transferred since
516 	 * we checked above that the read buffer is bpf_bufsize bytes.
517 	 */
518 	error = UIOMOVE(d->bd_hbuf, d->bd_hlen, UIO_READ, uio);
519 
520 	s = splimp();
521 	d->bd_fbuf = d->bd_hbuf;
522 	d->bd_hbuf = 0;
523 	d->bd_hlen = 0;
524 	splx(s);
525 
526 	return (error);
527 }
528 
529 
530 /*
531  * If there are processes sleeping on this descriptor, wake them up.
532  */
533 static inline void
534 bpf_wakeup(d)
535 	register struct bpf_d *d;
536 {
537 	struct proc *p;
538 
539 	wakeup((caddr_t)d);
540 	if (d->bd_async && d->bd_sig)
541 		if (d->bd_pgid > 0)
542 			gsignal (d->bd_pgid, d->bd_sig);
543 		else if (p = pfind (-d->bd_pgid))
544 			psignal (p, d->bd_sig);
545 
546 #if BSD >= 199103
547 	selwakeup(&d->bd_sel);
548 	/* XXX */
549 	d->bd_sel.si_pid = 0;
550 #else
551 	if (d->bd_selproc) {
552 		selwakeup(d->bd_selproc, (int)d->bd_selcoll);
553 		d->bd_selcoll = 0;
554 		d->bd_selproc = 0;
555 	}
556 #endif
557 }
558 
559 static	int
560 bpfwrite(dev, uio, ioflag)
561 	dev_t dev;
562 	struct uio *uio;
563 	int ioflag;
564 {
565 	register struct bpf_d *d = &bpf_dtab[minor(dev)];
566 	struct ifnet *ifp;
567 	struct mbuf *m;
568 	int error, s;
569 	static struct sockaddr dst;
570 	int datlen;
571 
572 	if (d->bd_bif == 0)
573 		return (ENXIO);
574 
575 	ifp = d->bd_bif->bif_ifp;
576 
577 	if (uio->uio_resid == 0)
578 		return (0);
579 
580 	error = bpf_movein(uio, (int)d->bd_bif->bif_dlt, &m, &dst, &datlen);
581 	if (error)
582 		return (error);
583 
584 	if (datlen > ifp->if_mtu)
585 		return (EMSGSIZE);
586 
587 	s = splnet();
588 #if BSD >= 199103
589 	error = (*ifp->if_output)(ifp, m, &dst, (struct rtentry *)0);
590 #else
591 	error = (*ifp->if_output)(ifp, m, &dst);
592 #endif
593 	splx(s);
594 	/*
595 	 * The driver frees the mbuf.
596 	 */
597 	return (error);
598 }
599 
600 /*
601  * Reset a descriptor by flushing its packet buffer and clearing the
602  * receive and drop counts.  Should be called at splimp.
603  */
604 static void
605 reset_d(d)
606 	struct bpf_d *d;
607 {
608 	if (d->bd_hbuf) {
609 		/* Free the hold buffer. */
610 		d->bd_fbuf = d->bd_hbuf;
611 		d->bd_hbuf = 0;
612 	}
613 	d->bd_slen = 0;
614 	d->bd_hlen = 0;
615 	d->bd_rcount = 0;
616 	d->bd_dcount = 0;
617 }
618 
619 /*
620  *  FIONREAD		Check for read packet available.
621  *  SIOCGIFADDR		Get interface address - convenient hook to driver.
622  *  BIOCGBLEN		Get buffer len [for read()].
623  *  BIOCSETF		Set ethernet read filter.
624  *  BIOCFLUSH		Flush read packet buffer.
625  *  BIOCPROMISC		Put interface into promiscuous mode.
626  *  BIOCGDLT		Get link layer type.
627  *  BIOCGETIF		Get interface name.
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  */
635 /* ARGSUSED */
636 static	int
637 bpfioctl(dev, cmd, addr, flags, p)
638 	dev_t dev;
639 	u_long cmd;
640 	caddr_t addr;
641 	int flags;
642 	struct proc *p;
643 {
644 	register struct bpf_d *d = &bpf_dtab[minor(dev)];
645 	int s, error = 0;
646 
647 	switch (cmd) {
648 
649 	default:
650 		error = EINVAL;
651 		break;
652 
653 	/*
654 	 * Check for read packet available.
655 	 */
656 	case FIONREAD:
657 		{
658 			int n;
659 
660 			s = splimp();
661 			n = d->bd_slen;
662 			if (d->bd_hbuf)
663 				n += d->bd_hlen;
664 			splx(s);
665 
666 			*(int *)addr = n;
667 			break;
668 		}
669 
670 	case SIOCGIFADDR:
671 		{
672 			struct ifnet *ifp;
673 
674 			if (d->bd_bif == 0)
675 				error = EINVAL;
676 			else {
677 				ifp = d->bd_bif->bif_ifp;
678 				error = (*ifp->if_ioctl)(ifp, cmd, addr);
679 			}
680 			break;
681 		}
682 
683 	/*
684 	 * Get buffer len [for read()].
685 	 */
686 	case BIOCGBLEN:
687 		*(u_int *)addr = d->bd_bufsize;
688 		break;
689 
690 	/*
691 	 * Set buffer length.
692 	 */
693 	case BIOCSBLEN:
694 #if BSD < 199103
695 		error = EINVAL;
696 #else
697 		if (d->bd_bif != 0)
698 			error = EINVAL;
699 		else {
700 			register u_int size = *(u_int *)addr;
701 
702 			if (size > BPF_MAXBUFSIZE)
703 				*(u_int *)addr = size = BPF_MAXBUFSIZE;
704 			else if (size < BPF_MINBUFSIZE)
705 				*(u_int *)addr = size = BPF_MINBUFSIZE;
706 			d->bd_bufsize = size;
707 		}
708 #endif
709 		break;
710 
711 	/*
712 	 * Set link layer read filter.
713 	 */
714 	case BIOCSETF:
715 		error = bpf_setf(d, (struct bpf_program *)addr);
716 		break;
717 
718 	/*
719 	 * Flush read packet buffer.
720 	 */
721 	case BIOCFLUSH:
722 		s = splimp();
723 		reset_d(d);
724 		splx(s);
725 		break;
726 
727 	/*
728 	 * Put interface into promiscuous mode.
729 	 */
730 	case BIOCPROMISC:
731 		if (d->bd_bif == 0) {
732 			/*
733 			 * No interface attached yet.
734 			 */
735 			error = EINVAL;
736 			break;
737 		}
738 		s = splimp();
739 		if (d->bd_promisc == 0) {
740 			error = ifpromisc(d->bd_bif->bif_ifp, 1);
741 			if (error == 0)
742 				d->bd_promisc = 1;
743 		}
744 		splx(s);
745 		break;
746 
747 	/*
748 	 * Get device parameters.
749 	 */
750 	case BIOCGDLT:
751 		if (d->bd_bif == 0)
752 			error = EINVAL;
753 		else
754 			*(u_int *)addr = d->bd_bif->bif_dlt;
755 		break;
756 
757 	/*
758 	 * Set interface name.
759 	 */
760 	case BIOCGETIF:
761 		if (d->bd_bif == 0)
762 			error = EINVAL;
763 		else
764 			bpf_ifname(d->bd_bif->bif_ifp, (struct ifreq *)addr);
765 		break;
766 
767 	/*
768 	 * Set interface.
769 	 */
770 	case BIOCSETIF:
771 		error = bpf_setif(d, (struct ifreq *)addr);
772 		break;
773 
774 	/*
775 	 * Set read timeout.
776 	 */
777 	case BIOCSRTIMEOUT:
778 		{
779 			struct timeval *tv = (struct timeval *)addr;
780 
781 			/*
782 			 * Subtract 1 tick from tvtohz() since this isn't
783 			 * a one-shot timer.
784 			 */
785 			if ((error = itimerfix(tv)) == 0)
786 				d->bd_rtout = tvtohz(tv) - 1;
787 			break;
788 		}
789 
790 	/*
791 	 * Get read timeout.
792 	 */
793 	case BIOCGRTIMEOUT:
794 		{
795 			struct timeval *tv = (struct timeval *)addr;
796 
797 			tv->tv_sec = d->bd_rtout / hz;
798 			tv->tv_usec = (d->bd_rtout % hz) * tick;
799 			break;
800 		}
801 
802 	/*
803 	 * Get packet stats.
804 	 */
805 	case BIOCGSTATS:
806 		{
807 			struct bpf_stat *bs = (struct bpf_stat *)addr;
808 
809 			bs->bs_recv = d->bd_rcount;
810 			bs->bs_drop = d->bd_dcount;
811 			break;
812 		}
813 
814 	/*
815 	 * Set immediate mode.
816 	 */
817 	case BIOCIMMEDIATE:
818 		d->bd_immediate = *(u_int *)addr;
819 		break;
820 
821 	case BIOCVERSION:
822 		{
823 			struct bpf_version *bv = (struct bpf_version *)addr;
824 
825 			bv->bv_major = BPF_MAJOR_VERSION;
826 			bv->bv_minor = BPF_MINOR_VERSION;
827 			break;
828 		}
829 
830 	case FIONBIO:		/* Non-blocking I/O */
831 		break;
832 
833 	case FIOASYNC:		/* Send signal on receive packets */
834 		d->bd_async = *(int *)addr;
835 		break;
836 
837 /* N.B.  ioctl (FIOSETOWN) and fcntl (F_SETOWN) both end up doing the
838    equivalent of a TIOCSPGRP and hence end up here.  *However* TIOCSPGRP's arg
839    is a process group if it's positive and a process id if it's negative.  This
840    is exactly the opposite of what the other two functions want!  Therefore
841    there is code in ioctl and fcntl to negate the arg before calling here. */
842 
843 	case TIOCSPGRP:		/* Process or group to send signals to */
844 		d->bd_pgid = *(int *)addr;
845 		break;
846 
847 	case TIOCGPGRP:
848 		*(int *)addr = d->bd_pgid;
849 		break;
850 
851 	case BIOCSRSIG:		/* Set receive signal */
852 		{
853 		 	u_int sig;
854 
855 			sig = *(u_int *)addr;
856 
857 			if (sig >= NSIG)
858 				error = EINVAL;
859 			else
860 				d->bd_sig = sig;
861 			break;
862 		}
863 	case BIOCGRSIG:
864 		*(u_int *)addr = d->bd_sig;
865 		break;
866 	}
867 	return (error);
868 }
869 
870 /*
871  * Set d's packet filter program to fp.  If this file already has a filter,
872  * free it and replace it.  Returns EINVAL for bogus requests.
873  */
874 static int
875 bpf_setf(d, fp)
876 	struct bpf_d *d;
877 	struct bpf_program *fp;
878 {
879 	struct bpf_insn *fcode, *old;
880 	u_int flen, size;
881 	int s;
882 
883 	old = d->bd_filter;
884 	if (fp->bf_insns == 0) {
885 		if (fp->bf_len != 0)
886 			return (EINVAL);
887 		s = splimp();
888 		d->bd_filter = 0;
889 		reset_d(d);
890 		splx(s);
891 		if (old != 0)
892 			free((caddr_t)old, M_DEVBUF);
893 		return (0);
894 	}
895 	flen = fp->bf_len;
896 	if (flen > BPF_MAXINSNS)
897 		return (EINVAL);
898 
899 	size = flen * sizeof(*fp->bf_insns);
900 	fcode = (struct bpf_insn *)malloc(size, M_DEVBUF, M_WAITOK);
901 	if (copyin((caddr_t)fp->bf_insns, (caddr_t)fcode, size) == 0 &&
902 	    bpf_validate(fcode, (int)flen)) {
903 		s = splimp();
904 		d->bd_filter = fcode;
905 		reset_d(d);
906 		splx(s);
907 		if (old != 0)
908 			free((caddr_t)old, M_DEVBUF);
909 
910 		return (0);
911 	}
912 	free((caddr_t)fcode, M_DEVBUF);
913 	return (EINVAL);
914 }
915 
916 /*
917  * Detach a file from its current interface (if attached at all) and attach
918  * to the interface indicated by the name stored in ifr.
919  * Return an errno or 0.
920  */
921 static int
922 bpf_setif(d, ifr)
923 	struct bpf_d *d;
924 	struct ifreq *ifr;
925 {
926 	struct bpf_if *bp;
927 	int s, error;
928 	struct ifnet *theywant;
929 
930 	theywant = ifunit(ifr->ifr_name);
931 	if (theywant == 0)
932 		return ENXIO;
933 
934 	/*
935 	 * Look through attached interfaces for the named one.
936 	 */
937 	for (bp = bpf_iflist; bp != 0; bp = bp->bif_next) {
938 		struct ifnet *ifp = bp->bif_ifp;
939 
940 		if (ifp == 0 || ifp != theywant)
941 			continue;
942 		/*
943 		 * We found the requested interface.
944 		 * If it's not up, return an error.
945 		 * Allocate the packet buffers if we need to.
946 		 * If we're already attached to requested interface,
947 		 * just flush the buffer.
948 		 */
949 		if ((ifp->if_flags & IFF_UP) == 0)
950 			return (ENETDOWN);
951 
952 		if (d->bd_sbuf == 0) {
953 			error = bpf_allocbufs(d);
954 			if (error != 0)
955 				return (error);
956 		}
957 		s = splimp();
958 		if (bp != d->bd_bif) {
959 			if (d->bd_bif)
960 				/*
961 				 * Detach if attached to something else.
962 				 */
963 				bpf_detachd(d);
964 
965 			bpf_attachd(d, bp);
966 		}
967 		reset_d(d);
968 		splx(s);
969 		return (0);
970 	}
971 	/* Not found. */
972 	return (ENXIO);
973 }
974 
975 /*
976  * Convert an interface name plus unit number of an ifp to a single
977  * name which is returned in the ifr.
978  */
979 static void
980 bpf_ifname(ifp, ifr)
981 	struct ifnet *ifp;
982 	struct ifreq *ifr;
983 {
984 	char *s = ifp->if_name;
985 	char *d = ifr->ifr_name;
986 
987 	while (*d++ = *s++)
988 		continue;
989 	d--; /* back to the null */
990 	/* XXX Assume that unit number is less than 10. */
991 	*d++ = ifp->if_unit + '0';
992 	*d = '\0';
993 }
994 
995 /*
996  * Support for select() and poll() system calls
997  *
998  * Return true iff the specific operation will not block indefinitely.
999  * Otherwise, return false but make a note that a selwakeup() must be done.
1000  */
1001 int
1002 bpfpoll(dev, events, p)
1003 	register dev_t dev;
1004 	int events;
1005 	struct proc *p;
1006 {
1007 	register struct bpf_d *d;
1008 	register int s;
1009 	int revents = 0;
1010 
1011 	/*
1012 	 * An imitation of the FIONREAD ioctl code.
1013 	 */
1014 	d = &bpf_dtab[minor(dev)];
1015 
1016 	s = splimp();
1017 	if (events & (POLLIN | POLLRDNORM))
1018 		if (d->bd_hlen != 0 || (d->bd_immediate && d->bd_slen != 0))
1019 			revents |= events & (POLLIN | POLLRDNORM);
1020 		else
1021 			selrecord(p, &d->bd_sel);
1022 
1023 	splx(s);
1024 	return (revents);
1025 }
1026 
1027 /*
1028  * Incoming linkage from device drivers.  Process the packet pkt, of length
1029  * pktlen, which is stored in a contiguous buffer.  The packet is parsed
1030  * by each process' filter, and if accepted, stashed into the corresponding
1031  * buffer.
1032  */
1033 void
1034 bpf_tap(ifp, pkt, pktlen)
1035 	struct ifnet *ifp;
1036 	register u_char *pkt;
1037 	register u_int pktlen;
1038 {
1039 	struct bpf_if *bp;
1040 	register struct bpf_d *d;
1041 	register u_int slen;
1042 	/*
1043 	 * Note that the ipl does not have to be raised at this point.
1044 	 * The only problem that could arise here is that if two different
1045 	 * interfaces shared any data.  This is not the case.
1046 	 */
1047 	bp = ifp->if_bpf;
1048 	for (d = bp->bif_dlist; d != 0; d = d->bd_next) {
1049 		++d->bd_rcount;
1050 		slen = bpf_filter(d->bd_filter, pkt, pktlen, pktlen);
1051 		if (slen != 0)
1052 			catchpacket(d, pkt, pktlen, slen, bcopy);
1053 	}
1054 }
1055 
1056 /*
1057  * Copy data from an mbuf chain into a buffer.  This code is derived
1058  * from m_copydata in sys/uipc_mbuf.c.
1059  */
1060 static void
1061 bpf_mcopy(src_arg, dst_arg, len)
1062 	const void *src_arg;
1063 	void *dst_arg;
1064 	register size_t len;
1065 {
1066 	register const struct mbuf *m;
1067 	register u_int count;
1068 	u_char *dst;
1069 
1070 	m = src_arg;
1071 	dst = dst_arg;
1072 	while (len > 0) {
1073 		if (m == 0)
1074 			panic("bpf_mcopy");
1075 		count = min(m->m_len, len);
1076 		bcopy(mtod(m, void *), dst, count);
1077 		m = m->m_next;
1078 		dst += count;
1079 		len -= count;
1080 	}
1081 }
1082 
1083 /*
1084  * Incoming linkage from device drivers, when packet is in an mbuf chain.
1085  */
1086 void
1087 bpf_mtap(ifp, m)
1088 	struct ifnet *ifp;
1089 	struct mbuf *m;
1090 {
1091 	struct bpf_if *bp = ifp->if_bpf;
1092 	struct bpf_d *d;
1093 	u_int pktlen, slen;
1094 	struct mbuf *m0;
1095 
1096 	pktlen = 0;
1097 	for (m0 = m; m0 != 0; m0 = m0->m_next)
1098 		pktlen += m0->m_len;
1099 
1100 	for (d = bp->bif_dlist; d != 0; d = d->bd_next) {
1101 		++d->bd_rcount;
1102 		slen = bpf_filter(d->bd_filter, (u_char *)m, pktlen, 0);
1103 		if (slen != 0)
1104 			catchpacket(d, (u_char *)m, pktlen, slen, bpf_mcopy);
1105 	}
1106 }
1107 
1108 /*
1109  * Move the packet data from interface memory (pkt) into the
1110  * store buffer.  Return 1 if it's time to wakeup a listener (buffer full),
1111  * otherwise 0.  "copy" is the routine called to do the actual data
1112  * transfer.  bcopy is passed in to copy contiguous chunks, while
1113  * bpf_mcopy is passed in to copy mbuf chains.  In the latter case,
1114  * pkt is really an mbuf.
1115  */
1116 static void
1117 catchpacket(d, pkt, pktlen, snaplen, cpfn)
1118 	register struct bpf_d *d;
1119 	register u_char *pkt;
1120 	register u_int pktlen, snaplen;
1121 	register void (*cpfn) __P((const void *, void *, size_t));
1122 {
1123 	register struct bpf_hdr *hp;
1124 	register int totlen, curlen;
1125 	register int hdrlen = d->bd_bif->bif_hdrlen;
1126 	/*
1127 	 * Figure out how many bytes to move.  If the packet is
1128 	 * greater or equal to the snapshot length, transfer that
1129 	 * much.  Otherwise, transfer the whole packet (unless
1130 	 * we hit the buffer size limit).
1131 	 */
1132 	totlen = hdrlen + min(snaplen, pktlen);
1133 	if (totlen > d->bd_bufsize)
1134 		totlen = d->bd_bufsize;
1135 
1136 	/*
1137 	 * Round up the end of the previous packet to the next longword.
1138 	 */
1139 	curlen = BPF_WORDALIGN(d->bd_slen);
1140 	if (curlen + totlen > d->bd_bufsize) {
1141 		/*
1142 		 * This packet will overflow the storage buffer.
1143 		 * Rotate the buffers if we can, then wakeup any
1144 		 * pending reads.
1145 		 */
1146 		if (d->bd_fbuf == 0) {
1147 			/*
1148 			 * We haven't completed the previous read yet,
1149 			 * so drop the packet.
1150 			 */
1151 			++d->bd_dcount;
1152 			return;
1153 		}
1154 		ROTATE_BUFFERS(d);
1155 		bpf_wakeup(d);
1156 		curlen = 0;
1157 	}
1158 	else if (d->bd_immediate)
1159 		/*
1160 		 * Immediate mode is set.  A packet arrived so any
1161 		 * reads should be woken up.
1162 		 */
1163 		bpf_wakeup(d);
1164 
1165 	/*
1166 	 * Append the bpf header.
1167 	 */
1168 	hp = (struct bpf_hdr *)(d->bd_sbuf + curlen);
1169 #if BSD >= 199103
1170 	microtime(&hp->bh_tstamp);
1171 #elif defined(sun)
1172 	uniqtime(&hp->bh_tstamp);
1173 #else
1174 	hp->bh_tstamp = time;
1175 #endif
1176 	hp->bh_datalen = pktlen;
1177 	hp->bh_hdrlen = hdrlen;
1178 	/*
1179 	 * Copy the packet data into the store buffer and update its length.
1180 	 */
1181 	(*cpfn)(pkt, (u_char *)hp + hdrlen, (hp->bh_caplen = totlen - hdrlen));
1182 	d->bd_slen = curlen + totlen;
1183 }
1184 
1185 /*
1186  * Initialize all nonzero fields of a descriptor.
1187  */
1188 static int
1189 bpf_allocbufs(d)
1190 	register struct bpf_d *d;
1191 {
1192 	d->bd_fbuf = (caddr_t)malloc(d->bd_bufsize, M_DEVBUF, M_WAITOK);
1193 	if (d->bd_fbuf == 0)
1194 		return (ENOBUFS);
1195 
1196 	d->bd_sbuf = (caddr_t)malloc(d->bd_bufsize, M_DEVBUF, M_WAITOK);
1197 	if (d->bd_sbuf == 0) {
1198 		free(d->bd_fbuf, M_DEVBUF);
1199 		return (ENOBUFS);
1200 	}
1201 	d->bd_slen = 0;
1202 	d->bd_hlen = 0;
1203 	return (0);
1204 }
1205 
1206 /*
1207  * Free buffers currently in use by a descriptor.
1208  * Called on close.
1209  */
1210 static void
1211 bpf_freed(d)
1212 	register struct bpf_d *d;
1213 {
1214 	/*
1215 	 * We don't need to lock out interrupts since this descriptor has
1216 	 * been detached from its interface and it yet hasn't been marked
1217 	 * free.
1218 	 */
1219 	if (d->bd_sbuf != 0) {
1220 		free(d->bd_sbuf, M_DEVBUF);
1221 		if (d->bd_hbuf != 0)
1222 			free(d->bd_hbuf, M_DEVBUF);
1223 		if (d->bd_fbuf != 0)
1224 			free(d->bd_fbuf, M_DEVBUF);
1225 	}
1226 	if (d->bd_filter)
1227 		free((caddr_t)d->bd_filter, M_DEVBUF);
1228 
1229 	D_MARKFREE(d);
1230 }
1231 
1232 /*
1233  * Attach an interface to bpf.  driverp is a pointer to a (struct bpf_if *)
1234  * in the driver's softc; dlt is the link layer type; hdrlen is the fixed
1235  * size of the link header (variable length headers not yet supported).
1236  */
1237 void
1238 bpfattach(ifp, dlt, hdrlen)
1239 	struct ifnet *ifp;
1240 	u_int dlt, hdrlen;
1241 {
1242 	struct bpf_if *bp;
1243 	int i;
1244 	bp = (struct bpf_if *)malloc(sizeof(*bp), M_DEVBUF, M_DONTWAIT);
1245 	if (bp == 0)
1246 		panic("bpfattach");
1247 
1248 	bp->bif_dlist = 0;
1249 	bp->bif_ifp = ifp;
1250 	bp->bif_dlt = dlt;
1251 
1252 	bp->bif_next = bpf_iflist;
1253 	bpf_iflist = bp;
1254 
1255 	bp->bif_ifp->if_bpf = 0;
1256 
1257 	/*
1258 	 * Compute the length of the bpf header.  This is not necessarily
1259 	 * equal to SIZEOF_BPF_HDR because we want to insert spacing such
1260 	 * that the network layer header begins on a longword boundary (for
1261 	 * performance reasons and to alleviate alignment restrictions).
1262 	 */
1263 	bp->bif_hdrlen = BPF_WORDALIGN(hdrlen + SIZEOF_BPF_HDR) - hdrlen;
1264 
1265 	/*
1266 	 * Mark all the descriptors free if this hasn't been done.
1267 	 */
1268 	if (!bpf_dtab_init) {
1269 		for (i = 0; i < NBPFILTER; ++i)
1270 			D_MARKFREE(&bpf_dtab[i]);
1271 		bpf_dtab_init = 1;
1272 	}
1273 
1274 	if (bootverbose)
1275 		printf("bpf: %s%d attached\n", ifp->if_name, ifp->if_unit);
1276 }
1277 
1278 #ifdef DEVFS
1279 static	void *bpf_devfs_token[NBPFILTER];
1280 #endif
1281 
1282 static	int bpf_devsw_installed;
1283 
1284 static void bpf_drvinit __P((void *unused));
1285 static void
1286 bpf_drvinit(unused)
1287 	void *unused;
1288 {
1289 	dev_t dev;
1290 #ifdef DEVFS
1291 	int i;
1292 #endif
1293 
1294 	if( ! bpf_devsw_installed ) {
1295 		dev = makedev(CDEV_MAJOR, 0);
1296 		cdevsw_add(&dev,&bpf_cdevsw, NULL);
1297 		bpf_devsw_installed = 1;
1298 #ifdef DEVFS
1299 
1300 		for ( i = 0 ; i < NBPFILTER ; i++ ) {
1301 			bpf_devfs_token[i] =
1302 				devfs_add_devswf(&bpf_cdevsw, i, DV_CHR, 0, 0,
1303 						 0600, "bpf%d", i);
1304 		}
1305 #endif
1306     	}
1307 }
1308 
1309 SYSINIT(bpfdev,SI_SUB_DRIVERS,SI_ORDER_MIDDLE+CDEV_MAJOR,bpf_drvinit,NULL)
1310 
1311 #endif
1312