aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2014-11-05 11:18:51 -0800
committerGuy Harris <guy@alum.mit.edu>2014-11-05 11:18:51 -0800
commit20119d41be224cf9ea821155ad0b267f7e40f234 (patch)
tree8886dc28e50f174bb12e099a01c4d262eed3611a
parentd8e39a9c306fe393a54029ca28693a63ab487e82 (diff)
More descriptive name for bpf_filter1().
Call it bpf_filter_with_aux_data(), to better indicate what it does. Also expand some comments and clean up white space a bit.
-rw-r--r--bpf/net/bpf_filter.c7
-rw-r--r--pcap-linux.c18
-rw-r--r--pcap/bpf.h7
3 files changed, 20 insertions, 12 deletions
diff --git a/bpf/net/bpf_filter.c b/bpf/net/bpf_filter.c
index 2c6e5109..47e91ced 100644
--- a/bpf/net/bpf_filter.c
+++ b/bpf/net/bpf_filter.c
@@ -210,11 +210,14 @@ enum {
* Execute the filter program starting at pc on the packet p
* wirelen is the length of the original packet
* buflen is the amount of data present
+ * aux_data is auxiliary data, currently used only when interpreting
+ * filters intended for the Linux kernel in cases where the kernel
+ * rejects the filter; it contains VLAN tag information
* For the kernel, p is assumed to be a pointer to an mbuf if buflen is 0,
* in all other cases, p is a pointer to a buffer and buflen is its size.
*/
u_int
-bpf_filter1(pc, p, wirelen, buflen, aux_data)
+bpf_filter_with_aux_data(pc, p, wirelen, buflen, aux_data)
register const struct bpf_insn *pc;
register const u_char *p;
u_int wirelen;
@@ -594,7 +597,7 @@ bpf_filter(pc, p, wirelen, buflen)
u_int wirelen;
register u_int buflen;
{
- return bpf_filter1(pc, p, wirelen, buflen, NULL);
+ return bpf_filter_with_aux_data(pc, p, wirelen, buflen, NULL);
}
diff --git a/pcap-linux.c b/pcap-linux.c
index 101ad942..2f092b7f 100644
--- a/pcap-linux.c
+++ b/pcap-linux.c
@@ -1717,9 +1717,8 @@ pcap_read_packet(pcap_t *handle, pcap_handler callback, u_char *userdata)
/* Run the packet filter if not using kernel filter */
if (handlep->filter_in_userland && handle->fcode.bf_insns) {
- if (bpf_filter1(handle->fcode.bf_insns, bp,
- packet_len, caplen, &aux_data) == 0)
- {
+ if (bpf_filter_with_aux_data(handle->fcode.bf_insns, bp,
+ packet_len, caplen, &aux_data) == 0) {
/* rejected by filter */
return 0;
}
@@ -4232,14 +4231,15 @@ static int pcap_handle_packet_mmap(
* happen a lot later... */
bp = frame + tp_mac;
if (handlep->filter_in_userland && handle->fcode.bf_insns) {
- struct bpf_aux_data aux_data;
+ struct bpf_aux_data aux_data;
- aux_data.vlan_tag = tp_vlan_tci & 0x0fff;
- aux_data.vlan_tag_present = tp_vlan_tci_valid;
+ aux_data.vlan_tag = tp_vlan_tci & 0x0fff;
+ aux_data.vlan_tag_present = tp_vlan_tci_valid;
- if (bpf_filter1(handle->fcode.bf_insns, bp, tp_len, tp_snaplen, &aux_data) == 0)
- return 0;
- }
+ if (bpf_filter_with_aux_data(handle->fcode.bf_insns, bp,
+ tp_len, tp_snaplen, &aux_data) == 0)
+ return 0;
+ }
sll = (void *)frame + TPACKET_ALIGN(handlep->tp_hdrlen);
if (!linux_check_direction(handle, sll))
diff --git a/pcap/bpf.h b/pcap/bpf.h
index cf7478b1..5084d065 100644
--- a/pcap/bpf.h
+++ b/pcap/bpf.h
@@ -1472,6 +1472,11 @@ struct bpf_insn {
bpf_u_int32 k;
};
+/*
+ * Auxiliary data, for use when interpreting a filter intended for the
+ * Linux kernel when the kernel rejects the filter (requiring us to
+ * run it in userland). It contains VLAN tag information.
+ */
struct bpf_aux_data {
uint16_t vlan_tag_present;
uint16_t vlan_tag;
@@ -1486,7 +1491,7 @@ struct bpf_aux_data {
#if __STDC__ || defined(__cplusplus)
extern int bpf_validate(const struct bpf_insn *, int);
extern u_int bpf_filter(const struct bpf_insn *, const u_char *, u_int, u_int);
-extern u_int bpf_filter1(const struct bpf_insn *, const u_char *, u_int, u_int, const struct bpf_aux_data *);
+extern u_int bpf_filter_with_aux_data(const struct bpf_insn *, const u_char *, u_int, u_int, const struct bpf_aux_data *);
#else
extern int bpf_validate();
extern u_int bpf_filter();