mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-04 01:48:54 +00:00
emulators/qemu30: QEMU CPU Emulator
- Specific to version 3.0 in preperation for upgrading qemu to 3.1.X - USES=gl is not always needed [1] PR: 238364 [1] Submitted by: pizzamig [1]
This commit is contained in:
parent
af5ed5e1af
commit
8a9c1e21fb
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=508241
@ -119,6 +119,7 @@
|
||||
SUBDIR += qemu-user-static
|
||||
SUBDIR += qemu-utils
|
||||
SUBDIR += qemu2
|
||||
SUBDIR += qemu30
|
||||
SUBDIR += qmc2
|
||||
SUBDIR += quasi88
|
||||
SUBDIR += riscv-fesvr
|
||||
|
145
emulators/qemu30/Makefile
Normal file
145
emulators/qemu30/Makefile
Normal file
@ -0,0 +1,145 @@
|
||||
# Created by: Juergen Lock <nox@jelal.kn-bremen.de>
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= qemu
|
||||
PORTVERSION= 3.0.1
|
||||
CATEGORIES= emulators
|
||||
MASTER_SITES= https://download.qemu.org/
|
||||
PKGNAMESUFFIX= 30
|
||||
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
|
||||
|
||||
USES?= cpe gmake gnome pkgconfig bison perl5 python:build tar:xz
|
||||
USE_PERL5= build
|
||||
|
||||
PORTSCOUT= limit:^3\.0\.
|
||||
|
||||
HAS_CONFIGURE= yes
|
||||
MAKE_ENV+= BSD_MAKE="${MAKE}" V=1
|
||||
|
||||
OPTIONS_DEFINE= SAMBA X11 GTK3 OPENGL GNUTLS SASL JPEG PNG CURL \
|
||||
VDE CDROM_DMA PCAP USBREDIR X86_TARGETS \
|
||||
STATIC_LINK DOCS NCURSES
|
||||
CDROM_DMA_DESC= IDE CDROM DMA
|
||||
GNUTLS_DESC= gnutls dependency (vnc encryption)
|
||||
JPEG_DESC= jpeg dependency (vnc lossy compression)
|
||||
PCAP_DESC= pcap dependency (networking with bpf)
|
||||
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
|
||||
OPTIONS_DEFAULT=X11 GTK3 OPENGL GNUTLS SASL JPEG PNG CDROM_DMA CURL PCAP NCURSES VDE
|
||||
OPTIONS_SUB= yes
|
||||
CURL_CONFIGURE_OFF= --disable-curl
|
||||
CURL_LIB_DEPENDS= libcurl.so:ftp/curl
|
||||
DOCS_BUILD_DEPENDS= texi2html:textproc/texi2html
|
||||
DOCS_MAKE_ARGS_OFF= NOPORTDOCS=1
|
||||
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 \
|
||||
libepoxy.so:graphics/libepoxy \
|
||||
libpcre2-8.so:devel/pcre2
|
||||
GTK3_USE= GNOME=gtk30,vte3,gdkpixbuf2 XORG=x11,xext GL=gbm
|
||||
GTK3_USES= gettext gl
|
||||
JPEG_CONFIGURE_OFF= --disable-vnc-jpeg
|
||||
JPEG_USES= jpeg
|
||||
NCURSES_USES= ncurses:base
|
||||
OPENGL_CONFIGURE_OFF= --disable-opengl
|
||||
OPENGL_USE= GL=glu
|
||||
OPENGL_USES= gl
|
||||
PCAP_CONFIGURE_ON= --enable-pcap
|
||||
PCAP_EXTRA_PATCHES= ${FILESDIR}/pcap-patch ${FILESDIR}/pcap-patch-net_net.c \
|
||||
${FILESDIR}/pcap-patch-net_clients.h
|
||||
PNG_CONFIGURE_OFF= --disable-vnc-png
|
||||
PNG_LIB_DEPENDS= libpng.so:graphics/png
|
||||
SAMBA_CONFIGURE_ON= --smbd=${LOCALBASE}/sbin/smbd
|
||||
SAMBA_USES= samba:run # smbd
|
||||
SASL_CONFIGURE_OFF= --disable-vnc-sasl
|
||||
SASL_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2
|
||||
STATIC_LINK_CONFIGURE_ON= --static
|
||||
STATIC_LINK_PREVENTS= GTK2 X11
|
||||
STATIC_LINK_PREVENTS_MSG= X11 ui cannot be built static
|
||||
USBREDIR_BUILD_DEPENDS= usbredir>=0.6:net/usbredir
|
||||
USBREDIR_CONFIGURE_OFF= --disable-usb-redir
|
||||
USBREDIR_RUN_DEPENDS= usbredir>=0.6:net/usbredir
|
||||
VDE_CONFIGURE_OFF= --disable-vde
|
||||
VDE_LIB_DEPENDS= libvdeplug.so:net/vde2
|
||||
X11_CONFIGURE_ENABLE= sdl
|
||||
X11_USE= SDL=sdl2 XORG=x11,xext
|
||||
X11_USES= sdl
|
||||
.if !defined(PKGNAMESUFFIX) || ${PKGNAMESUFFIX} != "-utils"
|
||||
X86_TARGETS_USE_OFF= GNOME=cairo,gdkpixbuf2
|
||||
.endif
|
||||
|
||||
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-netmap --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}\\\"\"
|
||||
|
||||
.include <bsd.port.options.mk>
|
||||
|
||||
.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
|
||||
|
||||
PLIST_SUB+= LINUXBOOT_DMA=""
|
||||
|
||||
post-patch-CDROM_DMA-off:
|
||||
@${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
|
||||
# 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-*
|
||||
|
||||
post-install-DOCS-on:
|
||||
@(cd ${WRKSRC} && ${COPYTREE_SHARE} docs ${STAGEDIR}${DOCSDIR}/)
|
||||
.endif
|
||||
|
||||
.include <bsd.port.mk>
|
3
emulators/qemu30/distinfo
Normal file
3
emulators/qemu30/distinfo
Normal file
@ -0,0 +1,3 @@
|
||||
TIMESTAMP = 1555276984
|
||||
SHA256 (qemu/3.0.1/qemu-3.0.1.tar.xz) = cf5747aa3bf0e7ec6cb166f48be4680097c333ce320e8e58140980b0d99512f3
|
||||
SIZE (qemu/3.0.1/qemu-3.0.1.tar.xz) = 35626524
|
42
emulators/qemu30/files/patch-Makefile
Normal file
42
emulators/qemu30/files/patch-Makefile
Normal file
@ -0,0 +1,42 @@
|
||||
--- Makefile.orig 2019-04-12 03:28:28 UTC
|
||||
+++ Makefile
|
||||
@@ -353,9 +353,14 @@ LIBS+=-lz $(LIBS_TOOLS)
|
||||
HELPERS-$(call land,$(CONFIG_SOFTMMU),$(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/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 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
|
||||
ifdef CONFIG_VIRTFS
|
||||
DOCS+=fsdev/virtfs-proxy-helper.1
|
||||
@@ -812,11 +817,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/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"
|
||||
@@ -830,8 +837,10 @@ ifneq ($(TOOLS),)
|
||||
endif
|
||||
ifneq (,$(findstring qemu-ga,$(TOOLS)))
|
||||
$(INSTALL_DATA) 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
|
264
emulators/qemu30/files/patch-configure
Normal file
264
emulators/qemu30/files/patch-configure
Normal file
@ -0,0 +1,264 @@
|
||||
--- configure.orig 2019-04-14 21:25:18 UTC
|
||||
+++ configure
|
||||
@@ -375,6 +375,7 @@ hax="no"
|
||||
hvf="no"
|
||||
whpx="no"
|
||||
rdma=""
|
||||
+pvrdma=""
|
||||
gprof="no"
|
||||
debug_tcg="no"
|
||||
debug="no"
|
||||
@@ -391,7 +392,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"
|
||||
@@ -471,6 +472,9 @@ numa=""
|
||||
tcmalloc="no"
|
||||
jemalloc="no"
|
||||
replication="yes"
|
||||
+pcap="no"
|
||||
+pcap_create="no"
|
||||
+bpf="no"
|
||||
vxhs=""
|
||||
libxml2=""
|
||||
docker="no"
|
||||
@@ -1087,6 +1091,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"
|
||||
@@ -1363,6 +1371,10 @@ for opt do
|
||||
;;
|
||||
--disable-rdma) rdma="no"
|
||||
;;
|
||||
+ --enable-pvrdma) pvrdma="yes"
|
||||
+ ;;
|
||||
+ --disable-pvrdma) pvrdma="no"
|
||||
+ ;;
|
||||
--with-gtkabi=*) gtkabi="$optarg"
|
||||
;;
|
||||
--disable-vte) vte="no"
|
||||
@@ -1669,7 +1681,8 @@ disabled with --disable-FEATURE, default is enabled if
|
||||
hax HAX acceleration support
|
||||
hvf Hypervisor.framework acceleration support
|
||||
whpx Windows Hypervisor Platform acceleration support
|
||||
- rdma Enable RDMA-based migration and PVRDMA support
|
||||
+ rdma Enable RDMA-based migration
|
||||
+ pvrdma Enable PVRDMA support
|
||||
vde support for vde network
|
||||
netmap support for netmap network
|
||||
linux-aio Linux AIO support
|
||||
@@ -2881,7 +2894,49 @@ else
|
||||
tasn1=no
|
||||
fi
|
||||
|
||||
+##########################################
|
||||
+# PVRDMA detection
|
||||
|
||||
+cat > $TMPC <<EOF &&
|
||||
+#include <sys/mman.h>
|
||||
+
|
||||
+int
|
||||
+main(void)
|
||||
+{
|
||||
+ char buf = 0;
|
||||
+ void *addr = &buf;
|
||||
+ addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+EOF
|
||||
+
|
||||
+if test "$rdma" = "yes" ; then
|
||||
+ case "$pvrdma" in
|
||||
+ "")
|
||||
+ if compile_prog "" ""; then
|
||||
+ pvrdma="yes"
|
||||
+ else
|
||||
+ pvrdma="no"
|
||||
+ fi
|
||||
+ ;;
|
||||
+ "yes")
|
||||
+ if ! compile_prog "" ""; then
|
||||
+ error_exit "PVRDMA is not supported since mremap is not implemented"
|
||||
+ fi
|
||||
+ pvrdma="yes"
|
||||
+ ;;
|
||||
+ "no")
|
||||
+ pvrdma="no"
|
||||
+ ;;
|
||||
+ esac
|
||||
+else
|
||||
+ if test "$pvrdma" = "yes" ; then
|
||||
+ error_exit "PVRDMA requires rdma suppport"
|
||||
+ fi
|
||||
+ pvrdma="no"
|
||||
+fi
|
||||
+
|
||||
##########################################
|
||||
# getifaddrs (for tests/test-io-channel-socket )
|
||||
|
||||
@@ -2891,6 +2946,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
|
||||
@@ -3061,7 +3124,51 @@ 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
|
||||
if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
|
||||
@@ -3474,7 +3581,7 @@ for i in $glib_modules; do
|
||||
glib_libs=$($pkg_config --libs $i)
|
||||
QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
|
||||
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
|
||||
@@ -4419,14 +4526,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
|
||||
@@ -4551,7 +4651,7 @@ fi
|
||||
|
||||
# check for libusb
|
||||
if test "$libusb" != "no" ; then
|
||||
- if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
|
||||
+ if $pkg_config libusb-1.0; then
|
||||
libusb="yes"
|
||||
libusb_cflags=$($pkg_config --cflags libusb-1.0)
|
||||
libusb_libs=$($pkg_config --libs libusb-1.0)
|
||||
@@ -5914,6 +6014,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
|
||||
@@ -5949,6 +6050,7 @@ if test "$tcg" = "yes" ; then
|
||||
fi
|
||||
echo "malloc trim support $malloc_trim"
|
||||
echo "RDMA support $rdma"
|
||||
+echo "PVRDMA support $pvrdma"
|
||||
echo "fdt support $fdt"
|
||||
echo "membarrier $membarrier"
|
||||
echo "preadv support $preadv"
|
||||
@@ -6143,6 +6245,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
|
||||
@@ -6384,6 +6495,9 @@ fi
|
||||
if test "$have_fsxattr" = "yes" ; then
|
||||
echo "HAVE_FSXATTR=y" >> $config_host_mak
|
||||
fi
|
||||
+if test "$have_ifaddrs_h" = "yes" ; then
|
||||
+ echo "HAVE_IFADDRS_H=y" >> $config_host_mak
|
||||
+fi
|
||||
if test "$have_copy_file_range" = "yes" ; then
|
||||
echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
|
||||
fi
|
||||
@@ -6703,6 +6817,10 @@ echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_m
|
||||
if test "$rdma" = "yes" ; then
|
||||
echo "CONFIG_RDMA=y" >> $config_host_mak
|
||||
echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
|
||||
+fi
|
||||
+
|
||||
+if test "$pvrdma" = "yes" ; then
|
||||
+ echo "CONFIG_PVRDMA=y" >> $config_host_mak
|
||||
fi
|
||||
|
||||
if test "$have_rtnetlink" = "yes" ; then
|
@ -0,0 +1,11 @@
|
||||
--- disas/libvixl/vixl/a64/disasm-a64.cc.orig 2019-04-12 03:28:28 UTC
|
||||
+++ disas/libvixl/vixl/a64/disasm-a64.cc
|
||||
@@ -2693,7 +2693,7 @@ void Disassembler::AppendPCRelativeOffsetToOutput(cons
|
||||
if (offset < 0) {
|
||||
abs_offset = -abs_offset;
|
||||
}
|
||||
- AppendToOutput("#%c0x%" PRIx64, sign, abs_offset);
|
||||
+ AppendToOutput("#%c0x%" PRIx64, sign, offset < 0 ? -offset : offset);
|
||||
}
|
||||
|
||||
|
8
emulators/qemu30/files/patch-hw_rdma_Makefile.objs
Normal file
8
emulators/qemu30/files/patch-hw_rdma_Makefile.objs
Normal file
@ -0,0 +1,8 @@
|
||||
--- hw/rdma/Makefile.objs.orig 2019-04-12 03:28:28 UTC
|
||||
+++ hw/rdma/Makefile.objs
|
||||
@@ -1,4 +1,4 @@
|
||||
-ifeq ($(CONFIG_RDMA),y)
|
||||
+ifeq ($(CONFIG_PVRDMA),y)
|
||||
obj-$(CONFIG_PCI) += rdma_utils.o rdma_backend.o rdma_rm.o
|
||||
obj-$(CONFIG_PCI) += vmw/pvrdma_dev_ring.o vmw/pvrdma_cmd.o \
|
||||
vmw/pvrdma_qp_ops.o vmw/pvrdma_main.o
|
10
emulators/qemu30/files/patch-hw_rdma_vmw_pvrdma__cmd.c
Normal file
10
emulators/qemu30/files/patch-hw_rdma_vmw_pvrdma__cmd.c
Normal file
@ -0,0 +1,10 @@
|
||||
--- hw/rdma/vmw/pvrdma_cmd.c.orig 2019-04-12 03:28:28 UTC
|
||||
+++ hw/rdma/vmw/pvrdma_cmd.c
|
||||
@@ -16,7 +16,6 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "cpu.h"
|
||||
-#include <linux/types.h>
|
||||
#include "hw/hw.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/pci/pci_ids.h"
|
13
emulators/qemu30/files/patch-include_net_net.h
Normal file
13
emulators/qemu30/files/patch-include_net_net.h
Normal file
@ -0,0 +1,13 @@
|
||||
--- include/net/net.h.orig 2019-04-12 03:28:28 UTC
|
||||
+++ include/net/net.h
|
||||
@@ -210,8 +210,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"
|
||||
|
54
emulators/qemu30/files/patch-include_qemu_atomic.h
Normal file
54
emulators/qemu30/files/patch-include_qemu_atomic.h
Normal file
@ -0,0 +1,54 @@
|
||||
--- include/qemu/atomic.h.orig 2019-04-12 03:28:28 UTC
|
||||
+++ include/qemu/atomic.h
|
||||
@@ -200,10 +200,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)
|
||||
@@ -217,10 +219,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 */
|
||||
@@ -388,10 +392,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)
|
||||
@@ -400,10 +406,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 */
|
10
emulators/qemu30/files/patch-net_tap-bsd.c
Normal file
10
emulators/qemu30/files/patch-net_tap-bsd.c
Normal file
@ -0,0 +1,10 @@
|
||||
--- net/tap-bsd.c.orig 2019-04-12 03:28:28 UTC
|
||||
+++ net/tap-bsd.c
|
||||
@@ -31,6 +31,7 @@
|
||||
|
||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
||||
#include <sys/ioctl.h>
|
||||
+#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
#include <net/if_tap.h>
|
||||
#endif
|
21
emulators/qemu30/files/patch-qemu-doc.texi
Normal file
21
emulators/qemu30/files/patch-qemu-doc.texi
Normal file
@ -0,0 +1,21 @@
|
||||
--- qemu-doc.texi.orig 2019-04-12 03:28:29 UTC
|
||||
+++ qemu-doc.texi
|
||||
@@ -198,7 +198,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.
|
||||
@@ -558,7 +558,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
|
56
emulators/qemu30/files/pcap-patch
Normal file
56
emulators/qemu30/files/pcap-patch
Normal file
@ -0,0 +1,56 @@
|
||||
--- 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',
|
13
emulators/qemu30/files/pcap-patch-net_clients.h
Normal file
13
emulators/qemu30/files/pcap-patch-net_clients.h
Normal file
@ -0,0 +1,13 @@
|
||||
--- 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 */
|
250
emulators/qemu30/files/pcap-patch-net_net.c
Normal file
250
emulators/qemu30/files/pcap-patch-net_net.c
Normal file
@ -0,0 +1,250 @@
|
||||
--- 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
|
||||
};
|
||||
|
2
emulators/qemu30/files/qemu-ifdown.sample
Normal file
2
emulators/qemu30/files/qemu-ifdown.sample
Normal file
@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
exec true
|
2
emulators/qemu30/files/qemu-ifup.sample
Normal file
2
emulators/qemu30/files/qemu-ifup.sample
Normal file
@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
exec true
|
19
emulators/qemu30/pkg-descr
Normal file
19
emulators/qemu30/pkg-descr
Normal file
@ -0,0 +1,19 @@
|
||||
QEMU is a FAST! processor emulator using dynamic translation to achieve
|
||||
good emulation speed.
|
||||
QEMU has two operating modes:
|
||||
|
||||
* Full system emulation. In this mode, QEMU emulates a full system
|
||||
(for example a PC), including a processor and various peripherials.
|
||||
It can be used to launch different Operating Systems without rebooting
|
||||
the PC or to debug system code.
|
||||
* User mode emulation (Linux host only). In this mode, QEMU can launch
|
||||
Linux processes compiled for one CPU on another CPU. It can be used to
|
||||
launch the Wine Windows API emulator or to ease cross-compilation and
|
||||
cross-debugging.
|
||||
|
||||
As QEMU requires no host kernel patches to run, it is very safe and easy to use.
|
||||
|
||||
See also the preconfigured system images on http://oszoo.org/
|
||||
Many live cd isos also work.
|
||||
|
||||
WWW: http://wiki.qemu.org/Main_Page
|
182
emulators/qemu30/pkg-message
Normal file
182
emulators/qemu30/pkg-message
Normal file
@ -0,0 +1,182 @@
|
||||
FreeBSD host notes
|
||||
==================
|
||||
|
||||
- Needs to set net.link.tap.user_open sysctl in order to use /dev/tap*
|
||||
networking as non-root. Don't forget to adjust device node permissions in
|
||||
/etc/devfs.rules.
|
||||
|
||||
- slirp (usermode networking) is fixed now in cvs, on FreeSBIE 1.0 guests you
|
||||
still have to manually do: echo nameserver 10.0.2.3 >/etc/resolv.conf but
|
||||
i've been told that that's normal. (fixed on FreeSBIE 1.1.) And you have
|
||||
to wait a bit for dhclient to do its thing; traffic to address 10.0.2.2 is
|
||||
routed to 127.1 on the host.
|
||||
|
||||
- Expect timer problems when guest kernel HZ is > hosts, for example time
|
||||
sleep 1 takes 49 seconds and booting sleeps for minutes at the acd0 probe
|
||||
with a FreeSBIE 1.0 guest, thats because its kernel is built with HZ=5000,
|
||||
and FreeBSD's default is 100... (no longer a problem with FreeSBIE 1.1.)
|
||||
The linux 2.6 kernel uses 1000 by default btw. (changed to 250 later, and
|
||||
recent linux kernels now no longer have a fixed HZ, aka `tickless
|
||||
kernel'...) Enabling /dev/rtc doesn't seem to help either (not included
|
||||
since it needs a patch to emulators/rtc.)
|
||||
|
||||
- Update: the above problem has gotten worse with FreeBSD guests
|
||||
somewhere before 8.0, mainly since the kernel now usually wants
|
||||
double or even quadruple number of timer irqs compared to HZ if
|
||||
it detects an apic (and at least early versions of FreeBSD 8 had
|
||||
a bug that essentially halved qemu's clock rate too); the only
|
||||
reason you usually don't see symptoms of this with FreeBSD 8
|
||||
guests is they automatically reduce their HZ to 100 when running
|
||||
in a VM while the default for the host kernel is still HZ=1000.
|
||||
Workaround: you can disable the apic clock in the guest by setting
|
||||
|
||||
hint.apic.0.clock="0"
|
||||
|
||||
in loader.conf(5) (or manually at the loader prompt), if that
|
||||
doesn't work the only things you can do is either reduce the
|
||||
guest's HZ to, say, 100 by setting e.g.
|
||||
|
||||
kern.hz="100"
|
||||
|
||||
from the loader as above (which usually is a good idea in a VM
|
||||
anyway and FreeBSD 8 now does by itself as mentioned), or otherwise
|
||||
increase the host's HZ to 2000 or even 4000 from the loader in
|
||||
the same way.
|
||||
|
||||
- The -smb option (smb-export local dir to guest using the default
|
||||
slirp networking) needs the samba port/package installed
|
||||
in addition to qemu. (SAMBA knob.)
|
||||
|
||||
- If you want to use usb devices connected to the host in the guest
|
||||
yot need either recent 10-current (not tested yet much) or you can
|
||||
use usbredir over the network (see below); also unless you are
|
||||
running qemu as root you then need to fix permissions for /dev/ugen*
|
||||
device nodes: if you are on 5.x or later (devfs) put a rule in
|
||||
/etc/devfs.rules, activate it in /etc/rc.conf and run /etc/rc.d/devfs
|
||||
restart. Example devfs.rules:
|
||||
|
||||
[ugen_ruleset=20]
|
||||
add path 'ugen*' mode 660 group operator
|
||||
|
||||
corresponding rc.conf line:
|
||||
|
||||
devfs_system_ruleset="ugen_ruleset"
|
||||
|
||||
- If you want to test the new (in 0.15.0) usb network redirection (USBREDIR
|
||||
option) see this thread by Hans de Goede <hdegoede <at> redhat.com>:
|
||||
|
||||
http://thread.gmane.org/gmane.comp.emulators.qemu/110176/focus=110183
|
||||
|
||||
Quote:
|
||||
|
||||
Example usage:
|
||||
|
||||
1) Start usbredirserver for a usb device:
|
||||
sudo usbredirserver 045e:0772
|
||||
2) Start qemu with usb2 support + a chardev talking to usbredirserver +
|
||||
a usb-redir device using this chardev:
|
||||
qemu -usb \
|
||||
-readconfig docs/ich9-ehci-uhci.cfg \
|
||||
-chardev socket,id=usbredirchardev,host=localhost,port=4000 \
|
||||
-device usb-redir,chardev=usbredirchardev,id=usbredirdev ...
|
||||
|
||||
[you would replace docs/ich9-ehci-uhci.cfg with e.g.
|
||||
/usr/local/share/doc/qemu/docs/ich9-ehci-uhci.cfg, but turns out
|
||||
ehci was broken for me here with FreeBSD guests and the previous
|
||||
qemu version at least, I got:
|
||||
|
||||
FETCHENTRY: entry at 22C5484 is of type 2 which is not supported yet
|
||||
processing error - resetting ehci HC
|
||||
Assertion failed: (0), function ehci_advance_state, file /data/ports/emulators/qemu-devel/work/qemu-0.15.0/hw/usb-ehci.c, line 2045.
|
||||
|
||||
The new qemu version works better tho.]
|
||||
|
||||
- Still usb: since the hub is no longer attached to the uchi controller and
|
||||
the wakeup mechanism, resume interrupt is not implemented yet linux guests
|
||||
will suspend the bus, i.e. they wont see devices usb_add'ed after its
|
||||
(linux') uhci module got loaded. Workaround: either add devices before
|
||||
linux loads the module or rmmod and modprobe it afterwards. [Not sure
|
||||
if this still applies to the new libusb host code used on recent
|
||||
10-current.]
|
||||
|
||||
- If you get repeated `atapi_poll called!' console messages with FreeBSD
|
||||
guests or other weird cdrom problems then thats probably because the guest
|
||||
has atapicam loaded, which for reasons still to be determined has problems
|
||||
with qemu's now by default enabled cdrom dma. You can build the port with
|
||||
CDROM_DMA disabled to disable it. [Looks like this is fixed in recent
|
||||
FreeBSD guest versions.]
|
||||
|
||||
- If you build qemu wihout SDL and then get crashes running it try passing it
|
||||
-nographic. This should probably be default in that case...
|
||||
|
||||
- qemu's network boot roms (-boot n) have a bug when bootfiles sizes are a
|
||||
multiple of blksize, if this affects you (like with FreeBSD's /boot/pxeboot)
|
||||
you can do like
|
||||
|
||||
cp /boot/pxeboot pxeboot-qemu && chmod +w pxeboot-qemu && echo >>pxeboot-qemu
|
||||
|
||||
and then use pxeboot-qemu. Actually you need recent btx code
|
||||
(from after 7.0 was released) because of the real mode boot
|
||||
problem, so use at least pxeboot from there. And I just did that
|
||||
for the pxeboot extracted out of
|
||||
|
||||
ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/200805/7.0-STABLE-200805-i386-bootonly.iso
|
||||
|
||||
and placed it here:
|
||||
|
||||
http://people.freebsd.org/~nox/qemu/pxeboot-qemu
|
||||
|
||||
- If you use slirp (usernet, the default) and want to mount nfs into the guest
|
||||
and you are not running qemu as root, then mountd(8) on the exporting box
|
||||
needs to be run with -n in order to accept requests from ports >= 1024.
|
||||
|
||||
- (not FreeBSD-specific:) There have been reports of qcow2 corruption with (at
|
||||
least) win2k guests on recent kvm (which uses similar qcow2 code than qemu
|
||||
now, see this thread:
|
||||
|
||||
http://lists.gnu.org/archive/html/qemu-devel/2009-02/msg00713.html -
|
||||
|
||||
the consensus on that thread seems to be that qcow(2) code has always been
|
||||
experimental and you should use raw images if you want reliability; raw is
|
||||
also usually faster.) You should be able to migrate existing images to raw
|
||||
using qemu-img(1)'s convert function; raw doesn't support advanced features
|
||||
like snapshots tho. [a few important qcow2 bugfixed have been committed in
|
||||
the meantime so this _might_ be less of an issue now; and meanwhile there
|
||||
also is the new qed format - I don't know how stable that one is.]
|
||||
|
||||
- (also not FreeBSD-specific:) It is recommended to pass raw images using the
|
||||
new -drive syntax, specifying format=raw explicitly in order to avoid
|
||||
malicious guests being able to exploit the format autodetection thats
|
||||
otherwise getting used. (Not that you should run malicious guests anyway,
|
||||
but this eleminates at least a known attack vector.)
|
||||
|
||||
- qemu now has improved physical cdrom support, but still there is at
|
||||
least one known problem: you need to have the guest eject the disc if you
|
||||
want to change it/take it out, or otherwise the guest may continue using
|
||||
state (like size) of the old disc. (You can also do like `change ide1-cd0
|
||||
/dev/acd0' in the monitor after taking out the disc if a guest cannot eject
|
||||
it itself.)
|
||||
|
||||
- The default configuration location (qemu-ifup script etc.) has been changed
|
||||
from /etc to PREFIX/etc (usually /usr/local/etc). Move your files
|
||||
accordingly.
|
||||
|
||||
- The pcap code (-net nic... -net pcap,ifname=...) should work properly now,
|
||||
with only one exception: Advanced features like TSO used on the host
|
||||
interface can cause oversize packets which now do get truncated to avoid
|
||||
confusing/panicing guests but of course still will cause retransmissions.
|
||||
So if you see slow throughput and `pcap_send: packet size > ..., truncating'
|
||||
messages on qemu's tty try disabling TSO etc on the host interface at least
|
||||
while using pcap.
|
||||
|
||||
- kqemu is no longer supported in qemu upstream after the 0.11 branch
|
||||
was created, which means also not in this version. (Linux has moved
|
||||
on to kvm now for qemu(-like) virtualization needs, so if you want qemu
|
||||
to go faster and don't want to switch to virtualbox or stick to the older
|
||||
emulators/qemu port which is at 0.11.1 atm and as such still supports
|
||||
kqemu you should help getting the FreeBSD kvm port updated and
|
||||
completed:
|
||||
|
||||
http://wiki.freebsd.org/FabioChecconi/PortingLinuxKVMToFreeBSD
|
||||
|
||||
)
|
144
emulators/qemu30/pkg-plist
Normal file
144
emulators/qemu30/pkg-plist
Normal file
@ -0,0 +1,144 @@
|
||||
bin/qemu-ga
|
||||
bin/qemu-i386
|
||||
bin/qemu-img
|
||||
bin/qemu-io
|
||||
%%GTK3%%bin/qemu-keymap
|
||||
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%%/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
|
||||
%%GTK3%%share/locale/bg/LC_MESSAGES/qemu.mo
|
||||
%%GTK3%%share/locale/de_DE/LC_MESSAGES/qemu.mo
|
||||
%%GTK3%%share/locale/fr_FR/LC_MESSAGES/qemu.mo
|
||||
%%GTK3%%share/locale/it/LC_MESSAGES/qemu.mo
|
||||
%%GTK3%%share/locale/hu/LC_MESSAGES/qemu.mo
|
||||
%%GTK3%%share/locale/tr/LC_MESSAGES/qemu.mo
|
||||
%%GTK3%%share/locale/zh_CN/LC_MESSAGES/qemu.mo
|
Loading…
Reference in New Issue
Block a user