summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pcap-npf.c25
-rw-r--r--testprogs/writecaptest.c2
2 files changed, 26 insertions, 1 deletions
diff --git a/pcap-npf.c b/pcap-npf.c
index 2c7fd9f5..06f6bba0 100644
--- a/pcap-npf.c
+++ b/pcap-npf.c
@@ -908,6 +908,8 @@ pcap_activate_npf(pcap_t *p)
NetType type;
int res;
int status = 0;
+ struct bpf_insn total_insn;
+ struct bpf_program total_prog;
if (p->opt.rfmon) {
/*
@@ -1231,6 +1233,29 @@ pcap_activate_npf(pcap_t *p)
#endif /* HAVE_DAG_API */
}
+ /*
+ * If there's no filter program installed, there's
+ * no indication to the kernel of what the snapshot
+ * length should be, so no snapshotting is done.
+ *
+ * Therefore, when we open the device, we install
+ * an "accept everything" filter with the specified
+ * snapshot length.
+ */
+ total_insn.code = (u_short)(BPF_RET | BPF_K);
+ total_insn.jt = 0;
+ total_insn.jf = 0;
+ total_insn.k = p->snapshot;
+
+ total_prog.bf_len = 1;
+ total_prog.bf_insns = &total_insn;
+ if (!PacketSetBpf(pw->adapter, &total_prog)) {
+ pcap_fmt_errmsg_for_win32_err(p->errbuf, PCAP_ERRBUF_SIZE,
+ GetLastError(), "PacketSetBpf");
+ status = PCAP_ERROR;
+ goto bad;
+ }
+
PacketSetReadTimeout(pw->adapter, p->opt.timeout);
/* disable loopback capture if requested */
diff --git a/testprogs/writecaptest.c b/testprogs/writecaptest.c
index 7d317732..38e2b4a1 100644
--- a/testprogs/writecaptest.c
+++ b/testprogs/writecaptest.c
@@ -83,7 +83,7 @@ main(int argc, char **argv)
{
int op;
char *cp, *cmdbuf = NULL, *device, *end, *savefile = NULL;
- int snaplen;
+ int snaplen = 0;
int snaplen_set = 0;
pcap_if_t *devlist;
int show_dlt_types = 0;