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:
parent
5a88dba32b
commit
3241ffeaf1
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=420489
@ -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}/)
|
||||
|
@ -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
|
||||
|
@ -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)"
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
|
@ -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',
|
||||
|
248
emulators/qemu/files/pcap-patch-net_net.c
Normal file
248
emulators/qemu/files/pcap-patch-net_net.c
Normal 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,
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user