> This mail contains changes required to the kernel, subsequent ones have the > (most complicated) tcpdump(8) bit and (untested) pcap(3) bit.
Just as pcap_setdirection(3), it doesn't have any current user, but it might be useful to some. Index: lib/libpcap/Makefile =================================================================== RCS file: /cvs/src/lib/libpcap/Makefile,v retrieving revision 1.23 diff -u -p -r1.23 Makefile --- lib/libpcap/Makefile 2 Aug 2012 13:38:39 -0000 1.23 +++ lib/libpcap/Makefile 19 Mar 2013 14:25:03 -0000 @@ -23,6 +23,7 @@ MLINKS= pcap.3 pcap_open_live.3 pcap.3 p pcap.3 pcap_datalink_name_to_val.3 pcap.3 pcap_dump_fopen.3 \ pcap.3 pcap_sendpacket.3 pcap.3 pcap_next_ex.3 \ pcap.3 pcap_setdirection.3 pcap.3 pcap_dump_file.3 \ + pcap.3 pcap_setqueue.3 \ pcap.3 pcap_dump_ftell.3 pcap.3 pcap_fopen_offline.3 \ pcap.3 pcap_dump_flush.3 pcap.3 pcap_create.3 \ pcap.3 pcap_set_snaplen.3 pcap.3 pcap_set_promisc.3 \ Index: lib/libpcap/pcap-bpf.c =================================================================== RCS file: /cvs/src/lib/libpcap/pcap-bpf.c,v retrieving revision 1.21 diff -u -p -r1.21 pcap-bpf.c --- lib/libpcap/pcap-bpf.c 25 May 2012 01:58:08 -0000 1.21 +++ lib/libpcap/pcap-bpf.c 19 Mar 2013 14:25:03 -0000 @@ -1028,6 +1028,17 @@ pcap_setdirection(pcap_t *p, pcap_direct } int +pcap_setqueue(pcap_t *p, u_int32_t qid) +{ + if (ioctl(p->fd, BIOCSQUEUE, &qid) < 0) { + snprintf(p->errbuf, PCAP_ERRBUF_SIZE, "BIOCSQUEUE: %s", + pcap_strerror(errno)); + return (-1); + } + return (0); +} + +int pcap_set_datalink(pcap_t *p, int dlt) { int i; Index: lib/libpcap/pcap.3 =================================================================== RCS file: /cvs/src/lib/libpcap/pcap.3,v retrieving revision 1.33 diff -u -p -r1.33 pcap.3 --- lib/libpcap/pcap.3 16 Jul 2012 08:55:48 -0000 1.33 +++ lib/libpcap/pcap.3 19 Mar 2013 14:25:04 -0000 @@ -62,6 +62,8 @@ .Ft int .Fn pcap_setdirection "pcap_t *p" "pcap_direction_t dir" .Ft int +.Fn pcap_setqueue "pcap_t *p" "u_int32_t qid" +.Ft int .Fn pcap_datalink "pcap_t *p" .Ft int .Fn pcap_snapshot "pcap_t *p" @@ -471,6 +473,16 @@ datalink types. .Fn pcap_setdirection is used to limit the direction that packets must be flowing in order to be captured. +.Pp +.Fn pcap_setqueue +is used to only capture packets that are queued on a particular queue. +The +.Fa qid +argument can be easily obtained using +.Xr ioctl 2 +interface described in the +.Xr pf 4 +manual page. .Pp .Fn pcap_list_datalinks returns an array of the supported datalink types for an opened live capture Index: lib/libpcap/pcap.h =================================================================== RCS file: /cvs/src/lib/libpcap/pcap.h,v retrieving revision 1.15 diff -u -p -r1.15 pcap.h --- lib/libpcap/pcap.h 25 May 2012 01:58:08 -0000 1.15 +++ lib/libpcap/pcap.h 19 Mar 2013 14:25:04 -0000 @@ -187,6 +187,7 @@ void pcap_breakloop(pcap_t *); int pcap_stats(pcap_t *, struct pcap_stat *); int pcap_setfilter(pcap_t *, struct bpf_program *); int pcap_setdirection(pcap_t *, pcap_direction_t); +int pcap_setqueue(pcap_t *, u_int32_t); int pcap_getnonblock(pcap_t *, char *); int pcap_setnonblock(pcap_t *, int, char *); void pcap_perror(pcap_t *, char *);