aboutsummaryrefslogtreecommitdiffstats
path: root/emulators
diff options
context:
space:
mode:
Diffstat (limited to 'emulators')
-rw-r--r--emulators/qemu-devel/Makefile13
-rw-r--r--emulators/qemu-devel/distinfo5
-rw-r--r--emulators/qemu-devel/files/patch-Makefile6
-rw-r--r--emulators/qemu-devel/files/patch-configure143
-rw-r--r--emulators/qemu-devel/files/patch-disas_libvixl_a64_disasm-a64.cc11
-rw-r--r--emulators/qemu-devel/files/patch-disas_libvixl_vixl_a64_disasm-a64.cc11
-rw-r--r--emulators/qemu-devel/files/patch-include_qemu-common.h12
-rw-r--r--emulators/qemu-devel/files/pcap-patch398
-rw-r--r--emulators/qemu-devel/files/pcap-patch-net_net.c248
-rw-r--r--emulators/qemu-devel/pkg-plist4
10 files changed, 411 insertions, 440 deletions
diff --git a/emulators/qemu-devel/Makefile b/emulators/qemu-devel/Makefile
index a6617e1e6741..559a057ecb27 100644
--- a/emulators/qemu-devel/Makefile
+++ b/emulators/qemu-devel/Makefile
@@ -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:net/usbredir
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 --extra-ldflags=-L\"${LOCALBASE}/lib\" \
--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} == ""
diff --git a/emulators/qemu-devel/distinfo b/emulators/qemu-devel/distinfo
index 33dd6f7bfc40..481a353cda72 100644
--- a/emulators/qemu-devel/distinfo
+++ b/emulators/qemu-devel/distinfo
@@ -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
diff --git a/emulators/qemu-devel/files/patch-Makefile b/emulators/qemu-devel/files/patch-Makefile
index d328b46686cd..6666e3e63d91 100644
--- a/emulators/qemu-devel/files/patch-Makefile
+++ b/emulators/qemu-devel/files/patch-Makefile
@@ -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)"
diff --git a/emulators/qemu-devel/files/patch-configure b/emulators/qemu-devel/files/patch-configure
index bd8305a19a7e..40a964f3df4e 100644
--- a/emulators/qemu-devel/files/patch-configure
+++ b/emulators/qemu-devel/files/patch-configure
@@ -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
diff --git a/emulators/qemu-devel/files/patch-disas_libvixl_a64_disasm-a64.cc b/emulators/qemu-devel/files/patch-disas_libvixl_a64_disasm-a64.cc
deleted file mode 100644
index 3544f6d34501..000000000000
--- a/emulators/qemu-devel/files/patch-disas_libvixl_a64_disasm-a64.cc
+++ /dev/null
@@ -1,11 +0,0 @@
---- disas/libvixl/a64/disasm-a64.cc.orig 2015-11-03 20:01:31 UTC
-+++ disas/libvixl/a64/disasm-a64.cc
-@@ -1362,7 +1362,7 @@ void Disassembler::AppendPCRelativeOffse
- int64_t offset) {
- USE(instr);
- char sign = (offset < 0) ? '-' : '+';
-- AppendToOutput("#%c0x%" PRIx64, sign, std::abs(offset));
-+ AppendToOutput("#%c0x%" PRIx64, sign, offset < 0 ? -offset : offset);
- }
-
-
diff --git a/emulators/qemu-devel/files/patch-disas_libvixl_vixl_a64_disasm-a64.cc b/emulators/qemu-devel/files/patch-disas_libvixl_vixl_a64_disasm-a64.cc
new file mode 100644
index 000000000000..4e88b6b4a362
--- /dev/null
+++ b/emulators/qemu-devel/files/patch-disas_libvixl_vixl_a64_disasm-a64.cc
@@ -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);
+ }
+
+
diff --git a/emulators/qemu-devel/files/patch-include_qemu-common.h b/emulators/qemu-devel/files/patch-include_qemu-common.h
deleted file mode 100644
index 035105bf95d3..000000000000
--- a/emulators/qemu-devel/files/patch-include_qemu-common.h
+++ /dev/null
@@ -1,12 +0,0 @@
---- include/qemu-common.h.orig 2015-11-03 20:01:34 UTC
-+++ include/qemu-common.h
-@@ -469,7 +469,9 @@ void qemu_hexdump(const char *buf, FILE
- #define VEC_OR(v1, v2) ((v1) | (v2))
- /* altivec.h may redefine the bool macro as vector type.
- * Reset it to POSIX semantics. */
-+#ifndef __cplusplus
- #define bool _Bool
-+#endif
- #elif defined __SSE2__
- #include <emmintrin.h>
- #define VECTYPE __m128i
diff --git a/emulators/qemu-devel/files/pcap-patch b/emulators/qemu-devel/files/pcap-patch
index 0c798e5b1ca5..c8b3c9d00689 100644
--- a/emulators/qemu-devel/files/pcap-patch
+++ b/emulators/qemu-devel/files/pcap-patch
@@ -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
diff --git a/emulators/qemu-devel/files/pcap-patch-net_net.c b/emulators/qemu-devel/files/pcap-patch-net_net.c
new file mode 100644
index 000000000000..735ae04776d7
--- /dev/null
+++ b/emulators/qemu-devel/files/pcap-patch-net_net.c
@@ -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,
diff --git a/emulators/qemu-devel/pkg-plist b/emulators/qemu-devel/pkg-plist
index 200aa0cb95d3..3c2a40c70542 100644
--- a/emulators/qemu-devel/pkg-plist
+++ b/emulators/qemu-devel/pkg-plist
@@ -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