svn commit: r416075 - in head/emulators/qemu-devel: . files

Muhammad Moinur Rahman bofh at FreeBSD.org
Sun May 29 00:24:31 UTC 2016


Author: bofh
Date: Sun May 29 00:24:29 2016
New Revision: 416075
URL: https://svnweb.freebsd.org/changeset/ports/416075

Log:
  emulators/qemu-devel: Update version 2.5.0=>2.6.1

Added:
  head/emulators/qemu-devel/files/patch-disas_libvixl_vixl_a64_disasm-a64.cc   (contents, props changed)
  head/emulators/qemu-devel/files/pcap-patch-net_net.c   (contents, props changed)
Deleted:
  head/emulators/qemu-devel/files/patch-disas_libvixl_a64_disasm-a64.cc
  head/emulators/qemu-devel/files/patch-include_qemu-common.h
Modified:
  head/emulators/qemu-devel/Makefile
  head/emulators/qemu-devel/distinfo
  head/emulators/qemu-devel/files/patch-Makefile
  head/emulators/qemu-devel/files/patch-configure
  head/emulators/qemu-devel/files/pcap-patch
  head/emulators/qemu-devel/pkg-plist

Modified: head/emulators/qemu-devel/Makefile
==============================================================================
--- head/emulators/qemu-devel/Makefile	Sat May 28 22:09:55 2016	(r416074)
+++ head/emulators/qemu-devel/Makefile	Sun May 29 00:24:29 2016	(r416075)
@@ -2,8 +2,7 @@
 # $FreeBSD$
 
 PORTNAME=	qemu
-DISTVERSION=	2.5.0
-PORTREVISION=	5
+DISTVERSION=	2.6.0
 CATEGORIES=	emulators
 MASTER_SITES=	http://wiki.qemu.org/download/
 PKGNAMESUFFIX=	-devel
@@ -16,8 +15,8 @@ LICENSE=	GPLv2
 HAS_CONFIGURE=	yes
 USES=		cpe gmake pkgconfig bison perl5 python:2,build tar:bzip2
 USE_PERL5=	build
-USE_XORG=	pixman
-USE_GNOME+=	glib20
+USE_XORG=	pixman x11 xext
+USE_GNOME+=	cairo gdkpixbuf2 glib20
 MAKE_ENV+=	BSD_MAKE="${MAKE}"
 ONLY_FOR_ARCHS=	amd64 i386 powerpc powerpc64 # XXX someone wants to debug sparc64 hosts?
 
@@ -59,7 +58,7 @@ USBREDIR_BUILD_DEPENDS=	usbredir>=0.6:ne
 USBREDIR_RUN_DEPENDS=	usbredir>=0.6:net/usbredir
 USBREDIR_CONFIGURE_OFF=	--disable-usb-redir
 PCAP_CONFIGURE_ON=	--enable-pcap
-PCAP_EXTRA_PATCHES=	${FILESDIR}/pcap-patch
+PCAP_EXTRA_PATCHES=	${FILESDIR}/pcap-patch ${FILESDIR}/pcap-patch-net_net.c
 STATIC_LINK_CONFIGURE_ON=	--static
 STATIC_LINK_PREVENTS=		GTK2 X11
 STATIC_LINK_PREVENTS_MSG=	X11 ui cannot be built static
@@ -79,6 +78,10 @@ CONFIGURE_ARGS+=--localstatedir=/var --e
 		--smbd=${LOCALBASE}/sbin/smbd --enable-debug-info --python=${PYTHON_CMD} \
 		--extra-cflags=-I${WRKSRC}\ -I${LOCALBASE}/include\ -DPREFIX=\\\"\"${PREFIX}\\\"\"
 
+LIB_DEPENDS+=	libnettle.so:security/nettle \
+		libfontconfig.so:x11-fonts/fontconfig \
+		libfreetype.so:print/freetype2
+
 .include <bsd.port.options.mk>
 
 .if !defined(STRIP) || ${STRIP} == ""

Modified: head/emulators/qemu-devel/distinfo
==============================================================================
--- head/emulators/qemu-devel/distinfo	Sat May 28 22:09:55 2016	(r416074)
+++ head/emulators/qemu-devel/distinfo	Sun May 29 00:24:29 2016	(r416075)
@@ -1,2 +1,3 @@
-SHA256 (qemu-2.5.0.tar.bz2) = 3443887401619fe33bfa5d900a4f2d6a79425ae2b7e43d5b8c36eb7a683772d4
-SIZE (qemu-2.5.0.tar.bz2) = 25464996
+TIMESTAMP = 1464473023
+SHA256 (qemu-2.6.0.tar.bz2) = c9ac4a651b273233d21b8bec32e30507cb9cce7900841febc330956a1a8434ec
+SIZE (qemu-2.6.0.tar.bz2) = 25755267

Modified: head/emulators/qemu-devel/files/patch-Makefile
==============================================================================
--- head/emulators/qemu-devel/files/patch-Makefile	Sat May 28 22:09:55 2016	(r416074)
+++ head/emulators/qemu-devel/files/patch-Makefile	Sun May 29 00:24:29 2016	(r416075)
@@ -1,6 +1,6 @@
---- Makefile.orig	2015-12-17 20:32:52 UTC
+--- Makefile.orig	2016-04-14 20:19:53 UTC
 +++ Makefile
-@@ -90,7 +90,11 @@
+@@ -90,7 +90,11 @@ LIBS+=-lz $(LIBS_TOOLS)
  HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)
  
  ifdef BUILD_DOCS
@@ -12,7 +12,7 @@
  DOCS+=qmp-commands.txt
  ifdef CONFIG_LINUX
  DOCS+=kvm_stat.1
-@@ -407,8 +411,10 @@
+@@ -410,8 +414,10 @@ endif
  
  install-doc: $(DOCS)
  	$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"

Modified: head/emulators/qemu-devel/files/patch-configure
==============================================================================
--- head/emulators/qemu-devel/files/patch-configure	Sat May 28 22:09:55 2016	(r416074)
+++ head/emulators/qemu-devel/files/patch-configure	Sun May 29 00:24:29 2016	(r416075)
@@ -1,6 +1,6 @@
---- configure.orig	2015-12-16 20:50:32 UTC
+--- configure.orig	2016-04-14 20:19:53 UTC
 +++ configure
-@@ -276,7 +276,7 @@ DSOSUF=".so"
+@@ -245,7 +245,7 @@ DSOSUF=".so"
  LDFLAGS_SHARED="-shared"
  modules="no"
  prefix="/usr/local"
@@ -9,7 +9,38 @@
  datadir="\${prefix}/share"
  qemu_docdir="\${prefix}/share/doc/qemu"
  bindir="\${prefix}/bin"
-@@ -2241,7 +2241,7 @@ if test "$gtk" != "no"; then
+@@ -316,6 +316,10 @@ virglrenderer=""
+ tpm="yes"
+ libssh2=""
+ vhdx=""
++quorum="no"
++pcap="no"
++pcap_create="no"
++bpf="no"
+ numa=""
+ tcmalloc="no"
+ jemalloc="no"
+@@ -575,7 +579,7 @@ FreeBSD)
+   audio_drv_list="oss"
+   audio_possible_drivers="oss sdl pa"
+   # needed for kinfo_getvmmap(3) in libutil.h
+-  LIBS="-lutil $LIBS"
++  LIBS="-lprocstat -lkvm -lelf -lutil $LIBS"
+   netmap=""  # enable netmap autodetect
+   HOST_VARIANT_DIR="freebsd"
+ ;;
+@@ -878,6 +882,10 @@ for opt do
+   ;;
+   --enable-vnc-png) vnc_png="yes"
+   ;;
++  --enable-pcap) pcap="yes"
++  ;;
++  --disable-pcap) pcap="no"
++  ;;
+   --disable-slirp) slirp="no"
+   ;;
+   --disable-uuid) uuid="no"
+@@ -2157,7 +2165,7 @@ if test "$gtk" != "no"; then
              gtk_cflags="$gtk_cflags $x11_cflags"
              gtk_libs="$gtk_libs $x11_libs"
          fi
@@ -18,7 +49,73 @@
          gtk="yes"
      elif test "$gtk" = "yes"; then
          feature_not_found "gtk" "Install gtk2 or gtk3 devel"
-@@ -3864,14 +3864,7 @@ fi
+@@ -2384,6 +2392,14 @@ if ! check_include "ifaddrs.h" ; then
+ fi
+ 
+ ##########################################
++# getifaddrs (for tests/test-io-channel-socket )
++
++have_ifaddrs_h=yes
++if ! check_include "ifaddrs.h" ; then
++  have_ifaddrs_h=no
++fi
++
++##########################################
+ # VTE probe
+ 
+ if test "$vte" != "no"; then
+@@ -2526,6 +2542,50 @@ EOF
+   fi
+ fi
+ 
++##########################################
++# pcap probe
++
++if test "$pcap" = "yes" -a "$pcap" != "no"; then
++  cat > $TMPC << EOF
++#include <pcap.h>
++int main(void) { return (pcap_lib_version() == (char *)0 ? 1 : 0); }
++EOF
++  if test "$mingw32" = "no" ; then
++    libpcap=-lpcap
++  else
++    libpcap=-lwpcap
++  fi
++  if compile_prog "" "$libpcap" ; then
++    :
++  else
++    echo
++    echo "Error: Could not find pcap"
++    echo "Make sure to have the pcap libs and headers installed."
++    echo
++    exit 1
++  fi
++  cat > $TMPC << EOF
++#include <pcap.h>
++int main(void)
++{
++  char errbuf[PCAP_ERRBUF_SIZE];
++  return (pcap_create("foo", errbuf) == (pcap_t *)0 ? 1 : 0);
++}
++EOF
++  if compile_prog "" "$libpcap" ; then
++    pcap_create="yes"
++  fi
++  cat > $TMPC << EOF
++#define PCAP_DONT_INCLUDE_PCAP_BPF_H
++#include <pcap.h>
++#include <net/bpf.h>
++int main(void) { return (BPF_MAJOR_VERSION); }
++EOF
++  if compile_prog ; then
++    bpf="yes"
++  fi
++  libs_softmmu="$libpcap $libs_softmmu"
++fi # test "$pcap"
+ 
+ ##########################################
+ # VNC SASL detection
+@@ -3857,14 +3917,7 @@ fi
  
  # Check if tools are available to build documentation.
  if test "$docs" != "no" ; then
@@ -33,7 +130,7 @@
  fi
  
  # Search for bswap_32 function
-@@ -3999,6 +3992,17 @@ fi
+@@ -3992,6 +4045,17 @@ fi
  
  # check for libusb
  if test "$libusb" != "no" ; then
@@ -51,7 +148,7 @@
      if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
          libusb="yes"
          libusb_cflags=$($pkg_config --cflags libusb-1.0)
-@@ -4011,6 +4015,7 @@ if test "$libusb" != "no" ; then
+@@ -4004,6 +4068,7 @@ if test "$libusb" != "no" ; then
          fi
          libusb="no"
      fi
@@ -59,3 +156,37 @@
  fi
  
  # check for usbredirparser for usb network redirection support
+@@ -4769,6 +4834,7 @@ echo "Audio drivers     $audio_drv_list"
+ echo "Block whitelist (rw) $block_drv_rw_whitelist"
+ echo "Block whitelist (ro) $block_drv_ro_whitelist"
+ echo "VirtFS support    $virtfs"
++echo "pcap support      $pcap"
+ echo "VNC support       $vnc"
+ if test "$vnc" = "yes" ; then
+     echo "VNC SASL support  $vnc_sasl"
+@@ -4950,6 +5016,15 @@ fi
+ if test "$profiler" = "yes" ; then
+   echo "CONFIG_PROFILER=y" >> $config_host_mak
+ fi
++if test "$pcap" = "yes" ; then
++  echo "CONFIG_PCAP=y" >> $config_host_mak
++  if test "$pcap_create" = "yes" ; then
++    echo "CONFIG_PCAP_CREATE=y" >> $config_host_mak
++  fi
++  if test "$bpf" = "yes" ; then
++    echo "CONFIG_BPF=y" >> $config_host_mak
++  fi
++fi
+ if test "$slirp" = "yes" ; then
+   echo "CONFIG_SLIRP=y" >> $config_host_mak
+   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
+@@ -5153,6 +5228,9 @@ fi
+ if test "$have_ifaddrs_h" = "yes" ; then
+     echo "HAVE_IFADDRS_H=y" >> $config_host_mak
+ fi
++if test "$have_ifaddrs_h" = "yes" ; then
++    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
++fi
+ if test "$vte" = "yes" ; then
+   echo "CONFIG_VTE=y" >> $config_host_mak
+   echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak

Added: head/emulators/qemu-devel/files/patch-disas_libvixl_vixl_a64_disasm-a64.cc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/emulators/qemu-devel/files/patch-disas_libvixl_vixl_a64_disasm-a64.cc	Sun May 29 00:24:29 2016	(r416075)
@@ -0,0 +1,11 @@
+--- disas/libvixl/vixl/a64/disasm-a64.cc.orig	2016-04-14 20:19:53 UTC
++++ disas/libvixl/vixl/a64/disasm-a64.cc
+@@ -2693,7 +2693,7 @@ void Disassembler::AppendPCRelativeOffse
+   if (offset < 0) {
+     abs_offset = -abs_offset;
+   }
+-  AppendToOutput("#%c0x%" PRIx64, sign, abs_offset);
++  AppendToOutput("#%c0x%" PRIx64, sign, offset < 0 ? -offset : offset);
+ }
+ 
+ 

Modified: head/emulators/qemu-devel/files/pcap-patch
==============================================================================
--- head/emulators/qemu-devel/files/pcap-patch	Sat May 28 22:09:55 2016	(r416074)
+++ head/emulators/qemu-devel/files/pcap-patch	Sun May 29 00:24:29 2016	(r416075)
@@ -1,150 +1,3 @@
-configure
---- configure	2015-12-17 04:04:48.000000000 +0600
-+++ configure	2015-12-25 01:32:09.000000000 +0600
-@@ -342,6 +342,10 @@
- tpm="yes"
- libssh2=""
- vhdx=""
-+quorum="no"
-+pcap="no"
-+pcap_create="no"
-+bpf="no"
- numa=""
- tcmalloc="no"
- jemalloc="no"
-@@ -602,7 +606,7 @@
-   audio_drv_list="oss"
-   audio_possible_drivers="oss sdl pa"
-   # needed for kinfo_getvmmap(3) in libutil.h
--  LIBS="-lutil $LIBS"
-+  LIBS="-lprocstat -lkvm -lelf -lutil $LIBS"
-   netmap=""  # enable netmap autodetect
-   HOST_VARIANT_DIR="freebsd"
- ;;
-@@ -905,6 +909,10 @@
-   ;;
-   --enable-vnc-png) vnc_png="yes"
-   ;;
-+  --enable-pcap) pcap="yes"
-+  ;;
-+  --disable-pcap) pcap="no"
-+  ;;
-   --disable-slirp) slirp="no"
-   ;;
-   --disable-uuid) uuid="no"
-@@ -2427,6 +2435,14 @@
- 
- 
- ##########################################
-+# getifaddrs (for tests/test-io-channel-socket )
-+
-+have_ifaddrs_h=yes
-+if ! check_include "ifaddrs.h" ; then
-+  have_ifaddrs_h=no
-+fi
-+
-+##########################################
- # VTE probe
- 
- if test "$vte" != "no"; then
-@@ -2569,6 +2585,50 @@
-   fi
- fi
- 
-+##########################################
-+# pcap probe
-+
-+if test "$pcap" = "yes" -a "$pcap" != "no"; then
-+  cat > $TMPC << EOF
-+#include <pcap.h>
-+int main(void) { return (pcap_lib_version() == (char *)0 ? 1 : 0); }
-+EOF
-+  if test "$mingw32" = "no" ; then
-+    libpcap=-lpcap
-+  else
-+    libpcap=-lwpcap
-+  fi
-+  if compile_prog "" "$libpcap" ; then
-+    :
-+  else
-+    echo
-+    echo "Error: Could not find pcap"
-+    echo "Make sure to have the pcap libs and headers installed."
-+    echo
-+    exit 1
-+  fi
-+  cat > $TMPC << EOF
-+#include <pcap.h>
-+int main(void)
-+{
-+  char errbuf[PCAP_ERRBUF_SIZE];
-+  return (pcap_create("foo", errbuf) == (pcap_t *)0 ? 1 : 0);
-+}
-+EOF
-+  if compile_prog "" "$libpcap" ; then
-+    pcap_create="yes"
-+  fi
-+  cat > $TMPC << EOF
-+#define PCAP_DONT_INCLUDE_PCAP_BPF_H
-+#include <pcap.h>
-+#include <net/bpf.h>
-+int main(void) { return (BPF_MAJOR_VERSION); }
-+EOF
-+  if compile_prog ; then
-+    bpf="yes"
-+  fi
-+  libs_softmmu="$libpcap $libs_softmmu"
-+fi # test "$pcap"
- 
- ##########################################
- # VNC SASL detection
-@@ -4758,7 +4833,11 @@
- echo "GNUTLS support    $gnutls"
- echo "GNUTLS hash       $gnutls_hash"
- echo "libgcrypt         $gcrypt"
--echo "nettle            $nettle ${nettle+($nettle_version)}"
-+if test "$nettle" = "yes"; then
-+    echo "nettle            $nettle ($nettle_version)"
-+else
-+    echo "nettle            $nettle"
-+fi
- echo "libtasn1          $tasn1"
- echo "VTE support       $vte"
- echo "curses support    $curses"
-@@ -4769,6 +4848,7 @@
- echo "Block whitelist (rw) $block_drv_rw_whitelist"
- echo "Block whitelist (ro) $block_drv_ro_whitelist"
- echo "VirtFS support    $virtfs"
-+echo "pcap support      $pcap"
- echo "VNC support       $vnc"
- if test "$vnc" = "yes" ; then
-     echo "VNC SASL support  $vnc_sasl"
-@@ -4947,6 +5027,15 @@
- if test "$profiler" = "yes" ; then
-   echo "CONFIG_PROFILER=y" >> $config_host_mak
- fi
-+if test "$pcap" = "yes" ; then
-+  echo "CONFIG_PCAP=y" >> $config_host_mak
-+  if test "$pcap_create" = "yes" ; then
-+    echo "CONFIG_PCAP_CREATE=y" >> $config_host_mak
-+  fi
-+  if test "$bpf" = "yes" ; then
-+    echo "CONFIG_BPF=y" >> $config_host_mak
-+  fi
-+fi
- if test "$slirp" = "yes" ; then
-   echo "CONFIG_SLIRP=y" >> $config_host_mak
-   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
-@@ -5137,6 +5226,9 @@
- if test "$tasn1" = "yes" ; then
-   echo "CONFIG_TASN1=y" >> $config_host_mak
- fi
-+if test "$have_ifaddrs_h" = "yes" ; then
-+    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
-+fi
- if test "$vte" = "yes" ; then
-   echo "CONFIG_VTE=y" >> $config_host_mak
-   echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
 diff -ruN net/clients.h net/clients.h
 --- net/clients.h	2015-12-17 04:04:50.000000000 +0600
 +++ net/clients.h	2015-12-25 01:32:09.000000000 +0600
@@ -171,257 +24,6 @@ diff -ruN net/hub.c net/hub.c
                  has_host_dev = 1;
                  break;
              default:
-diff -ruN net/net.c net/net.c
---- net/net.c	2015-12-17 04:04:50.000000000 +0600
-+++ net/net.c	2015-12-25 01:32:09.000000000 +0600
-@@ -46,6 +46,11 @@
- #include "sysemu/sysemu.h"
- #include "net/filter.h"
- 
-+#include <sys/ioctl.h>
-+#ifdef __FreeBSD__
-+#include <net/if.h>
-+#endif
-+
- /* Net bridge is currently not supported for W32. */
- #if !defined(_WIN32)
- # define CONFIG_NET_BRIDGE
-@@ -942,8 +947,224 @@
-     return idx;
- }
- 
-+#if defined(CONFIG_PCAP)
-+#if defined(CONFIG_BPF)
-+#define PCAP_DONT_INCLUDE_PCAP_BPF_H
-+#include <net/bpf.h>
-+#endif
-+#include <pcap.h>
-+
-+struct PCAPState {
-+    NetClientState     nc;
-+    pcap_t            *handle;
-+    int                max_eth_frame_size;
-+};
-+
-+static ssize_t pcap_receive(NetClientState *nc, const uint8_t *buf, size_t size)
-+{
-+    struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
-+
-+    return pcap_inject(s->handle, (u_char*)buf, size);
-+}
-+
-+static void pcap_callback(u_char *user, struct pcap_pkthdr *phdr, u_char *pdata
-+		)
-+{
-+    NetClientState *nc = (NetClientState *)user;
-+
-+    int len = phdr->len;
-+#ifdef __FreeBSD__
-+    struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
-+    int max_eth_frame_size = s->max_eth_frame_size;
-+
-+    if (len > max_eth_frame_size) {
-+        fprintf(stderr,
-+            "pcap_send: packet size > %d (%d), truncating\n",
-+            max_eth_frame_size, len);
-+        len = max_eth_frame_size;
-+    }
-+#endif
-+    qemu_send_packet(nc, pdata, len);
-+}
-+
-+static void pcap_send(void *opaque)
-+{
-+    struct PCAPState *s = (struct PCAPState *)opaque;
-+
-+    for (;;) {
-+        if (pcap_dispatch(s->handle, 0, (pcap_handler)&pcap_callback, (u_char *)&s->nc) >= 0)
-+            break;
-+    }
-+}
-+
-+static void pcap_cleanup(NetClientState *nc)
-+{
-+    struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
-+
-+    qemu_purge_queued_packets(nc);
-+    pcap_close(s->handle);
-+}
-+
-+static NetClientInfo net_pcap_info = {
-+    .type = NET_CLIENT_OPTIONS_KIND_PCAP,
-+    .size = sizeof(struct PCAPState),
-+    .receive = pcap_receive,
-+//    .receive_raw = pcap_receive_raw,
-+//    .receive_iov = pcap_receive_iov,
-+//    .poll = pcap_poll,
-+    .cleanup = pcap_cleanup,
-+};
-+/*
-+ * ... -net pcap,ifname="..."
-+ */
-+
-+int net_init_pcap(const NetClientOptions *opts,
-+    const char *name, NetClientState *peer, Error **errp)
-+{
-+    const NetdevPcapOptions *pcap_opts = opts->u.pcap;
-+    NetClientState *nc;
-+    struct PCAPState *s;
-+    const char *ifname;
-+    char errbuf[PCAP_ERRBUF_SIZE];
-+#if defined(_WIN32)
-+    HANDLE h;
-+#endif
-+    int i;
-+
-+    if (!pcap_opts->has_ifname)
-+        return -1;
-+
-+    ifname = pcap_opts->ifname;
-+
-+    /* create the object */
-+    nc = qemu_new_net_client(&net_pcap_info, peer, "pcap", ifname);
-+    s = DO_UPCAST(struct PCAPState, nc, nc);
-+
-+    if (ifname == NULL && (ifname = pcap_lookupdev(errbuf)) == NULL) {
-+        fprintf(stderr, "qemu: pcap_create: %s\n", errbuf);
-+        goto fail;
-+    }
-+
-+#ifdef __FreeBSD__
-+    /*
-+     * We want to avoid passing oversize packets to the guest, which
-+     * at least on FreeBSD can happen if the host interface uses tso
-+     * (seen with an em(4) in this case) - so find out the host
-+     * interface's mtu and assume the guest is configured the same.
-+     */
-+    s->max_eth_frame_size = 1514;
-+    i = socket(AF_INET, SOCK_DGRAM, 0);
-+    if (i >= 0) {
-+        struct ifreq ifr;
-+
-+        (void) memset(&ifr, 0, sizeof(ifr));
-+        strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
-+        if (ioctl(i, SIOCGIFMTU, &ifr) != -1)
-+            s->max_eth_frame_size = ifr.ifr_mtu + 14;
-+        close(i);
-+    }
-+#endif
-+
-+#if defined(CONFIG_PCAP_CREATE) || defined(_WIN32)
-+    /*
-+     * Create pcap handle for the device, set promiscuous mode and activate.
-+     */
-+    s->handle = (void *)pcap_create(ifname, errbuf);
-+    if (!s->handle) {
-+        fprintf(stderr, "qemu: pcap_create: %s\n", errbuf);
-+        goto fail;
-+    }
-+    if (pcap_set_promisc(s->handle, 1) != 0) {
-+        pcap_perror(s->handle, (char *)"qemu: pcap_set_promisc:");
-+        goto fail;
-+    }
-+    if (pcap_activate(s->handle) != 0) {
-+        pcap_perror(s->handle, (char *)"qemu: pcap_activate:");
-+        goto fail;
-+    }
-+#else
-+    /* Attempt to connect device. */
-+    s->handle = (void *)pcap_open_live(ifname, 65535, 1, 0, errbuf);
-+    if (!s->handle) {
-+        fprintf(stderr, "qemu: pcap_open_live: %s\n", errbuf);
-+        goto fail;
-+    }
-+#endif
-+
-+    /* Set non-blocking mode. */
-+    if (pcap_setnonblock(s->handle, 1, errbuf) < 0) {
-+        fprintf(stderr, "qemu: pcap_setnonblock: %s\n", errbuf);
-+        goto fail;
-+    }
-+
-+#if defined(_WIN32)
-+    /*
-+     * Tell the kernel that the packet has to be seen immediately.
-+     */
-+    if (pcap_setmintocopy(s->handle, 0) < 0) {
-+        fprintf(stderr, "qemu: pcap failed to set immediate mode\n");
-+        goto fail;
-+    }
-+#else /* !_WIN32 */
-+#if defined(CONFIG_BPF)
-+#if defined(BIOCIMMEDIATE)
-+    /*
-+     * Tell the kernel that the packet has to be seen immediately.
-+     */
-+    {
-+        unsigned int one = 1;
-+        if (ioctl(pcap_fileno(s->handle), BIOCIMMEDIATE, &one) < 0) {
-+            fprintf(stderr, "qemu: pcap failed to set immediate mode\n");
-+            goto fail;
-+        }
-+    }
-+#endif /* BIOCIMMEDIATE */
-+#if defined(BIOCFEEDBACK)
-+    /*
-+     * Tell the kernel that the sent packet has to be fed back.
-+     * This is necessary to connect host and guest.
-+     */
-+    {
-+        unsigned int one = 1;
-+        if (ioctl(pcap_fileno(s->handle), BIOCFEEDBACK, &one) < 0) {
-+            fprintf(stderr, "qemu: pcap failed to set feedback mode\n");
-+            goto fail;
-+        }
-+    }
-+#endif /* BIOCFEEDBACK */
-+#endif /* CONFIG_BPF */
-+#endif /* _WIN32 */
-+
-+    snprintf(s->nc.info_str, sizeof(s->nc.info_str), "pcap redirector");
-+
-+#if defined(_WIN32)
-+    if ((h = pcap_getevent(s->handle)) == NULL) {
-+        fprintf(stderr, "qemu: pcap_getevent failed\n");
-+        goto fail;
-+    }
-+    qemu_add_wait_object(h, pcap_send, s);
-+#else /* !_WIN32 */
-+    if ((i = pcap_get_selectable_fd(s->handle)) < 0) {
-+        fprintf(stderr, "qemu: pcap_get_selectable_fd failed\n");
-+        goto fail;
-+    }
-+    qemu_set_fd_handler(i, pcap_send, NULL, s);
-+#endif /* _WIN32 */
-+
-+    return 0;
-+
-+fail:
-+    if (s) {
-+        if (s->handle)
-+            pcap_close(s->handle);
-+    }
-+
-+    return -1;
-+}
-+
-+#endif
- 
--static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND_MAX])(
-+static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND_MAX])(
-     const NetClientOptions *opts,
-     const char *name,
-     NetClientState *peer, Error **errp) = {
-@@ -963,6 +1184,9 @@
- #ifdef CONFIG_NET_BRIDGE
-         [NET_CLIENT_OPTIONS_KIND_BRIDGE]    = net_init_bridge,
- #endif
-+#ifdef CONFIG_PCAP
-+	[NET_CLIENT_OPTIONS_KIND_PCAP]      = net_init_pcap,
-+#endif
-         [NET_CLIENT_OPTIONS_KIND_HUBPORT]   = net_init_hubport,
- #ifdef CONFIG_VHOST_NET_USED
-         [NET_CLIENT_OPTIONS_KIND_VHOST_USER] = net_init_vhost_user,
 diff -ruN qapi-schema.json qapi-schema.json
 --- qapi-schema.json	2015-12-17 04:04:50.000000000 +0600
 +++ qapi-schema.json	2015-12-25 01:32:09.000000000 +0600

Added: head/emulators/qemu-devel/files/pcap-patch-net_net.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/emulators/qemu-devel/files/pcap-patch-net_net.c	Sun May 29 00:24:29 2016	(r416075)
@@ -0,0 +1,248 @@
+--- net/net.c.orig	2016-04-14 20:19:54 UTC
++++ net/net.c
+@@ -48,6 +48,11 @@
+ #include "net/filter.h"
+ #include "qapi/string-output-visitor.h"
+ 
++#include <sys/ioctl.h>
++#ifdef __FreeBSD__
++#include <net/if.h>
++#endif
++
+ /* Net bridge is currently not supported for W32. */
+ #if !defined(_WIN32)
+ # define CONFIG_NET_BRIDGE
+@@ -931,7 +936,223 @@ static int net_init_nic(const NetClientO
+     return idx;
+ }
+ 
++#if defined(CONFIG_PCAP)
++#if defined(CONFIG_BPF)
++#define PCAP_DONT_INCLUDE_PCAP_BPF_H
++#include <net/bpf.h>
++#endif
++#include <pcap.h>
++
++struct PCAPState {
++    NetClientState     nc;
++    pcap_t            *handle;
++    int                max_eth_frame_size;
++};
++
++static ssize_t pcap_receive(NetClientState *nc, const uint8_t *buf, size_t size)
++{
++    struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
++
++    return pcap_inject(s->handle, (u_char*)buf, size);
++}
++
++static void pcap_callback(u_char *user, struct pcap_pkthdr *phdr, u_char *pdata
++		)
++{
++    NetClientState *nc = (NetClientState *)user;
++
++    int len = phdr->len;
++#ifdef __FreeBSD__
++    struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
++    int max_eth_frame_size = s->max_eth_frame_size;
++
++    if (len > max_eth_frame_size) {
++        fprintf(stderr,
++            "pcap_send: packet size > %d (%d), truncating\n",
++            max_eth_frame_size, len);
++        len = max_eth_frame_size;
++    }
++#endif
++    qemu_send_packet(nc, pdata, len);
++}
++
++static void pcap_send(void *opaque)
++{
++    struct PCAPState *s = (struct PCAPState *)opaque;
++
++    for (;;) {
++        if (pcap_dispatch(s->handle, 0, (pcap_handler)&pcap_callback, (u_char *)&s->nc) >= 0)
++            break;
++    }
++}
++
++static void pcap_cleanup(NetClientState *nc)
++{
++    struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
++
++    qemu_purge_queued_packets(nc);
++    pcap_close(s->handle);
++}
++
++static NetClientInfo net_pcap_info = {
++    .type = NET_CLIENT_OPTIONS_KIND_PCAP,
++    .size = sizeof(struct PCAPState),
++    .receive = pcap_receive,
++//    .receive_raw = pcap_receive_raw,
++//    .receive_iov = pcap_receive_iov,
++//    .poll = pcap_poll,
++    .cleanup = pcap_cleanup,
++};
++/*
++ * ... -net pcap,ifname="..."
++ */
++
++int net_init_pcap(const NetClientOptions *opts,
++    const char *name, NetClientState *peer, Error **errp)
++{
++    const NetdevPcapOptions *pcap_opts = opts->u.pcap.data;
++    NetClientState *nc;
++    struct PCAPState *s;
++    const char *ifname;
++    char errbuf[PCAP_ERRBUF_SIZE];
++#if defined(_WIN32)
++    HANDLE h;
++#endif
++    int i;
++
++    if (!pcap_opts->has_ifname)
++        return -1;
++
++    ifname = pcap_opts->ifname;
++
++    /* create the object */
++    nc = qemu_new_net_client(&net_pcap_info, peer, "pcap", ifname);
++    s = DO_UPCAST(struct PCAPState, nc, nc);
++
++    if (ifname == NULL && (ifname = pcap_lookupdev(errbuf)) == NULL) {
++        fprintf(stderr, "qemu: pcap_create: %s\n", errbuf);
++        goto fail;
++    }
+ 
++#ifdef __FreeBSD__
++    /*
++     * We want to avoid passing oversize packets to the guest, which
++     * at least on FreeBSD can happen if the host interface uses tso
++     * (seen with an em(4) in this case) - so find out the host
++     * interface's mtu and assume the guest is configured the same.
++     */
++    s->max_eth_frame_size = 1514;
++    i = socket(AF_INET, SOCK_DGRAM, 0);
++    if (i >= 0) {
++        struct ifreq ifr;
++
++        (void) memset(&ifr, 0, sizeof(ifr));
++        strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
++        if (ioctl(i, SIOCGIFMTU, &ifr) != -1)
++            s->max_eth_frame_size = ifr.ifr_mtu + 14;
++        close(i);
++    }
++#endif
++
++#if defined(CONFIG_PCAP_CREATE) || defined(_WIN32)
++    /*
++     * Create pcap handle for the device, set promiscuous mode and activate.
++     */
++    s->handle = (void *)pcap_create(ifname, errbuf);
++    if (!s->handle) {
++        fprintf(stderr, "qemu: pcap_create: %s\n", errbuf);
++        goto fail;
++    }
++    if (pcap_set_promisc(s->handle, 1) != 0) {
++        pcap_perror(s->handle, (char *)"qemu: pcap_set_promisc:");
++        goto fail;
++    }
++    if (pcap_activate(s->handle) != 0) {
++        pcap_perror(s->handle, (char *)"qemu: pcap_activate:");
++        goto fail;
++    }
++#else
++    /* Attempt to connect device. */
++    s->handle = (void *)pcap_open_live(ifname, 65535, 1, 0, errbuf);
++    if (!s->handle) {
++        fprintf(stderr, "qemu: pcap_open_live: %s\n", errbuf);
++        goto fail;
++    }
++#endif
++
++    /* Set non-blocking mode. */
++    if (pcap_setnonblock(s->handle, 1, errbuf) < 0) {
++        fprintf(stderr, "qemu: pcap_setnonblock: %s\n", errbuf);
++        goto fail;
++    }
++
++#if defined(_WIN32)
++    /*
++     * Tell the kernel that the packet has to be seen immediately.
++     */
++    if (pcap_setmintocopy(s->handle, 0) < 0) {
++        fprintf(stderr, "qemu: pcap failed to set immediate mode\n");
++        goto fail;
++    }
++#else /* !_WIN32 */
++#if defined(CONFIG_BPF)
++#if defined(BIOCIMMEDIATE)
++    /*
++     * Tell the kernel that the packet has to be seen immediately.
++     */
++    {
++        unsigned int one = 1;
++        if (ioctl(pcap_fileno(s->handle), BIOCIMMEDIATE, &one) < 0) {
++            fprintf(stderr, "qemu: pcap failed to set immediate mode\n");
++            goto fail;
++        }
++    }
++#endif /* BIOCIMMEDIATE */
++#if defined(BIOCFEEDBACK)
++    /*
++     * Tell the kernel that the sent packet has to be fed back.
++     * This is necessary to connect host and guest.
++     */
++    {
++        unsigned int one = 1;
++        if (ioctl(pcap_fileno(s->handle), BIOCFEEDBACK, &one) < 0) {
++            fprintf(stderr, "qemu: pcap failed to set feedback mode\n");
++            goto fail;
++        }
++    }
++#endif /* BIOCFEEDBACK */
++#endif /* CONFIG_BPF */
++#endif /* _WIN32 */
++
++    snprintf(s->nc.info_str, sizeof(s->nc.info_str), "pcap redirector");
++
++#if defined(_WIN32)
++    if ((h = pcap_getevent(s->handle)) == NULL) {
++        fprintf(stderr, "qemu: pcap_getevent failed\n");
++        goto fail;
++    }
++    qemu_add_wait_object(h, pcap_send, s);
++#else /* !_WIN32 */
++    if ((i = pcap_get_selectable_fd(s->handle)) < 0) {
++        fprintf(stderr, "qemu: pcap_get_selectable_fd failed\n");
++        goto fail;
++    }
++    qemu_set_fd_handler(i, pcap_send, NULL, s);
++#endif /* _WIN32 */
++
++    return 0;
++
++fail:
++    if (s) {
++        if (s->handle)
++            pcap_close(s->handle);
++    }
++
++    return -1;
++}
++
++#endif
++ 
+ static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND__MAX])(
+     const NetClientOptions *opts,
+     const char *name,
+@@ -952,6 +1172,9 @@ static int (* const net_client_init_fun[
+ #ifdef CONFIG_NET_BRIDGE
+         [NET_CLIENT_OPTIONS_KIND_BRIDGE]    = net_init_bridge,
+ #endif
++#ifdef CONFIG_PCAP
++	[NET_CLIENT_OPTIONS_KIND_PCAP]      = net_init_pcap,
++#endif
+         [NET_CLIENT_OPTIONS_KIND_HUBPORT]   = net_init_hubport,
+ #ifdef CONFIG_VHOST_NET_USED
+         [NET_CLIENT_OPTIONS_KIND_VHOST_USER] = net_init_vhost_user,

Modified: head/emulators/qemu-devel/pkg-plist
==============================================================================
--- head/emulators/qemu-devel/pkg-plist	Sat May 28 22:09:55 2016	(r416074)
+++ head/emulators/qemu-devel/pkg-plist	Sun May 29 00:24:29 2016	(r416075)
@@ -45,7 +45,6 @@ man/man8/qemu-nbd.8.gz
 %%DATADIR%%/QEMU,tcx.bin
 %%DATADIR%%/QEMU,cgthree.bin
 %%DATADIR%%/acpi-dsdt.aml
-%%DATADIR%%/q35-acpi-dsdt.aml
 %%DATADIR%%/bios-256k.bin
 %%DATADIR%%/bios.bin
 %%DATADIR%%/efi-e1000.rom
@@ -54,7 +53,6 @@ man/man8/qemu-nbd.8.gz
 %%DATADIR%%/efi-pcnet.rom
 %%DATADIR%%/efi-rtl8139.rom
 %%DATADIR%%/efi-virtio.rom
-%%DATADIR%%/s390-ccw.img
 %%DATADIR%%/vgabios.bin
 %%DATADIR%%/vgabios-cirrus.bin
 %%DATADIR%%/vgabios-qxl.bin
@@ -75,7 +73,7 @@ man/man8/qemu-nbd.8.gz
 %%DATADIR%%/petalogix-ml605.dtb
 %%DATADIR%%/spapr-rtas.bin
 %%DATADIR%%/slof.bin
-%%DATADIR%%/s390-zipl.rom
+%%DATADIR%%/s390-ccw.img
 %%DATADIR%%/linuxboot.bin
 %%DATADIR%%/multiboot.bin
 %%DATADIR%%/sgabios.bin


More information about the svn-ports-head mailing list