You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.9 KiB
67 lines
1.9 KiB
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 |
|
|
|
|