Mailinglist Archive: opensuse-commit (914 mails)

< Previous Next >
commit libpcap for openSUSE:11.3

Hello community,

here is the log from the commit of package libpcap for openSUSE:11.3
checked in at Mon Jun 6 19:09:24 CEST 2011.



--------
--- old-versions/11.3/all/libpcap/libpcap.changes 2010-04-06
11:03:48.000000000 +0200
+++ 11.3/libpcap/libpcap.changes 2011-06-06 11:28:36.000000000 +0200
@@ -1,0 +2,10 @@
+Mon May 23 15:09:37 UTC 2011 - puzel@xxxxxxxxxx
+
+- add libpcap-fix-calculation-of-frame-size.patch (bnc#694779)
+
+-------------------------------------------------------------------
+Mon Mar 14 14:19:41 CST 2011 - cyliu@xxxxxxxxxx
+- fix bug#674278: pcap_findalldevs error with bonding device
+ libpcap-1.0.0-scanif.patch
+
+-------------------------------------------------------------------

Package does not exist at destination yet. Using Fallback
old-versions/11.3/all/libpcap
Destination is old-versions/11.3/UPDATES/all/libpcap
calling whatdependson for 11.3-i586


New:
----
libpcap-1.0.0-scanif.patch
libpcap-fix-calculation-of-frame-size.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libpcap.spec ++++++
--- /var/tmp/diff_new_pack.uUJJwR/_old 2011-06-06 19:05:35.000000000 +0200
+++ /var/tmp/diff_new_pack.uUJJwR/_new 2011-06-06 19:05:35.000000000 +0200
@@ -1,7 +1,7 @@
#
-# spec file for package libpcap (Version 1.1.1)
+# spec file for package libpcap
#
-# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -20,7 +20,7 @@

Name: libpcap
Version: 1.1.1
-Release: 1
+Release: 2.<RELEASE2>
Group: System/Libraries
License: BSD3c(or similar)
Url: http://www.tcpdump.org/
@@ -34,6 +34,8 @@
Patch4: libpcap-1.0.0-s390.patch
Patch5: libpcap-1.0.0-man.patch
Patch6: libpcap-1.0.0-mac_syntax.patch
+Patch7: libpcap-fix-calculation-of-frame-size.patch
+Patch8: libpcap-1.0.0-scanif.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: bison
BuildRequires: bluez-devel
@@ -131,6 +133,8 @@
%patch4
%patch5
%patch6
+%patch7 -p1
+%patch8

%build
%ifarch %sparc

++++++ libpcap-1.0.0-scanif.patch ++++++
pcap_findalldevs was failing when use bonding device.

In /sys/class/net, there are these for bonding:
drwxr-xr-x 4 root root 0 Apr 27 16:12 bond0
-rw-r--r-- 1 root root 4096 Apr 27 16:11 bonding_masters

When scan_sys_class_net encounters the bonding_masters file, the ioctl below
fails with "no device".

This patch fixes it.
Index: pcap-linux.c
===================================================================
--- pcap-linux.c
+++ pcap-linux.c
@@ -1883,7 +1883,7 @@ scan_sys_class_net(pcap_if_t **devlistp,
*/
strncpy(ifrflags.ifr_name, name, sizeof(ifrflags.ifr_name));
if (ioctl(fd, SIOCGIFFLAGS, (char *)&ifrflags) < 0) {
- if (errno == ENXIO)
+ if (errno == ENXIO || errno == ENODEV)
continue;
(void)snprintf(errbuf, PCAP_ERRBUF_SIZE,
"SIOCGIFFLAGS: %.*s: %s",
++++++ libpcap-fix-calculation-of-frame-size.patch ++++++
From ea9432fabdf4b33cbc76d9437200e028f1c47c93 Mon Sep 17 00:00:00 2001
From: Julien Moutinho <julm@xxxxxxxxxxxxxxxxxxxxxxx>
Date: Tue, 22 Mar 2011 23:53:15 -0700
Subject: [PATCH] Fix the calculation of the frame size in memory-mapped
captures.

The old calculation truncated packets to a smaller value than the
snapshot length.
---
pcap-linux.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 48 insertions(+), 3 deletions(-)

Index: libpcap-1.1.1/pcap-linux.c
===================================================================
--- libpcap-1.1.1.orig/pcap-linux.c
+++ libpcap-1.1.1/pcap-linux.c
@@ -3083,15 +3083,58 @@ create_ring(pcap_t *handle)
{
unsigned i, j, frames_per_block;
struct tpacket_req req;
+ socklen_t len;
+ unsigned int sk_type, tp_reserve, maclen, tp_hdrlen, netoff, macoff;

/* Note that with large snapshot (say 64K) only a few frames
* will be available in the ring even with pretty large ring size
* (and a lot of memory will be unused).
* The snap len should be carefully chosen to achive best
* performance */
- req.tp_frame_size = TPACKET_ALIGN(handle->snapshot +
- TPACKET_ALIGN(handle->md.tp_hdrlen) +
- sizeof(struct sockaddr_ll));
+
+ /* NOTE: calculus matching those in tpacket_rcv()
+ * in linux-2.6/net/packet/af_packet.c
+ */
+ len = sizeof(sk_type);
+ if (getsockopt(handle->fd, SOL_SOCKET, SO_TYPE, &sk_type, &len) < 0) {
+ snprintf(handle->errbuf, PCAP_ERRBUF_SIZE, "getsockopt: %s",
pcap_strerror(errno));
+ return -1;
+ }
+ len = sizeof(tp_reserve);
+ if (getsockopt(handle->fd, SOL_PACKET, PACKET_RESERVE, &tp_reserve,
&len) < 0) {
+ snprintf(handle->errbuf, PCAP_ERRBUF_SIZE, "getsockopt: %s",
pcap_strerror(errno));
+ return -1;
+ }
+ maclen = (sk_type == SOCK_DGRAM) ? 0 : MAX_LINKHEADER_SIZE;
+ /* XXX: in the kernel maclen is calculated from
+ * LL_ALLOCATED_SPACE(dev) and vnet_hdr.hdr_len
+ * in: packet_snd() in
linux-2.6/net/packet/af_packet.c
+ * then packet_alloc_skb() in
linux-2.6/net/packet/af_packet.c
+ * then sock_alloc_send_pskb() in linux-2.6/net/core/sock.c
+ * but I see no way to get those sizes in userspace,
+ * like for instance with an ifreq ioctl();
+ * the best thing I've found so far is MAX_HEADER in the kernel
+ * part of linux-2.6/include/linux/netdevice.h
+ * which goes up to 128+48=176; since pcap-linux.c defines
+ * a MAX_LINKHEADER_SIZE of 256 which is greater than that,
+ * let's use it.. maybe is it even large enough to directly
+ * replace macoff..
+ */
+ tp_hdrlen = TPACKET_ALIGN(handle->md.tp_hdrlen) + sizeof(struct
sockaddr_ll) ;
+ netoff = TPACKET_ALIGN(tp_hdrlen + (maclen < 16 ? 16 : maclen)) +
tp_reserve + 8;
+ /* NOTE: AFAICS tp_reserve may break the TPACKET_ALIGN of
+ * netoff, which contradicts
+ * linux-2.6/Documentation/networking/packet_mmap.txt
+ * documenting that:
+ * "- Gap, chosen so that packet data (Start+tp_net)
+ * aligns to TPACKET_ALIGNMENT=16"
+ */
+ /* NOTE: in linux-2.6/include/linux/skbuff.h:
+ * "CPUs often take a performance hit
+ * when accessing unaligned memory locations"
+ */
+ macoff = netoff - maclen;
+ req.tp_frame_size = TPACKET_ALIGN(macoff + handle->snapshot);
req.tp_frame_nr = handle->opt.buffer_size/req.tp_frame_size;

/* compute the minumum block size that will handle this frame.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Remember to have fun...

--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@xxxxxxxxxxxx
For additional commands, e-mail: opensuse-commit+help@xxxxxxxxxxxx

< Previous Next >
This Thread
  • No further messages