basebuilder_pel7ppc64bebuilder0
7 years ago
21 changed files with 1744 additions and 0 deletions
@ -0,0 +1,29 @@
@@ -0,0 +1,29 @@
|
||||
From 2048727a901ef7d9d3803c9206730d11b2fd6ebf Mon Sep 17 00:00:00 2001 |
||||
From: Jakub Zawadzki <darkjames@darkjames.pl> |
||||
Date: Sat, 7 Dec 2013 23:37:23 +0100 |
||||
Subject: [PATCH] Add names for DLT_NETLINK |
||||
|
||||
Before patch: |
||||
tcpdump: listening on nlmon0, link-type 253, capture size 65535 bytes |
||||
|
||||
After patch: |
||||
tcpdump: listening on nlmon0, link-type NETLINK (Linux netlink), capture size 65535 bytes |
||||
--- |
||||
pcap.c | 1 + |
||||
1 file changed, 1 insertion(+) |
||||
|
||||
diff --git a/pcap.c b/pcap.c |
||||
index 626938c..faa9762 100644 |
||||
--- a/pcap.c |
||||
+++ b/pcap.c |
||||
@@ -1203,6 +1203,7 @@ static struct dlt_choice dlt_choices[] = { |
||||
DLT_CHOICE(DLT_NETANALYZER_TRANSPARENT, "Ethernet with Hilscher netANALYZER pseudo-header and with preamble and SFD"), |
||||
DLT_CHOICE(DLT_IPOIB, "RFC 4391 IP-over-Infiniband"), |
||||
DLT_CHOICE(DLT_DBUS, "D-Bus"), |
||||
+ DLT_CHOICE(DLT_NETLINK, "Linux netlink"), |
||||
DLT_CHOICE_SENTINEL |
||||
}; |
||||
|
||||
-- |
||||
2.4.3 |
||||
|
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
From 674f2e8bd990be129932c5778d951ffee6eaefbd Mon Sep 17 00:00:00 2001 |
||||
From: Jakub Zawadzki <darkjames@darkjames.pl> |
||||
Date: Sat, 7 Dec 2013 23:36:47 +0100 |
||||
Subject: [PATCH] Fix link-type for nlmon. |
||||
|
||||
Before patch: |
||||
tcpdump: listening on nlmon0, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes |
||||
|
||||
After patch: |
||||
tcpdump: listening on nlmon0, link-type 253, capture size 65535 bytes |
||||
--- |
||||
pcap-linux.c | 3 ++- |
||||
1 file changed, 2 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index 8800c96..7c07793 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -3195,7 +3195,8 @@ activate_new(pcap_t *handle) |
||||
* same applies to LAPD capture. |
||||
*/ |
||||
if (handle->linktype != DLT_LINUX_IRDA && |
||||
- handle->linktype != DLT_LINUX_LAPD) |
||||
+ handle->linktype != DLT_LINUX_LAPD && |
||||
+ handle->linktype != DLT_NETLINK) |
||||
handle->linktype = DLT_LINUX_SLL; |
||||
} |
||||
|
||||
-- |
||||
2.4.3 |
||||
|
@ -0,0 +1,58 @@
@@ -0,0 +1,58 @@
|
||||
From b5d27a8197012ac2b1b52621be2cfe0b5fc2b47e Mon Sep 17 00:00:00 2001 |
||||
From: Guy Harris <guy@alum.mit.edu> |
||||
Date: Tue, 19 Nov 2013 10:45:42 -0800 |
||||
Subject: [PATCH] Handle using cooked mode for DLT_NETLINK in activate_new(). |
||||
|
||||
That's how we handle it elsewhere; if that can be cleaned up, especially |
||||
if we can avoid opening a raw socket in the cooked-mode case, that would |
||||
be nice. |
||||
|
||||
Note this in comments. |
||||
|
||||
(cherry picked from eeb0348fe8d74800af37759618270fb8bed17443) |
||||
|
||||
Conflicts: |
||||
pcap-linux.c |
||||
--- |
||||
pcap-linux.c | 10 ++++++++-- |
||||
1 file changed, 8 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index e6343b0..a0e543c 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -2941,7 +2941,9 @@ static void map_arphrd_to_dlt(pcap_t *handle, int arptype, int cooked_ok) |
||||
/* Don't expect IP packet out of this interfaces... */ |
||||
handle->linktype = DLT_LINUX_IRDA; |
||||
/* We need to save packet direction for IrDA decoding, |
||||
- * so let's use "Linux-cooked" mode. Jean II */ |
||||
+ * so let's use "Linux-cooked" mode. Jean II |
||||
+ * |
||||
+ * XXX - this is handled in activate_new(). */ |
||||
//handlep->cooked = 1; |
||||
break; |
||||
|
||||
@@ -2982,8 +2984,11 @@ static void map_arphrd_to_dlt(pcap_t *handle, int arptype, int cooked_ok) |
||||
* We need to use cooked mode, so that in sll_protocol we |
||||
* pick up the netlink protocol type such as NETLINK_ROUTE, |
||||
* NETLINK_GENERIC, NETLINK_FIB_LOOKUP, etc. |
||||
+ * |
||||
+ * XXX - this is now handled in activate_new() |
||||
*/ |
||||
- handle->cooked = 1; |
||||
+ |
||||
+ /* handlep->cooked = 1; */ |
||||
break; |
||||
|
||||
default: |
||||
@@ -3122,6 +3127,7 @@ activate_new(pcap_t *handle) |
||||
handle->linktype == DLT_LINUX_SLL || |
||||
handle->linktype == DLT_LINUX_IRDA || |
||||
handle->linktype == DLT_LINUX_LAPD || |
||||
+ handle->linktype == DLT_NETLINK || |
||||
(handle->linktype == DLT_EN10MB && |
||||
(strncmp("isdn", device, 4) == 0 || |
||||
strncmp("isdY", device, 4) == 0))) { |
||||
-- |
||||
2.4.3 |
||||
|
@ -0,0 +1,180 @@
@@ -0,0 +1,180 @@
|
||||
From d4306feb76ee9a6d9ecee63b152404bd0db0f97c Mon Sep 17 00:00:00 2001 |
||||
From: Michal Sekletar <msekleta@redhat.com> |
||||
Date: Tue, 5 Aug 2014 16:46:19 +0200 |
||||
Subject: [PATCH] Introduce bpf_filter1 function |
||||
|
||||
Function takes additional argument which is a pointer to bpf_aux_data |
||||
structure. This newly introduced struct holds auxiliary data provided by caller |
||||
to specify additional data needed to implement some BPF extensions while |
||||
executing filter in userspace. |
||||
|
||||
bpf_filter1 currently implements support for two BPF extesions, namely |
||||
vlan_tci and vlan_pr. |
||||
|
||||
(cherry picked from 02e420f820750e970c93068c01ea10d4c16f2b9a) |
||||
|
||||
Conflicts: |
||||
bpf/net/bpf_filter.c |
||||
--- |
||||
bpf/net/bpf_filter.c | 77 +++++++++++++++++++++++++++++++++++++++++++--------- |
||||
pcap/bpf.h | 10 +++++++ |
||||
2 files changed, 74 insertions(+), 13 deletions(-) |
||||
|
||||
diff --git a/bpf/net/bpf_filter.c b/bpf/net/bpf_filter.c |
||||
index 0c4fb00..3409a9b 100644 |
||||
--- a/bpf/net/bpf_filter.c |
||||
+++ b/bpf/net/bpf_filter.c |
||||
@@ -200,6 +200,17 @@ m_xhalf(m, k, err) |
||||
} |
||||
#endif |
||||
|
||||
+#ifdef __linux__ |
||||
+#include <linux/if_packet.h> |
||||
+#include <linux/filter.h> |
||||
+#endif |
||||
+ |
||||
+enum { |
||||
+ BPF_S_ANC_NONE, |
||||
+ BPF_S_ANC_VLAN_TAG, |
||||
+ BPF_S_ANC_VLAN_TAG_PRESENT, |
||||
+}; |
||||
+ |
||||
/* |
||||
* Execute the filter program starting at pc on the packet p |
||||
* wirelen is the length of the original packet |
||||
@@ -208,11 +219,12 @@ m_xhalf(m, k, err) |
||||
* in all other cases, p is a pointer to a buffer and buflen is its size. |
||||
*/ |
||||
u_int |
||||
-bpf_filter(pc, p, wirelen, buflen) |
||||
+bpf_filter1(pc, p, wirelen, buflen, aux_data) |
||||
register const struct bpf_insn *pc; |
||||
register const u_char *p; |
||||
u_int wirelen; |
||||
register u_int buflen; |
||||
+ register const struct bpf_aux_data *aux_data; |
||||
{ |
||||
register u_int32 A, X; |
||||
register int k; |
||||
@@ -288,22 +300,50 @@ bpf_filter(pc, p, wirelen, buflen) |
||||
continue; |
||||
|
||||
case BPF_LD|BPF_B|BPF_ABS: |
||||
- k = pc->k; |
||||
- if (k >= buflen) { |
||||
+ { |
||||
+#if defined(SKF_AD_VLAN_TAG) && defined(SKF_AD_VLAN_TAG_PRESENT) |
||||
+ int code = BPF_S_ANC_NONE; |
||||
+#define ANCILLARY(CODE) case SKF_AD_OFF + SKF_AD_##CODE: \ |
||||
+ code = BPF_S_ANC_##CODE; \ |
||||
+ if (!aux_data) \ |
||||
+ return 0; \ |
||||
+ break; |
||||
+ |
||||
+ switch (pc->k) { |
||||
+ ANCILLARY(VLAN_TAG); |
||||
+ ANCILLARY(VLAN_TAG_PRESENT); |
||||
+ default : |
||||
+#endif |
||||
+ k = pc->k; |
||||
+ if (k >= buflen) { |
||||
#if defined(KERNEL) || defined(_KERNEL) |
||||
- if (m == NULL) |
||||
- return 0; |
||||
- n = m; |
||||
- MINDEX(len, n, k); |
||||
- A = mtod(n, u_char *)[k]; |
||||
- continue; |
||||
+ if (m == NULL) |
||||
+ return 0; |
||||
+ n = m; |
||||
+ MINDEX(len, n, k); |
||||
+ A = mtod(n, u_char *)[k]; |
||||
+ continue; |
||||
#else |
||||
- return 0; |
||||
+ return 0; |
||||
+#endif |
||||
+ } |
||||
+ A = p[k]; |
||||
+#if defined(SKF_AD_VLAN_TAG) && defined(SKF_AD_VLAN_TAG_PRESENT) |
||||
+ } |
||||
+ switch (code) { |
||||
+ case BPF_S_ANC_VLAN_TAG: |
||||
+ if (aux_data) |
||||
+ A = aux_data->vlan_tag; |
||||
+ break; |
||||
+ |
||||
+ case BPF_S_ANC_VLAN_TAG_PRESENT: |
||||
+ if (aux_data) |
||||
+ A = aux_data->vlan_tag_present; |
||||
+ break; |
||||
+ } |
||||
#endif |
||||
+ continue; |
||||
} |
||||
- A = p[k]; |
||||
- continue; |
||||
- |
||||
case BPF_LD|BPF_W|BPF_LEN: |
||||
A = wirelen; |
||||
continue; |
||||
@@ -532,6 +572,17 @@ bpf_filter(pc, p, wirelen, buflen) |
||||
} |
||||
} |
||||
|
||||
+u_int |
||||
+bpf_filter(pc, p, wirelen, buflen) |
||||
+ register const struct bpf_insn *pc; |
||||
+ register const u_char *p; |
||||
+ u_int wirelen; |
||||
+ register u_int buflen; |
||||
+{ |
||||
+ return bpf_filter1(pc, p, wirelen, buflen, NULL); |
||||
+} |
||||
+ |
||||
+ |
||||
/* |
||||
* Return true if the 'fcode' is a valid filter program. |
||||
* The constraints are that each jump be forward and to a valid |
||||
diff --git a/pcap/bpf.h b/pcap/bpf.h |
||||
index 8286ed5..495f326 100644 |
||||
--- a/pcap/bpf.h |
||||
+++ b/pcap/bpf.h |
||||
@@ -70,6 +70,9 @@ |
||||
* |
||||
* This also provides our own multiple-include protection. |
||||
*/ |
||||
+ |
||||
+#include <stdint.h> |
||||
+ |
||||
#if !defined(_NET_BPF_H_) && !defined(_BPF_H_) && !defined(_H_BPF) && !defined(lib_pcap_bpf_h) |
||||
#define lib_pcap_bpf_h |
||||
|
||||
@@ -1317,6 +1320,11 @@ struct bpf_insn { |
||||
bpf_u_int32 k; |
||||
}; |
||||
|
||||
+struct bpf_aux_data { |
||||
+ uint16_t vlan_tag_present; |
||||
+ uint16_t vlan_tag; |
||||
+}; |
||||
+ |
||||
/* |
||||
* Macros for insn array initializers. |
||||
*/ |
||||
@@ -1326,9 +1334,11 @@ struct bpf_insn { |
||||
#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 *); |
||||
#else |
||||
extern int bpf_validate(); |
||||
extern u_int bpf_filter(); |
||||
+extern u_int bpf_filter(); |
||||
#endif |
||||
|
||||
/* |
||||
-- |
||||
2.4.3 |
||||
|
@ -0,0 +1,73 @@
@@ -0,0 +1,73 @@
|
||||
From fe0d58905f9934bfc04a1aaf9393997c2bdbfb6c Mon Sep 17 00:00:00 2001 |
||||
From: rpm-build <rpm-build> |
||||
Date: Fri, 27 Mar 2015 12:21:56 +0100 |
||||
Subject: [PATCH] Make sure the userland filtering happens correctly on cooked |
||||
interfaces |
||||
|
||||
If filtering in userland and capturing on a cooked interface, the packet buffer |
||||
being sent to bpf_filter_with_aux_data did not include the sll header, so the |
||||
filter was being applied improperly. The buffer would start at the layer3 |
||||
header. |
||||
|
||||
This change moves the code to fill out the sll structure and update the bp |
||||
pointer to point to it to before the call to bpf_filter_with_aux_data. |
||||
--- |
||||
pcap-linux.c | 32 ++++++++++++++++++-------------- |
||||
1 file changed, 18 insertions(+), 14 deletions(-) |
||||
|
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index 117405b..95c94df 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -4206,22 +4206,9 @@ static int pcap_handle_packet_mmap( |
||||
* the filter when the ring became empty, but it can possibly |
||||
* happen a lot later... */ |
||||
bp = frame + tp_mac; |
||||
- if (handlep->filter_in_userland && handle->fcode.bf_insns && |
||||
- (bpf_filter(handle->fcode.bf_insns, bp, |
||||
- tp_len, tp_snaplen) == 0)) |
||||
- return 0; |
||||
- |
||||
- sll = (void *)frame + TPACKET_ALIGN(handlep->tp_hdrlen); |
||||
- if (!linux_check_direction(handle, sll)) |
||||
- return 0; |
||||
- |
||||
- /* get required packet info from ring header */ |
||||
- pcaphdr.ts.tv_sec = tp_sec; |
||||
- pcaphdr.ts.tv_usec = tp_usec; |
||||
- pcaphdr.caplen = tp_snaplen; |
||||
- pcaphdr.len = tp_len; |
||||
|
||||
/* if required build in place the sll header*/ |
||||
+ sll = (void *)frame + TPACKET_ALIGN(handlep->tp_hdrlen); |
||||
if (handlep->cooked) { |
||||
struct sll_header *hdrp; |
||||
|
||||
@@ -4259,7 +4246,24 @@ static int pcap_handle_packet_mmap( |
||||
hdrp->sll_halen = htons(sll->sll_halen); |
||||
memcpy(hdrp->sll_addr, sll->sll_addr, SLL_ADDRLEN); |
||||
hdrp->sll_protocol = sll->sll_protocol; |
||||
+ } |
||||
+ |
||||
+ if (handlep->filter_in_userland && handle->fcode.bf_insns && |
||||
+ (bpf_filter(handle->fcode.bf_insns, bp, |
||||
+ tp_len, tp_snaplen) == 0)) |
||||
+ return 0; |
||||
+ |
||||
+ if (!linux_check_direction(handle, sll)) |
||||
+ return 0; |
||||
+ |
||||
+ /* get required packet info from ring header */ |
||||
+ pcaphdr.ts.tv_sec = tp_sec; |
||||
+ pcaphdr.ts.tv_usec = tp_usec; |
||||
+ pcaphdr.caplen = tp_snaplen; |
||||
+ pcaphdr.len = tp_len; |
||||
|
||||
+ /* if required build in place the sll header*/ |
||||
+ if (handlep->cooked) { |
||||
/* update packet len */ |
||||
pcaphdr.caplen += SLL_HDR_LEN; |
||||
pcaphdr.len += SLL_HDR_LEN; |
||||
-- |
||||
2.3.4 |
||||
|
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
From 676cf8a61ed240d0a86d471ef419f45ba35dba80 Mon Sep 17 00:00:00 2001 |
||||
From: Denis Ovsienko <infrastation@yandex.ru> |
||||
Date: Thu, 5 Dec 2013 14:54:14 +0400 |
||||
Subject: [PATCH] NFLOG: don't crash trying to filter at link layer |
||||
|
||||
Before: |
||||
|
||||
@ tcpdump -i nflog icmp |
||||
tcpdump: WARNING: SIOCGIFADDR: nflog: No such device |
||||
Aborted (core dumped) |
||||
|
||||
After: |
||||
|
||||
@ tcpdump -i nflog icmp |
||||
tcpdump: WARNING: SIOCGIFADDR: nflog: No such device |
||||
tcpdump: NFLOG link-layer type filtering not implemented |
||||
--- |
||||
gencode.c | 7 +++++++ |
||||
1 file changed, 7 insertions(+) |
||||
|
||||
diff --git a/gencode.c b/gencode.c |
||||
index 7bb07fb..d58ea30 100644 |
||||
--- a/gencode.c |
||||
+++ b/gencode.c |
||||
@@ -3410,6 +3410,13 @@ gen_linktype(proto) |
||||
|
||||
case DLT_AX25_KISS: |
||||
bpf_error("AX.25 link-layer type filtering not implemented"); |
||||
+ |
||||
+ case DLT_NFLOG: |
||||
+ /* Using the fixed-size NFLOG header it is possible to tell only |
||||
+ * the address family of the packet, other meaningful data is |
||||
+ * either missing or behind TLVs. |
||||
+ */ |
||||
+ bpf_error("NFLOG link-layer type filtering not implemented"); |
||||
} |
||||
|
||||
/* |
||||
-- |
||||
1.8.4.2 |
||||
|
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
From 8ce2c17fd359a758b08bd15a33a0deae872c8231 Mon Sep 17 00:00:00 2001 |
||||
From: rpm-build <rpm-build> |
||||
Date: Mon, 20 Apr 2015 13:47:28 +0200 |
||||
Subject: [PATCH] bpf: increase snaplen if doing cooked mode userspace |
||||
filtering |
||||
|
||||
This commit should address the issue when bpf_filter_with_auxdata returned 0 for valid |
||||
packets because offset in filter exceeded tp_snaplen as returned by kernel. If |
||||
we filter in cooked mode filter offsets are adjusted because sll_header, we |
||||
should do the same for snaplen. |
||||
--- |
||||
pcap-linux.c | 5 ++++- |
||||
1 file changed, 4 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index 95c94df..034bcd3 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -4186,6 +4186,7 @@ static int pcap_handle_packet_mmap( |
||||
unsigned char *bp; |
||||
struct sockaddr_ll *sll; |
||||
struct pcap_pkthdr pcaphdr; |
||||
+ unsigned int snaplen = tp_snaplen; |
||||
|
||||
/* perform sanity check on internal offset. */ |
||||
if (tp_mac + tp_snaplen > handle->bufsize) { |
||||
@@ -4246,11 +4247,13 @@ static int pcap_handle_packet_mmap( |
||||
hdrp->sll_halen = htons(sll->sll_halen); |
||||
memcpy(hdrp->sll_addr, sll->sll_addr, SLL_ADDRLEN); |
||||
hdrp->sll_protocol = sll->sll_protocol; |
||||
+ |
||||
+ snaplen += sizeof(struct sll_header); |
||||
} |
||||
|
||||
if (handlep->filter_in_userland && handle->fcode.bf_insns && |
||||
(bpf_filter(handle->fcode.bf_insns, bp, |
||||
- tp_len, tp_snaplen) == 0)) |
||||
+ tp_len, snaplen) == 0)) |
||||
return 0; |
||||
|
||||
if (!linux_check_direction(handle, sll)) |
||||
-- |
||||
2.3.4 |
||||
|
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
From 98e98bf9cc6ee76d7861db966708b1e51cc6e014 Mon Sep 17 00:00:00 2001 |
||||
From: rpm-build <rpm-build> |
||||
Date: Tue, 15 Sep 2015 13:30:37 +0200 |
||||
Subject: [PATCH] bpf: make sure sll header size if accounted for |
||||
|
||||
This got reverted when backporting bpf_filter_with_auxdata. |
||||
|
||||
Related: #1176612 |
||||
--- |
||||
pcap-linux.c | 6 +++--- |
||||
1 file changed, 3 insertions(+), 3 deletions(-) |
||||
|
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index a5b8953..f7f2aae 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -4306,7 +4306,7 @@ static int pcap_handle_packet_mmap( |
||||
aux_data.vlan_tag = tp_vlan_tci & 0x0fff; |
||||
aux_data.vlan_tag_present = tp_vlan_tci_valid; |
||||
|
||||
- if (bpf_filter_with_aux_data(handle->fcode.bf_insns, bp, tp_len, tp_snaplen, &aux_data) == 0) |
||||
+ if (bpf_filter_with_aux_data(handle->fcode.bf_insns, bp, tp_len, snaplen, &aux_data) == 0) |
||||
return 0; |
||||
} |
||||
|
||||
@@ -4316,7 +4316,7 @@ static int pcap_handle_packet_mmap( |
||||
/* get required packet info from ring header */ |
||||
pcaphdr.ts.tv_sec = tp_sec; |
||||
pcaphdr.ts.tv_usec = tp_usec; |
||||
- pcaphdr.caplen = tp_snaplen; |
||||
+ pcaphdr.caplen = snaplen; |
||||
pcaphdr.len = tp_len; |
||||
|
||||
/* if required build in place the sll header*/ |
||||
@@ -4329,7 +4329,7 @@ static int pcap_handle_packet_mmap( |
||||
#if defined(HAVE_TPACKET2) || defined(HAVE_TPACKET3) |
||||
if (tp_vlan_tci_valid && |
||||
handlep->vlan_offset != -1 && |
||||
- tp_snaplen >= (unsigned int) handlep->vlan_offset) |
||||
+ snaplen >= (unsigned int) handlep->vlan_offset) |
||||
{ |
||||
struct vlan_tag *tag; |
||||
|
||||
-- |
||||
2.4.3 |
||||
|
@ -0,0 +1,92 @@
@@ -0,0 +1,92 @@
|
||||
From 23d2673796e60c7fea6ba218eb084cbd59e7271b Mon Sep 17 00:00:00 2001 |
||||
From: Daniel Borkmann <dborkman@redhat.com> |
||||
Date: Mon, 18 Nov 2013 15:39:37 -0800 |
||||
Subject: [PATCH] linktype: add netlink link/dlt type |
||||
|
||||
With Linux 3.11, we have the possibility to debug local netlink traffic |
||||
[1] i.e. the workflow looks like this: |
||||
|
||||
Setup: |
||||
modprobe nlmon |
||||
ip link add type nlmon |
||||
ip link set nlmon0 up |
||||
|
||||
Capture: |
||||
tcpdump -i nlmon0 ... |
||||
|
||||
Teardown: |
||||
ip link set nlmon0 down |
||||
ip link del dev nlmon0 |
||||
rmmod nlmon |
||||
|
||||
For pcap interoperability, introduce a common link type for netlink |
||||
captures. |
||||
--- |
||||
pcap-common.c | 7 ++++++- |
||||
pcap-linux.c | 13 +++++++++++++ |
||||
pcap/bpf.h | 7 ++++++- |
||||
3 files changed, 25 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/pcap-common.c b/pcap-common.c |
||||
index 6175a5a..f26d22e 100644 |
||||
--- a/pcap-common.c |
||||
+++ b/pcap-common.c |
||||
@@ -932,7 +932,12 @@ |
||||
*/ |
||||
#define LINKTYPE_WIRESHARK_UPPER_PDU 252 |
||||
|
||||
-#define LINKTYPE_MATCHING_MAX 252 /* highest value in the "matching" range */ |
||||
+/* |
||||
+ * Link-layer header type for the netlink protocol (nlmon devices). |
||||
+ */ |
||||
+#define LINKTYPE_NETLINK 253 |
||||
+ |
||||
+#define LINKTYPE_MATCHING_MAX 253 /* highest value in the "matching" range */ |
||||
|
||||
static struct linktype_map { |
||||
int dlt; |
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index e817382..0651522 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -2972,6 +2972,19 @@ static void map_arphrd_to_dlt(pcap_t *handle, int arptype, int cooked_ok) |
||||
handle->linktype = DLT_IEEE802_15_4_NOFCS; |
||||
break; |
||||
|
||||
+#ifndef ARPHRD_NETLINK |
||||
+#define ARPHRD_NETLINK 824 |
||||
+#endif |
||||
+ case ARPHRD_NETLINK: |
||||
+ handle->linktype = DLT_NETLINK; |
||||
+ /* |
||||
+ * We need to use cooked mode, so that in sll_protocol we |
||||
+ * pick up the netlink protocol type such as NETLINK_ROUTE, |
||||
+ * NETLINK_GENERIC, NETLINK_FIB_LOOKUP, etc. |
||||
+ */ |
||||
+ handle->cooked = 1; |
||||
+ break; |
||||
+ |
||||
default: |
||||
handle->linktype = -1; |
||||
break; |
||||
diff --git a/pcap/bpf.h b/pcap/bpf.h |
||||
index ad36eb6..8286ed5 100644 |
||||
--- a/pcap/bpf.h |
||||
+++ b/pcap/bpf.h |
||||
@@ -1224,7 +1224,12 @@ struct bpf_program { |
||||
*/ |
||||
#define DLT_WIRESHARK_UPPER_PDU 252 |
||||
|
||||
-#define DLT_MATCHING_MAX 252 /* highest value in the "matching" range */ |
||||
+/* |
||||
+ * DLT type for the netlink protocol (nlmon devices). |
||||
+ */ |
||||
+#define DLT_NETLINK 253 |
||||
+ |
||||
+#define DLT_MATCHING_MAX 253 /* highest value in the "matching" range */ |
||||
|
||||
/* |
||||
* DLT and savefile link type values are split into a class and |
||||
-- |
||||
2.4.3 |
||||
|
@ -0,0 +1,34 @@
@@ -0,0 +1,34 @@
|
||||
From b298835b3e4e918f00315f3a4e33e73c031ce98e Mon Sep 17 00:00:00 2001 |
||||
From: rpm-build <rpm-build> |
||||
Date: Wed, 5 Nov 2014 07:41:11 +0100 |
||||
Subject: [PATCH] pcap-linux: don't use TPACKETV3 for memory mmapped capture |
||||
|
||||
There has been numerous reports from users complaining about changes in behavior |
||||
of libpcap when using libpcap compiled with TPACKETV3 support. Back out and |
||||
disable it. |
||||
|
||||
See: https://github.com/the-tcpdump-group/libpcap/issues/380 |
||||
See: https://github.com/the-tcpdump-group/libpcap/issues/364 |
||||
|
||||
Resolves: #1085096 |
||||
--- |
||||
pcap-linux.c | 3 --- |
||||
1 file changed, 3 deletions(-) |
||||
|
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index 83bb107..117405b 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -198,9 +198,6 @@ static const char rcsid[] _U_ = |
||||
* uses many ring related structs and macros */ |
||||
# ifdef TPACKET_HDRLEN |
||||
# define HAVE_PACKET_RING |
||||
-# ifdef TPACKET3_HDRLEN |
||||
-# define HAVE_TPACKET3 |
||||
-# endif /* TPACKET3_HDRLEN */ |
||||
# ifdef TPACKET2_HDRLEN |
||||
# define HAVE_TPACKET2 |
||||
# else /* TPACKET2_HDRLEN */ |
||||
-- |
||||
1.8.3.1 |
||||
|
@ -0,0 +1,236 @@
@@ -0,0 +1,236 @@
|
||||
From e80ed31b6e3ab778a7e0dd53348f488a91456cfc Mon Sep 17 00:00:00 2001 |
||||
From: Michal Sekletar <msekleta@redhat.com> |
||||
Date: Fri, 31 Oct 2014 15:19:54 +0100 |
||||
Subject: [PATCH 2/2] Use BPF extensions in compiled filters |
||||
|
||||
libpcap will generate BPF filter code which uses BPF extensions if target |
||||
platform supports them. Currently supported BPF extensions are vlan_tci and |
||||
vlan_pr. |
||||
|
||||
Also to properly handle such filters when filtering in userspace libpcap now |
||||
employs bpf_filter1. |
||||
|
||||
(cherry picked from 04660eb1e56102e2369473cae2538e4d3d263607) |
||||
|
||||
Conflicts: |
||||
pcap-linux.c |
||||
--- |
||||
gencode.c | 110 +++++++++++++++++++++++++++++++++++++++++++++-------------- |
||||
pcap-linux.c | 23 +++++++++---- |
||||
2 files changed, 102 insertions(+), 31 deletions(-) |
||||
|
||||
diff --git a/gencode.c b/gencode.c |
||||
index d58ea30..2ff725e 100644 |
||||
--- a/gencode.c |
||||
+++ b/gencode.c |
||||
@@ -58,6 +58,7 @@ static const char rcsid[] _U_ = |
||||
|
||||
#include <netinet/in.h> |
||||
#include <arpa/inet.h> |
||||
+#include <errno.h> |
||||
|
||||
#endif /* WIN32 */ |
||||
|
||||
@@ -135,9 +136,9 @@ static pcap_t *bpf_pcap; |
||||
|
||||
/* Hack for updating VLAN, MPLS, and PPPoE offsets. */ |
||||
#ifdef WIN32 |
||||
-static u_int orig_linktype = (u_int)-1, orig_nl = (u_int)-1, label_stack_depth = (u_int)-1; |
||||
+static u_int orig_linktype = (u_int)-1, orig_nl = (u_int)-1, label_stack_depth = (u_int)-1, vlan_stack_depth = (u_int)-1; |
||||
#else |
||||
-static u_int orig_linktype = -1U, orig_nl = -1U, label_stack_depth = -1U; |
||||
+static u_int orig_linktype = -1U, orig_nl = -1U, label_stack_depth = -1U, vlan_stack_depth = -1U; |
||||
#endif |
||||
|
||||
/* XXX */ |
||||
@@ -962,6 +963,7 @@ init_linktype(p) |
||||
orig_linktype = -1; |
||||
orig_nl = -1; |
||||
label_stack_depth = 0; |
||||
+ vlan_stack_depth = 0; |
||||
|
||||
reg_off_ll = -1; |
||||
reg_off_macpl = -1; |
||||
@@ -7861,6 +7863,76 @@ gen_ahostop(eaddr, dir) |
||||
/* NOTREACHED */ |
||||
} |
||||
|
||||
+#if defined(SKF_AD_VLAN_TAG) && defined(SKF_AD_VLAN_TAG_PRESENT) |
||||
+static int skf_ad_vlan_tag_present_supported(int bpf_extensions) { |
||||
+ return bpf_extensions >= SKF_AD_VLAN_TAG_PRESENT; |
||||
+} |
||||
+ |
||||
+static struct block * |
||||
+gen_vlan_bpf_extensions(int vlan_num) { |
||||
+ struct block *b0, *b1; |
||||
+ struct slist *s; |
||||
+ int val = 0, len, r; |
||||
+ |
||||
+ len = sizeof(val); |
||||
+ r = getsockopt(bpf_pcap->fd, SOL_SOCKET, SO_BPF_EXTENSIONS, &val, &len); |
||||
+ if (r < 0) |
||||
+ return NULL; |
||||
+ |
||||
+ if (!skf_ad_vlan_tag_present_supported(val)) |
||||
+ return NULL; |
||||
+ |
||||
+ /* generate new filter code based on extracting packet |
||||
+ * metadata */ |
||||
+ s = new_stmt(BPF_LD|BPF_B|BPF_ABS); |
||||
+ s->s.k = SKF_AD_OFF + SKF_AD_VLAN_TAG_PRESENT; |
||||
+ |
||||
+ b0 = new_block(JMP(BPF_JEQ)); |
||||
+ b0->stmts = s; |
||||
+ b0->s.k = 1; |
||||
+ |
||||
+ if (vlan_num >= 0) { |
||||
+ s = new_stmt(BPF_LD|BPF_B|BPF_ABS); |
||||
+ s->s.k = SKF_AD_OFF + SKF_AD_VLAN_TAG; |
||||
+ |
||||
+ b1 = new_block(JMP(BPF_JEQ)); |
||||
+ b1->stmts = s; |
||||
+ b1->s.k = (bpf_int32) vlan_num; |
||||
+ |
||||
+ gen_and(b0,b1); |
||||
+ b0 = b1; |
||||
+ } |
||||
+ |
||||
+ return b0; |
||||
+} |
||||
+#endif |
||||
+ |
||||
+static struct block * |
||||
+gen_vlan_no_bpf_extensions(int vlan_num) { |
||||
+ struct block *b0, *b1; |
||||
+ |
||||
+ /* check for VLAN, including QinQ */ |
||||
+ b0 = gen_cmp(OR_LINK, off_linktype, BPF_H, |
||||
+ (bpf_int32)ETHERTYPE_8021Q); |
||||
+ b1 = gen_cmp(OR_LINK, off_linktype, BPF_H, |
||||
+ (bpf_int32)ETHERTYPE_8021QINQ); |
||||
+ gen_or(b0,b1); |
||||
+ b0 = b1; |
||||
+ |
||||
+ /* If a specific VLAN is requested, check VLAN id */ |
||||
+ if (vlan_num >= 0) { |
||||
+ b1 = gen_mcmp(OR_MACPL, 0, BPF_H, |
||||
+ (bpf_int32)vlan_num, 0x0fff); |
||||
+ gen_and(b0, b1); |
||||
+ b0 = b1; |
||||
+ } |
||||
+ |
||||
+ off_macpl += 4; |
||||
+ off_linktype += 4; |
||||
+ |
||||
+ return b0; |
||||
+} |
||||
+ |
||||
/* |
||||
* support IEEE 802.1Q VLAN trunk over ethernet |
||||
*/ |
||||
@@ -7912,36 +7984,24 @@ gen_vlan(vlan_num) |
||||
case DLT_EN10MB: |
||||
case DLT_NETANALYZER: |
||||
case DLT_NETANALYZER_TRANSPARENT: |
||||
- /* check for VLAN, including QinQ */ |
||||
- b0 = gen_cmp(OR_LINK, off_linktype, BPF_H, |
||||
- (bpf_int32)ETHERTYPE_8021Q); |
||||
- b1 = gen_cmp(OR_LINK, off_linktype, BPF_H, |
||||
- (bpf_int32)ETHERTYPE_8021QINQ); |
||||
- gen_or(b0,b1); |
||||
- b0 = b1; |
||||
- |
||||
- /* If a specific VLAN is requested, check VLAN id */ |
||||
- if (vlan_num >= 0) { |
||||
- b1 = gen_mcmp(OR_MACPL, 0, BPF_H, |
||||
- (bpf_int32)vlan_num, 0x0fff); |
||||
- gen_and(b0, b1); |
||||
- b0 = b1; |
||||
- } |
||||
- |
||||
- off_macpl += 4; |
||||
- off_linktype += 4; |
||||
-#if 0 |
||||
- off_nl_nosnap += 4; |
||||
- off_nl += 4; |
||||
+#if defined(SKF_AD_VLAN_TAG) && defined(SKF_AD_VLAN_TAG_PRESENT) |
||||
+ if (!vlan_stack_depth) { |
||||
+ b0 = gen_vlan_bpf_extensions(vlan_num); |
||||
+ if (!b0) |
||||
+ b0 = gen_vlan_no_bpf_extensions(vlan_num); |
||||
+ } |
||||
+ else |
||||
#endif |
||||
- break; |
||||
- |
||||
+ b0 = gen_vlan_no_bpf_extensions(vlan_num); |
||||
+ break; |
||||
default: |
||||
bpf_error("no VLAN support for data link type %d", |
||||
linktype); |
||||
/*NOTREACHED*/ |
||||
} |
||||
|
||||
+ vlan_stack_depth++; |
||||
+ |
||||
return (b0); |
||||
} |
||||
|
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index a0e543c..68e6d05 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -1475,6 +1475,7 @@ pcap_read_packet(pcap_t *handle, pcap_handler callback, u_char *userdata) |
||||
int packet_len, caplen; |
||||
struct pcap_pkthdr pcap_header; |
||||
|
||||
+ struct bpf_aux_data aux_data; |
||||
#ifdef HAVE_PF_PACKET_SOCKETS |
||||
/* |
||||
* If this is a cooked device, leave extra room for a |
||||
@@ -1658,6 +1659,11 @@ pcap_read_packet(pcap_t *handle, pcap_handler callback, u_char *userdata) |
||||
tag->vlan_tpid = htons(ETH_P_8021Q); |
||||
tag->vlan_tci = htons(aux->tp_vlan_tci); |
||||
|
||||
+ /* store vlan tci to bpf_aux_data struct for userland bpf filter */ |
||||
+#if defined(TP_STATUS_VLAN_VALID) |
||||
+ aux_data.vlan_tag = htons(aux->tp_vlan_tci) & 0x0fff; |
||||
+ aux_data.vlan_tag_present = (aux->tp_status & TP_STATUS_VLAN_VALID); |
||||
+#endif |
||||
packet_len += VLAN_TAG_LEN; |
||||
} |
||||
} |
||||
@@ -1702,8 +1708,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_filter(handle->fcode.bf_insns, bp, |
||||
- packet_len, caplen) == 0) |
||||
+ if (bpf_filter1(handle->fcode.bf_insns, bp, |
||||
+ packet_len, caplen, &aux_data) == 0) |
||||
{ |
||||
/* rejected by filter */ |
||||
return 0; |
||||
@@ -4270,10 +4276,15 @@ static int pcap_handle_packet_mmap( |
||||
snaplen += sizeof(struct sll_header); |
||||
} |
||||
|
||||
- if (handlep->filter_in_userland && handle->fcode.bf_insns && |
||||
- (bpf_filter(handle->fcode.bf_insns, bp, |
||||
- tp_len, snaplen) == 0)) |
||||
- return 0; |
||||
+ if (handlep->filter_in_userland && handle->fcode.bf_insns) { |
||||
+ struct bpf_aux_data aux_data; |
||||
+ |
||||
+ 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 (!linux_check_direction(handle, sll)) |
||||
return 0; |
||||
-- |
||||
2.4.3 |
||||
|
@ -0,0 +1,101 @@
@@ -0,0 +1,101 @@
|
||||
From e58e6b25c82cc2f76f08b291e14f4e81f4ae1364 Mon Sep 17 00:00:00 2001 |
||||
From: Guy Harris <guy@alum.mit.edu> |
||||
Date: Wed, 5 Nov 2014 11:18:51 -0800 |
||||
Subject: [PATCH 3/3] 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. |
||||
|
||||
(cherry picked from 20119d41be224cf9ea821155ad0b267f7e40f234) |
||||
|
||||
Conflicts: |
||||
pcap-linux.c |
||||
--- |
||||
bpf/net/bpf_filter.c | 7 +++++-- |
||||
pcap-linux.c | 7 +++---- |
||||
pcap/bpf.h | 7 ++++++- |
||||
3 files changed, 14 insertions(+), 7 deletions(-) |
||||
|
||||
diff --git a/bpf/net/bpf_filter.c b/bpf/net/bpf_filter.c |
||||
index 3409a9b..307f980 100644 |
||||
--- a/bpf/net/bpf_filter.c |
||||
+++ b/bpf/net/bpf_filter.c |
||||
@@ -215,11 +215,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; |
||||
@@ -579,7 +582,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 68e6d05..a370858 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -1708,9 +1708,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; |
||||
} |
||||
@@ -4282,7 +4281,7 @@ static int pcap_handle_packet_mmap( |
||||
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) |
||||
+ if (bpf_filter_with_aux_data(handle->fcode.bf_insns, bp, tp_len, tp_snaplen, &aux_data) == 0) |
||||
return 0; |
||||
} |
||||
|
||||
diff --git a/pcap/bpf.h b/pcap/bpf.h |
||||
index 495f326..29efd7e 100644 |
||||
--- a/pcap/bpf.h |
||||
+++ b/pcap/bpf.h |
||||
@@ -1320,6 +1320,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; |
||||
@@ -1334,7 +1339,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(); |
||||
-- |
||||
2.4.3 |
||||
|
@ -0,0 +1,37 @@
@@ -0,0 +1,37 @@
|
||||
From 98ab67580f4cdcede021f6f5a2d9d50bb86bff55 Mon Sep 17 00:00:00 2001 |
||||
From: Guy Harris <guy@alum.mit.edu> |
||||
Date: Wed, 5 Nov 2014 11:19:39 -0800 |
||||
Subject: [PATCH 4/4] Get rid of unused variable. |
||||
|
||||
Also clean up white space a bit. |
||||
|
||||
(cherry picked from 86db77ce320dd9e81e5cc7b93ac9adf26643b140) |
||||
--- |
||||
gencode.c | 4 ++-- |
||||
1 file changed, 2 insertions(+), 2 deletions(-) |
||||
|
||||
diff --git a/gencode.c b/gencode.c |
||||
index 2ff725e..9c1d17b 100644 |
||||
--- a/gencode.c |
||||
+++ b/gencode.c |
||||
@@ -7940,7 +7940,7 @@ struct block * |
||||
gen_vlan(vlan_num) |
||||
int vlan_num; |
||||
{ |
||||
- struct block *b0, *b1; |
||||
+ struct block *b0; |
||||
|
||||
/* can't check for VLAN-encapsulated packets inside MPLS */ |
||||
if (label_stack_depth > 0) |
||||
@@ -8012,7 +8012,7 @@ struct block * |
||||
gen_mpls(label_num) |
||||
int label_num; |
||||
{ |
||||
- struct block *b0,*b1; |
||||
+ struct block *b0, *b1; |
||||
|
||||
/* |
||||
* Change the offsets to point to the type and data fields within |
||||
-- |
||||
2.4.3 |
||||
|
@ -0,0 +1,213 @@
@@ -0,0 +1,213 @@
|
||||
From 06553e55d6ff2b203c4ab1dda2d6fb15c45e2896 Mon Sep 17 00:00:00 2001 |
||||
From: Guy Harris <guy@alum.mit.edu> |
||||
Date: Wed, 5 Nov 2014 14:33:14 -0800 |
||||
Subject: [PATCH 5/5] Move the socket ops out of gencode.c. |
||||
|
||||
Instead, do it in pcap-linux.c, and have it set a flag in the pcap_t |
||||
structure to indicate to the code in gencode.c that it needs to generate |
||||
special VLAN-handling code. |
||||
|
||||
(cherry picked from 612503bb0801a49a1c6ebe9c82591289b1d2e5c9) |
||||
|
||||
Conflicts: |
||||
pcap-linux.c |
||||
--- |
||||
gencode.c | 37 ++++++++++++++----------------------- |
||||
pcap-int.h | 10 ++++++++++ |
||||
pcap-linux.c | 24 ++++++++++++++++++++++++ |
||||
pcap.c | 12 ++++++++++++ |
||||
savefile.c | 5 +++++ |
||||
5 files changed, 65 insertions(+), 23 deletions(-) |
||||
|
||||
diff --git a/gencode.c b/gencode.c |
||||
index 9c1d17b..6b3772f 100644 |
||||
--- a/gencode.c |
||||
+++ b/gencode.c |
||||
@@ -58,7 +58,6 @@ static const char rcsid[] _U_ = |
||||
|
||||
#include <netinet/in.h> |
||||
#include <arpa/inet.h> |
||||
-#include <errno.h> |
||||
|
||||
#endif /* WIN32 */ |
||||
|
||||
@@ -7864,23 +7863,11 @@ gen_ahostop(eaddr, dir) |
||||
} |
||||
|
||||
#if defined(SKF_AD_VLAN_TAG) && defined(SKF_AD_VLAN_TAG_PRESENT) |
||||
-static int skf_ad_vlan_tag_present_supported(int bpf_extensions) { |
||||
- return bpf_extensions >= SKF_AD_VLAN_TAG_PRESENT; |
||||
-} |
||||
- |
||||
static struct block * |
||||
-gen_vlan_bpf_extensions(int vlan_num) { |
||||
+gen_vlan_bpf_extensions(int vlan_num) |
||||
+{ |
||||
struct block *b0, *b1; |
||||
struct slist *s; |
||||
- int val = 0, len, r; |
||||
- |
||||
- len = sizeof(val); |
||||
- r = getsockopt(bpf_pcap->fd, SOL_SOCKET, SO_BPF_EXTENSIONS, &val, &len); |
||||
- if (r < 0) |
||||
- return NULL; |
||||
- |
||||
- if (!skf_ad_vlan_tag_present_supported(val)) |
||||
- return NULL; |
||||
|
||||
/* generate new filter code based on extracting packet |
||||
* metadata */ |
||||
@@ -7908,7 +7895,8 @@ gen_vlan_bpf_extensions(int vlan_num) { |
||||
#endif |
||||
|
||||
static struct block * |
||||
-gen_vlan_no_bpf_extensions(int vlan_num) { |
||||
+gen_vlan_no_bpf_extensions(int vlan_num) |
||||
+{ |
||||
struct block *b0, *b1; |
||||
|
||||
/* check for VLAN, including QinQ */ |
||||
@@ -7985,14 +7973,17 @@ gen_vlan(vlan_num) |
||||
case DLT_NETANALYZER: |
||||
case DLT_NETANALYZER_TRANSPARENT: |
||||
#if defined(SKF_AD_VLAN_TAG) && defined(SKF_AD_VLAN_TAG_PRESENT) |
||||
- if (!vlan_stack_depth) { |
||||
- b0 = gen_vlan_bpf_extensions(vlan_num); |
||||
- if (!b0) |
||||
- b0 = gen_vlan_no_bpf_extensions(vlan_num); |
||||
- } |
||||
- else |
||||
+ if (vlan_stack_depth == 0) { |
||||
+ /* |
||||
+ * Do we need special VLAN handling? |
||||
+ */ |
||||
+ if (bpf_pcap->bpf_codegen_flags & BPF_SPECIAL_VLAN_HANDLING) |
||||
+ b0 = gen_vlan_bpf_extensions(vlan_num); |
||||
+ else |
||||
+ b0 = gen_vlan_no_bpf_extensions(vlan_num); |
||||
+ } else |
||||
#endif |
||||
- b0 = gen_vlan_no_bpf_extensions(vlan_num); |
||||
+ b0 = gen_vlan_no_bpf_extensions(vlan_num); |
||||
break; |
||||
default: |
||||
bpf_error("no VLAN support for data link type %d", |
||||
diff --git a/pcap-int.h b/pcap-int.h |
||||
index 0c27ec7..c9dbb5f 100644 |
||||
--- a/pcap-int.h |
||||
+++ b/pcap-int.h |
||||
@@ -182,6 +182,11 @@ struct pcap { |
||||
pcap_direction_t direction; |
||||
|
||||
/* |
||||
+ * Flags to affect BPF code generation. |
||||
+ */ |
||||
+ int bpf_codegen_flags; |
||||
+ |
||||
+ /* |
||||
* Placeholder for filter code if bpf not in kernel. |
||||
*/ |
||||
struct bpf_program fcode; |
||||
@@ -228,6 +233,11 @@ struct pcap { |
||||
}; |
||||
|
||||
/* |
||||
+ * BPF code generation flags. |
||||
+ */ |
||||
+#define BPF_SPECIAL_VLAN_HANDLING 0x00000001 /* special VLAN handling for Linux */ |
||||
+ |
||||
+/* |
||||
* This is a timeval as stored in a savefile. |
||||
* It has to use the same types everywhere, independent of the actual |
||||
* `struct timeval'; `struct timeval' has 32-bit tv_sec values on some |
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index a370858..a82f4eb 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -3024,6 +3024,10 @@ activate_new(pcap_t *handle) |
||||
#endif |
||||
int err = 0; |
||||
struct packet_mreq mr; |
||||
+#ifdef SO_BPF_EXTENSIONS |
||||
+ int bpf_extensions; |
||||
+ socklen_t len; |
||||
+#endif |
||||
|
||||
/* |
||||
* Open a socket with protocol family packet. If the |
||||
@@ -3342,6 +3346,26 @@ activate_new(pcap_t *handle) |
||||
/* Save the socket FD in the pcap structure */ |
||||
handle->fd = sock_fd; |
||||
|
||||
+#ifdef SO_BPF_EXTENSIONS |
||||
+ /* |
||||
+ * Can we generate special code for VLAN checks? |
||||
+ * (XXX - what if we need the special code but it's not supported |
||||
+ * by the OS? Is that possible?) |
||||
+ */ |
||||
+ len = sizeof(bpf_extensions); |
||||
+ |
||||
+ if (getsockopt(sock_fd, SOL_SOCKET, SO_BPF_EXTENSIONS, &bpf_extensions, &len) == 0) { |
||||
+ if (bpf_extensions >= SKF_AD_VLAN_TAG_PRESENT) { |
||||
+ /* |
||||
+ * Yes, we can. Request that we do so. |
||||
+ */ |
||||
+ handle->bpf_codegen_flags |= BPF_SPECIAL_VLAN_HANDLING; |
||||
+ } |
||||
+ } |
||||
+#endif /* SO_BPF_EXTENSIONS */ |
||||
+ |
||||
+ |
||||
+ |
||||
#if defined(SIOCGSTAMPNS) && defined(SO_TIMESTAMPNS) |
||||
if (handle->opt.tstamp_precision == PCAP_TSTAMP_PRECISION_NANO) { |
||||
int nsec_tstamps = 1; |
||||
diff --git a/pcap.c b/pcap.c |
||||
index 6b16cea..74dc708 100644 |
||||
--- a/pcap.c |
||||
+++ b/pcap.c |
||||
@@ -558,6 +558,12 @@ pcap_create_common(const char *source, char *ebuf, size_t size) |
||||
p->opt.immediate = 0; |
||||
p->opt.tstamp_type = -1; /* default to not setting time stamp type */ |
||||
p->opt.tstamp_precision = PCAP_TSTAMP_PRECISION_MICRO; |
||||
+ |
||||
+ /* |
||||
+ * Start out with no BPF code generation flags set. |
||||
+ */ |
||||
+ p->bpf_codegen_flags = 0; |
||||
+ |
||||
return (p); |
||||
} |
||||
|
||||
@@ -1810,6 +1816,12 @@ pcap_open_dead_with_tstamp_precision(int linktype, int snaplen, u_int precision) |
||||
p->setmintocopy_op = pcap_setmintocopy_dead; |
||||
#endif |
||||
p->cleanup_op = pcap_cleanup_dead; |
||||
+ |
||||
+ /* |
||||
+ * A "dead" pcap_t never requires special BPF code generation. |
||||
+ */ |
||||
+ p->bpf_codegen_flags = 0; |
||||
+ |
||||
p->activated = 1; |
||||
return (p); |
||||
} |
||||
diff --git a/savefile.c b/savefile.c |
||||
index 73e3ea9..98f9c82 100644 |
||||
--- a/savefile.c |
||||
+++ b/savefile.c |
||||
@@ -349,6 +349,11 @@ found: |
||||
*/ |
||||
p->oneshot_callback = pcap_oneshot; |
||||
|
||||
+ /* |
||||
+ * Savefiles never require special BPF code generation. |
||||
+ */ |
||||
+ p->bpf_codegen_flags = 0; |
||||
+ |
||||
p->activated = 1; |
||||
|
||||
return (p); |
||||
-- |
||||
2.4.3 |
||||
|
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
From d8aade59b5787f5d3517fededcd684fe85367afa Mon Sep 17 00:00:00 2001 |
||||
From: rpm-build <rpm-build> |
||||
Date: Mon, 29 May 2017 11:54:43 +0200 |
||||
Subject: [PATCH] Backport patch to bound tpacketv2 to 64k |
||||
|
||||
--- |
||||
pcap-linux.c | 29 ++++++++++++++++++----------- |
||||
1 file changed, 18 insertions(+), 11 deletions(-) |
||||
|
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index f7f2aae..d7149d5 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -3600,6 +3600,8 @@ prepare_tpacket_socket(pcap_t *handle) |
||||
return 1; |
||||
} |
||||
|
||||
+#define MAX(a,b) ((a)>(b)?(a):(b)) |
||||
+ |
||||
/* |
||||
* Attempt to set up memory-mapped access. |
||||
* |
||||
@@ -3674,25 +3676,30 @@ create_ring(pcap_t *handle, int *status) |
||||
* "packets" bigger than the MTU. */ |
||||
frame_size = handle->snapshot; |
||||
if (handle->linktype == DLT_EN10MB) { |
||||
+ unsigned int max_frame_len; |
||||
int mtu; |
||||
int offload; |
||||
|
||||
+ mtu = iface_get_mtu(handle->fd, handle->opt.source, |
||||
+ handle->errbuf); |
||||
+ if (mtu == -1) { |
||||
+ *status = PCAP_ERROR; |
||||
+ return -1; |
||||
+ } |
||||
offload = iface_get_offload(handle); |
||||
if (offload == -1) { |
||||
*status = PCAP_ERROR; |
||||
return -1; |
||||
} |
||||
- if (!offload) { |
||||
- mtu = iface_get_mtu(handle->fd, handle->opt.source, |
||||
- handle->errbuf); |
||||
- if (mtu == -1) { |
||||
- *status = PCAP_ERROR; |
||||
- return -1; |
||||
- } |
||||
- if (frame_size > mtu + 18) |
||||
- frame_size = mtu + 18; |
||||
- } |
||||
- } |
||||
+ if (offload) |
||||
+ max_frame_len = MAX(mtu, 65535); |
||||
+ else |
||||
+ max_frame_len = mtu; |
||||
+ max_frame_len += 18; |
||||
+ |
||||
+ if (frame_size > max_frame_len) |
||||
+ frame_size = max_frame_len; |
||||
+ } |
||||
|
||||
/* NOTE: calculus matching those in tpacket_rcv() |
||||
* in linux-2.6/net/packet/af_packet.c |
||||
-- |
||||
2.13.0 |
||||
|
@ -0,0 +1,67 @@
@@ -0,0 +1,67 @@
|
||||
From 59a65c3d24289661dc444e3c303fbd880de5b6e0 Mon Sep 17 00:00:00 2001 |
||||
From: rpm-build <rpm-build> |
||||
Date: Tue, 15 Aug 2017 09:59:02 +0200 |
||||
Subject: [PATCH] Add support for AF_VSOCK |
||||
|
||||
Backported from here: |
||||
https://github.com/the-tcpdump-group/libpcap/commit/8fe43bb140f1b5dd193a76b89e379a27847a9391 |
||||
and extended with DLT_VSOCK definition from upstream pcap/dlt.h file. |
||||
--- |
||||
pcap-linux.c | 6 ++++++ |
||||
pcap.c | 1 + |
||||
pcap/bpf.h | 10 +++++++++- |
||||
3 files changed, 16 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index d7149d5..0bfc77a 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -2995,6 +2995,12 @@ static void map_arphrd_to_dlt(pcap_t *handle, int arptype, int cooked_ok) |
||||
|
||||
/* handlep->cooked = 1; */ |
||||
break; |
||||
+#ifndef ARPHRD_VSOCKMON |
||||
+#define ARPHRD_VSOCKMON 826 |
||||
+#endif |
||||
+ case ARPHRD_VSOCKMON: |
||||
+ handle->linktype = DLT_VSOCK; |
||||
+ break; |
||||
|
||||
default: |
||||
handle->linktype = -1; |
||||
diff --git a/pcap.c b/pcap.c |
||||
index 7b834af..ce5ade8 100644 |
||||
--- a/pcap.c |
||||
+++ b/pcap.c |
||||
@@ -1210,6 +1210,7 @@ static struct dlt_choice dlt_choices[] = { |
||||
DLT_CHOICE(DLT_IPOIB, "RFC 4391 IP-over-Infiniband"), |
||||
DLT_CHOICE(DLT_DBUS, "D-Bus"), |
||||
DLT_CHOICE(DLT_NETLINK, "Linux netlink"), |
||||
+ DLT_CHOICE(DLT_VSOCK, "Linux vsock"), |
||||
DLT_CHOICE_SENTINEL |
||||
}; |
||||
|
||||
diff --git a/pcap/bpf.h b/pcap/bpf.h |
||||
index 29efd7e..22bff1e 100644 |
||||
--- a/pcap/bpf.h |
||||
+++ b/pcap/bpf.h |
||||
@@ -1232,7 +1232,15 @@ struct bpf_program { |
||||
*/ |
||||
#define DLT_NETLINK 253 |
||||
|
||||
-#define DLT_MATCHING_MAX 253 /* highest value in the "matching" range */ |
||||
+#define DLT_MATCHING_MAX 271 /* highest value in the "matching" range */ |
||||
+ |
||||
+/* |
||||
+ * per: Stefanha at gmail.com for |
||||
+ * http://lists.sandelman.ca/pipermail/tcpdump-workers/2017-May/000772.html |
||||
+ * and: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/uapi/linux/vsockmon.h |
||||
+ * for: http://qemu-project.org/Features/VirtioVsock |
||||
+ */ |
||||
+#define DLT_VSOCK 271 |
||||
|
||||
/* |
||||
* DLT and savefile link type values are split into a class and |
||||
-- |
||||
2.13.5 |
||||
|
@ -0,0 +1,73 @@
@@ -0,0 +1,73 @@
|
||||
diff --git a/pcap-linux.c b/pcap-linux.c |
||||
index 0bfc77a..8cf531b 100644 |
||||
--- a/pcap-linux.c |
||||
+++ b/pcap-linux.c |
||||
@@ -368,6 +368,12 @@ static void pcap_oneshot_mmap(u_char *user, const struct pcap_pkthdr *h, |
||||
const u_char *bytes); |
||||
#endif |
||||
|
||||
+#ifdef TP_STATUS_VLAN_TPID_VALID |
||||
+#define VLAN_TPID(hdr, hv) (((hv)->tp_vlan_tpid || ((hdr)->tp_status & TP_STATUS_VLAN_TPID_VALID)) ? (hv)->tp_vlan_tpid : ETH_P_8021Q) |
||||
+#else |
||||
+#define VLAN_TPID(hdr, hv) ETH_P_8021Q |
||||
+#endif |
||||
+ |
||||
/* |
||||
* Wrap some ioctl calls |
||||
*/ |
||||
@@ -1656,7 +1662,7 @@ pcap_read_packet(pcap_t *handle, pcap_handler callback, u_char *userdata) |
||||
memmove(bp, bp + VLAN_TAG_LEN, handlep->vlan_offset); |
||||
|
||||
tag = (struct vlan_tag *)(bp + handlep->vlan_offset); |
||||
- tag->vlan_tpid = htons(ETH_P_8021Q); |
||||
+ tag->vlan_tpid = htons(VLAN_TPID(aux, aux)); |
||||
tag->vlan_tci = htons(aux->tp_vlan_tci); |
||||
|
||||
/* store vlan tci to bpf_aux_data struct for userland bpf filter */ |
||||
@@ -4242,7 +4248,8 @@ static int pcap_handle_packet_mmap( |
||||
unsigned int tp_sec, |
||||
unsigned int tp_usec, |
||||
int tp_vlan_tci_valid, |
||||
- __u16 tp_vlan_tci) |
||||
+ __u16 tp_vlan_tci, |
||||
+ __u16 tp_vlan_tpid) |
||||
{ |
||||
struct pcap_linux *handlep = handle->priv; |
||||
unsigned char *bp; |
||||
@@ -4350,7 +4357,7 @@ static int pcap_handle_packet_mmap( |
||||
memmove(bp, bp + VLAN_TAG_LEN, handlep->vlan_offset); |
||||
|
||||
tag = (struct vlan_tag *)(bp + handlep->vlan_offset); |
||||
- tag->vlan_tpid = htons(ETH_P_8021Q); |
||||
+ tag->vlan_tpid = htons(tp_vlan_tpid); |
||||
tag->vlan_tci = htons(tp_vlan_tci); |
||||
|
||||
pcaphdr.caplen += VLAN_TAG_LEN; |
||||
@@ -4410,6 +4417,7 @@ pcap_read_linux_mmap_v1(pcap_t *handle, int max_packets, pcap_handler callback, |
||||
h.h1->tp_sec, |
||||
h.h1->tp_usec, |
||||
0, |
||||
+ 0, |
||||
0); |
||||
if (ret == 1) { |
||||
pkts++; |
||||
@@ -4488,7 +4496,8 @@ pcap_read_linux_mmap_v2(pcap_t *handle, int max_packets, pcap_handler callback, |
||||
#else |
||||
h.h2->tp_vlan_tci != 0, |
||||
#endif |
||||
- h.h2->tp_vlan_tci); |
||||
+ h.h2->tp_vlan_tci, |
||||
+ VLAN_TPID(h.h2, h.h2)); |
||||
if (ret == 1) { |
||||
pkts++; |
||||
handlep->packets_read++; |
||||
@@ -4583,7 +4592,8 @@ pcap_read_linux_mmap_v3(pcap_t *handle, int max_packets, pcap_handler callback, |
||||
#else |
||||
tp3_hdr->hv1.tp_vlan_tci != 0, |
||||
#endif |
||||
- tp3_hdr->hv1.tp_vlan_tci); |
||||
+ tp3_hdr->hv1.tp_vlan_tci, |
||||
+ VLAN_TPID(tp3_hdr, &tp3_hdr->hv1)); |
||||
if (ret == 1) { |
||||
pkts++; |
||||
handlep->packets_read++; |
@ -0,0 +1,12 @@
@@ -0,0 +1,12 @@
|
||||
diff -up libpcap/pcap.3pcap.in.man libpcap/pcap.3pcap.in |
||||
--- libpcap/pcap.3pcap.in.man 2009-07-03 06:01:12.000000000 +0200 |
||||
+++ libpcap/pcap.3pcap.in 2009-07-03 15:00:12.000000000 +0200 |
||||
@@ -363,7 +363,7 @@ use an |
||||
script or some other configuration script to check whether the libpcap |
||||
1.0 APIs are available and use them only if they are. |
||||
.SH SEE ALSO |
||||
-autoconf(1), tcpdump(1), tcpslice(1), pcap-filter(@MAN_MISC_INFO@), pfconfig(8), |
||||
+autoconf(1), tcpdump(8), tcpslice(8), pcap-filter(@MAN_MISC_INFO@), pfconfig(8), |
||||
usermod(1M) |
||||
.SH AUTHORS |
||||
The original authors of libpcap are: |
@ -0,0 +1,69 @@
@@ -0,0 +1,69 @@
|
||||
diff -up libpcap-1.3.0/pcap-config.in.multilib libpcap-1.3.0/pcap-config.in |
||||
--- libpcap-1.3.0/pcap-config.in.multilib 2012-03-29 14:57:32.000000000 +0200 |
||||
+++ libpcap-1.3.0/pcap-config.in 2013-03-26 09:56:16.293324264 +0100 |
||||
@@ -7,7 +7,6 @@ |
||||
prefix="@prefix@" |
||||
exec_prefix="@exec_prefix@" |
||||
includedir="@includedir@" |
||||
-libdir="@libdir@" |
||||
V_RPATH_OPT="@V_RPATH_OPT@" |
||||
LIBS="@LIBS@" |
||||
|
||||
@@ -36,16 +35,6 @@ do |
||||
esac |
||||
shift |
||||
done |
||||
-if [ "$V_RPATH_OPT" != "" ] |
||||
-then |
||||
- # |
||||
- # If libdir isn't /usr/lib, add it to the run-time linker path. |
||||
- # |
||||
- if [ "$libdir" != "/usr/lib" ] |
||||
- then |
||||
- RPATH=$V_RPATH_OPT$libdir |
||||
- fi |
||||
-fi |
||||
if [ "$static" = 1 ] |
||||
then |
||||
# |
||||
@@ -54,16 +43,16 @@ then |
||||
# |
||||
if [ "$show_cflags" = 1 -a "$show_libs" = 1 ] |
||||
then |
||||
- echo "-I$includedir -L$libdir -lpcap $LIBS" |
||||
+ echo "-lpcap @LIBS@" |
||||
elif [ "$show_cflags" = 1 -a "$show_additional_libs" = 1 ] |
||||
then |
||||
- echo "-I$includedir -L$libdir $LIBS" |
||||
+ echo "@LIBS@" |
||||
elif [ "$show_cflags" = 1 ] |
||||
then |
||||
- echo "-I$includedir" |
||||
+ echo "" |
||||
elif [ "$show_libs" = 1 ] |
||||
then |
||||
- echo "-L$libdir -lpcap $LIBS" |
||||
+ echo "-lpcap @LIBS@" |
||||
elif [ "$show_additional_libs" = 1 ] |
||||
then |
||||
echo "$LIBS" |
||||
@@ -75,15 +64,15 @@ else |
||||
# |
||||
if [ "$show_cflags" = 1 -a "$show_libs" = 1 ] |
||||
then |
||||
- echo "-I$includedir -L$libdir $RPATH -lpcap" |
||||
+ echo "-lpcap" |
||||
elif [ "$show_cflags" = 1 -a "$show_additional_libs" = 1 ] |
||||
then |
||||
- echo "-I$includedir" |
||||
+ echo "" |
||||
elif [ "$show_cflags" = 1 ] |
||||
then |
||||
- echo "-I$includedir" |
||||
+ echo "" |
||||
elif [ "$show_libs" = 1 ] |
||||
then |
||||
- echo "-L$libdir $RPATH -lpcap" |
||||
+ echo "-lpcap" |
||||
fi |
||||
fi |
@ -0,0 +1,14 @@
@@ -0,0 +1,14 @@
|
||||
diff -up libpcap-1.5.0/pcap-linux.c.s390 libpcap-1.5.0/pcap-linux.c |
||||
--- libpcap-1.5.0/pcap-linux.c.s390 2013-11-08 08:05:02.608387300 +0100 |
||||
+++ libpcap-1.5.0/pcap-linux.c 2013-11-08 08:08:49.597405024 +0100 |
||||
@@ -3181,6 +3181,10 @@ activate_new(pcap_t *handle) |
||||
handle->linktype = DLT_LINUX_SLL; |
||||
} |
||||
|
||||
+ /* Hack to make things work on s390 ctc interfaces */ |
||||
+ if (strncmp("ctc", device, 3) == 0) |
||||
+ handle->linktype = DLT_EN10MB; |
||||
+ |
||||
handlep->ifindex = iface_get_id(sock_fd, device, |
||||
handle->errbuf); |
||||
if (handlep->ifindex == -1) { |
@ -0,0 +1,227 @@
@@ -0,0 +1,227 @@
|
||||
Name: libpcap |
||||
Epoch: 14 |
||||
Version: 1.5.3 |
||||
Release: 11%{?dist} |
||||
Summary: A system-independent interface for user-level packet capture |
||||
Group: Development/Libraries |
||||
License: BSD with advertising |
||||
URL: http://www.tcpdump.org |
||||
BuildRequires: glibc-kernheaders >= 2.2.0 bison flex bluez-libs-devel git |
||||
|
||||
Source: http://www.tcpdump.org/release/%{name}-%{version}.tar.gz |
||||
Patch1: libpcap-man.patch |
||||
Patch2: libpcap-multilib.patch |
||||
Patch3: libpcap-s390.patch |
||||
Patch4: 0001-NFLOG-don-t-crash-trying-to-filter-at-link-layer.patch |
||||
Patch5: 0001-pcap-linux-don-t-use-TPACKETV3-for-memory-mmapped-ca.patch |
||||
Patch6: 0001-Make-sure-the-userland-filtering-happens-correctly-o.patch |
||||
Patch7: 0001-bpf-increase-snaplen-if-doing-cooked-mode-userspace-.patch |
||||
Patch8: 0001-linktype-add-netlink-link-dlt-type.patch |
||||
Patch9: 0001-Handle-using-cooked-mode-for-DLT_NETLINK-in-activate.patch |
||||
Patch10: 0001-Introduce-bpf_filter1-function.patch |
||||
Patch11: 0002-Use-BPF-extensions-in-compiled-filters.patch |
||||
Patch12: 0003-More-descriptive-name-for-bpf_filter1.patch |
||||
Patch13: 0004-Get-rid-of-unused-variable.patch |
||||
Patch14: 0005-Move-the-socket-ops-out-of-gencode.c.patch |
||||
Patch15: 0001-Add-names-for-DLT_NETLINK.patch |
||||
Patch16: 0001-Fix-link-type-for-nlmon.patch |
||||
Patch17: 0001-bpf-make-sure-sll-header-size-if-accounted-for.patch |
||||
Patch18: 0006-Bound-tpacketv2-to-64k.patch |
||||
Patch19: 0007-Add-support-for-AF_VSOCK.patch |
||||
Patch20: 0008-Vlan-tpid-handling.patch |
||||
|
||||
|
||||
%description |
||||
Libpcap provides a portable framework for low-level network |
||||
monitoring. Libpcap can provide network statistics collection, |
||||
security monitoring and network debugging. Since almost every system |
||||
vendor provides a different interface for packet capture, the libpcap |
||||
authors created this system-independent API to ease in porting and to |
||||
alleviate the need for several system-dependent packet capture modules |
||||
in each application. |
||||
|
||||
Install libpcap if you need to do low-level network traffic monitoring |
||||
on your network. |
||||
|
||||
%package devel |
||||
Summary: Libraries and header files for the libpcap library |
||||
Group: Development/Libraries |
||||
Requires: %{name} = %{epoch}:%{version}-%{release} |
||||
|
||||
%description devel |
||||
Libpcap provides a portable framework for low-level network |
||||
monitoring. Libpcap can provide network statistics collection, |
||||
security monitoring and network debugging. Since almost every system |
||||
vendor provides a different interface for packet capture, the libpcap |
||||
authors created this system-independent API to ease in porting and to |
||||
alleviate the need for several system-dependent packet capture modules |
||||
in each application. |
||||
|
||||
This package provides the libraries, include files, and other |
||||
resources needed for developing libpcap applications. |
||||
|
||||
%prep |
||||
%autosetup -S git |
||||
|
||||
#sparc needs -fPIC |
||||
%ifarch %{sparc} |
||||
sed -i -e 's|-fpic|-fPIC|g' configure |
||||
%endif |
||||
|
||||
%build |
||||
export CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" |
||||
%configure |
||||
make %{?_smp_mflags} |
||||
|
||||
%install |
||||
make DESTDIR=$RPM_BUILD_ROOT install |
||||
rm -f $RPM_BUILD_ROOT%{_libdir}/libpcap.a |
||||
|
||||
%post -p /sbin/ldconfig |
||||
|
||||
%postun -p /sbin/ldconfig |
||||
|
||||
%files |
||||
%defattr(-,root,root) |
||||
%doc LICENSE README CHANGES CREDITS |
||||
%{_libdir}/libpcap.so.* |
||||
%{_mandir}/man7/pcap*.7* |
||||
|
||||
%files devel |
||||
%defattr(-,root,root) |
||||
%{_bindir}/pcap-config |
||||
%{_includedir}/pcap*.h |
||||
%{_includedir}/pcap |
||||
%{_libdir}/libpcap.so |
||||
%{_mandir}/man1/pcap-config.1* |
||||
%{_mandir}/man3/pcap*.3* |
||||
%{_mandir}/man5/pcap*.5* |
||||
|
||||
%changelog |
||||
* Tue Oct 17 2017 Michal Ruprich - 14:1.5.3-11 |
||||
- Resolves: #1427251 - tcpdump incorrectly shows 0x8100 tag for 802.1ad frames |
||||
|
||||
* Tue Aug 15 2017 Martin Sehnoutka <msehnout@redhat.com> - 14:1.5.3-10 |
||||
- Add support for AF_VSOCK |
||||
|
||||
* Mon May 29 2017 Martin Sehnoutka <msehnout@redhat.com> - 14:1.5.3-9 |
||||
- Bound packet size to 64k |
||||
|
||||
* Tue Sep 15 2015 Michal Sekletar <msekleta@redhat.com> - 14:1.5.3-8 |
||||
- make sure that sll header size is accounted for (#1176612) |
||||
|
||||
* Wed Jul 08 2015 Michal Sekletar <msekleta@redhat.com> - 14:1.5.3-7 |
||||
- make sure that netlink monitor interfaces are also properly recognized by tcpdump (#1031974) |
||||
|
||||
* Tue Jun 16 2015 Michal Sekletar <msekleta@redhat.com> - 14:1.5.3-6 |
||||
- libpcap now correctly recognizes Netlink datalink type (#1031974) |
||||
- fix vlan tagged packet filtering (#1079525) |
||||
|
||||
* Tue Mar 31 2015 Michal Sekletar <msekleta@redhat.com> - 14:1.5.3-5 |
||||
- display also first packet when capturing in cooked mode (#1176612) |
||||
- make sure that userland bpf filter interpreter is given snaplen such that size of |
||||
cooked header is account for |
||||
|
||||
* Tue Dec 2 2014 Michal Sekletar <msekleta@redhat.com> - 14:1.5.3-4 |
||||
- disable TPACKET_V3 memory mapped packet capture on AF_PACKET socket, use TPACKET_V2 instead (#1085096) |
||||
|
||||
* Thu Feb 13 2014 Michal Sekletar <msekleta@redhat.com> - 14:1.5.3-3 |
||||
- don't crash when trying to filter on interface with NFLOG link layer type (#1062511) |
||||
|
||||
* Fri Jan 24 2014 Daniel Mach <dmach@redhat.com> - 14:1.5.3-2 |
||||
- Mass rebuild 2014-01-24 |
||||
|
||||
* Wed Jan 15 2014 Michal Sekletar <msekleta@redhat.com> - 14:1.5.3-1 |
||||
- update to 1.5.3 |
||||
|
||||
* Fri Dec 27 2013 Daniel Mach <dmach@redhat.com> - 14:1.5.0-2.20131108git459712e |
||||
- Mass rebuild 2013-12-27 |
||||
|
||||
* Fri Nov 08 2013 Michal Sekletar <msekleta@redhat.com> - 14:1.5.0-1.20131108git459712e |
||||
- update to snapshot 20131108git459712e (#1026856) |
||||
|
||||
* Thu Jun 06 2013 Michal Sekletar <msekleta@redhat.com> - 14:1.4.0-1 |
||||
- update to 1.4.0 |
||||
|
||||
* Tue Mar 26 2013 Michal Sekletar <msekleta@redhat.com> - 14:1.3.0-4 |
||||
- remove unused variable from pcap-config to prevent multilib conflicts |
||||
- specfile cleanup |
||||
|
||||
* Thu Feb 14 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 14:1.3.0-3 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild |
||||
|
||||
* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 14:1.3.0-2 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild |
||||
|
||||
* Wed Jun 13 2012 Michal Sekletar <msekleta@redhat.com> 14:1.3.0-1 |
||||
- Update to 1.3.0 |
||||
|
||||
* Thu Jan 05 2012 Jan Synáček <jsynacek@redhat.com> 14:1.2.1-2 |
||||
- Rebuilt for GCC 4.7 |
||||
|
||||
* Tue Jan 03 2012 Jan Synáček <jsynacek@redhat.com> 14:1.2.1-1 |
||||
- Update to 1.2.1 |
||||
- Drop unnecessary -fragment patch |
||||
|
||||
* Fri Dec 02 2011 Michal Sekletar <msekleta@redhat.com> 14:1.2.0-1 |
||||
- update to 1.2.0 |
||||
|
||||
* Tue Sep 06 2011 Michal Sekletar <msekleta@redhat.com> 14:1.1.1-4 |
||||
- fix capture of fragmented ipv6 packets |
||||
|
||||
* Fri Apr 22 2011 Miroslav Lichvar <mlichvar@redhat.com> 14:1.1.1-3 |
||||
- ignore /sys/net/dev files on ENODEV (#693943) |
||||
- drop ppp patch |
||||
- compile with -fno-strict-aliasing |
||||
|
||||
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 14:1.1.1-2 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild |
||||
|
||||
* Tue Apr 06 2010 Miroslav Lichvar <mlichvar@redhat.com> 14:1.1.1-1 |
||||
- update to 1.1.1 |
||||
|
||||
* Wed Dec 16 2009 Miroslav Lichvar <mlichvar@redhat.com> 14:1.0.0-5.20091201git117cb5 |
||||
- update to snapshot 20091201git117cb5 |
||||
|
||||
* Sat Oct 17 2009 Dennis Gilmore <dennis@ausil.us> 14:1.0.0-4.20090922gite154e2 |
||||
- use -fPIC on sparc arches |
||||
|
||||
* Wed Sep 23 2009 Miroslav Lichvar <mlichvar@redhat.com> 14:1.0.0-3.20090922gite154e2 |
||||
- update to snapshot 20090922gite154e2 |
||||
- drop old soname |
||||
|
||||
* Fri Jul 24 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 14:1.0.0-2.20090716git6de2de |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild |
||||
|
||||
* Wed Jul 22 2009 Miroslav Lichvar <mlichvar@redhat.com> 14:1.0.0-1.20090716git6de2de |
||||
- update to 1.0.0, git snapshot 20090716git6de2de |
||||
|
||||
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 14:0.9.8-4 |
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild |
||||
|
||||
* Fri Jun 27 2008 Miroslav Lichvar <mlichvar@redhat.com> 14:0.9.8-3 |
||||
- use CFLAGS when linking (#445682) |
||||
|
||||
* Tue Feb 19 2008 Fedora Release Engineering <rel-eng@fedoraproject.org> - 14:0.9.8-2 |
||||
- Autorebuild for GCC 4.3 |
||||
|
||||
* Wed Oct 24 2007 Miroslav Lichvar <mlichvar@redhat.com> 14:0.9.8-1 |
||||
- update to 0.9.8 |
||||
|
||||
* Wed Aug 22 2007 Miroslav Lichvar <mlichvar@redhat.com> 14:0.9.7-3 |
||||
- update license tag |
||||
|
||||
* Wed Jul 25 2007 Jesse Keating <jkeating@redhat.com> - 14:0.9.7-2 |
||||
- Rebuild for RH #249435 |
||||
|
||||
* Tue Jul 24 2007 Miroslav Lichvar <mlichvar@redhat.com> 14:0.9.7-1 |
||||
- update to 0.9.7 |
||||
|
||||
* Tue Jun 19 2007 Miroslav Lichvar <mlichvar@redhat.com> 14:0.9.6-1 |
||||
- update to 0.9.6 |
||||
|
||||
* Tue Nov 28 2006 Miroslav Lichvar <mlichvar@redhat.com> 14:0.9.5-1 |
||||
- split from tcpdump package (#193657) |
||||
- update to 0.9.5 |
||||
- don't package static library |
||||
- maintain soname |
Loading…
Reference in new issue