emulators/qemu: Update version 5.0.1=>6.1.0

Relnotes: https://wiki.qemu.org/ChangeLog/6.1
This commit is contained in:
Muhammad Moinur Rahman 2021-12-05 19:01:51 -06:00
parent 5ab52ebb4b
commit 3f7e206ef2
13 changed files with 100 additions and 709 deletions

View file

@ -1,51 +1,46 @@
# Created by: Juergen Lock <nox@jelal.kn-bremen.de>
PORTNAME= qemu
PORTVERSION= 5.0.1
PORTREVISION= 2
PORTVERSION= 6.1.0
CATEGORIES= emulators
MASTER_SITES= https://download.qemu.org/
DIST_SUBDIR= qemu/${PORTVERSION}
PATCH_SITES= https://github.com/${PORTNAME}/${PORTNAME}/commit/
MAINTAINER?= bofh@FreeBSD.org
COMMENT?= QEMU CPU Emulator
LICENSE= GPLv2
BUILD_DEPENDS= sphinx-build:textproc/py-sphinx
LIB_DEPENDS?= libnettle.so:security/nettle \
BUILD_DEPENDS= sphinx-build:textproc/py-sphinx \
${PYTHON_PKGNAMEPREFIX}sphinx_rtd_theme>0:textproc/py-sphinx_rtd_theme@${PY_FLAVOR} \
bash:shells/bash
LIB_DEPENDS?= libepoxy.so:graphics/libepoxy \
libfontconfig.so:x11-fonts/fontconfig \
libfreetype.so:print/freetype2 \
libepoxy.so:graphics/libepoxy \
libnettle.so:security/nettle \
libpcre2-8.so:devel/pcre2 \
libzstd.so:archivers/zstd \
libfdt.so:sysutils/dtc
PATCHFILES+= 55765822804f.patch:-p1
PATCHFILES+= aa4d30f6618d.patch:-p1
libzstd.so:archivers/zstd
# libfdt.so:sysutils/dtc
.if !defined(PKGNAMESUFFIX) || (${PKGNAMESUFFIX} != "-utils" && ${PKGNAMESUFFIX} != "-guest-agent")
ONLY_FOR_ARCHS= amd64 i386 powerpc powerpc64 powerpc64le
USES= bison compiler:c11 cpe gmake gnome iconv:wchar_t perl5 \
ONLY_FOR_ARCHS= amd64 powerpc powerpc64 powerpc64 powerpc64le
USES= bison compiler:c11 cpe gmake gnome iconv:wchar_t ninja perl5 \
pkgconfig python:build tar:xz xorg
USE_XORG= pixman
USE_GNOME= cairo glib20 libxml2
USE_PERL5= build
USE_PYTHON= distutils noflavors
USE_XORG= pixman
.endif
USE_PERL5= build
PORTSCOUT= limit:^5\.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 ISCSI CAPSTONE DEBUG
OPTIONS_SINGLE= NCURSES
OPTIONS_SINGLE_NCURSES= NCURSES_DEFAULT NCURSES_BASE NCURSES_PORT
OPTIONS_DEFINE= SAMBA X11 GTK3 OPENGL GNUTLS SASL JPEG PNG CURL VDE \
CDROM_DMA USBREDIR X86_TARGETS STATIC_LINK DOCS ISCSI CAPSTONE DEBUG
OPTIONS_DEFAULT=X11 GTK3 OPENGL GNUTLS SASL JPEG PNG CDROM_DMA CURL NCURSES_DEFAULT VDE
OPTIONS_SUB= yes
CAPSTONE_DESC= Disassembly framework support
CDROM_DMA_DESC= IDE CDROM DMA
GNUTLS_DESC= gnutls dependency (vnc encryption)
ISCSI_DESC= libiscsi dependency (iSCSI client for emulated drives)
@ -53,7 +48,6 @@ 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
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)
@ -61,18 +55,13 @@ 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_DESC= Disassembly framework support
OPTIONS_DEFAULT=X11 GTK3 OPENGL GNUTLS SASL JPEG PNG CDROM_DMA CURL PCAP NCURSES_DEFAULT VDE
OPTIONS_SUB= yes
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
DEBUG_CONFIGURE_ON= --enable-debug
DOCS_BUILD_DEPENDS= texi2html:textproc/texi2html \
sphinx-build:textproc/py-sphinx
DOCS_MAKE_ARGS_OFF= NOPORTDOCS=1
DOCS_CONFIGURE_ENABLE= docs
DOCS_USES= makeinfo
GNUTLS_CONFIGURE_OFF= --disable-gnutls
GNUTLS_LIB_DEPENDS= libgnutls.so:security/gnutls
@ -88,16 +77,13 @@ NCURSES_DEFAULT_USES= ncurses
NCURSES_BASE_USES= ncurses:base
NCURSES_PORT_USES= ncurses:port
OPENGL_CONFIGURE_OFF= --disable-opengl
OPENGL_USE= GL=gl
OPENGL_USE= GL=gbm,gl
OPENGL_USES= gl
PCAP_CONFIGURE_ON= --enable-pcap
PCAP_EXTRA_PATCHES= ${FILESDIR}/pcap-patch-qapi_net.json ${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
SAMBA_USES= samba:run # smbd
SASL_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2
STATIC_LINK_CONFIGURE_ON= --static
STATIC_LINK_PREVENTS= GTK3 X11
@ -116,16 +102,14 @@ X86_TARGETS_USES_OFF= xorg
X86_TARGETS_CONFIGURE_ON= --target-list='i386-softmmu i386-bsd-user x86_64-softmmu x86_64-bsd-user'
.endif
PORTDOCS?= docs index.html interop/.buildinfo interop/* qemu-ga-ref.html qemu-ga-ref.txt \
qemu-qmp-ref.html qemu-qmp-ref.txt specs/.buildinfo specs/* system/.buildinfo \
system/* tools/.buildinfo tools/* user/.buildinfo user/*
PORTDOCS?= .buildinfo _static/* about/* devel/* docs genindex.html \
index.html interop/* objects.inv search.html searchindex.js \
specs/* system/* tools/* user/*
WITHOUT_CPU_CFLAGS=yes #to avoid problems with register allocation
CFLAGS:= ${CFLAGS:C/-fno-tree-vrp//}
CFLAGS_amd64= -fPIC
CFLAGS_powerpc= -D_CALL_SYSV
CONFIGURE_ARGS?=--localstatedir=/var \
--extra-ldflags=-L${LOCALBASE}/lib --disable-libssh \
CONFIGURE_ARGS?=--localstatedir=/var --extra-ldflags=-L\"/usr/lib\" \
--extra-ldflags=-L\"${LOCALBASE}/lib\" \
--prefix=${PREFIX} --cc=${CC} --enable-netmap --disable-kvm \
--disable-linux-user --disable-linux-aio --disable-xen \
--python=${PYTHON_CMD} \
@ -142,6 +126,7 @@ MAKE_ARGS+= ARCH=x86_64
.endif
.if ${ARCH} == "powerpc"
CFLAGS+= -D_CALL_SYSV
MAKE_ARGS+= ARCH=ppc
USE_GCC= yes
.endif
@ -154,23 +139,16 @@ MAKE_ARGS+= ARCH=ppc64
CONFIGURE_ARGS+= --sparc_cpu=v9
.endif
.if ${OPSYS} == FreeBSD && ${OSVERSION} >= 1300000
PLIST_SUB+= IVSHMEM=""
.else
PLIST_SUB+= IVSHMEM="@comment "
.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
do-build:
cd ${WRKSRC} && ${GMAKE}
do-install:
cd ${WRKSRC} && ${SETENV} DESTDIR=${STAGEDIR} ${GMAKE} install
.if !target(post-install)
post-install:

View file

@ -1,7 +1,7 @@
TIMESTAMP = 1603483758
SHA256 (qemu/5.0.1/qemu-5.0.1.tar.xz) = 135fab4c3699a378c9584b3453927e2f5002e440311f21efa66fc189d4bb4982
SIZE (qemu/5.0.1/qemu-5.0.1.tar.xz) = 62430168
SHA256 (qemu/5.0.1/55765822804f.patch) = 10c2cc93ad01b02d854e26a9e445ba22bb5434dda1ef25baeb979be6292fa8ef
SIZE (qemu/5.0.1/55765822804f.patch) = 2271
SHA256 (qemu/5.0.1/aa4d30f6618d.patch) = eeddc5f5e08a460d2c133b4193d115fa1f00f206e0833f33ec66379981473efe
SIZE (qemu/5.0.1/aa4d30f6618d.patch) = 2211
TIMESTAMP = 1638663814
SHA256 (qemu/6.1.0/qemu-6.1.0.tar.xz) = eebc089db3414bbeedf1e464beda0a7515aad30f73261abc246c9b27503a3c96
SIZE (qemu/6.1.0/qemu-6.1.0.tar.xz) = 111258808
SHA256 (qemu/6.1.0/55765822804f.patch) = 10c2cc93ad01b02d854e26a9e445ba22bb5434dda1ef25baeb979be6292fa8ef
SIZE (qemu/6.1.0/55765822804f.patch) = 2271
SHA256 (qemu/6.1.0/aa4d30f6618d.patch) = eeddc5f5e08a460d2c133b4193d115fa1f00f206e0833f33ec66379981473efe
SIZE (qemu/6.1.0/aa4d30f6618d.patch) = 2211

View file

@ -1,45 +0,0 @@
--- Makefile.orig 2020-04-28 16:49:25 UTC
+++ Makefile
@@ -362,6 +362,10 @@ 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+=$(MANUAL_BUILDDIR)/system/qemu.1
DOCS+=$(MANUAL_BUILDDIR)/tools/qemu-img.1
DOCS+=$(MANUAL_BUILDDIR)/tools/qemu-nbd.8
@@ -369,6 +373,7 @@ DOCS+=$(MANUAL_BUILDDIR)/interop/qemu-ga.8
ifeq ($(CONFIG_LINUX)$(CONFIG_SECCOMP)$(CONFIG_LIBCAP_NG),yyy)
DOCS+=$(MANUAL_BUILDDIR)/tools/virtiofsd.1
endif
+endif
DOCS+=$(MANUAL_BUILDDIR)/system/qemu-block-drivers.7
DOCS+=docs/interop/qemu-qmp-ref.html docs/interop/qemu-qmp-ref.txt docs/interop/qemu-qmp-ref.7
DOCS+=docs/interop/qemu-ga-ref.html docs/interop/qemu-ga-ref.txt docs/interop/qemu-ga-ref.7
@@ -878,10 +883,12 @@ install-sphinxdocs: sphinxdocs
$(call install-manual,user)
install-doc: $(DOCS) install-sphinxdocs
+ifndef NOPORTDOCS
$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"
$(INSTALL_DATA) $(MANUAL_BUILDDIR)/index.html "$(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) $(MANUAL_BUILDDIR)/system/qemu.1 "$(DESTDIR)$(mandir)/man1"
@@ -899,8 +906,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

View file

@ -1,160 +1,15 @@
--- configure.orig 2020-04-28 16:49:25 UTC
--- configure.orig 2021-09-27 14:03:42 UTC
+++ configure
@@ -408,7 +408,7 @@ LDFLAGS_SHARED="-shared"
modules="no"
module_upgrades="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"
@@ -493,6 +493,9 @@ numa=""
tcmalloc="no"
jemalloc="no"
replication="yes"
+pcap="no"
+pcap_create="no"
+bpf="no"
vxhs=""
bochs="yes"
cloop="yes"
@@ -1168,6 +1171,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"
@@ -3137,6 +3144,14 @@ if ! check_include "ifaddrs.h" ; then
@@ -1635,7 +1635,7 @@ if test "$mingw32" = "yes" ; then
else
bindir="${bindir:-$prefix/bin}"
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
@@ -3806,7 +3821,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
@@ -4957,14 +4972,6 @@ if test "$docs" != "no" ; then
fi
if has makeinfo && has pod2man && test "$sphinx_ok" = "yes"; then
docs=yes
- else
- if test "$docs" = "yes" ; then
- 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
- docs=no
fi
fi
@@ -5098,7 +5105,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)
@@ -5501,7 +5508,51 @@ if test "$debug_stack_usage" = "yes"; then
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
@@ -6627,6 +6678,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
@@ -6864,6 +6916,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
@@ -7120,6 +7181,9 @@ fi
-mandir="${mandir:-$prefix/share/man}"
+mandir="${mandir:-$prefix/man}"
datadir="${datadir:-$prefix/share}"
docdir="${docdir:-$prefix/share/doc}"
sysconfdir="${sysconfdir:-$prefix/etc}"
@@ -4607,6 +4607,9 @@ echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $confi
# if this macro is set.
if test "$have_fsxattr" = "yes" ; then
echo "HAVE_FSXATTR=y" >> $config_host_mak
@ -162,5 +17,5 @@
+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
if test "$xen" = "enabled" ; then
echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak

View file

@ -1,11 +0,0 @@
--- disas/libvixl/vixl/a64/disasm-a64.cc.orig 2019-04-23 18:14:45 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);
}

View file

@ -1,13 +0,0 @@
--- include/net/net.h.orig 2020-06-25 18:12:17 UTC
+++ include/net/net.h
@@ -208,8 +208,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"

View file

@ -1,41 +0,0 @@
--- include/qemu/atomic.h.orig 2020-04-28 16:49:24 UTC
+++ include/qemu/atomic.h
@@ -228,10 +228,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 */
@@ -406,10 +408,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)
@@ -418,10 +422,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 */

View file

@ -1,10 +0,0 @@
--- net/tap-bsd.c.orig 2019-04-23 18:14:46 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

View file

@ -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 */

View file

@ -1,251 +0,0 @@
--- net/net.c.orig 2020-06-25 18:12:17 UTC
+++ net/net.c
@@ -55,6 +55,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
@@ -935,7 +940,226 @@ 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];
+ pcap_if_t *alldevsp;
+#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_findalldevs(&alldevsp, errbuf)) == NULL) {
+ fprintf(stderr, "qemu: pcap_create: %s\n", errbuf);
+ goto fail;
+ }
+
+#ifdef __FreeBSD__
+ /*
+ * We want to avoid passing oversize packets to the guest, which
+ * at least on FreeBSD can happen if the host interface uses tso
+ * (seen with an em(4) in this case) - so find out the host
+ * interface's mtu and assume the guest is configured the same.
+ */
+ s->max_eth_frame_size = 1514;
+ i = socket(AF_INET, SOCK_DGRAM, 0);
+ if (i >= 0) {
+ struct ifreq ifr;
+
+ (void) memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(i, SIOCGIFMTU, &ifr) != -1)
+ s->max_eth_frame_size = ifr.ifr_mtu + 14;
+ close(i);
+ }
+#endif
+
+#if defined(CONFIG_PCAP_CREATE) || defined(_WIN32)
+ /*
+ * Create pcap handle for the device, set promiscuous mode and activate.
+ */
+ s->handle = (void *)pcap_create(ifname, errbuf);
+ if (!s->handle) {
+ fprintf(stderr, "qemu: pcap_create: %s\n", errbuf);
+ goto fail;
+ }
+ if (pcap_set_promisc(s->handle, 1) != 0) {
+ pcap_perror(s->handle, (char *)"qemu: pcap_set_promisc:");
+ goto fail;
+ }
+ if (pcap_activate(s->handle) != 0) {
+ pcap_perror(s->handle, (char *)"qemu: pcap_activate:");
+ goto fail;
+ }
+#else
+ /* Attempt to connect device. */
+ s->handle = (void *)pcap_open_live(ifname, 65535, 1, 0, errbuf);
+ if (!s->handle) {
+ fprintf(stderr, "qemu: pcap_open_live: %s\n", errbuf);
+ goto fail;
+ }
+#endif
+
+ /* Set non-blocking mode. */
+ if (pcap_setnonblock(s->handle, 1, errbuf) < 0) {
+ fprintf(stderr, "qemu: pcap_setnonblock: %s\n", errbuf);
+ goto fail;
+ }
+
+#if defined(_WIN32)
+ /*
+ * Tell the kernel that the packet has to be seen immediately.
+ */
+ if (pcap_setmintocopy(s->handle, 0) < 0) {
+ fprintf(stderr, "qemu: pcap failed to set immediate mode\n");
+ goto fail;
+ }
+#else /* !_WIN32 */
+#if defined(CONFIG_BPF)
+#if defined(BIOCIMMEDIATE)
+ /*
+ * Tell the kernel that the packet has to be seen immediately.
+ */
+ {
+ unsigned int one = 1;
+ if (ioctl(pcap_fileno(s->handle), BIOCIMMEDIATE, &one) < 0) {
+ fprintf(stderr, "qemu: pcap failed to set immediate mode\n");
+ goto fail;
+ }
+ }
+#endif /* BIOCIMMEDIATE */
+#if defined(BIOCFEEDBACK)
+ /*
+ * Tell the kernel that the sent packet has to be fed back.
+ * This is necessary to connect host and guest.
+ */
+ {
+ unsigned int one = 1;
+ if (ioctl(pcap_fileno(s->handle), BIOCFEEDBACK, &one) < 0) {
+ fprintf(stderr, "qemu: pcap failed to set feedback mode\n");
+ goto fail;
+ }
+ }
+#endif /* BIOCFEEDBACK */
+#endif /* CONFIG_BPF */
+#endif /* _WIN32 */
+
+ snprintf(s->nc.info_str, sizeof(s->nc.info_str), "pcap redirector");
+
+#if defined(_WIN32)
+ if ((h = pcap_getevent(s->handle)) == NULL) {
+ fprintf(stderr, "qemu: pcap_getevent failed\n");
+ goto fail;
+ }
+ qemu_add_wait_object(h, pcap_send, s);
+#else /* !_WIN32 */
+ if ((i = pcap_get_selectable_fd(s->handle)) < 0) {
+ fprintf(stderr, "qemu: pcap_get_selectable_fd failed\n");
+ goto fail;
+ }
+ qemu_set_fd_handler(i, pcap_send, NULL, s);
+#endif /* _WIN32 */
+
+ return 0;
+
+fail:
+ if (s) {
+ if (s->handle)
+ pcap_close(s->handle);
+ }
+
+ return -1;
+}
+
+#endif
+
static int (* const net_client_init_fun[NET_CLIENT_DRIVER__MAX])(
const Netdev *netdev,
const char *name,
@@ -961,6 +1185,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
};

View file

@ -1,56 +0,0 @@
--- qapi/net.json.orig 2020-06-25 18:12:17 UTC
+++ qapi/net.json
@@ -385,6 +385,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.
@@ -451,7 +464,7 @@
##
{ 'enum': 'NetClientDriver',
'data': [ 'none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
- 'bridge', 'hubport', 'netmap', 'vhost-user' ] }
+ 'bridge', 'hubport', 'netmap', 'vhost-user', 'pcap' ] }
##
# @Netdev:
@@ -474,6 +487,7 @@
'user': 'NetdevUserOptions',
'tap': 'NetdevTapOptions',
'l2tpv3': 'NetdevL2TPv3Options',
+ 'pcap': 'NetdevPcapOptions',
'socket': 'NetdevSocketOptions',
'vde': 'NetdevVdeOptions',
'bridge': 'NetdevBridgeOptions',
@@ -509,7 +523,7 @@
##
{ 'enum': 'NetLegacyOptionsType',
'data': ['none', 'nic', 'user', 'tap', 'l2tpv3', 'socket', 'vde',
- 'bridge', 'netmap', 'vhost-user'] }
+ 'bridge', 'netmap', 'vhost-user', 'pcap'] }
##
# @NetLegacyOptions:
@@ -526,6 +540,7 @@
'user': 'NetdevUserOptions',
'tap': 'NetdevTapOptions',
'l2tpv3': 'NetdevL2TPv3Options',
+ 'pcap': 'NetdevPcapOptions',
'socket': 'NetdevSocketOptions',
'vde': 'NetdevVdeOptions',
'bridge': 'NetdevBridgeOptions',

View file

@ -13,7 +13,4 @@ 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

View file

@ -1,6 +1,4 @@
%%CURL%%bin/elf2dmp
%%IVSHMEM%%bin/ivshmem-client
%%IVSHMEM%%bin/ivshmem-server
bin/elf2dmp
bin/qemu-edid
bin/qemu-ga
bin/qemu-i386
@ -9,15 +7,13 @@ bin/qemu-io
%%GTK3%%bin/qemu-keymap
bin/qemu-nbd
bin/qemu-storage-daemon
%%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-avr
%%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
@ -25,7 +21,6 @@ bin/qemu-system-i386
%%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
@ -39,19 +34,22 @@ bin/qemu-system-i386
%%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
include/qemu-plugin.h
man/man1/qemu.1.gz
man/man1/qemu-img.1.gz
man/man7/qemu-block-drivers.7.gz
man/man7/qemu-cpu-models.7.gz
man/man7/qemu-ga-ref.7.gz
man/man7/qemu-qmp-ref.7.gz
man/man8/qemu-ga.8.gz
man/man7/qemu-ga-ref.7.gz
man/man8/qemu-nbd.8.gz
man/man8/qemu-pr-helper.8.gz
man/man7/qemu-qmp-ref.7.gz
man/man1/qemu-storage-daemon.1.gz
man/man7/qemu-storage-daemon-qmp-ref.7.gz
@sample etc/qemu-ifup.sample
@sample etc/qemu-ifdown.sample
%%DATADIR%%/QEMU,tcx.bin
@ -84,44 +82,6 @@ man/man8/qemu-nbd.8.gz
%%DATADIR%%/firmware/60-edk2-i386.json
%%DATADIR%%/firmware/60-edk2-x86_64.json
%%DATADIR%%/hppa-firmware.img
%%DATADIR%%/linuxboot.bin
%%LINUXBOOT_DMA%%%%DATADIR%%/linuxboot_dma.bin
%%DATADIR%%/multiboot.bin
%%DATADIR%%/openbios-ppc
%%DATADIR%%/openbios-sparc32
%%DATADIR%%/openbios-sparc64
%%DATADIR%%/opensbi-riscv32-sifive_u-fw_jump.bin
%%DATADIR%%/opensbi-riscv32-virt-fw_jump.bin
%%DATADIR%%/opensbi-riscv64-sifive_u-fw_jump.bin
%%DATADIR%%/opensbi-riscv64-virt-fw_jump.bin
%%DATADIR%%/palcode-clipper
%%DATADIR%%/petalogix-ml605.dtb
%%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%%/qemu-nsis.bmp
%%DATADIR%%/qemu_vga.ndrv
%%DATADIR%%/s390-ccw.img
%%DATADIR%%/s390-netboot.img
%%DATADIR%%/slof.bin
%%DATADIR%%/u-boot-sam460-20100605.bin
%%DATADIR%%/vgabios.bin
%%DATADIR%%/vgabios-ati.bin
%%DATADIR%%/vgabios-cirrus.bin
%%DATADIR%%/vgabios-qxl.bin
%%DATADIR%%/vgabios-stdvga.bin
%%DATADIR%%/vgabios-virtio.bin
%%DATADIR%%/vgabios-vmware.bin
%%DATADIR%%/sgabios.bin
%%DATADIR%%/skiboot.lid
%%DATADIR%%/trace-events-all
%%DATADIR%%/petalogix-s3adsp1800.dtb
%%DATADIR%%/bamboo.dtb
%%DATADIR%%/kvmvapic.bin
%%DATADIR%%/u-boot.e500
%%DATADIR%%/keymaps/ar
%%DATADIR%%/keymaps/bepo
%%DATADIR%%/keymaps/cz
@ -156,6 +116,46 @@ man/man8/qemu-nbd.8.gz
%%DATADIR%%/keymaps/sv
%%DATADIR%%/keymaps/th
%%DATADIR%%/keymaps/tr
%%DATADIR%%/linuxboot.bin
%%LINUXBOOT_DMA%%%%DATADIR%%/linuxboot_dma.bin
%%DATADIR%%/multiboot.bin
%%DATADIR%%/npcm7xx_bootrom.bin
%%DATADIR%%/openbios-ppc
%%DATADIR%%/openbios-sparc32
%%DATADIR%%/openbios-sparc64
%%DATADIR%%/opensbi-riscv32-generic-fw_dynamic.bin
%%DATADIR%%/opensbi-riscv32-generic-fw_dynamic.elf
%%DATADIR%%/opensbi-riscv64-generic-fw_dynamic.bin
%%DATADIR%%/opensbi-riscv64-generic-fw_dynamic.elf
%%DATADIR%%/palcode-clipper
%%DATADIR%%/petalogix-ml605.dtb
%%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%%/qboot.rom
%%DATADIR%%/qemu-nsis.bmp
%%DATADIR%%/qemu_vga.ndrv
%%DATADIR%%/s390-ccw.img
%%DATADIR%%/s390-netboot.img
%%DATADIR%%/slof.bin
%%DATADIR%%/u-boot-sam460-20100605.bin
%%DATADIR%%/vgabios.bin
%%DATADIR%%/vgabios-ati.bin
%%DATADIR%%/vgabios-cirrus.bin
%%DATADIR%%/vgabios-qxl.bin
%%DATADIR%%/vgabios-stdvga.bin
%%DATADIR%%/vgabios-virtio.bin
%%DATADIR%%/vgabios-vmware.bin
%%DATADIR%%/sgabios.bin
%%DATADIR%%/skiboot.lid
%%DATADIR%%/trace-events-all
%%DATADIR%%/petalogix-s3adsp1800.dtb
%%DATADIR%%/bamboo.dtb
%%DATADIR%%/kvmvapic.bin
%%DATADIR%%/u-boot.e500
%%DATADIR%%/pvh.bin
%%DATADIR%%/vgabios-bochs-display.bin
%%DATADIR%%/vgabios-ramfb.bin
@ -175,5 +175,6 @@ share/applications/qemu.desktop
%%GTK3%%share/locale/fr_FR/LC_MESSAGES/qemu.mo
%%GTK3%%share/locale/hu/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/zh_CN/LC_MESSAGES/qemu.mo