Hello community, here is the log from the commit of package libpcap for openSUSE:11.4 checked in at Tue Jun 7 04:52:38 CEST 2011.
-------- --- old-versions/11.4/all/libpcap/libpcap.changes 2010-04-06 11:03:48.000000000 +0200 +++ /mounts/work_src_done/11.4/libpcap/libpcap.changes 2011-06-06 11:14:36.000000000 +0200 @@ -1,0 +2,10 @@ +Mon May 23 15:09:35 UTC 2011 - pu...@novell.com + +- add libpcap-fix-calculation-of-frame-size.patch (bnc#694779) + +------------------------------------------------------------------- +Mon Mar 14 14:19:41 CST 2011 - cy...@novell.com +- fix bug#674278: pcap_findalldevs error with bonding device + libpcap-1.1.1-scanif.patch + +------------------------------------------------------------------- Package does not exist at destination yet. Using Fallback old-versions/11.4/all/libpcap Destination is old-versions/11.4/UPDATES/all/libpcap calling whatdependson for 11.4-i586 New: ---- libpcap-1.1.1-scanif.patch libpcap-fix-calculation-of-frame-size.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libpcap.spec ++++++ --- /var/tmp/diff_new_pack.biOojG/_old 2011-06-07 04:51:59.000000000 +0200 +++ /var/tmp/diff_new_pack.biOojG/_new 2011-06-07 04:51:59.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: 5.<RELEASE6> 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.1.1-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.1.1-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 <j...@savines.alpes.fr.eu.org> 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+unsubscr...@opensuse.org For additional commands, e-mail: opensuse-commit+h...@opensuse.org