emulators/qemu-devel: Update version 4.2.0=>5.1.0.20200909
- Move to SNAPSHOT versions of qemu - Remove i386 support temporarily as build is failing on i386 - Change MASTER_SITES to GITHUB - Mark IGNORE for 11.X as it cannot build Position Independent Code on 11 - OPTIONIZE NCURSES for support of both base and ports [1] - Add OPTIONS CAPSTONE and use CAPSTONE from ports - Remove PCAP related patches as was unable to create PANIC while using TSO - Fixes for the RISC-V PLIC that are required to boot FreeBSD/riscv64 HEAD after r362977 PR: 245997 [1] Submitted by: lab+bsd@thinkum.space [1] Reported by: lwhsu jhb
This commit is contained in:
parent
fc9c95010a
commit
e014e4ce41
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=548428
@ -2,10 +2,8 @@
|
|||||||
# $FreeBSD$
|
# $FreeBSD$
|
||||||
|
|
||||||
PORTNAME= qemu
|
PORTNAME= qemu
|
||||||
PORTVERSION= 4.2.0
|
DISTVERSION= 5.1.0.20200909
|
||||||
PORTREVISION= 1
|
|
||||||
CATEGORIES= emulators
|
CATEGORIES= emulators
|
||||||
MASTER_SITES= https://download.qemu.org/
|
|
||||||
PKGNAMESUFFIX= -devel
|
PKGNAMESUFFIX= -devel
|
||||||
DIST_SUBDIR= qemu/${PORTVERSION}
|
DIST_SUBDIR= qemu/${PORTVERSION}
|
||||||
|
|
||||||
@ -14,7 +12,8 @@ COMMENT= QEMU CPU Emulator - development version
|
|||||||
|
|
||||||
LICENSE= GPLv2
|
LICENSE= GPLv2
|
||||||
|
|
||||||
ONLY_FOR_ARCHS= amd64 i386 powerpc powerpc64
|
ONLY_FOR_ARCHS= amd64 powerpc powerpc64
|
||||||
|
IGNORE_FreeBSD_11= Unable to produce Position Independent Code
|
||||||
|
|
||||||
LIB_DEPENDS= libnettle.so:security/nettle \
|
LIB_DEPENDS= libnettle.so:security/nettle \
|
||||||
libfontconfig.so:x11-fonts/fontconfig \
|
libfontconfig.so:x11-fonts/fontconfig \
|
||||||
@ -24,75 +23,89 @@ LIB_DEPENDS= libnettle.so:security/nettle \
|
|||||||
|
|
||||||
USES= bison compiler:c11 cpe gmake gnome iconv:wchar_t perl5 \
|
USES= bison compiler:c11 cpe gmake gnome iconv:wchar_t perl5 \
|
||||||
pkgconfig python:build tar:xz xorg
|
pkgconfig python:build tar:xz xorg
|
||||||
|
USE_GITHUB= yes
|
||||||
USE_GNOME= cairo glib20 libxml2
|
USE_GNOME= cairo glib20 libxml2
|
||||||
USE_PERL5= build
|
USE_PERL5= build
|
||||||
USE_XORG= pixman
|
USE_XORG= pixman
|
||||||
|
|
||||||
|
GH_TUPLE= qemu:qemu:9435a8b \
|
||||||
|
qemu:keycodemapdb:6b3d716:keycodemapdb/ui/keycodemapdb \
|
||||||
|
qemu:dtc:85e5d83:dtc/dtc \
|
||||||
|
mesonbuild:meson:68ed748:meson/meson \
|
||||||
|
cota:berkeley-softfloat-3:b64af41:berkeleysoftfloat3/tests/fp/berkeley-softfloat-3 \
|
||||||
|
cota:berkeley-testfloat-3:5a59dce:berkeleytestfloat3/tests/fp/berkeley-testfloat-3
|
||||||
#BROKEN_powerpc64= fails to compile: In function aio_bh_poll: internal compiler error: Segmentation fault
|
#BROKEN_powerpc64= fails to compile: In function aio_bh_poll: internal compiler error: Segmentation fault
|
||||||
|
|
||||||
#.if !defined(PKGNAMESUFFIX) || (${PKGNAMESUFFIX} != "-utils" && ${PKGNAMESUFFIX} != "-guest-agent")
|
#.if !defined(PKGNAMESUFFIX) || (${PKGNAMESUFFIX} != "-utils" && ${PKGNAMESUFFIX} != "-guest-agent")
|
||||||
#.endif
|
#.endif
|
||||||
|
|
||||||
HAS_CONFIGURE= yes
|
HAS_CONFIGURE= yes
|
||||||
MAKE_ENV+= BSD_MAKE="${MAKE}" V=1
|
|
||||||
|
|
||||||
OPTIONS_DEFINE= SAMBA X11 GTK3 OPENGL GNUTLS SASL JPEG PNG CURL \
|
OPTIONS_SINGLE= NCURSES
|
||||||
VDE CDROM_DMA PCAP USBREDIR X86_TARGETS \
|
OPTIONS_SINGLE_NCURSES= NCURSES_DEFAULT NCURSES_BASE NCURSES_PORT
|
||||||
STATIC_LINK DOCS NCURSES
|
OPTIONS_DEFINE= SAMBA X11 GTK3 OPENGL GNUTLS SASL JPEG PNG CURL VDE \
|
||||||
SAMBA_DESC= samba dependency (for -smb)
|
CDROM_DMA USBREDIR X86_TARGETS STATIC_LINK DOCS CAPSTONE
|
||||||
GNUTLS_DESC= gnutls dependency (vnc encryption)
|
OPTIONS_DEFAULT=X11 GTK3 OPENGL GNUTLS SASL JPEG PNG CDROM_DMA CURL NCURSES_DEFAULT VDE \
|
||||||
SASL_DESC= cyrus-sasl dependency (vnc encryption)
|
CAPSTONE
|
||||||
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!)
|
|
||||||
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 GTK3 OPENGL GNUTLS SASL JPEG PNG CDROM_DMA CURL PCAP NCURSES VDE
|
|
||||||
OPTIONS_SUB= yes
|
OPTIONS_SUB= yes
|
||||||
X11_USE= SDL=sdl2 XORG=x11,xext GNOME=gdkpixbuf2
|
CAPSTONE_DESC= Disassembly framework support
|
||||||
X11_USES= sdl
|
CDROM_DMA_DESC= IDE CDROM DMA
|
||||||
X11_CONFIGURE_ENABLE= sdl
|
GNUTLS_DESC= gnutls dependency (vnc encryption)
|
||||||
|
JPEG_DESC= jpeg dependency (vnc lossy compression)
|
||||||
|
NCURSES_DEFAULT_DESC= Depend on ncurses (ports if installed, otherwise base)
|
||||||
|
NCURSES_BASE_DESC= Depend on ncurses in base
|
||||||
|
NCURSES_PORT_DESC= Depend on devel/ncurses in ports
|
||||||
|
PNG_DESC= png dependency (vnc compression)
|
||||||
|
SAMBA_DESC= samba dependency (for -smb)
|
||||||
|
SASL_DESC= cyrus-sasl dependency (vnc encryption)
|
||||||
|
STATIC_LINK_DESC= Statically link the executables
|
||||||
|
USBREDIR_DESC= usb device network redirection (experimental!)
|
||||||
|
VDE_DESC= vde dependency (for vde networking)
|
||||||
|
X86_TARGETS_DESC= Build only x86 system targets
|
||||||
|
CAPSTONE_CONFIGURE_ON= --enable-capstone=system --extra-cflags=-I${LOCALBASE}/include/capstone
|
||||||
|
CAPSTONE_CONFIGURE_OFF= --disable-capstone
|
||||||
|
CAPSTONE_LIB_DEPENDS= libcapstone.so:devel/capstone4
|
||||||
|
CURL_CONFIGURE_OFF= --disable-curl
|
||||||
|
CURL_LIB_DEPENDS= libcurl.so:ftp/curl
|
||||||
|
DOCS_BUILD_DEPENDS= texi2html:textproc/texi2html \
|
||||||
|
sphinx-build:textproc/py-sphinx
|
||||||
|
DOCS_CONFIGURE_ENABLE= docs
|
||||||
|
DOCS_USES= makeinfo
|
||||||
|
GNUTLS_CONFIGURE_OFF= --disable-gnutls
|
||||||
|
GNUTLS_LIB_DEPENDS= libgnutls.so:security/gnutls
|
||||||
|
GTK3_CONFIGURE_OFF= --disable-gtk --disable-vte
|
||||||
GTK3_LIB_DEPENDS= libxkbcommon.so:x11/libxkbcommon
|
GTK3_LIB_DEPENDS= libxkbcommon.so:x11/libxkbcommon
|
||||||
GTK3_USE= GNOME=gdkpixbuf2,gtk30,vte3 XORG=x11,xext
|
GTK3_USE= GNOME=gdkpixbuf2,gtk30,vte3 XORG=x11,xext
|
||||||
GTK3_USES= gettext gl
|
GTK3_USES= gettext gl
|
||||||
GTK3_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
|
JPEG_CONFIGURE_OFF= --disable-vnc-jpeg
|
||||||
PNG_LIB_DEPENDS= libpng.so:graphics/png
|
JPEG_USES= jpeg
|
||||||
PNG_CONFIGURE_OFF= --disable-vnc-png
|
NCURSES_DEFAULT_USES= ncurses
|
||||||
CURL_LIB_DEPENDS= libcurl.so:ftp/curl
|
NCURSES_BASE_USES= ncurses:base
|
||||||
CURL_CONFIGURE_OFF= --disable-curl
|
NCURSES_PORT_USES= ncurses:port
|
||||||
|
OPENGL_CONFIGURE_OFF= --disable-opengl
|
||||||
OPENGL_USE= GL=gl
|
OPENGL_USE= GL=gl
|
||||||
OPENGL_USES= gl
|
OPENGL_USES= gl
|
||||||
OPENGL_CONFIGURE_OFF= --disable-opengl
|
PNG_CONFIGURE_OFF= --disable-vnc-png
|
||||||
USBREDIR_BUILD_DEPENDS= usbredir>=0.6:net/usbredir
|
PNG_LIB_DEPENDS= libpng.so:graphics/png
|
||||||
USBREDIR_RUN_DEPENDS= usbredir>=0.6:net/usbredir
|
SAMBA_CONFIGURE_ON= --smbd=${LOCALBASE}/sbin/smbd
|
||||||
USBREDIR_CONFIGURE_OFF= --disable-usb-redir
|
SASL_CONFIGURE_OFF= --disable-vnc-sasl
|
||||||
PCAP_CONFIGURE_ON= --enable-pcap
|
SAMBA_USES= samba:run # smbd
|
||||||
PCAP_EXTRA_PATCHES= ${FILESDIR}/pcap-patch-qapi_net.json ${FILESDIR}/pcap-patch-net_net.c \
|
SASL_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2
|
||||||
${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_CONFIGURE_ON= --static
|
||||||
STATIC_LINK_PREVENTS= GTK3 X11
|
STATIC_LINK_PREVENTS= GTK3 X11
|
||||||
STATIC_LINK_PREVENTS_MSG= X11 ui cannot be built static
|
STATIC_LINK_PREVENTS_MSG= X11 ui cannot be built static
|
||||||
NCURSES_USES= ncurses:base
|
USBREDIR_BUILD_DEPENDS= usbredir>=0.6:net/usbredir
|
||||||
SAMBA_USES= samba:run # smbd
|
USBREDIR_CONFIGURE_OFF= --disable-usb-redir
|
||||||
SAMBA_CONFIGURE_ON= --smbd=${LOCALBASE}/sbin/smbd
|
USBREDIR_RUN_DEPENDS= usbredir>=0.6:net/usbredir
|
||||||
DOCS_BUILD_DEPENDS= texi2html:textproc/texi2html \
|
VDE_CONFIGURE_OFF= --disable-vde
|
||||||
sphinx-build:textproc/py-sphinx
|
VDE_LIB_DEPENDS= libvdeplug.so:net/vde2
|
||||||
DOCS_USES= makeinfo
|
X11_CONFIGURE_ENABLE= sdl
|
||||||
DOCS_MAKE_ARGS_OFF= NOPORTDOCS=1
|
X11_USE= SDL=sdl2 XORG=x11,xext GNOME=gdkpixbuf2
|
||||||
|
X11_USES= sdl
|
||||||
|
|
||||||
PORTDOCS= docs interop/.buildinfo interop/* qemu-doc.html qemu-doc.txt qemu-ga-ref.html qemu-ga-ref.txt \
|
PORTDOCS= docs index.html interop/.buildinfo interop/* \
|
||||||
qemu-qmp-ref.html qemu-qmp-ref.txt specs/.buildinfo specs/*
|
specs/.buildinfo specs/* system/.buildinfo system/* \
|
||||||
|
tools/.buildinfo tools/* user/.buildinfo user/*
|
||||||
|
|
||||||
WITHOUT_CPU_CFLAGS=yes #to avoid problems with register allocation
|
WITHOUT_CPU_CFLAGS=yes #to avoid problems with register allocation
|
||||||
CFLAGS:= ${CFLAGS:C/-fno-tree-vrp//}
|
CFLAGS:= ${CFLAGS:C/-fno-tree-vrp//}
|
||||||
@ -128,26 +141,19 @@ CONFIGURE_ARGS+= --sparc_cpu=v9
|
|||||||
|
|
||||||
PLIST_SUB+= LINUXBOOT_DMA=""
|
PLIST_SUB+= LINUXBOOT_DMA=""
|
||||||
|
|
||||||
# -lprocstat actually only _needs_ -lelf after r249666 or r250870 (MFC)
|
|
||||||
# but it shouldn't matter much
|
|
||||||
post-patch:
|
post-patch:
|
||||||
@${REINPLACE_CMD} -e '/LIBS/s|-lprocstat|-lprocstat -lelf|' \
|
@${REINPLACE_CMD} -e 's|/etc/qemu-ifup|${PREFIX}/etc/qemu-ifup|' \
|
||||||
-e '/libusb/s/ --atleast-version=1\.0\.[0-9]*//' \
|
-e 's|/etc/qemu-ifdown|${PREFIX}/etc/qemu-ifdown|' \
|
||||||
${WRKSRC}/configure
|
${WRKSRC}/include/net/net.h
|
||||||
@${REINPLACE_CMD} -E \
|
|
||||||
-e "s|^(CFLAGS=).*|\1${CFLAGS} -fno-strict-aliasing -I.|" \
|
|
||||||
-e "s|^(LDFLAGS=).*|\1${LDFLAGS}|" \
|
|
||||||
${WRKSRC}/Makefile
|
|
||||||
|
|
||||||
post-patch-CDROM_DMA-off:
|
post-patch-CDROM_DMA-off:
|
||||||
@${REINPLACE_CMD} -e '/USE_DMA_CDROM/d' ${WRKSRC}/include/hw/ide/internal.h
|
@${REINPLACE_CMD} -e '/USE_DMA_CDROM/d' ${WRKSRC}/include/hw/ide/internal.h
|
||||||
|
|
||||||
# XXX need to disable usb host code on head while it's not ported to the
|
do-build:
|
||||||
# new usb stack yet
|
cd ${WRKSRC} && ${GMAKE}
|
||||||
post-configure:
|
|
||||||
@${REINPLACE_CMD} -E \
|
do-install:
|
||||||
-e "s|^(HOST_USB=)bsd|\1stub|" \
|
cd ${WRKSRC} && ${SETENV} DESTDIR=${STAGEDIR} ${GMAKE} install
|
||||||
${WRKSRC}/config-host.mak
|
|
||||||
|
|
||||||
.if !target(post-install)
|
.if !target(post-install)
|
||||||
post-install:
|
post-install:
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
TIMESTAMP = 1580929824
|
TIMESTAMP = 1599741546
|
||||||
SHA256 (qemu/4.2.0/qemu-4.2.0.tar.xz) = d3481d4108ce211a053ef15be69af1bdd9dde1510fda80d92be0f6c3e98768f0
|
SHA256 (qemu/5.1.0.20200909/qemu-qemu-5.1.0.20200909-9435a8b_GH0.tar.gz) = c1a6fef66638e4c691e340e56fac64b43088020c02578931a540931ba00b3746
|
||||||
SIZE (qemu/4.2.0/qemu-4.2.0.tar.xz) = 62222068
|
SIZE (qemu/5.1.0.20200909/qemu-qemu-5.1.0.20200909-9435a8b_GH0.tar.gz) = 29466042
|
||||||
|
SHA256 (qemu/5.1.0.20200909/qemu-keycodemapdb-6b3d716_GH0.tar.gz) = c9d3412510aac999865d01aaa14b1fa8dc0385db55c5cf6c4d95d160bd0eaee9
|
||||||
|
SIZE (qemu/5.1.0.20200909/qemu-keycodemapdb-6b3d716_GH0.tar.gz) = 47905
|
||||||
|
SHA256 (qemu/5.1.0.20200909/qemu-dtc-85e5d83_GH0.tar.gz) = 3507d8e96d1942493128591b518c522cfd56d7779ce53283b2cf33661b809479
|
||||||
|
SIZE (qemu/5.1.0.20200909/qemu-dtc-85e5d83_GH0.tar.gz) = 200566
|
||||||
|
SHA256 (qemu/5.1.0.20200909/mesonbuild-meson-68ed748_GH0.tar.gz) = 4e49eae5684774dbe5503c4fccb8b3e8744d2c9dc4ad5ae489a5d8f21cedc7ac
|
||||||
|
SIZE (qemu/5.1.0.20200909/mesonbuild-meson-68ed748_GH0.tar.gz) = 2309591
|
||||||
|
SHA256 (qemu/5.1.0.20200909/cota-berkeley-softfloat-3-b64af41_GH0.tar.gz) = f22bf52cc980b122c663f2e22f8098fa60d8e468e0095f1da58231235a6b324e
|
||||||
|
SIZE (qemu/5.1.0.20200909/cota-berkeley-softfloat-3-b64af41_GH0.tar.gz) = 148768
|
||||||
|
SHA256 (qemu/5.1.0.20200909/cota-berkeley-testfloat-3-5a59dce_GH0.tar.gz) = 3bfd602c8563bc05b540aa4d50e3231b283bf4fddc67e9edb80bf9bcb617df4a
|
||||||
|
SIZE (qemu/5.1.0.20200909/cota-berkeley-testfloat-3-5a59dce_GH0.tar.gz) = 138950
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
--- Makefile.orig 2019-12-12 18:20:47 UTC
|
|
||||||
+++ Makefile
|
|
||||||
@@ -342,9 +342,14 @@ MANUAL_BUILDDIR := docs
|
|
||||||
endif
|
|
||||||
|
|
||||||
ifdef BUILD_DOCS
|
|
||||||
+ifdef NOPORTDOCS
|
|
||||||
+DOCS=qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
|
|
||||||
+DOCS+=docs/interop/qemu-qmp-ref.7 docs/interop/qemu-ga-ref.7
|
|
||||||
+else
|
|
||||||
DOCS=qemu-doc.html qemu-doc.txt qemu.1 qemu-img.1 qemu-nbd.8 $(MANUAL_BUILDDIR)/interop/qemu-ga.8
|
|
||||||
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
|
|
||||||
+endif
|
|
||||||
DOCS+=docs/qemu-block-drivers.7
|
|
||||||
DOCS+=docs/qemu-cpu-models.7
|
|
||||||
ifdef CONFIG_VIRTFS
|
|
||||||
@@ -819,11 +824,13 @@ install-sphinxdocs: sphinxdocs
|
|
||||||
$(call install-manual,specs)
|
|
||||||
|
|
||||||
install-doc: $(DOCS) install-sphinxdocs
|
|
||||||
+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/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"
|
|
||||||
@@ -841,8 +848,10 @@ ifdef CONFIG_TRACE_SYSTEMTAP
|
|
||||||
endif
|
|
||||||
ifneq (,$(findstring qemu-ga,$(TOOLS)))
|
|
||||||
$(INSTALL_DATA) $(MANUAL_BUILDDIR)/interop/qemu-ga.8 "$(DESTDIR)$(mandir)/man8"
|
|
||||||
+ifndef NOPORTDOCS
|
|
||||||
$(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/interop/qemu-ga-ref.7 "$(DESTDIR)$(mandir)/man7"
|
|
||||||
endif
|
|
||||||
endif
|
|
@ -1,36 +1,15 @@
|
|||||||
--- configure.orig 2019-12-12 18:20:47 UTC
|
--- configure.orig 2020-09-08 20:21:13 UTC
|
||||||
+++ configure
|
+++ configure
|
||||||
@@ -405,7 +405,7 @@ DSOSUF=".so"
|
@@ -1640,7 +1647,7 @@ if test "$mingw32" = "yes" ; then
|
||||||
LDFLAGS_SHARED="-shared"
|
sysconfdir="$prefix"
|
||||||
modules="no"
|
local_statedir=
|
||||||
prefix="/usr/local"
|
else
|
||||||
-mandir="\${prefix}/share/man"
|
- mandir="${mandir:-$prefix/share/man}"
|
||||||
+mandir="\${prefix}/man"
|
+ mandir="${mandir:-$prefix/man}"
|
||||||
datadir="\${prefix}/share"
|
datadir="${datadir:-$prefix/share}"
|
||||||
firmwarepath="\${prefix}/share/qemu-firmware"
|
docdir="${docdir:-$prefix/share/doc}"
|
||||||
qemu_docdir="\${prefix}/share/doc/qemu"
|
bindir="${bindir:-$prefix/bin}"
|
||||||
@@ -489,6 +489,9 @@ numa=""
|
@@ -3279,6 +3286,14 @@ if check_include "sys/signal.h" ; then
|
||||||
tcmalloc="no"
|
|
||||||
jemalloc="no"
|
|
||||||
replication="yes"
|
|
||||||
+pcap="no"
|
|
||||||
+pcap_create="no"
|
|
||||||
+bpf="no"
|
|
||||||
vxhs=""
|
|
||||||
bochs="yes"
|
|
||||||
cloop="yes"
|
|
||||||
@@ -1125,6 +1128,10 @@ for opt do
|
|
||||||
;;
|
|
||||||
--enable-vnc-png) vnc_png="yes"
|
|
||||||
;;
|
|
||||||
+ --enable-pcap) pcap="yes"
|
|
||||||
+ ;;
|
|
||||||
+ --disable-pcap) pcap="no"
|
|
||||||
+ ;;
|
|
||||||
--disable-slirp) slirp="no"
|
|
||||||
;;
|
|
||||||
--enable-slirp=git) slirp="git"
|
|
||||||
@@ -3023,6 +3030,14 @@ if ! check_include "ifaddrs.h" ; then
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
##########################################
|
##########################################
|
||||||
@ -45,28 +24,22 @@
|
|||||||
# VTE probe
|
# VTE probe
|
||||||
|
|
||||||
if test "$vte" != "no"; then
|
if test "$vte" != "no"; then
|
||||||
@@ -3710,7 +3725,7 @@ for i in $glib_modules; do
|
@@ -4870,14 +4885,6 @@ if test "$docs" != "no" ; then
|
||||||
glib_libs=$($pkg_config --libs $i)
|
fi
|
||||||
QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
|
if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
|
||||||
LIBS="$glib_libs $LIBS"
|
|
||||||
- libs_qga="$glib_libs $libs_qga"
|
|
||||||
+ libs_qga="$glib_libs -lintl $libs_qga"
|
|
||||||
else
|
|
||||||
error_exit "glib-$glib_req_ver $i is required to compile QEMU"
|
|
||||||
fi
|
|
||||||
@@ -4802,11 +4817,6 @@ has_sphinx_build() {
|
|
||||||
if test "$docs" != "no" ; then
|
|
||||||
if has makeinfo && has pod2man && has_sphinx_build; then
|
|
||||||
docs=yes
|
docs=yes
|
||||||
- else
|
- else
|
||||||
- if test "$docs" = "yes" ; then
|
- if test "$docs" = "yes" ; then
|
||||||
- feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
|
- if has $sphinx_build && test "$sphinx_ok" != "yes"; then
|
||||||
|
- echo "Warning: $sphinx_build exists but it is either too old or uses too old a Python version" >&2
|
||||||
|
- fi
|
||||||
|
- feature_not_found "docs" "Install texinfo, Perl/perl-podlators and a Python 3 version of python-sphinx"
|
||||||
- fi
|
- fi
|
||||||
- docs=no
|
- docs=no
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -4940,7 +4950,7 @@ fi
|
@@ -4993,7 +5000,7 @@ fi
|
||||||
|
|
||||||
# check for libusb
|
# check for libusb
|
||||||
if test "$libusb" != "no" ; then
|
if test "$libusb" != "no" ; then
|
||||||
@ -75,133 +48,7 @@
|
|||||||
libusb="yes"
|
libusb="yes"
|
||||||
libusb_cflags=$($pkg_config --cflags libusb-1.0)
|
libusb_cflags=$($pkg_config --cflags libusb-1.0)
|
||||||
libusb_libs=$($pkg_config --libs libusb-1.0)
|
libusb_libs=$($pkg_config --libs libusb-1.0)
|
||||||
@@ -5330,7 +5340,51 @@ if test "$debug_stack_usage" = "yes"; then
|
@@ -6864,6 +6927,9 @@ fi
|
||||||
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"
|
|
||||||
+
|
|
||||||
##########################################
|
|
||||||
# check if we have open_by_handle_at
|
|
||||||
|
|
||||||
@@ -6352,27 +6406,30 @@ if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ]
|
|
||||||
cat > $TMPC <<EOF
|
|
||||||
int main(void) { return 0; }
|
|
||||||
EOF
|
|
||||||
- textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
|
|
||||||
+ textseg_ldflags="-Wl,--image-base=$textseg_addr"
|
|
||||||
if ! compile_prog "" "$textseg_ldflags"; then
|
|
||||||
- # In case ld does not support -Ttext-segment, edit the default linker
|
|
||||||
- # script via sed to set the .text start addr. This is needed on FreeBSD
|
|
||||||
- # at least.
|
|
||||||
- if ! $ld --verbose >/dev/null 2>&1; then
|
|
||||||
- error_exit \
|
|
||||||
- "We need to link the QEMU user mode binaries at a" \
|
|
||||||
- "specific text address. Unfortunately your linker" \
|
|
||||||
- "doesn't support either the -Ttext-segment option or" \
|
|
||||||
- "printing the default linker script with --verbose." \
|
|
||||||
- "If you don't want the user mode binaries, pass the" \
|
|
||||||
- "--disable-user option to configure."
|
|
||||||
- fi
|
|
||||||
+ textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
|
|
||||||
+ if ! compile_prog "" "$textseg_ldflags"; then
|
|
||||||
+ # In case ld does not support -Ttext-segment, edit the default linker
|
|
||||||
+ # script via sed to set the .text start addr. This is needed on FreeBSD
|
|
||||||
+ # at least.
|
|
||||||
+ if ! $ld --verbose >/dev/null 2>&1; then
|
|
||||||
+ error_exit \
|
|
||||||
+ "We need to link the QEMU user mode binaries at a" \
|
|
||||||
+ "specific text address. Unfortunately your linker" \
|
|
||||||
+ "doesn't support either the -Ttext-segment option or" \
|
|
||||||
+ "printing the default linker script with --verbose." \
|
|
||||||
+ "If you don't want the user mode binaries, pass the" \
|
|
||||||
+ "--disable-user option to configure."
|
|
||||||
+ fi
|
|
||||||
|
|
||||||
- $ld --verbose | sed \
|
|
||||||
- -e '1,/==================================================/d' \
|
|
||||||
- -e '/==================================================/,$d' \
|
|
||||||
- -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
|
|
||||||
- -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
|
|
||||||
- textseg_ldflags="-Wl,-T../config-host.ld"
|
|
||||||
+ $ld --verbose | sed \
|
|
||||||
+ -e '1,/==================================================/d' \
|
|
||||||
+ -e '/==================================================/,$d' \
|
|
||||||
+ -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
|
|
||||||
+ -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
|
|
||||||
+ textseg_ldflags="-Wl,-T../config-host.ld"
|
|
||||||
+ fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
@@ -6497,6 +6554,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
|
|
||||||
@@ -6739,6 +6797,15 @@ fi
|
|
||||||
if test "$want_tools" = "yes" ; then
|
|
||||||
echo "CONFIG_TOOLS=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" != "no"; then
|
|
||||||
echo "CONFIG_SLIRP=y" >> $config_host_mak
|
|
||||||
echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
|
|
||||||
@@ -6986,6 +7053,9 @@ fi
|
|
||||||
# if this macro is set.
|
# if this macro is set.
|
||||||
if test "$have_fsxattr" = "yes" ; then
|
if test "$have_fsxattr" = "yes" ; then
|
||||||
echo "HAVE_FSXATTR=y" >> $config_host_mak
|
echo "HAVE_FSXATTR=y" >> $config_host_mak
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
--- docs/system/qemu-cpu-models.rst.orig 2020-07-28 20:52:47 UTC
|
||||||
|
+++ docs/system/qemu-cpu-models.rst
|
||||||
|
@@ -17,4 +17,4 @@ Description
|
||||||
|
See also
|
||||||
|
''''''''
|
||||||
|
|
||||||
|
-The HTML documentation of QEMU for more precise information and Linux user mode emulator invocation.
|
||||||
|
+The HTML documentation of QEMU for more precise information and Linux user mode emulator invocation, as well as the FreeBSD host notes in pkg-message in the relevant qemu port directory.
|
@ -1,13 +0,0 @@
|
|||||||
--- include/net/net.h.orig 2019-04-23 18:14:46 UTC
|
|
||||||
+++ include/net/net.h
|
|
||||||
@@ -209,8 +209,8 @@ void qmp_netdev_add(QDict *qdict, QObject **ret, Error
|
|
||||||
int net_hub_id_for_client(NetClientState *nc, int *id);
|
|
||||||
NetClientState *net_hub_port_find(int hub_id);
|
|
||||||
|
|
||||||
-#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
|
|
||||||
-#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
|
|
||||||
+#define DEFAULT_NETWORK_SCRIPT PREFIX "/etc/qemu-ifup"
|
|
||||||
+#define DEFAULT_NETWORK_DOWN_SCRIPT PREFIX "/etc/qemu-ifdown"
|
|
||||||
#define DEFAULT_BRIDGE_HELPER CONFIG_QEMU_HELPERDIR "/qemu-bridge-helper"
|
|
||||||
#define DEFAULT_BRIDGE_INTERFACE "br0"
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
|||||||
--- include/qemu/atomic.h.orig 2019-04-23 18:14:46 UTC
|
|
||||||
+++ include/qemu/atomic.h
|
|
||||||
@@ -201,10 +201,12 @@
|
|
||||||
/* Provide shorter names for GCC atomic builtins, return old value */
|
|
||||||
#define atomic_fetch_inc(ptr) __atomic_fetch_add(ptr, 1, __ATOMIC_SEQ_CST)
|
|
||||||
#define atomic_fetch_dec(ptr) __atomic_fetch_sub(ptr, 1, __ATOMIC_SEQ_CST)
|
|
||||||
+#ifndef __cplusplus
|
|
||||||
#define atomic_fetch_add(ptr, n) __atomic_fetch_add(ptr, n, __ATOMIC_SEQ_CST)
|
|
||||||
#define atomic_fetch_sub(ptr, n) __atomic_fetch_sub(ptr, n, __ATOMIC_SEQ_CST)
|
|
||||||
#define atomic_fetch_and(ptr, n) __atomic_fetch_and(ptr, n, __ATOMIC_SEQ_CST)
|
|
||||||
#define atomic_fetch_or(ptr, n) __atomic_fetch_or(ptr, n, __ATOMIC_SEQ_CST)
|
|
||||||
+#endif
|
|
||||||
#define atomic_fetch_xor(ptr, n) __atomic_fetch_xor(ptr, n, __ATOMIC_SEQ_CST)
|
|
||||||
|
|
||||||
#define atomic_inc_fetch(ptr) __atomic_add_fetch(ptr, 1, __ATOMIC_SEQ_CST)
|
|
||||||
@@ -218,10 +220,12 @@
|
|
||||||
/* And even shorter names that return void. */
|
|
||||||
#define atomic_inc(ptr) ((void) __atomic_fetch_add(ptr, 1, __ATOMIC_SEQ_CST))
|
|
||||||
#define atomic_dec(ptr) ((void) __atomic_fetch_sub(ptr, 1, __ATOMIC_SEQ_CST))
|
|
||||||
+#ifndef __cplusplus
|
|
||||||
#define atomic_add(ptr, n) ((void) __atomic_fetch_add(ptr, n, __ATOMIC_SEQ_CST))
|
|
||||||
#define atomic_sub(ptr, n) ((void) __atomic_fetch_sub(ptr, n, __ATOMIC_SEQ_CST))
|
|
||||||
#define atomic_and(ptr, n) ((void) __atomic_fetch_and(ptr, n, __ATOMIC_SEQ_CST))
|
|
||||||
#define atomic_or(ptr, n) ((void) __atomic_fetch_or(ptr, n, __ATOMIC_SEQ_CST))
|
|
||||||
+#endif
|
|
||||||
#define atomic_xor(ptr, n) ((void) __atomic_fetch_xor(ptr, n, __ATOMIC_SEQ_CST))
|
|
||||||
|
|
||||||
#else /* __ATOMIC_RELAXED */
|
|
||||||
@@ -389,10 +393,12 @@
|
|
||||||
|
|
||||||
#define atomic_inc_fetch(ptr) __sync_add_and_fetch(ptr, 1)
|
|
||||||
#define atomic_dec_fetch(ptr) __sync_add_and_fetch(ptr, -1)
|
|
||||||
+#ifndef __cplusplus
|
|
||||||
#define atomic_add_fetch(ptr, n) __sync_add_and_fetch(ptr, n)
|
|
||||||
#define atomic_sub_fetch(ptr, n) __sync_sub_and_fetch(ptr, n)
|
|
||||||
#define atomic_and_fetch(ptr, n) __sync_and_and_fetch(ptr, n)
|
|
||||||
#define atomic_or_fetch(ptr, n) __sync_or_and_fetch(ptr, n)
|
|
||||||
+#endif
|
|
||||||
#define atomic_xor_fetch(ptr, n) __sync_xor_and_fetch(ptr, n)
|
|
||||||
|
|
||||||
#define atomic_cmpxchg(ptr, old, new) __sync_val_compare_and_swap(ptr, old, new)
|
|
||||||
@@ -401,10 +407,12 @@
|
|
||||||
/* And even shorter names that return void. */
|
|
||||||
#define atomic_inc(ptr) ((void) __sync_fetch_and_add(ptr, 1))
|
|
||||||
#define atomic_dec(ptr) ((void) __sync_fetch_and_add(ptr, -1))
|
|
||||||
+#ifndef __cplusplus
|
|
||||||
#define atomic_add(ptr, n) ((void) __sync_fetch_and_add(ptr, n))
|
|
||||||
#define atomic_sub(ptr, n) ((void) __sync_fetch_and_sub(ptr, n))
|
|
||||||
#define atomic_and(ptr, n) ((void) __sync_fetch_and_and(ptr, n))
|
|
||||||
#define atomic_or(ptr, n) ((void) __sync_fetch_and_or(ptr, n))
|
|
||||||
+#endif
|
|
||||||
#define atomic_xor(ptr, n) ((void) __sync_fetch_and_xor(ptr, n))
|
|
||||||
|
|
||||||
#endif /* __ATOMIC_RELAXED */
|
|
@ -1,21 +0,0 @@
|
|||||||
--- qemu-doc.texi.orig 2019-04-23 18:14:46 UTC
|
|
||||||
+++ qemu-doc.texi
|
|
||||||
@@ -200,7 +200,7 @@ VGA BIOS.
|
|
||||||
QEMU uses YM3812 emulation by Tatsuyuki Satoh.
|
|
||||||
|
|
||||||
QEMU uses GUS emulation (GUSEMU32 @url{http://www.deinmeister.de/gusemu/})
|
|
||||||
-by Tibor "TS" Schütz.
|
|
||||||
+by Tibor "TS" Schuetz.
|
|
||||||
|
|
||||||
Note that, by default, GUS shares IRQ(7) with parallel ports and so
|
|
||||||
QEMU must be told to not have parallel ports to have working GUS.
|
|
||||||
@@ -560,7 +560,8 @@ Send the escape character to the frontend
|
|
||||||
|
|
||||||
@c man begin SEEALSO
|
|
||||||
The HTML documentation of QEMU for more precise information and Linux
|
|
||||||
-user mode emulator invocation.
|
|
||||||
+user mode emulator invocation, as well as the FreeBSD host notes in
|
|
||||||
+@file{pkg-message} in the relevant qemu port directory.
|
|
||||||
@c man end
|
|
||||||
|
|
||||||
@c man begin AUTHOR
|
|
@ -1,13 +0,0 @@
|
|||||||
--- 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 */
|
|
@ -1,250 +0,0 @@
|
|||||||
--- 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 <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
|
|
||||||
@@ -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 <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_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,
|
|
||||||
@@ -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
|
|
||||||
+#ifdef CONFIG_PCAP
|
|
||||||
+ [NET_CLIENT_DRIVER_PCAP] = net_init_pcap,
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
|||||||
--- 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.
|
|
||||||
@@ -454,7 +467,7 @@
|
|
||||||
##
|
|
||||||
{ 'enum': 'NetClientDriver',
|
|
||||||
'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
|
|
||||||
- 'bridge', 'hubport', 'netmap', 'vhost-user' ] }
|
|
||||||
+ 'bridge', 'hubport', 'netmap', 'vhost-user', 'pcap' ] }
|
|
||||||
|
|
||||||
##
|
|
||||||
# @Netdev:
|
|
||||||
@@ -478,6 +491,7 @@
|
|
||||||
'user': 'NetdevUserOptions',
|
|
||||||
'tap': 'NetdevTapOptions',
|
|
||||||
'l2tpv3': 'NetdevL2TPv3Options',
|
|
||||||
+ 'pcap': 'NetdevPcapOptions',
|
|
||||||
'socket': 'NetdevSocketOptions',
|
|
||||||
'vde': 'NetdevVdeOptions',
|
|
||||||
'bridge': 'NetdevBridgeOptions',
|
|
||||||
@@ -514,7 +528,7 @@
|
|
||||||
##
|
|
||||||
{ 'enum': 'NetLegacyOptionsType',
|
|
||||||
'data': ['none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
|
|
||||||
- 'bridge', 'netmap', 'vhost-user'] }
|
|
||||||
+ 'bridge', 'netmap', 'vhost-user', 'pcap'] }
|
|
||||||
|
|
||||||
##
|
|
||||||
# @NetLegacyOptions:
|
|
||||||
@@ -532,6 +546,7 @@
|
|
||||||
'user': 'NetdevUserOptions',
|
|
||||||
'tap': 'NetdevTapOptions',
|
|
||||||
'l2tpv3': 'NetdevL2TPv3Options',
|
|
||||||
+ 'pcap': 'NetdevPcapOptions',
|
|
||||||
'socket': 'NetdevSocketOptions',
|
|
||||||
'vde': 'NetdevVdeOptions',
|
|
||||||
'bridge': 'NetdevBridgeOptions',
|
|
@ -8,8 +8,10 @@ bin/qemu-io
|
|||||||
bin/qemu-nbd
|
bin/qemu-nbd
|
||||||
%%NO_X86_TARGETS%%bin/qemu-sparc
|
%%NO_X86_TARGETS%%bin/qemu-sparc
|
||||||
%%NO_X86_TARGETS%%bin/qemu-sparc64
|
%%NO_X86_TARGETS%%bin/qemu-sparc64
|
||||||
|
bin/qemu-storage-daemon
|
||||||
%%NO_X86_TARGETS%%bin/qemu-system-aarch64
|
%%NO_X86_TARGETS%%bin/qemu-system-aarch64
|
||||||
%%NO_X86_TARGETS%%bin/qemu-system-alpha
|
%%NO_X86_TARGETS%%bin/qemu-system-alpha
|
||||||
|
%%NO_X86_TARGETS%%bin/qemu-system-avr
|
||||||
%%NO_X86_TARGETS%%bin/qemu-system-arm
|
%%NO_X86_TARGETS%%bin/qemu-system-arm
|
||||||
%%NO_X86_TARGETS%%bin/qemu-system-cris
|
%%NO_X86_TARGETS%%bin/qemu-system-cris
|
||||||
%%NO_X86_TARGETS%%bin/qemu-system-hppa
|
%%NO_X86_TARGETS%%bin/qemu-system-hppa
|
||||||
@ -29,6 +31,7 @@ bin/qemu-system-i386
|
|||||||
%%NO_X86_TARGETS%%bin/qemu-system-ppc64
|
%%NO_X86_TARGETS%%bin/qemu-system-ppc64
|
||||||
%%NO_X86_TARGETS%%bin/qemu-system-riscv32
|
%%NO_X86_TARGETS%%bin/qemu-system-riscv32
|
||||||
%%NO_X86_TARGETS%%bin/qemu-system-riscv64
|
%%NO_X86_TARGETS%%bin/qemu-system-riscv64
|
||||||
|
%%NO_X86_TARGETS%%bin/qemu-system-rx
|
||||||
%%NO_X86_TARGETS%%bin/qemu-system-s390x
|
%%NO_X86_TARGETS%%bin/qemu-system-s390x
|
||||||
%%NO_X86_TARGETS%%bin/qemu-system-sh4
|
%%NO_X86_TARGETS%%bin/qemu-system-sh4
|
||||||
%%NO_X86_TARGETS%%bin/qemu-system-sh4eb
|
%%NO_X86_TARGETS%%bin/qemu-system-sh4eb
|
||||||
@ -80,18 +83,20 @@ man/man8/qemu-nbd.8.gz
|
|||||||
%%DATADIR%%/firmware/60-edk2-i386.json
|
%%DATADIR%%/firmware/60-edk2-i386.json
|
||||||
%%DATADIR%%/firmware/60-edk2-x86_64.json
|
%%DATADIR%%/firmware/60-edk2-x86_64.json
|
||||||
%%DATADIR%%/hppa-firmware.img
|
%%DATADIR%%/hppa-firmware.img
|
||||||
|
%%DATADIR%%/keymaps/sl
|
||||||
|
%%DATADIR%%/keymaps/sv
|
||||||
%%DATADIR%%/linuxboot.bin
|
%%DATADIR%%/linuxboot.bin
|
||||||
%%LINUXBOOT_DMA%%%%DATADIR%%/linuxboot_dma.bin
|
%%LINUXBOOT_DMA%%%%DATADIR%%/linuxboot_dma.bin
|
||||||
%%DATADIR%%/multiboot.bin
|
%%DATADIR%%/multiboot.bin
|
||||||
%%DATADIR%%/openbios-ppc
|
%%DATADIR%%/openbios-ppc
|
||||||
%%DATADIR%%/openbios-sparc32
|
%%DATADIR%%/openbios-sparc32
|
||||||
%%DATADIR%%/openbios-sparc64
|
%%DATADIR%%/openbios-sparc64
|
||||||
%%DATADIR%%/opensbi-riscv32-virt-fw_jump.bin
|
%%DATADIR%%/opensbi-riscv32-generic-fw_dynamic.bin
|
||||||
%%DATADIR%%/opensbi-riscv64-sifive_u-fw_jump.bin
|
%%DATADIR%%/opensbi-riscv32-generic-fw_dynamic.elf
|
||||||
%%DATADIR%%/opensbi-riscv64-virt-fw_jump.bin
|
%%DATADIR%%/opensbi-riscv64-generic-fw_dynamic.bin
|
||||||
|
%%DATADIR%%/opensbi-riscv64-generic-fw_dynamic.elf
|
||||||
%%DATADIR%%/palcode-clipper
|
%%DATADIR%%/palcode-clipper
|
||||||
%%DATADIR%%/petalogix-ml605.dtb
|
%%DATADIR%%/petalogix-ml605.dtb
|
||||||
%%DATADIR%%/ppc_rom.bin
|
|
||||||
%%DATADIR%%/pxe-e1000.rom
|
%%DATADIR%%/pxe-e1000.rom
|
||||||
%%DATADIR%%/pxe-eepro100.rom
|
%%DATADIR%%/pxe-eepro100.rom
|
||||||
%%DATADIR%%/pxe-ne2k_pci.rom
|
%%DATADIR%%/pxe-ne2k_pci.rom
|
||||||
@ -118,40 +123,6 @@ man/man8/qemu-nbd.8.gz
|
|||||||
%%DATADIR%%/bamboo.dtb
|
%%DATADIR%%/bamboo.dtb
|
||||||
%%DATADIR%%/kvmvapic.bin
|
%%DATADIR%%/kvmvapic.bin
|
||||||
%%DATADIR%%/u-boot.e500
|
%%DATADIR%%/u-boot.e500
|
||||||
%%DATADIR%%/keymaps/ar
|
|
||||||
%%DATADIR%%/keymaps/bepo
|
|
||||||
%%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/nl
|
|
||||||
%%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
|
|
||||||
%%DATADIR%%/pvh.bin
|
%%DATADIR%%/pvh.bin
|
||||||
%%DATADIR%%/vgabios-bochs-display.bin
|
%%DATADIR%%/vgabios-bochs-display.bin
|
||||||
%%DATADIR%%/vgabios-ramfb.bin
|
%%DATADIR%%/vgabios-ramfb.bin
|
||||||
@ -171,5 +142,6 @@ share/applications/qemu.desktop
|
|||||||
%%GTK3%%share/locale/fr_FR/LC_MESSAGES/qemu.mo
|
%%GTK3%%share/locale/fr_FR/LC_MESSAGES/qemu.mo
|
||||||
%%GTK3%%share/locale/hu/LC_MESSAGES/qemu.mo
|
%%GTK3%%share/locale/hu/LC_MESSAGES/qemu.mo
|
||||||
%%GTK3%%share/locale/it/LC_MESSAGES/qemu.mo
|
%%GTK3%%share/locale/it/LC_MESSAGES/qemu.mo
|
||||||
|
%%GTK3%%share/locale/sv/LC_MESSAGES/qemu.mo
|
||||||
%%GTK3%%share/locale/tr/LC_MESSAGES/qemu.mo
|
%%GTK3%%share/locale/tr/LC_MESSAGES/qemu.mo
|
||||||
%%GTK3%%share/locale/zh_CN/LC_MESSAGES/qemu.mo
|
%%GTK3%%share/locale/zh_CN/LC_MESSAGES/qemu.mo
|
||||||
|
Loading…
Reference in New Issue
Block a user