tcpdump mailing list archives
Re: Losing BPF's
From: Guy Harris <guy () alum mit edu>
Date: Mon, 19 Feb 2007 13:49:38 -0800
Jon Steel wrote:
I did some more digging and I think Ive narrowed the problem down a bit more. It does appear to be a kernel issue. pcaps off the hook for today. For those interested, the problem occurs for the following reasons: When you call open() on OpenBSD it does not lock the file unless you tell it to. This means multiple pcap connections can get a file descriptor for the same /dev/bpfN file.
When you call open() on a special file (such as /dev/bpfN) on OpenBSD, does it call the driver's open routine, even if the device is already open?
If so, then that open routine: int bpfopen(dev_t dev, int flag, int mode, struct proc *p) { struct bpf_d *d; /* create on demand */ if ((d = bpfilter_create(minor(dev))) == NULL) return (ENXIO); /* * Each minor can be opened by only one process. If the requested * minor is in use, return EBUSY. */ if (!D_ISFREE(d)) return (EBUSY); /* Mark "free" and do most initialization. */ d->bd_bufsize = bpf_bufsize; d->bd_sig = SIGIO; D_GET(d); return (0); } would fail with EBUSY if the device is already open.sys_open() (for the open() system call), calls vn_open() on all opens, which calls VOP_OPEN() on all opens. For special files, that should go to spec_open(), which appears to call the driver open routine (*cdevsw[maj].d_open) for all opens.
Thus, there should be no need to lock the device; the BPF driver should, in effect, be doing it for you. That's the way BPF has worked on BSD for quite a while (since it was first introduced, I think). Libpcap explicitly requires that, as do other users of BPF - they keep opening successive BPF devices until they get one that they can successfully open.
- This is the tcpdump-workers list. Visit https://cod.sandelman.ca/ to unsubscribe.
Current thread:
- Losing BPF's Jon Steel (Feb 16)
- Re: Losing BPF's Guy Harris (Feb 19)
- Re: Losing BPF's Guy Harris (Feb 19)
- Re: Losing BPF's Jon Steel (Feb 19)
- Re: Losing BPF's Guy Harris (Feb 19)
- Re: Losing BPF's maneeshs (Feb 20)
- Re: Losing BPF's Guy Harris (Feb 20)
- Re: Losing BPF's Guy Harris (Feb 19)
- <Possible follow-ups>
- Losing BPF's Jon Steel (Feb 16)