> 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 *);