Skip site navigation (1)Skip section navigation (2)
Date:      09 May 1998 12:37:30 +0200
From:      dag-erli@ifi.uio.no (Dag-Erling Coidan =?iso-8859-1?Q?Sm=F8rgrav?= )
To:        Terry Lambert <tlambert@primenet.com>
Cc:        fygrave@freenet.bishkek.su (CyberPsychotic), brian@deity.loa.com, freebsd-hackers@FreeBSD.ORG
Subject:   Re: bpf
Message-ID:  <xzpwwbv20id.fsf@skejdbrimir.ifi.uio.no>
In-Reply-To: Terry Lambert's message of "Sat, 9 May 1998 10:01:00 %2B0000 (GMT)"
References:  <199805091001.DAA27195@usr06.primenet.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Terry Lambert <tlambert@primenet.com> writes:
> > could you please give the sample of BIOCSETIF ioctl call? I think i should
> > ivolve some particular structure or something here, but i checked manual
> > and didn't find any reference 
> Meanwhile, look at the CAP code.  8-|.

Hmmm...

OK, basically you want to do something like this to capture packets:

char bpf_dev[IFNAMSIZ], *buf;
struct ifreq ifr;
int n = 0, fd, len;

/* Find an available BPF device */
do
{
    sprintf(bpf_dev, "/dev/bpf%d", n++);
    fd = open(bpf_dev, O_RDONLY);
}
while (errno == EBUSY);

if (fd < 0) /* it didn't work! */;

/* Get buffer length */
if (ioctl(fd, BIOCGBLEN, &len) < 0) /* ouch */;
if (!(buf = malloc(len))) /* ouch! */;

/* Set interface to ep0 */
bzero(&ifr, sizeof(struct ifreq));
strcpy(ifr.ifr_name, "ep0");
if (ioctl(fd, BIOCSETIF, &ifr) < 0) /* ouch! */;

/* Set immediate mode */
n = 1;
if (ioctl(fd, BIOCIMMEDIATE, &n) < 0) /* ouch! */;

/* Read packets */
while (1)
{
    read(fd, buf, len);
    /* do something nifty with them */
}

-- 
Noone else has a .sig like this one.

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?xzpwwbv20id.fsf>