Index: head/emulators/qemu/Makefile =================================================================== --- head/emulators/qemu/Makefile (revision 475079) +++ head/emulators/qemu/Makefile (revision 475080) @@ -1,181 +1,180 @@ # Created by: Juergen Lock # $FreeBSD$ PORTNAME= qemu -PORTVERSION= 2.9.0 -PORTREVISION= 1 +PORTVERSION= 2.12.0 CATEGORIES= emulators MASTER_SITES= http://wiki.qemu.org/download/ DIST_SUBDIR= qemu/${PORTVERSION} MAINTAINER?= bofh@FreeBSD.org COMMENT?= QEMU CPU Emulator LICENSE= GPLv2 +BROKEN_powerpc64= fails to compile: In function aio_bh_poll: internal compiler error: Segmentation fault + LIB_DEPENDS?= libnettle.so:security/nettle \ libfontconfig.so:x11-fonts/fontconfig \ libfreetype.so:print/freetype2 HAS_CONFIGURE= yes USES?= cpe gmake pkgconfig bison perl5 python:2.7,build tar:bzip2 USE_PERL5= build MAKE_ENV+= BSD_MAKE="${MAKE}" V=1 .if !defined(PKGNAMESUFFIX) || ${PKGNAMESUFFIX} != "-utils" USE_XORG= pixman -USE_GNOME+= cairo glib20 -ONLY_FOR_ARCHS= amd64 i386 powerpc powerpc64 # XXX someone wants to debug sparc64 hosts? +USE_GNOME+= cairo glib20 libxml2 +ONLY_FOR_ARCHS= amd64 i386 powerpc powerpc64 .endif -BROKEN_powerpc64= fails to compile: In function aio_bh_poll: internal compiler error: Segmentation fault - OPTIONS_DEFINE= SAMBA X11 GTK2 OPENGL GNUTLS SASL JPEG PNG CURL \ VDE CDROM_DMA PCAP USBREDIR GNS3 X86_TARGETS \ STATIC_LINK DOCS NCURSES SAMBA_DESC= samba dependency (for -smb) GNUTLS_DESC= gnutls dependency (vnc encryption) SASL_DESC= cyrus-sasl dependency (vnc encryption) JPEG_DESC= jpeg dependency (vnc lossy compression) PNG_DESC= png dependency (vnc compression) CDROM_DMA_DESC= IDE CDROM DMA PCAP_DESC= pcap dependency (networking with bpf) USBREDIR_DESC= usb device network redirection (experimental!) GNS3_DESC= gns3 patches (promiscuous multicast) X86_TARGETS_DESC= Build only x86 system targets STATIC_LINK_DESC= Statically link the executables VDE_DESC= vde dependency (for vde networking) OPTIONS_DEFAULT=X11 GTK2 OPENGL GNUTLS SASL JPEG PNG CDROM_DMA CURL PCAP GNS3 NCURSES VDE OPTIONS_SUB= yes X11_USE= SDL=sdl XORG=x11,xext GNOME=gdkpixbuf2 X11_CONFIGURE_ENABLE= sdl GTK2_USE= GNOME=gtk20,vte,gdkpixbuf2 XORG=x11,xext GTK2_USES= gettext GTK2_CONFIGURE_OFF= --disable-gtk --disable-vte GNUTLS_LIB_DEPENDS= libgnutls.so:security/gnutls GNUTLS_CONFIGURE_OFF= --disable-gnutls SASL_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2 SASL_CONFIGURE_OFF= --disable-vnc-sasl JPEG_USES= jpeg JPEG_CONFIGURE_OFF= --disable-vnc-jpeg PNG_LIB_DEPENDS= libpng.so:graphics/png PNG_CONFIGURE_OFF= --disable-vnc-png CURL_LIB_DEPENDS= libcurl.so:ftp/curl CURL_CONFIGURE_OFF= --disable-curl OPENGL_USE= GL=yes OPENGL_CONFIGURE_OFF= --disable-opengl 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 ${FILESDIR}/pcap-patch-net_net.c \ ${FILESDIR}/pcap-patch-net_clients.h VDE_LIB_DEPENDS= libvdeplug.so:net/vde2 VDE_CONFIGURE_OFF= --disable-vde STATIC_LINK_CONFIGURE_ON= --static STATIC_LINK_PREVENTS= GTK2 X11 STATIC_LINK_PREVENTS_MSG= X11 ui cannot be built static NCURSES_USES= ncurses:base SAMBA_USES= samba:run # smbd SAMBA_CONFIGURE_ON= --smbd=${LOCALBASE}/sbin/smbd DOCS_BUILD_DEPENDS= texi2html:textproc/texi2html DOCS_USES= makeinfo DOCS_MAKE_ARGS_OFF= NOPORTDOCS=1 PORTDOCS?= docs qemu-doc.html qemu-doc.txt qemu-ga-ref.html qemu-ga-ref.txt \ qemu-qmp-ref.html qemu-qmp-ref.txt WITHOUT_CPU_CFLAGS=yes #to avoid problems with register allocation CFLAGS:= ${CFLAGS:C/-fno-tree-vrp//} CONFIGURE_ARGS?=--localstatedir=/var --extra-ldflags=-L\"/usr/lib\" \ --extra-ldflags=-L\"${LOCALBASE}/lib\" --disable-libssh2 --enable-debug \ --prefix=${PREFIX} --cc=${CC} --enable-docs --disable-kvm \ --disable-linux-user --disable-linux-aio --disable-xen \ --enable-debug-info --python=${PYTHON_CMD} \ --extra-cflags=-I${WRKSRC}\ -I${LOCALBASE}/include\ -DPREFIX=\\\"\"${PREFIX}\\\"\" +MAKE_JOBS_UNSAFE=yes .include .if !defined(STRIP) || ${STRIP} == "" CONFIGURE_ARGS+=--disable-strip .endif .if ${ARCH} == "amd64" MAKE_ARGS+= ARCH=x86_64 .endif .if ${ARCH} == "powerpc" MAKE_ARGS+= ARCH=ppc .endif .if ${ARCH} == "powerpc64" MAKE_ARGS+= ARCH=ppc64 .endif .if ${ARCH} == "sparc64" CONFIGURE_ARGS+= --sparc_cpu=v9 .endif # clang in freebsd 10 is unable to assemble linuxboot_dma.bin .if (${OSVERSION} < 1100000) PLIST_SUB+= LINUXBOOT_DMA="@comment " .else PLIST_SUB+= LINUXBOOT_DMA="" .endif # -lprocstat actually only _needs_ -lelf after r249666 or r250870 (MFC) # but it shouldn't matter much post-patch: @${REINPLACE_CMD} -e '/LIBS/s|-lprocstat|-lprocstat -lelf|' \ -e '/libusb/s/ --atleast-version=1\.0\.[0-9]*//' \ ${WRKSRC}/configure @${REINPLACE_CMD} -e '/libs_qga=/s|glib_libs|glib_libs -lintl|' ${WRKSRC}/configure @${REINPLACE_CMD} -E \ -e "/^by Tibor .TS. S/s|Sch.*z.$$|Schuetz.|" \ ${WRKSRC}/qemu-doc.texi @${REINPLACE_CMD} -E \ -e "s|^(CFLAGS=).*|\1${CFLAGS} -fno-strict-aliasing|" \ -e "s|^(LDFLAGS=).*|\1${LDFLAGS}|" \ ${WRKSRC}/Makefile.target @${REINPLACE_CMD} -E \ -e "s|^(CFLAGS=).*|\1${CFLAGS} -fno-strict-aliasing -I.|" \ -e "s|^(LDFLAGS=).*|\1${LDFLAGS}|" \ ${WRKSRC}/Makefile @${REINPLACE_CMD} -E \ -e "1s|^(#! )/usr/bin/perl|\1${PERL}|" \ ${WRKSRC}/scripts/texi2pod.pl # clang in freebsd 10 is unable to assemble linuxboot_dma.bin .if (${OSVERSION} < 1100000) @${REINPLACE_CMD} -E \ -e 's|linuxboot_dma.bin||' \ ${WRKSRC}/pc-bios/optionrom/Makefile @${REINPLACE_CMD} -E \ -e 's|linuxboot_dma.bin||' \ ${WRKSRC}/Makefile .endif post-patch-CDROM_DMA-off: @${REINPLACE_CMD} -e '/USE_DMA_CDROM/d' ${WRKSRC}/include/hw/ide/internal.h post-patch-GNS3-on: @${REINPLACE_CMD} -e 's|(buf\[0\] & 1) && (rctl & E1000_RCTL_MPE)|buf[0] \& 1|' \ ${WRKSRC}/hw/net/e1000.c # XXX need to disable usb host code on head while it's not ported to the # new usb stack yet post-configure: @${REINPLACE_CMD} -E \ -e "s|^(HOST_USB=)bsd|\1stub|" \ ${WRKSRC}/config-host.mak .if !target(post-install) post-install: ${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifup.sample ${STAGEDIR}${PREFIX}/etc ${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifdown.sample ${STAGEDIR}${PREFIX}/etc @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/qemu-* - @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/ivshmem-* post-install-DOCS-on: @(cd ${WRKSRC} && ${COPYTREE_SHARE} docs ${STAGEDIR}${DOCSDIR}/) .endif .include Index: head/emulators/qemu/distinfo =================================================================== --- head/emulators/qemu/distinfo (revision 475079) +++ head/emulators/qemu/distinfo (revision 475080) @@ -1,5 +1,3 @@ -TIMESTAMP = 1500663832 -SHA256 (qemu/2.9.0/qemu-2.9.0.tar.bz2) = 00bfb217b1bb03c7a6c3261b819cfccbfb5a58e3e2ceff546327d271773c6c14 -SIZE (qemu/2.9.0/qemu-2.9.0.tar.bz2) = 28720490 -SHA256 (qemu/2.9.0/dtc-v1.4.0.tar.gz) = 39d0713efd82a27adc065ecb9ef36401c53d5ee87ae1764e2bb243fcd97488e3 -SIZE (qemu/2.9.0/dtc-v1.4.0.tar.gz) = 131893 +TIMESTAMP = 1532111907 +SHA256 (qemu/2.12.0/qemu-2.12.0.tar.bz2) = c9f4a147bc915d24df9784affc611a115f42d24720a89210b479f1ba7a3f679c +SIZE (qemu/2.12.0/qemu-2.12.0.tar.bz2) = 41196232 Index: head/emulators/qemu/files/patch-ui_x__keymap.c =================================================================== --- head/emulators/qemu/files/patch-ui_x__keymap.c (revision 475079) +++ head/emulators/qemu/files/patch-ui_x__keymap.c (nonexistent) @@ -1,15 +0,0 @@ ---- ui/x_keymap.c.orig 2015-12-16 00:59:05 UTC -+++ ui/x_keymap.c -@@ -43,9 +43,9 @@ static const uint8_t x_keycode_to_pc_key - 0xb5, /* 112 Divide */ - 0xb8, /* 113 Alt-R */ - 0xc6, /* 114 Break */ -- 0x0, /* 115 */ -- 0x0, /* 116 */ -- 0x0, /* 117 */ -+ 0xdb, /* 115 left windows key */ -+ 0xdc, /* 116 right windows key */ -+ 0xdd, /* 117 right menu key */ - 0x0, /* 118 */ - 0x0, /* 119 */ - 0x0, /* 120 */ Property changes on: head/emulators/qemu/files/patch-ui_x__keymap.c ___________________________________________________________________ Deleted: fbsd:nokeywords ## -1 +0,0 ## -yes \ No newline at end of property Deleted: svn:eol-style ## -1 +0,0 ## -native \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -text/plain \ No newline at end of property Index: head/emulators/qemu/files/patch-Makefile =================================================================== --- head/emulators/qemu/files/patch-Makefile (revision 475079) +++ head/emulators/qemu/files/patch-Makefile (revision 475080) @@ -1,42 +1,43 @@ ---- Makefile.orig 2017-04-20 14:57:00 UTC +--- Makefile.orig 2018-04-24 16:30:46 UTC +++ Makefile -@@ -206,9 +206,14 @@ LIBS+=-lz $(LIBS_TOOLS) +@@ -350,10 +350,15 @@ LIBS+=-lz $(LIBS_TOOLS) HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF) ifdef BUILD_DOCS +ifdef NOPORTDOCS +DOCS=qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8 +DOCS+=docs/qemu-qmp-ref.7 docs/qemu-ga-ref.7 +else DOCS=qemu-doc.html qemu-doc.txt qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8 - DOCS+=docs/qemu-qmp-ref.html docs/qemu-qmp-ref.txt docs/qemu-qmp-ref.7 - DOCS+=docs/qemu-ga-ref.html docs/qemu-ga-ref.txt docs/qemu-ga-ref.7 + DOCS+=docs/interop/qemu-qmp-ref.html docs/interop/qemu-qmp-ref.txt docs/interop/qemu-qmp-ref.7 + DOCS+=docs/interop/qemu-ga-ref.html docs/interop/qemu-ga-ref.txt docs/interop/qemu-ga-ref.7 + DOCS+=docs/qemu-block-drivers.7 +endif ifdef CONFIG_VIRTFS DOCS+=fsdev/virtfs-proxy-helper.1 endif -@@ -558,11 +563,13 @@ BLOBS= +@@ -797,11 +802,13 @@ BLOBS= endif install-doc: $(DOCS) +ifndef NOPORTDOCS $(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)" $(INSTALL_DATA) qemu-doc.html "$(DESTDIR)$(qemu_docdir)" $(INSTALL_DATA) qemu-doc.txt "$(DESTDIR)$(qemu_docdir)" - $(INSTALL_DATA) docs/qemu-qmp-ref.html "$(DESTDIR)$(qemu_docdir)" - $(INSTALL_DATA) docs/qemu-qmp-ref.txt "$(DESTDIR)$(qemu_docdir)" + $(INSTALL_DATA) docs/interop/qemu-qmp-ref.html "$(DESTDIR)$(qemu_docdir)" + $(INSTALL_DATA) docs/interop/qemu-qmp-ref.txt "$(DESTDIR)$(qemu_docdir)" +endif ifdef CONFIG_POSIX $(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1" $(INSTALL_DATA) qemu.1 "$(DESTDIR)$(mandir)/man1" -@@ -575,8 +582,10 @@ ifneq ($(TOOLS),) +@@ -815,8 +822,10 @@ ifneq ($(TOOLS),) endif ifneq (,$(findstring qemu-ga,$(TOOLS))) $(INSTALL_DATA) qemu-ga.8 "$(DESTDIR)$(mandir)/man8" +ifndef NOPORTDOCS - $(INSTALL_DATA) docs/qemu-ga-ref.html "$(DESTDIR)$(qemu_docdir)" - $(INSTALL_DATA) docs/qemu-ga-ref.txt "$(DESTDIR)$(qemu_docdir)" + $(INSTALL_DATA) docs/interop/qemu-ga-ref.html "$(DESTDIR)$(qemu_docdir)" + $(INSTALL_DATA) docs/interop/qemu-ga-ref.txt "$(DESTDIR)$(qemu_docdir)" +endif - $(INSTALL_DATA) docs/qemu-ga-ref.7 "$(DESTDIR)$(mandir)/man7" + $(INSTALL_DATA) docs/interop/qemu-ga-ref.7 "$(DESTDIR)$(mandir)/man7" endif endif Index: head/emulators/qemu/files/patch-configure =================================================================== --- head/emulators/qemu/files/patch-configure (revision 475079) +++ head/emulators/qemu/files/patch-configure (revision 475080) @@ -1,157 +1,148 @@ ---- configure.orig 2017-04-20 14:57:00 UTC +--- configure.orig 2018-04-24 16:30:46 UTC +++ configure -@@ -247,7 +247,7 @@ +@@ -369,7 +369,7 @@ DSOSUF=".so" LDFLAGS_SHARED="-shared" modules="no" prefix="/usr/local" -mandir="\${prefix}/share/man" +mandir="\${prefix}/man" datadir="\${prefix}/share" + firmwarepath="\${prefix}/share/qemu-firmware" qemu_docdir="\${prefix}/share/doc/qemu" - bindir="\${prefix}/bin" -@@ -322,6 +322,10 @@ +@@ -449,6 +449,9 @@ numa="" tcmalloc="no" jemalloc="no" replication="yes" +pcap="no" +pcap_create="no" +bpf="no" -+ + vxhs="" + libxml2="" - # parse CC options first - for opt do -@@ -887,6 +891,10 @@ +@@ -1030,6 +1033,10 @@ for opt do ;; --enable-vnc-png) vnc_png="yes" ;; + --enable-pcap) pcap="yes" + ;; + --disable-pcap) pcap="no" + ;; --disable-slirp) slirp="no" ;; --disable-vde) vde="no" -@@ -2266,7 +2274,7 @@ - gtk_cflags="$gtk_cflags $x11_cflags" - gtk_libs="$gtk_libs $x11_libs" - fi -- libs_softmmu="$gtk_libs $libs_softmmu" -+ libs_softmmu="$gtk_libs -lintl $libs_softmmu" - gtk="yes" - elif test "$gtk" = "yes"; then - feature_not_found "gtk" "Install gtk2 or gtk3 devel" -@@ -2485,6 +2493,14 @@ +@@ -2799,6 +2806,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 -@@ -2644,6 +2660,50 @@ +@@ -2969,7 +2984,51 @@ EOF fi fi +########################################## +# pcap probe -+ + +if test "$pcap" = "yes" -a "$pcap" != "no"; then + cat > $TMPC << EOF +#include +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 +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 +#include +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 -@@ -3970,14 +4030,7 @@ + if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then +@@ -4331,14 +4390,7 @@ fi # Check if tools are available to build documentation. if test "$docs" != "no" ; then - if has makeinfo && has pod2man; then docs=yes - else - if test "$docs" = "yes" ; then - feature_not_found "docs" "Install texinfo and Perl/perl-podlators" - fi - docs=no - fi fi # Search for bswap_32 function -@@ -5026,6 +5079,7 @@ +@@ -5783,6 +5835,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 "Multipath support $mpath" echo "VNC support $vnc" if test "$vnc" = "yes" ; then - echo "VNC SASL support $vnc_sasl" -@@ -5204,6 +5258,15 @@ +@@ -6010,6 +6063,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 -@@ -5415,6 +5478,9 @@ +@@ -6247,6 +6309,9 @@ fi + # if this macro is set. if test "$have_fsxattr" = "yes" ; then echo "HAVE_FSXATTR=y" >> $config_host_mak - fi ++fi +if test "$have_ifaddrs_h" = "yes" ; then + echo "HAVE_IFADDRS_H=y" >> $config_host_mak -+fi + fi if test "$vte" = "yes" ; then echo "CONFIG_VTE=y" >> $config_host_mak - echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak Index: head/emulators/qemu/files/pcap-patch =================================================================== --- head/emulators/qemu/files/pcap-patch (revision 475079) +++ head/emulators/qemu/files/pcap-patch (revision 475080) @@ -1,56 +1,56 @@ ---- qapi-schema.json.orig 2017-07-24 12:07:10 UTC -+++ qapi-schema.json -@@ -3882,6 +3882,19 @@ +--- qapi/net.json.orig 2018-04-24 16:30:47 UTC ++++ qapi/net.json +@@ -388,6 +388,19 @@ '*helper': 'str' } } ## +# @NetdevPcapOptions: +# +# Use ifname as a source to capture +# +# @ifname: #required to determine which interface to capture +# +# Since: 1.2 +## +{ 'struct': 'NetdevPcapOptions', + 'data': { + '*ifname': 'str' } } + +## # @NetdevHubPortOptions: # # Connect two or more net clients through a software hub. -@@ -3944,7 +3957,7 @@ +@@ -454,7 +467,7 @@ ## { 'enum': 'NetClientDriver', - 'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', 'dump', + 'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', - 'bridge', 'hubport', 'netmap', 'vhost-user' ] } + 'bridge', 'hubport', 'netmap', 'vhost-user', 'pcap' ] } ## # @Netdev: -@@ -3967,6 +3980,7 @@ - 'nic': 'NetLegacyNicOptions', +@@ -478,6 +491,7 @@ 'user': 'NetdevUserOptions', 'tap': 'NetdevTapOptions', -+ 'pcap': 'NetdevPcapOptions', 'l2tpv3': 'NetdevL2TPv3Options', ++ 'pcap': 'NetdevPcapOptions', 'socket': 'NetdevSocketOptions', 'vde': 'NetdevVdeOptions', -@@ -4005,7 +4019,7 @@ + 'bridge': 'NetdevBridgeOptions', +@@ -514,7 +528,7 @@ ## { 'enum': 'NetLegacyOptionsType', 'data': ['none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde', -- 'dump', 'bridge', 'netmap', 'vhost-user'] } -+ 'dump', 'bridge', 'netmap', 'vhost-user', 'pcap' ] } +- 'bridge', 'netmap', 'vhost-user'] } ++ 'bridge', 'netmap', 'vhost-user', 'pcap'] } ## # @NetLegacyOptions: -@@ -4022,6 +4036,7 @@ - 'nic': 'NetLegacyNicOptions', +@@ -532,6 +546,7 @@ 'user': 'NetdevUserOptions', 'tap': 'NetdevTapOptions', -+ 'pcap': 'NetdevPcapOptions', 'l2tpv3': 'NetdevL2TPv3Options', ++ 'pcap': 'NetdevPcapOptions', 'socket': 'NetdevSocketOptions', 'vde': 'NetdevVdeOptions', + 'bridge': 'NetdevBridgeOptions', Index: head/emulators/qemu/files/pcap-patch-net_clients.h =================================================================== --- head/emulators/qemu/files/pcap-patch-net_clients.h (revision 475079) +++ head/emulators/qemu/files/pcap-patch-net_clients.h (revision 475080) @@ -1,13 +1,13 @@ ---- net/clients.h.orig 2017-03-05 10:36:13.475005000 -0700 -+++ net/clients.h 2017-03-05 10:35:30.412539000 -0700 -@@ -61,4 +61,10 @@ - +--- net/clients.h.orig 2018-04-24 16:30:47 UTC ++++ net/clients.h +@@ -61,4 +61,10 @@ int net_init_netmap(const Netdev *netdev, const char * int net_init_vhost_user(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp); -+ + +#ifdef CONFIG_PCAP +int net_init_pcap(const Netdev *netdev, const char *name, + NetClientState *peer, Error **errp); +#endif ++ + #endif /* QEMU_NET_CLIENTS_H */ Index: head/emulators/qemu/files/pcap-patch-net_net.c =================================================================== --- head/emulators/qemu/files/pcap-patch-net_net.c (revision 475079) +++ head/emulators/qemu/files/pcap-patch-net_net.c (revision 475080) @@ -1,250 +1,250 @@ ---- net/net.c.orig 2016-12-20 13:16:48.000000000 -0700 -+++ net/net.c 2017-03-05 08:04:17.606428000 -0700 -@@ -48,6 +48,11 @@ +--- net/net.c.orig 2018-04-24 16:30:47 UTC ++++ net/net.c +@@ -52,6 +52,11 @@ #include "net/filter.h" #include "qapi/string-output-visitor.h" +#include +#ifdef __FreeBSD__ +#include +#endif + /* Net bridge is currently not supported for W32. */ #if !defined(_WIN32) # define CONFIG_NET_BRIDGE -@@ -933,7 +938,225 @@ +@@ -929,7 +934,225 @@ static int net_init_nic(const Netdev *netdev, const ch return idx; } +#if defined(CONFIG_PCAP) +#if defined(CONFIG_BPF) +#define PCAP_DONT_INCLUDE_PCAP_BPF_H +#include +#endif +#include -+ + +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_DRIVER_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 Netdev *netdev, + const char *name, NetClientState *peer, Error **errp) +{ + const NetdevPcapOptions *pcap_opts; + NetClientState *nc; + struct PCAPState *s; + const char *ifname; + char errbuf[PCAP_ERRBUF_SIZE]; +#if defined(_WIN32) + HANDLE h; +#endif + int i; + + assert(netdev->type == NET_CLIENT_DRIVER_PCAP); + pcap_opts = &netdev->u.pcap; + 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_DRIVER__MAX])( const Netdev *netdev, const char *name, -@@ -961,6 +1182,9 @@ +@@ -955,6 +1178,9 @@ static int (* const net_client_init_fun[NET_CLIENT_DRI + #endif #ifdef CONFIG_L2TPV3 [NET_CLIENT_DRIVER_L2TPV3] = net_init_l2tpv3, - #endif ++#endif +#ifdef CONFIG_PCAP + [NET_CLIENT_DRIVER_PCAP] = net_init_pcap, -+#endif + #endif }; - Index: head/emulators/qemu/pkg-plist =================================================================== --- head/emulators/qemu/pkg-plist (revision 475079) +++ head/emulators/qemu/pkg-plist (revision 475080) @@ -1,137 +1,143 @@ -bin/ivshmem-server -bin/ivshmem-client bin/qemu-ga bin/qemu-i386 bin/qemu-img bin/qemu-io bin/qemu-nbd %%NO_X86_TARGETS%%bin/qemu-sparc %%NO_X86_TARGETS%%bin/qemu-sparc64 %%NO_X86_TARGETS%%bin/qemu-system-aarch64 %%NO_X86_TARGETS%%bin/qemu-system-alpha %%NO_X86_TARGETS%%bin/qemu-system-arm %%NO_X86_TARGETS%%bin/qemu-system-cris +%%NO_X86_TARGETS%%bin/qemu-system-hppa bin/qemu-system-i386 %%NO_X86_TARGETS%%bin/qemu-system-lm32 %%NO_X86_TARGETS%%bin/qemu-system-m68k %%NO_X86_TARGETS%%bin/qemu-system-microblaze %%NO_X86_TARGETS%%bin/qemu-system-microblazeel %%NO_X86_TARGETS%%bin/qemu-system-mips %%NO_X86_TARGETS%%bin/qemu-system-mips64 %%NO_X86_TARGETS%%bin/qemu-system-mips64el %%NO_X86_TARGETS%%bin/qemu-system-mipsel %%NO_X86_TARGETS%%bin/qemu-system-moxie %%NO_X86_TARGETS%%bin/qemu-system-nios2 %%NO_X86_TARGETS%%bin/qemu-system-or1k %%NO_X86_TARGETS%%bin/qemu-system-ppc %%NO_X86_TARGETS%%bin/qemu-system-ppc64 %%NO_X86_TARGETS%%bin/qemu-system-ppcemb +%%NO_X86_TARGETS%%bin/qemu-system-riscv32 +%%NO_X86_TARGETS%%bin/qemu-system-riscv64 %%NO_X86_TARGETS%%bin/qemu-system-s390x %%NO_X86_TARGETS%%bin/qemu-system-sh4 %%NO_X86_TARGETS%%bin/qemu-system-sh4eb %%NO_X86_TARGETS%%bin/qemu-system-sparc %%NO_X86_TARGETS%%bin/qemu-system-sparc64 %%NO_X86_TARGETS%%bin/qemu-system-tricore %%NO_X86_TARGETS%%bin/qemu-system-unicore32 bin/qemu-system-x86_64 %%NO_X86_TARGETS%%bin/qemu-system-xtensa %%NO_X86_TARGETS%%bin/qemu-system-xtensaeb bin/qemu-x86_64 man/man1/qemu.1.gz +man/man7/qemu-block-drivers.7.gz man/man1/qemu-img.1.gz man/man7/qemu-ga-ref.7.gz man/man7/qemu-qmp-ref.7.gz man/man8/qemu-ga.8.gz man/man8/qemu-nbd.8.gz @sample etc/qemu-ifup.sample @sample etc/qemu-ifdown.sample %%DATADIR%%/QEMU,tcx.bin %%DATADIR%%/QEMU,cgthree.bin -%%DATADIR%%/acpi-dsdt.aml %%DATADIR%%/bios-256k.bin %%DATADIR%%/bios.bin +%%DATADIR%%/canyonlands.dtb %%DATADIR%%/efi-e1000.rom %%DATADIR%%/efi-e1000e.rom %%DATADIR%%/efi-eepro100.rom %%DATADIR%%/efi-ne2k_pci.rom %%DATADIR%%/efi-pcnet.rom %%DATADIR%%/efi-rtl8139.rom %%DATADIR%%/efi-virtio.rom %%DATADIR%%/efi-vmxnet3.rom +%%DATADIR%%/hppa-firmware.img +%%DATADIR%%/qemu_vga.ndrv +%%DATADIR%%/s390-netboot.img +%%DATADIR%%/u-boot-sam460-20100605.bin %%DATADIR%%/vgabios.bin %%DATADIR%%/vgabios-cirrus.bin %%DATADIR%%/vgabios-qxl.bin %%DATADIR%%/vgabios-stdvga.bin %%DATADIR%%/vgabios-virtio.bin %%DATADIR%%/vgabios-vmware.bin %%DATADIR%%/palcode-clipper %%DATADIR%%/ppc_rom.bin %%DATADIR%%/openbios-ppc %%DATADIR%%/openbios-sparc32 %%DATADIR%%/openbios-sparc64 %%DATADIR%%/pxe-e1000.rom %%DATADIR%%/pxe-eepro100.rom %%DATADIR%%/pxe-ne2k_pci.rom %%DATADIR%%/pxe-rtl8139.rom %%DATADIR%%/pxe-pcnet.rom %%DATADIR%%/pxe-virtio.rom %%DATADIR%%/petalogix-ml605.dtb %%DATADIR%%/spapr-rtas.bin %%DATADIR%%/slof.bin %%DATADIR%%/s390-ccw.img %%DATADIR%%/linuxboot.bin %%LINUXBOOT_DMA%%%%DATADIR%%/linuxboot_dma.bin %%DATADIR%%/multiboot.bin %%DATADIR%%/sgabios.bin %%DATADIR%%/skiboot.lid %%DATADIR%%/trace-events-all %%DATADIR%%/petalogix-s3adsp1800.dtb %%DATADIR%%/bamboo.dtb %%DATADIR%%/kvmvapic.bin %%DATADIR%%/qemu-icon.bmp %%DATADIR%%/qemu_logo_no_text.svg %%DATADIR%%/u-boot.e500 %%DATADIR%%/keymaps/ar %%DATADIR%%/keymaps/bepo %%DATADIR%%/keymaps/common %%DATADIR%%/keymaps/cz %%DATADIR%%/keymaps/da %%DATADIR%%/keymaps/de %%DATADIR%%/keymaps/de-ch %%DATADIR%%/keymaps/en-gb %%DATADIR%%/keymaps/en-us %%DATADIR%%/keymaps/es %%DATADIR%%/keymaps/et %%DATADIR%%/keymaps/fi %%DATADIR%%/keymaps/fo %%DATADIR%%/keymaps/fr %%DATADIR%%/keymaps/fr-be %%DATADIR%%/keymaps/fr-ca %%DATADIR%%/keymaps/fr-ch %%DATADIR%%/keymaps/hr %%DATADIR%%/keymaps/hu %%DATADIR%%/keymaps/is %%DATADIR%%/keymaps/it %%DATADIR%%/keymaps/ja %%DATADIR%%/keymaps/lt %%DATADIR%%/keymaps/lv %%DATADIR%%/keymaps/mk %%DATADIR%%/keymaps/modifiers %%DATADIR%%/keymaps/nl %%DATADIR%%/keymaps/nl-be %%DATADIR%%/keymaps/no %%DATADIR%%/keymaps/pl %%DATADIR%%/keymaps/pt %%DATADIR%%/keymaps/pt-br %%DATADIR%%/keymaps/ru %%DATADIR%%/keymaps/sl %%DATADIR%%/keymaps/sv %%DATADIR%%/keymaps/th %%DATADIR%%/keymaps/tr %%GTK2%%share/locale/bg/LC_MESSAGES/qemu.mo %%GTK2%%share/locale/de_DE/LC_MESSAGES/qemu.mo %%GTK2%%share/locale/fr_FR/LC_MESSAGES/qemu.mo %%GTK2%%share/locale/it/LC_MESSAGES/qemu.mo %%GTK2%%share/locale/hu/LC_MESSAGES/qemu.mo %%GTK2%%share/locale/tr/LC_MESSAGES/qemu.mo %%GTK2%%share/locale/zh_CN/LC_MESSAGES/qemu.mo