if bpf fd's select()able?

Lev Walkin vlm at netli.com
Mon Sep 8 00:50:56 PDT 2003


Dmitry Morozovsky wrote:
> On Sun, 7 Sep 2003, Lev Walkin wrote:
> 
> LW> > [all below is for 4-STABLE]
> LW> >
> LW> > I'm trying to write effective arp scanner for multi-interface router (esp.
> LW> > multi-vlan); I plan to use multiple bpf devices attached to different
> LW> > interfaces emitting ARP requests and filters listening to ARP replies; the most
> LW> > natural way to multiplex them for me is select().
> LW> >
> LW> > However, my tests show that select()ing bpf fd does not lead to trigger packets
> LW> > available to bpf filter; the process hangs in select state while parallel
> LW> > tcpdump process shows packets desired *and* is in bpf state.
> LW> >
> LW> > Am I missing something "base"? References (surely, I'd already read
> LW> > manpages for bpf, pcap and related -- but did I still missed something
> LW> > serious?) would be greatly appreciated.
> LW>
> LW> Yes, you're missing the interactive mode.
> LW> Refer to BIOCIMMEDIATE in the bpf(4) manual page.
> 
> Unfortunately not ;-)

Fortunately, yes.

> 	if (ioctl(fd, BIOCPROMISC, NULL) == -1)
> 		err(1, "can't set promisc mode");
> 	if (ioctl(fd, BIOCIMMEDIATE, &yes) == -1)
> 		err(1, "can't set IMMEDIATE mode");

Are you sure that "yes" variable holds the truth value?

-- 
Lev Walkin
vlm at netli.com



More information about the freebsd-hackers mailing list