emulators/qemu: Update version 2.5.1.1=>2.6.1

- Remove BSD_USER related codes
- Add NCURSES support [1]
- Fix STATIC_LINKS code to not build with X11 support

PR: 		211973 [1]
Submitted by:	ilavsky.martin@gmail.com [1]
This commit is contained in:
Muhammad Moinur Rahman 2016-08-19 20:52:57 +00:00
parent 5a88dba32b
commit 3241ffeaf1
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=420489
10 changed files with 460 additions and 496 deletions

View File

@ -2,7 +2,7 @@
# $FreeBSD$
PORTNAME= qemu
PORTVERSION= 2.5.1.1
PORTVERSION= 2.6.1
CATEGORIES= emulators
MASTER_SITES= http://wiki.qemu.org/download/
DIST_SUBDIR= qemu/${PORTVERSION}
@ -16,13 +16,13 @@ HAS_CONFIGURE= yes
USES= cpe gmake pkgconfig bison perl5 python:2,build tar:bzip2
USE_PERL5= build
USE_XORG= pixman
USE_GNOME+= glib20
USE_GNOME+= cairo glib20
MAKE_ENV+= BSD_MAKE="${MAKE}"
ONLY_FOR_ARCHS= amd64 i386 powerpc powerpc64 # XXX someone wants to debug sparc64 hosts?
OPTIONS_DEFINE= SAMBA X11 GTK2 OPENGL GNUTLS SASL JPEG PNG CURL \
CDROM_DMA PCAP USBREDIR GNS3 X86_TARGETS \
STATIC_LINK DOCS BSD_USER
STATIC_LINK DOCS NCURSES
SAMBA_DESC= samba dependency (for -smb)
GNUTLS_DESC= gnutls dependency (vnc encryption)
SASL_DESC= cyrus-sasl dependency (vnc encryption)
@ -33,18 +33,16 @@ PCAP_DESC= pcap dependency (networking with bpf)
USBREDIR_DESC= usb device network redirection (experimental!)
GNS3_DESC= gns3 patches (promiscuous multicast)
X86_TARGETS_DESC= Build only x86 system targets
BSD_USER_DESC= Also build bsd-user targets (for testing)
STATIC_LINK_DESC= Statically link the executables
OPTIONS_DEFAULT=X11 GTK2 OPENGL GNUTLS SASL JPEG PNG CDROM_DMA CURL PCAP GNS3
OPTIONS_DEFAULT=X11 GTK2 OPENGL GNUTLS SASL JPEG PNG CDROM_DMA CURL PCAP GNS3 NCURSES
OPTIONS_SUB= yes
X11_USE= SDL=sdl
X11_CONFIGURE_ON= --enable-sdl
X11_CONFIGURE_OFF= --disable-sdl
X11_USE= SDL=sdl XORG=x11,xext GNOME=gdkpixbuf2
X11_CONFIGURE_ENABLE= sdl
GTK2_USE= GNOME=gtk20,vte
GTK2_USES= gettext
GTK2_CONFIGURE_OFF= --disable-gtk --disable-vte
GNUTLS_LIB_DEPENDS= libgnutls.so:security/gnutls
GNUTLS_CONFIGURE_OFF= --disable-vnc-tls
GNUTLS_CONFIGURE_OFF= --disable-gnutls
SASL_LIB_DEPENDS= libsasl2.so:security/cyrus-sasl2
SASL_CONFIGURE_OFF= --disable-vnc-sasl
JPEG_USES= jpeg
@ -59,77 +57,33 @@ USBREDIR_BUILD_DEPENDS= usbredir>=0.6:net/usbredir
USBREDIR_RUN_DEPENDS= usbredir>=0.6:net/usbredir
USBREDIR_CONFIGURE_OFF= --disable-usb-redir
PCAP_CONFIGURE_ON= --enable-pcap
PCAP_EXTRA_PATCHES= ${FILESDIR}/pcap-patch ${FILESDIR}/pcap-patch-net_net.c
STATIC_LINK_CONFIGURE_ON= --static
STATIC_LINK_PREVENTS= GTK2 X11
STATIC_LINK_PREVENTS_MSG= X11 ui cannot be built static
NCURSES_USES= ncurses
SAMBA_RUN_DEPENDS= ${LOCALBASE}/sbin/smbd:net/samba36
DOCS_BUILD_DEPENDS= texi2html:textproc/texi2html
DOCS_USES= makeinfo
DOCS_MAKE_ARGS_OFF= NOPORTDOCS=1
.if !defined(QEMU_USER_STATIC)
CONFLICTS_INSTALL= qemu-devel-[0-9]* qemu-sbruno-[0-9]*
.endif
PORTDOCS= docs qemu-doc.html qemu-tech.html qmp-commands.txt
WITHOUT_CPU_CFLAGS=yes #to avoid problems with register allocation
CFLAGS:= ${CFLAGS:C/-fno-tree-vrp//}
CONFIGURE_ARGS+=--localstatedir=/var --extra-ldflags=-L\"${LOCALBASE}/lib\" \
--disable-libssh2 --enable-debug \
--disable-libssh2 --enable-debug --enable-curses \
--prefix=${PREFIX} --cc=${CC} --enable-docs --disable-kvm \
--disable-linux-user --disable-linux-aio --disable-xen \
--smbd=${LOCALBASE}/sbin/smbd --enable-debug-info --python=${PYTHON_CMD} \
--extra-cflags=-I${WRKSRC}\ -I${LOCALBASE}/include\ -DPREFIX=\\\"\"${PREFIX}\\\"\"
LIB_DEPENDS+= libnettle.so:security/nettle \
libfontconfig.so:x11-fonts/fontconfig \
libfreetype.so:print/freetype2
.include <bsd.port.options.mk>
.if defined(QEMU_USER_STATIC)
.if ${ARCH} != "amd64"
CONFIGURE_ARGS+= --target-list=i386-bsd-user,sparc-bsd-user,arm-bsd-user,mips-bsd-user,mipsel-bsd-user
.else
CONFIGURE_ARGS+= --target-list=i386-bsd-user,x86_64-bsd-user,sparc-bsd-user,sparc64-bsd-user,arm-bsd-user,mips-bsd-user,mipsel-bsd-user,mips64-bsd-user,mips64el-bsd-user
.endif
.else
.if ${PORT_OPTIONS:MX86_TARGETS}
.if ${PORT_OPTIONS:MBSD_USER}
.if ${ARCH} != "amd64"
CONFIGURE_ARGS+= --target-list=i386-softmmu,x86_64-softmmu,i386-bsd-user,sparc-bsd-user,arm-bsd-user,mips-bsd-user,mipsel-bsd-user
.else
CONFIGURE_ARGS+= --target-list=i386-softmmu,x86_64-softmmu,i386-bsd-user,x86_64-bsd-user,sparc-bsd-user,sparc64-bsd-user,arm-bsd-user,mips-bsd-user,mipsel-bsd-user,mips64-bsd-user,mips64el-bsd-user
.endif
.else
CONFIGURE_ARGS+= --target-list=i386-softmmu,x86_64-softmmu
.endif
.else
.if empty(PORT_OPTIONS:MBSD_USER)
CONFIGURE_ARGS+= --disable-bsd-user
.else
.if ${ARCH} != "amd64"
CONFIGURE_ARGS+= --target-list=i386-softmmu,x86_64-softmmu,aarch64-softmmu,alpha-softmmu,arm-softmmu,cris-softmmu,lm32-softmmu,m68k-softmmu,microblaze-softmmu,microblazeel-softmmu,mips-softmmu,mipsel-softmmu,mips64-softmmu,mips64el-softmmu,or32-softmmu,ppc-softmmu,ppcemb-softmmu,ppc64-softmmu,sh4-softmmu,sh4eb-softmmu,sparc-softmmu,sparc64-softmmu,s390x-softmmu,xtensa-softmmu,xtensaeb-softmmu,unicore32-softmmu,moxie-softmmu,i386-bsd-user,sparc-bsd-user,arm-bsd-user,mips-bsd-user,mipsel-bsd-user
.endif
.endif
.endif
.endif
.if ${PORT_OPTIONS:MBSD_USER} && ${ARCH} == "sparc64"
IGNORE= bsd-user targets not tested on sparc64
.endif
.if empty(PORT_OPTIONS:MBSD_USER) || ${ARCH} != "amd64"
PLIST_SUB+= BSD_USER64="@comment "
.else
PLIST_SUB+= BSD_USER64=""
.endif
.if defined(QEMU_USER_STATIC)
PLIST_SUB+= SOFTMMU="@comment " STATIC="-static"
.else
PLIST_SUB+= SOFTMMU="" STATIC=""
.endif
.if ${PORT_OPTIONS:MSTATIC_LINK} && (${PORT_OPTIONS:MGTK2} || ${PORT_OPTIONS:MX11})
IGNORE= X11 ui cannot be built static
.endif
.if !defined(STRIP) || ${STRIP} == ""
CONFIGURE_ARGS+=--disable-strip
.endif
@ -153,6 +107,9 @@ CONFIGURE_ARGS+= --sparc_cpu=v9
# -lprocstat actually only _needs_ -lelf after r249666 or r250870 (MFC)
# but it shouldn't matter much
post-patch:
@${REINPLACE_CMD} -e '/LIBS/s|-lprocstat|-lprocstat -lelf|' \
${WRKSRC}/configure
@${REINPLACE_CMD} -e '/libs_qga=/s|glib_libs|glib_libs -lintl|' ${WRKSRC}/configure
@${REINPLACE_CMD} -E \
-e "/^by Tibor .TS. S/s|Sch.*z.$$|Schuetz.|" \
${WRKSRC}/qemu-doc.texi
@ -175,9 +132,6 @@ post-patch-GNS3-on:
@${REINPLACE_CMD} -e 's|(buf\[0\] & 1) && (rctl & E1000_RCTL_MPE)|buf[0] \& 1|' \
${WRKSRC}/hw/net/e1000.c
post-patch-PCAP-on:
@cd ${WRKSRC} && ${PATCH} --quiet < ${FILESDIR}/pcap-patch
# XXX need to disable usb host code on head while it's not ported to the
# new usb stack yet
post-configure:
@ -190,6 +144,7 @@ post-install:
${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifup.sample ${STAGEDIR}${PREFIX}/etc
${INSTALL_SCRIPT} ${FILESDIR}/qemu-ifdown.sample ${STAGEDIR}${PREFIX}/etc
@${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/qemu-*
@${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/ivshmem-*
post-install-DOCS-on:
@(cd ${WRKSRC} && ${COPYTREE_SHARE} docs ${STAGEDIR}${DOCSDIR}/)

View File

@ -1,3 +1,3 @@
TIMESTAMP = 1464476316
SHA256 (qemu/2.5.1.1/qemu-2.5.1.1.tar.bz2) = 28d9946e43765a44ccccca3cba5f4f9034f2759ec1f2ce16594ddb6776c8efe6
SIZE (qemu/2.5.1.1/qemu-2.5.1.1.tar.bz2) = 25474902
TIMESTAMP = 1471559363
SHA256 (qemu/2.6.1/qemu-2.6.1.tar.bz2) = 4942fd1b6ee31f2f55ffc2201dd7397e6b9c55a2ef332e6d660c730d268e08d1
SIZE (qemu/2.6.1/qemu-2.6.1.tar.bz2) = 25762855

View File

@ -1,19 +1,18 @@
--- Makefile.orig 2016-03-29 21:01:14 UTC
--- Makefile.orig 2016-04-14 20:19:53 UTC
+++ Makefile
@@ -90,8 +90,12 @@ LIBS+=-lz $(LIBS_TOOLS)
@@ -90,7 +90,11 @@ LIBS+=-lz $(LIBS_TOOLS)
HELPERS-$(CONFIG_LINUX) = qemu-bridge-helper$(EXESUF)
ifdef BUILD_DOCS
+ifdef NOPORTDOCS
+DOCS=qemu.1 qemu-img.1 qemu-nbd.8
+DOCS=qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
+else
DOCS=qemu-doc.html qemu-tech.html qemu.1 qemu-img.1 qemu-nbd.8 qemu-ga.8
DOCS+=qmp-commands.txt
+endif
DOCS+=qmp-commands.txt
ifdef CONFIG_LINUX
DOCS+=kvm_stat.1
endif
@@ -407,8 +411,10 @@ endif
@@ -410,8 +414,10 @@ endif
install-doc: $(DOCS)
$(INSTALL_DIR) "$(DESTDIR)$(qemu_docdir)"

View File

@ -1,6 +1,6 @@
--- configure.orig 2016-03-30 17:53:28 UTC
--- configure.orig 2016-04-14 20:19:53 UTC
+++ configure
@@ -276,7 +276,7 @@ DSOSUF=".so"
@@ -245,7 +245,7 @@ DSOSUF=".so"
LDFLAGS_SHARED="-shared"
modules="no"
prefix="/usr/local"
@ -9,17 +9,27 @@
datadir="\${prefix}/share"
qemu_docdir="\${prefix}/share/doc/qemu"
bindir="\${prefix}/bin"
@@ -344,6 +344,9 @@ libssh2=""
@@ -316,6 +316,10 @@ virglrenderer=""
tpm="yes"
libssh2=""
vhdx=""
numa=""
tcmalloc="no"
+quorum="no"
+pcap="no"
+pcap_create="no"
+bpf="no"
numa=""
tcmalloc="no"
jemalloc="no"
# parse CC options first
@@ -905,6 +908,10 @@ for opt do
@@ -575,7 +579,7 @@ FreeBSD)
audio_drv_list="oss"
audio_possible_drivers="oss sdl pa"
# needed for kinfo_getvmmap(3) in libutil.h
- LIBS="-lutil $LIBS"
+ LIBS="-lprocstat -lkvm -lelf -lutil $LIBS"
netmap="" # enable netmap autodetect
HOST_VARIANT_DIR="freebsd"
;;
@@ -878,6 +882,10 @@ for opt do
;;
--enable-vnc-png) vnc_png="yes"
;;
@ -30,7 +40,7 @@
--disable-slirp) slirp="no"
;;
--disable-uuid) uuid="no"
@@ -2241,7 +2248,7 @@ if test "$gtk" != "no"; then
@@ -2157,7 +2165,7 @@ if test "$gtk" != "no"; then
gtk_cflags="$gtk_cflags $x11_cflags"
gtk_libs="$gtk_libs $x11_libs"
fi
@ -39,11 +49,28 @@
gtk="yes"
elif test "$gtk" = "yes"; then
feature_not_found "gtk" "Install gtk2 or gtk3 devel"
@@ -2413,6 +2420,50 @@ then
@@ -2384,6 +2392,14 @@ if ! check_include "ifaddrs.h" ; then
fi
##########################################
+# getifaddrs (for tests/test-io-channel-socket )
+
+have_ifaddrs_h=yes
+if ! check_include "ifaddrs.h" ; then
+ have_ifaddrs_h=no
+fi
+
+##########################################
# VTE probe
if test "$vte" != "no"; then
@@ -2526,6 +2542,50 @@ EOF
fi
fi
+##########################################
+# pcap probe
+
+if test "$pcap" = "yes" -a "$pcap" != "no"; then
+ cat > $TMPC << EOF
+#include <pcap.h>
@ -57,7 +84,7 @@
+ if compile_prog "" "$libpcap" ; then
+ :
+ else
+ echo
+ echo
+ echo "Error: Could not find pcap"
+ echo "Make sure to have the pcap libs and headers installed."
+ echo
@ -85,37 +112,25 @@
+ fi
+ libs_softmmu="$libpcap $libs_softmmu"
+fi # test "$pcap"
+
+##########################################
# libtasn1 - only for the TLS creds/session test suite
tasn1=yes
@@ -2983,7 +3034,7 @@ for i in $glib_modules; do
glib_libs=`$pkg_config --libs $i`
CFLAGS="$glib_cflags $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
@@ -3864,14 +3915,7 @@ fi
##########################################
# VNC SASL detection
@@ -3857,14 +3917,7 @@ fi
# Check if tools are available to build documentation.
if test "$docs" != "no" ; then
- if has makeinfo && has pod2man; then
- docs=yes
docs=yes
- else
- if test "$docs" = "yes" ; then
- feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
- fi
- docs=no
- fi
+docs=yes
fi
# Search for bswap_32 function
@@ -3999,6 +4043,17 @@ fi
@@ -3992,6 +4045,17 @@ fi
# check for libusb
if test "$libusb" != "no" ; then
@ -133,7 +148,7 @@
if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
libusb="yes"
libusb_cflags=$($pkg_config --cflags libusb-1.0)
@@ -4011,6 +4066,7 @@ if test "$libusb" != "no" ; then
@@ -4004,6 +4068,7 @@ if test "$libusb" != "no" ; then
fi
libusb="no"
fi
@ -141,7 +156,7 @@
fi
# check for usbredirparser for usb network redirection support
@@ -4773,6 +4829,7 @@ echo "Audio drivers $audio_drv_list"
@@ -4769,6 +4834,7 @@ echo "Audio drivers $audio_drv_list"
echo "Block whitelist (rw) $block_drv_rw_whitelist"
echo "Block whitelist (ro) $block_drv_ro_whitelist"
echo "VirtFS support $virtfs"
@ -149,7 +164,7 @@
echo "VNC support $vnc"
if test "$vnc" = "yes" ; then
echo "VNC SASL support $vnc_sasl"
@@ -4951,6 +5008,15 @@ fi
@@ -4950,6 +5016,15 @@ fi
if test "$profiler" = "yes" ; then
echo "CONFIG_PROFILER=y" >> $config_host_mak
fi
@ -165,3 +180,13 @@
if test "$slirp" = "yes" ; then
echo "CONFIG_SLIRP=y" >> $config_host_mak
echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
@@ -5153,6 +5228,9 @@ fi
if test "$have_ifaddrs_h" = "yes" ; then
echo "HAVE_IFADDRS_H=y" >> $config_host_mak
fi
+if test "$have_ifaddrs_h" = "yes" ; then
+ echo "HAVE_IFADDRS_H=y" >> $config_host_mak
+fi
if test "$vte" = "yes" ; then
echo "CONFIG_VTE=y" >> $config_host_mak
echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak

View File

@ -1,11 +0,0 @@
--- disas/libvixl/a64/disasm-a64.cc.orig 2015-11-03 20:01:31 UTC
+++ disas/libvixl/a64/disasm-a64.cc
@@ -1362,7 +1362,7 @@ void Disassembler::AppendPCRelativeOffse
int64_t offset) {
USE(instr);
char sign = (offset < 0) ? '-' : '+';
- AppendToOutput("#%c0x%" PRIx64, sign, std::abs(offset));
+ AppendToOutput("#%c0x%" PRIx64, sign, offset < 0 ? -offset : offset);
}

View File

@ -0,0 +1,11 @@
--- disas/libvixl/vixl/a64/disasm-a64.cc.orig 2016-04-14 20:19:53 UTC
+++ disas/libvixl/vixl/a64/disasm-a64.cc
@@ -2693,7 +2693,7 @@ void Disassembler::AppendPCRelativeOffse
if (offset < 0) {
abs_offset = -abs_offset;
}
- AppendToOutput("#%c0x%" PRIx64, sign, abs_offset);
+ AppendToOutput("#%c0x%" PRIx64, sign, offset < 0 ? -offset : offset);
}

View File

@ -1,12 +0,0 @@
--- include/qemu-common.h.orig 2016-03-30 18:14:31 UTC
+++ include/qemu-common.h
@@ -469,7 +469,9 @@ void qemu_hexdump(const char *buf, FILE
#define VEC_OR(v1, v2) ((v1) | (v2))
/* altivec.h may redefine the bool macro as vector type.
* Reset it to POSIX semantics. */
+#ifndef __cplusplus
#define bool _Bool
+#endif
#elif defined __SSE2__
#include <emmintrin.h>
#define VECTYPE __m128i

View File

@ -1,21 +1,22 @@
--- net/clients.h.orig 2015-08-11 19:11:09 UTC
+++ net/clients.h
@@ -49,6 +49,12 @@ int net_init_bridge(const NetClientOptio
int net_init_l2tpv3(const NetClientOptions *opts, const char *name,
diff -ruN net/clients.h net/clients.h
--- net/clients.h 2015-12-17 04:04:50.000000000 +0600
+++ net/clients.h 2015-12-25 01:32:09.000000000 +0600
@@ -47,6 +47,11 @@
int net_init_bridge(const NetClientOptions *opts, const char *name,
NetClientState *peer, Error **errp);
+
+#ifdef CONFIG_PCAP
+int net_init_pcap(const NetClientOptions *opts, const char *name,
+ NetClientState *peer);
+ NetClientState *peer, Error **errp);
+#endif
+
int net_init_l2tpv3(const NetClientOptions *opts, const char *name,
NetClientState *peer, Error **errp);
#ifdef CONFIG_VDE
int net_init_vde(const NetClientOptions *opts, const char *name,
NetClientState *peer, Error **errp);
--- net/hub.c.orig 2015-08-11 19:11:09 UTC
+++ net/hub.c
@@ -322,6 +322,7 @@ void net_hub_check_clients(void)
diff -ruN net/hub.c net/hub.c
--- net/hub.c 2015-12-17 04:04:50.000000000 +0600
+++ net/hub.c 2015-12-25 01:32:09.000000000 +0600
@@ -322,6 +322,7 @@
case NET_CLIENT_OPTIONS_KIND_SOCKET:
case NET_CLIENT_OPTIONS_KIND_VDE:
case NET_CLIENT_OPTIONS_KIND_VHOST_USER:
@ -23,255 +24,10 @@
has_host_dev = 1;
break;
default:
--- net/net.c.orig 2015-08-11 19:11:09 UTC
+++ net/net.c
@@ -45,6 +45,11 @@
#include "qapi/dealloc-visitor.h"
#include "sysemu/sysemu.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
@@ -880,6 +885,221 @@ static int net_init_nic(const NetClientO
return idx;
}
+#if defined(CONFIG_PCAP)
+#if defined(CONFIG_BPF)
+#define PCAP_DONT_INCLUDE_PCAP_BPF_H
+#include <net/bpf.h>
+#endif
+#include <pcap.h>
+
+struct PCAPState {
+ NetClientState nc;
+ pcap_t *handle;
+ int max_eth_frame_size;
+};
+
+static ssize_t pcap_receive(NetClientState *nc, const uint8_t *buf, size_t size)
+{
+ struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
+
+ return pcap_inject(s->handle, (u_char*)buf, size);
+}
+
+static void pcap_callback(u_char *user, struct pcap_pkthdr *phdr, u_char *pdata
+ )
+{
+ NetClientState *nc = (NetClientState *)user;
+
+ int len = phdr->len;
+#ifdef __FreeBSD__
+ struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
+ int max_eth_frame_size = s->max_eth_frame_size;
+
+ if (len > max_eth_frame_size) {
+ fprintf(stderr,
+ "pcap_send: packet size > %d (%d), truncating\n",
+ max_eth_frame_size, len);
+ len = max_eth_frame_size;
+ }
+#endif
+ qemu_send_packet(nc, pdata, len);
+}
+
+static void pcap_send(void *opaque)
+{
+ struct PCAPState *s = (struct PCAPState *)opaque;
+
+ for (;;) {
+ if (pcap_dispatch(s->handle, 0, (pcap_handler)&pcap_callback, (u_char *)&s->nc) >= 0)
+ break;
+ }
+}
+
+static void pcap_cleanup(NetClientState *nc)
+{
+ struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
+
+ qemu_purge_queued_packets(nc);
+ pcap_close(s->handle);
+}
+
+static NetClientInfo net_pcap_info = {
+ .type = NET_CLIENT_OPTIONS_KIND_PCAP,
+ .size = sizeof(struct PCAPState),
+ .receive = pcap_receive,
+// .receive_raw = pcap_receive_raw,
+// .receive_iov = pcap_receive_iov,
+// .poll = pcap_poll,
+ .cleanup = pcap_cleanup,
+};
+/*
+ * ... -net pcap,ifname="..."
+ */
+
+int net_init_pcap(const NetClientOptions *opts, const char *name, NetClientState *peer)
+{
+ const NetdevPcapOptions *pcap_opts = opts->u.pcap;
+ NetClientState *nc;
+ struct PCAPState *s;
+ const char *ifname;
+ char errbuf[PCAP_ERRBUF_SIZE];
+#if defined(_WIN32)
+ HANDLE h;
+#endif
+ int i;
+
+ if (!pcap_opts->has_ifname)
+ return -1;
+
+ ifname = pcap_opts->ifname;
+
+ /* create the object */
+ nc = qemu_new_net_client(&net_pcap_info, peer, "pcap", ifname);
+ s = DO_UPCAST(struct PCAPState, nc, nc);
+
+ if (ifname == NULL && (ifname = pcap_lookupdev(errbuf)) == NULL) {
+ fprintf(stderr, "qemu: pcap_create: %s\n", errbuf);
+ goto fail;
+ }
+
+#ifdef __FreeBSD__
+ /*
+ * We want to avoid passing oversize packets to the guest, which
+ * at least on FreeBSD can happen if the host interface uses tso
+ * (seen with an em(4) in this case) - so find out the host
+ * interface's mtu and assume the guest is configured the same.
+ */
+ s->max_eth_frame_size = 1514;
+ i = socket(AF_INET, SOCK_DGRAM, 0);
+ if (i >= 0) {
+ struct ifreq ifr;
+
+ (void) memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(i, SIOCGIFMTU, &ifr) != -1)
+ s->max_eth_frame_size = ifr.ifr_mtu + 14;
+ close(i);
+ }
+#endif
+
+#if defined(CONFIG_PCAP_CREATE) || defined(_WIN32)
+ /*
+ * Create pcap handle for the device, set promiscuous mode and activate.
+ */
+ s->handle = (void *)pcap_create(ifname, errbuf);
+ if (!s->handle) {
+ fprintf(stderr, "qemu: pcap_create: %s\n", errbuf);
+ goto fail;
+ }
+ if (pcap_set_promisc(s->handle, 1) != 0) {
+ pcap_perror(s->handle, (char *)"qemu: pcap_set_promisc:");
+ goto fail;
+ }
+ if (pcap_activate(s->handle) != 0) {
+ pcap_perror(s->handle, (char *)"qemu: pcap_activate:");
+ goto fail;
+ }
+#else
+ /* Attempt to connect device. */
+ s->handle = (void *)pcap_open_live(ifname, 65535, 1, 0, errbuf);
+ if (!s->handle) {
+ fprintf(stderr, "qemu: pcap_open_live: %s\n", errbuf);
+ goto fail;
+ }
+#endif
+
+ /* Set non-blocking mode. */
+ if (pcap_setnonblock(s->handle, 1, errbuf) < 0) {
+ fprintf(stderr, "qemu: pcap_setnonblock: %s\n", errbuf);
+ goto fail;
+ }
+
+#if defined(_WIN32)
+ /*
+ * Tell the kernel that the packet has to be seen immediately.
+ */
+ if (pcap_setmintocopy(s->handle, 0) < 0) {
+ fprintf(stderr, "qemu: pcap failed to set immediate mode\n");
+ goto fail;
+ }
+#else /* !_WIN32 */
+#if defined(CONFIG_BPF)
+#if defined(BIOCIMMEDIATE)
+ /*
+ * Tell the kernel that the packet has to be seen immediately.
+ */
+ {
+ unsigned int one = 1;
+ if (ioctl(pcap_fileno(s->handle), BIOCIMMEDIATE, &one) < 0) {
+ fprintf(stderr, "qemu: pcap failed to set immediate mode\n");
+ goto fail;
+ }
+ }
+#endif /* BIOCIMMEDIATE */
+#if defined(BIOCFEEDBACK)
+ /*
+ * Tell the kernel that the sent packet has to be fed back.
+ * This is necessary to connect host and guest.
+ */
+ {
+ unsigned int one = 1;
+ if (ioctl(pcap_fileno(s->handle), BIOCFEEDBACK, &one) < 0) {
+ fprintf(stderr, "qemu: pcap failed to set feedback mode\n");
+ goto fail;
+ }
+ }
+#endif /* BIOCFEEDBACK */
+#endif /* CONFIG_BPF */
+#endif /* _WIN32 */
+
+ snprintf(s->nc.info_str, sizeof(s->nc.info_str), "pcap redirector");
+
+#if defined(_WIN32)
+ if ((h = pcap_getevent(s->handle)) == NULL) {
+ fprintf(stderr, "qemu: pcap_getevent failed\n");
+ goto fail;
+ }
+ qemu_add_wait_object(h, pcap_send, s);
+#else /* !_WIN32 */
+ if ((i = pcap_get_selectable_fd(s->handle)) < 0) {
+ fprintf(stderr, "qemu: pcap_get_selectable_fd failed\n");
+ goto fail;
+ }
+ qemu_set_fd_handler(i, pcap_send, NULL, s);
+#endif /* _WIN32 */
+
+ return 0;
+
+fail:
+ if (s) {
+ if (s->handle)
+ pcap_close(s->handle);
+ }
+
+ return -1;
+}
+
+#endif
static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND_MAX])(
const NetClientOptions *opts,
@@ -901,6 +1121,9 @@ static int (* const net_client_init_fun[
#ifdef CONFIG_NET_BRIDGE
[NET_CLIENT_OPTIONS_KIND_BRIDGE] = net_init_bridge,
#endif
+#ifdef CONFIG_PCAP
+ [NET_CLIENT_OPTIONS_KIND_PCAP] = net_init_pcap,
+#endif
[NET_CLIENT_OPTIONS_KIND_HUBPORT] = net_init_hubport,
#ifdef CONFIG_VHOST_NET_USED
[NET_CLIENT_OPTIONS_KIND_VHOST_USER] = net_init_vhost_user,
--- qapi-schema.json.orig 2015-08-11 19:11:09 UTC
+++ qapi-schema.json
@@ -2423,6 +2423,10 @@
diff -ruN qapi-schema.json qapi-schema.json
--- qapi-schema.json 2015-12-17 04:04:50.000000000 +0600
+++ qapi-schema.json 2015-12-25 01:32:09.000000000 +0600
@@ -2538,6 +2538,10 @@
'*br': 'str',
'*helper': 'str' } }
@ -282,11 +38,11 @@
##
# @NetdevHubPortOptions
#
@@ -2490,6 +2494,7 @@
@@ -2608,6 +2612,7 @@
'nic': 'NetLegacyNicOptions',
'user': 'NetdevUserOptions',
'tap': 'NetdevTapOptions',
'l2tpv3': 'NetdevL2TPv3Options',
+ 'pcap': 'NetdevPcapOptions',
'l2tpv3': 'NetdevL2TPv3Options',
'socket': 'NetdevSocketOptions',
'vde': 'NetdevVdeOptions',
'dump': 'NetdevDumpOptions',

View File

@ -0,0 +1,248 @@
--- net/net.c.orig 2016-04-14 20:19:54 UTC
+++ net/net.c
@@ -48,6 +48,11 @@
#include "net/filter.h"
#include "qapi/string-output-visitor.h"
+#include <sys/ioctl.h>
+#ifdef __FreeBSD__
+#include <net/if.h>
+#endif
+
/* Net bridge is currently not supported for W32. */
#if !defined(_WIN32)
# define CONFIG_NET_BRIDGE
@@ -931,7 +936,223 @@ static int net_init_nic(const NetClientO
return idx;
}
+#if defined(CONFIG_PCAP)
+#if defined(CONFIG_BPF)
+#define PCAP_DONT_INCLUDE_PCAP_BPF_H
+#include <net/bpf.h>
+#endif
+#include <pcap.h>
+
+struct PCAPState {
+ NetClientState nc;
+ pcap_t *handle;
+ int max_eth_frame_size;
+};
+
+static ssize_t pcap_receive(NetClientState *nc, const uint8_t *buf, size_t size)
+{
+ struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
+
+ return pcap_inject(s->handle, (u_char*)buf, size);
+}
+
+static void pcap_callback(u_char *user, struct pcap_pkthdr *phdr, u_char *pdata
+ )
+{
+ NetClientState *nc = (NetClientState *)user;
+
+ int len = phdr->len;
+#ifdef __FreeBSD__
+ struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
+ int max_eth_frame_size = s->max_eth_frame_size;
+
+ if (len > max_eth_frame_size) {
+ fprintf(stderr,
+ "pcap_send: packet size > %d (%d), truncating\n",
+ max_eth_frame_size, len);
+ len = max_eth_frame_size;
+ }
+#endif
+ qemu_send_packet(nc, pdata, len);
+}
+
+static void pcap_send(void *opaque)
+{
+ struct PCAPState *s = (struct PCAPState *)opaque;
+
+ for (;;) {
+ if (pcap_dispatch(s->handle, 0, (pcap_handler)&pcap_callback, (u_char *)&s->nc) >= 0)
+ break;
+ }
+}
+
+static void pcap_cleanup(NetClientState *nc)
+{
+ struct PCAPState *s = DO_UPCAST(struct PCAPState, nc, nc);
+
+ qemu_purge_queued_packets(nc);
+ pcap_close(s->handle);
+}
+
+static NetClientInfo net_pcap_info = {
+ .type = NET_CLIENT_OPTIONS_KIND_PCAP,
+ .size = sizeof(struct PCAPState),
+ .receive = pcap_receive,
+// .receive_raw = pcap_receive_raw,
+// .receive_iov = pcap_receive_iov,
+// .poll = pcap_poll,
+ .cleanup = pcap_cleanup,
+};
+/*
+ * ... -net pcap,ifname="..."
+ */
+
+int net_init_pcap(const NetClientOptions *opts,
+ const char *name, NetClientState *peer, Error **errp)
+{
+ const NetdevPcapOptions *pcap_opts = opts->u.pcap.data;
+ NetClientState *nc;
+ struct PCAPState *s;
+ const char *ifname;
+ char errbuf[PCAP_ERRBUF_SIZE];
+#if defined(_WIN32)
+ HANDLE h;
+#endif
+ int i;
+
+ if (!pcap_opts->has_ifname)
+ return -1;
+
+ ifname = pcap_opts->ifname;
+
+ /* create the object */
+ nc = qemu_new_net_client(&net_pcap_info, peer, "pcap", ifname);
+ s = DO_UPCAST(struct PCAPState, nc, nc);
+
+ if (ifname == NULL && (ifname = pcap_lookupdev(errbuf)) == NULL) {
+ fprintf(stderr, "qemu: pcap_create: %s\n", errbuf);
+ goto fail;
+ }
+#ifdef __FreeBSD__
+ /*
+ * We want to avoid passing oversize packets to the guest, which
+ * at least on FreeBSD can happen if the host interface uses tso
+ * (seen with an em(4) in this case) - so find out the host
+ * interface's mtu and assume the guest is configured the same.
+ */
+ s->max_eth_frame_size = 1514;
+ i = socket(AF_INET, SOCK_DGRAM, 0);
+ if (i >= 0) {
+ struct ifreq ifr;
+
+ (void) memset(&ifr, 0, sizeof(ifr));
+ strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(i, SIOCGIFMTU, &ifr) != -1)
+ s->max_eth_frame_size = ifr.ifr_mtu + 14;
+ close(i);
+ }
+#endif
+
+#if defined(CONFIG_PCAP_CREATE) || defined(_WIN32)
+ /*
+ * Create pcap handle for the device, set promiscuous mode and activate.
+ */
+ s->handle = (void *)pcap_create(ifname, errbuf);
+ if (!s->handle) {
+ fprintf(stderr, "qemu: pcap_create: %s\n", errbuf);
+ goto fail;
+ }
+ if (pcap_set_promisc(s->handle, 1) != 0) {
+ pcap_perror(s->handle, (char *)"qemu: pcap_set_promisc:");
+ goto fail;
+ }
+ if (pcap_activate(s->handle) != 0) {
+ pcap_perror(s->handle, (char *)"qemu: pcap_activate:");
+ goto fail;
+ }
+#else
+ /* Attempt to connect device. */
+ s->handle = (void *)pcap_open_live(ifname, 65535, 1, 0, errbuf);
+ if (!s->handle) {
+ fprintf(stderr, "qemu: pcap_open_live: %s\n", errbuf);
+ goto fail;
+ }
+#endif
+
+ /* Set non-blocking mode. */
+ if (pcap_setnonblock(s->handle, 1, errbuf) < 0) {
+ fprintf(stderr, "qemu: pcap_setnonblock: %s\n", errbuf);
+ goto fail;
+ }
+
+#if defined(_WIN32)
+ /*
+ * Tell the kernel that the packet has to be seen immediately.
+ */
+ if (pcap_setmintocopy(s->handle, 0) < 0) {
+ fprintf(stderr, "qemu: pcap failed to set immediate mode\n");
+ goto fail;
+ }
+#else /* !_WIN32 */
+#if defined(CONFIG_BPF)
+#if defined(BIOCIMMEDIATE)
+ /*
+ * Tell the kernel that the packet has to be seen immediately.
+ */
+ {
+ unsigned int one = 1;
+ if (ioctl(pcap_fileno(s->handle), BIOCIMMEDIATE, &one) < 0) {
+ fprintf(stderr, "qemu: pcap failed to set immediate mode\n");
+ goto fail;
+ }
+ }
+#endif /* BIOCIMMEDIATE */
+#if defined(BIOCFEEDBACK)
+ /*
+ * Tell the kernel that the sent packet has to be fed back.
+ * This is necessary to connect host and guest.
+ */
+ {
+ unsigned int one = 1;
+ if (ioctl(pcap_fileno(s->handle), BIOCFEEDBACK, &one) < 0) {
+ fprintf(stderr, "qemu: pcap failed to set feedback mode\n");
+ goto fail;
+ }
+ }
+#endif /* BIOCFEEDBACK */
+#endif /* CONFIG_BPF */
+#endif /* _WIN32 */
+
+ snprintf(s->nc.info_str, sizeof(s->nc.info_str), "pcap redirector");
+
+#if defined(_WIN32)
+ if ((h = pcap_getevent(s->handle)) == NULL) {
+ fprintf(stderr, "qemu: pcap_getevent failed\n");
+ goto fail;
+ }
+ qemu_add_wait_object(h, pcap_send, s);
+#else /* !_WIN32 */
+ if ((i = pcap_get_selectable_fd(s->handle)) < 0) {
+ fprintf(stderr, "qemu: pcap_get_selectable_fd failed\n");
+ goto fail;
+ }
+ qemu_set_fd_handler(i, pcap_send, NULL, s);
+#endif /* _WIN32 */
+
+ return 0;
+
+fail:
+ if (s) {
+ if (s->handle)
+ pcap_close(s->handle);
+ }
+
+ return -1;
+}
+
+#endif
+
static int (* const net_client_init_fun[NET_CLIENT_OPTIONS_KIND__MAX])(
const NetClientOptions *opts,
const char *name,
@@ -952,6 +1172,9 @@ static int (* const net_client_init_fun[
#ifdef CONFIG_NET_BRIDGE
[NET_CLIENT_OPTIONS_KIND_BRIDGE] = net_init_bridge,
#endif
+#ifdef CONFIG_PCAP
+ [NET_CLIENT_OPTIONS_KIND_PCAP] = net_init_pcap,
+#endif
[NET_CLIENT_OPTIONS_KIND_HUBPORT] = net_init_hubport,
#ifdef CONFIG_VHOST_NET_USED
[NET_CLIENT_OPTIONS_KIND_VHOST_USER] = net_init_vhost_user,

View File

@ -1,14 +1,17 @@
%%SOFTMMU%%bin/ivshmem-client
%%SOFTMMU%%bin/ivshmem-server
%%SOFTMMU%%bin/qemu-ga
%%SOFTMMU%%bin/qemu-img
%%SOFTMMU%%bin/qemu-io
%%SOFTMMU%%bin/qemu-nbd
bin/ivshmem-server
bin/ivshmem-client
bin/qemu-ga
bin/qemu-i386
bin/qemu-img
bin/qemu-io
bin/qemu-nbd
%%NO_X86_TARGETS%%bin/qemu-sparc
%%NO_X86_TARGETS%%bin/qemu-sparc64
%%NO_X86_TARGETS%%bin/qemu-system-aarch64
%%NO_X86_TARGETS%%bin/qemu-system-alpha
%%NO_X86_TARGETS%%bin/qemu-system-arm
%%NO_X86_TARGETS%%bin/qemu-system-cris
%%SOFTMMU%%bin/qemu-system-i386
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
@ -29,105 +32,95 @@
%%NO_X86_TARGETS%%bin/qemu-system-sparc64
%%NO_X86_TARGETS%%bin/qemu-system-tricore
%%NO_X86_TARGETS%%bin/qemu-system-unicore32
%%BSD_USER%%bin/qemu-arm%%STATIC%%
%%BSD_USER%%bin/qemu-i386%%STATIC%%
%%BSD_USER%%bin/qemu-mips%%STATIC%%
%%BSD_USER64%%bin/qemu-mips64%%STATIC%%
%%BSD_USER64%%bin/qemu-mips64el%%STATIC%%
%%BSD_USER%%bin/qemu-mipsel%%STATIC%%
%%BSD_USER%%bin/qemu-sparc%%STATIC%%
%%BSD_USER64%%bin/qemu-sparc64%%STATIC%%
%%BSD_USER64%%bin/qemu-x86_64%%STATIC%%
%%SOFTMMU%%bin/qemu-system-x86_64
bin/qemu-system-x86_64
%%NO_X86_TARGETS%%bin/qemu-system-xtensa
%%NO_X86_TARGETS%%bin/qemu-system-xtensaeb
%%SOFTMMU%%man/man1/qemu.1.gz
%%SOFTMMU%%man/man8/qemu-ga.8.gz
%%SOFTMMU%%man/man1/qemu-img.1.gz
%%SOFTMMU%%man/man8/qemu-nbd.8.gz
%%SOFTMMU%%@sample etc/qemu-ifup.sample
%%SOFTMMU%%@sample etc/qemu-ifdown.sample
%%SOFTMMU%%%%DATADIR%%/QEMU,tcx.bin
%%SOFTMMU%%%%DATADIR%%/QEMU,cgthree.bin
%%SOFTMMU%%%%DATADIR%%/acpi-dsdt.aml
%%SOFTMMU%%%%DATADIR%%/q35-acpi-dsdt.aml
%%SOFTMMU%%%%DATADIR%%/bios-256k.bin
%%SOFTMMU%%%%DATADIR%%/bios.bin
%%SOFTMMU%%%%DATADIR%%/efi-e1000.rom
%%SOFTMMU%%%%DATADIR%%/efi-eepro100.rom
%%SOFTMMU%%%%DATADIR%%/efi-ne2k_pci.rom
%%SOFTMMU%%%%DATADIR%%/efi-pcnet.rom
%%SOFTMMU%%%%DATADIR%%/efi-rtl8139.rom
%%SOFTMMU%%%%DATADIR%%/efi-virtio.rom
%%SOFTMMU%%%%DATADIR%%/s390-ccw.img
%%SOFTMMU%%%%DATADIR%%/vgabios.bin
%%SOFTMMU%%%%DATADIR%%/vgabios-cirrus.bin
%%SOFTMMU%%%%DATADIR%%/vgabios-qxl.bin
%%SOFTMMU%%%%DATADIR%%/vgabios-stdvga.bin
%%SOFTMMU%%%%DATADIR%%/vgabios-virtio.bin
%%SOFTMMU%%%%DATADIR%%/vgabios-vmware.bin
%%SOFTMMU%%%%DATADIR%%/palcode-clipper
%%SOFTMMU%%%%DATADIR%%/ppc_rom.bin
%%SOFTMMU%%%%DATADIR%%/openbios-ppc
%%SOFTMMU%%%%DATADIR%%/openbios-sparc32
%%SOFTMMU%%%%DATADIR%%/openbios-sparc64
%%SOFTMMU%%%%DATADIR%%/pxe-e1000.rom
%%SOFTMMU%%%%DATADIR%%/pxe-eepro100.rom
%%SOFTMMU%%%%DATADIR%%/pxe-ne2k_pci.rom
%%SOFTMMU%%%%DATADIR%%/pxe-rtl8139.rom
%%SOFTMMU%%%%DATADIR%%/pxe-pcnet.rom
%%SOFTMMU%%%%DATADIR%%/pxe-virtio.rom
%%SOFTMMU%%%%DATADIR%%/petalogix-ml605.dtb
%%SOFTMMU%%%%DATADIR%%/spapr-rtas.bin
%%SOFTMMU%%%%DATADIR%%/slof.bin
%%SOFTMMU%%%%DATADIR%%/s390-zipl.rom
%%SOFTMMU%%%%DATADIR%%/linuxboot.bin
%%SOFTMMU%%%%DATADIR%%/multiboot.bin
%%SOFTMMU%%%%DATADIR%%/sgabios.bin
%%SOFTMMU%%%%DATADIR%%/petalogix-s3adsp1800.dtb
%%SOFTMMU%%%%DATADIR%%/bamboo.dtb
%%SOFTMMU%%%%DATADIR%%/kvmvapic.bin
%%SOFTMMU%%%%DATADIR%%/qemu-icon.bmp
%%SOFTMMU%%%%DATADIR%%/qemu_logo_no_text.svg
%%SOFTMMU%%%%DATADIR%%/trace-events
%%SOFTMMU%%%%DATADIR%%/u-boot.e500
%%SOFTMMU%%%%DATADIR%%/keymaps/ar
%%SOFTMMU%%%%DATADIR%%/keymaps/bepo
%%SOFTMMU%%%%DATADIR%%/keymaps/common
%%SOFTMMU%%%%DATADIR%%/keymaps/cz
%%SOFTMMU%%%%DATADIR%%/keymaps/da
%%SOFTMMU%%%%DATADIR%%/keymaps/de
%%SOFTMMU%%%%DATADIR%%/keymaps/de-ch
%%SOFTMMU%%%%DATADIR%%/keymaps/en-gb
%%SOFTMMU%%%%DATADIR%%/keymaps/en-us
%%SOFTMMU%%%%DATADIR%%/keymaps/es
%%SOFTMMU%%%%DATADIR%%/keymaps/et
%%SOFTMMU%%%%DATADIR%%/keymaps/fi
%%SOFTMMU%%%%DATADIR%%/keymaps/fo
%%SOFTMMU%%%%DATADIR%%/keymaps/fr
%%SOFTMMU%%%%DATADIR%%/keymaps/fr-be
%%SOFTMMU%%%%DATADIR%%/keymaps/fr-ca
%%SOFTMMU%%%%DATADIR%%/keymaps/fr-ch
%%SOFTMMU%%%%DATADIR%%/keymaps/hr
%%SOFTMMU%%%%DATADIR%%/keymaps/hu
%%SOFTMMU%%%%DATADIR%%/keymaps/is
%%SOFTMMU%%%%DATADIR%%/keymaps/it
%%SOFTMMU%%%%DATADIR%%/keymaps/ja
%%SOFTMMU%%%%DATADIR%%/keymaps/lt
%%SOFTMMU%%%%DATADIR%%/keymaps/lv
%%SOFTMMU%%%%DATADIR%%/keymaps/mk
%%SOFTMMU%%%%DATADIR%%/keymaps/modifiers
%%SOFTMMU%%%%DATADIR%%/keymaps/nl
%%SOFTMMU%%%%DATADIR%%/keymaps/nl-be
%%SOFTMMU%%%%DATADIR%%/keymaps/no
%%SOFTMMU%%%%DATADIR%%/keymaps/pl
%%SOFTMMU%%%%DATADIR%%/keymaps/pt
%%SOFTMMU%%%%DATADIR%%/keymaps/pt-br
%%SOFTMMU%%%%DATADIR%%/keymaps/ru
%%SOFTMMU%%%%DATADIR%%/keymaps/sl
%%SOFTMMU%%%%DATADIR%%/keymaps/sv
%%SOFTMMU%%%%DATADIR%%/keymaps/th
%%SOFTMMU%%%%DATADIR%%/keymaps/tr
bin/qemu-x86_64
man/man1/qemu.1.gz
man/man1/qemu-img.1.gz
man/man8/qemu-ga.8.gz
man/man8/qemu-nbd.8.gz
@sample etc/qemu-ifup.sample
@sample etc/qemu-ifdown.sample
%%DATADIR%%/QEMU,tcx.bin
%%DATADIR%%/QEMU,cgthree.bin
%%DATADIR%%/acpi-dsdt.aml
%%DATADIR%%/bios-256k.bin
%%DATADIR%%/bios.bin
%%DATADIR%%/efi-e1000.rom
%%DATADIR%%/efi-eepro100.rom
%%DATADIR%%/efi-ne2k_pci.rom
%%DATADIR%%/efi-pcnet.rom
%%DATADIR%%/efi-rtl8139.rom
%%DATADIR%%/efi-virtio.rom
%%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
%%DATADIR%%/multiboot.bin
%%DATADIR%%/sgabios.bin
%%DATADIR%%/petalogix-s3adsp1800.dtb
%%DATADIR%%/bamboo.dtb
%%DATADIR%%/kvmvapic.bin
%%DATADIR%%/qemu-icon.bmp
%%DATADIR%%/qemu_logo_no_text.svg
%%DATADIR%%/trace-events
%%DATADIR%%/u-boot.e500
%%DATADIR%%/keymaps/ar
%%DATADIR%%/keymaps/bepo
%%DATADIR%%/keymaps/common
%%DATADIR%%/keymaps/cz
%%DATADIR%%/keymaps/da
%%DATADIR%%/keymaps/de
%%DATADIR%%/keymaps/de-ch
%%DATADIR%%/keymaps/en-gb
%%DATADIR%%/keymaps/en-us
%%DATADIR%%/keymaps/es
%%DATADIR%%/keymaps/et
%%DATADIR%%/keymaps/fi
%%DATADIR%%/keymaps/fo
%%DATADIR%%/keymaps/fr
%%DATADIR%%/keymaps/fr-be
%%DATADIR%%/keymaps/fr-ca
%%DATADIR%%/keymaps/fr-ch
%%DATADIR%%/keymaps/hr
%%DATADIR%%/keymaps/hu
%%DATADIR%%/keymaps/is
%%DATADIR%%/keymaps/it
%%DATADIR%%/keymaps/ja
%%DATADIR%%/keymaps/lt
%%DATADIR%%/keymaps/lv
%%DATADIR%%/keymaps/mk
%%DATADIR%%/keymaps/modifiers
%%DATADIR%%/keymaps/nl
%%DATADIR%%/keymaps/nl-be
%%DATADIR%%/keymaps/no
%%DATADIR%%/keymaps/pl
%%DATADIR%%/keymaps/pt
%%DATADIR%%/keymaps/pt-br
%%DATADIR%%/keymaps/ru
%%DATADIR%%/keymaps/sl
%%DATADIR%%/keymaps/sv
%%DATADIR%%/keymaps/th
%%DATADIR%%/keymaps/tr
%%GTK2%%share/locale/de_DE/LC_MESSAGES/qemu.mo
%%GTK2%%share/locale/fr_FR/LC_MESSAGES/qemu.mo
%%GTK2%%share/locale/it/LC_MESSAGES/qemu.mo