aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Steinmetz <zi@FreeBSD.org>2023-01-20 19:21:27 +0000
committerRyan Steinmetz <zi@FreeBSD.org>2023-01-20 19:21:27 +0000
commit92dec795cd3fc00c5b9f62cd8be7b6540132f27e (patch)
tree12d9757c79e510d43214f2d6b4a0e3bac1c8db8d
parent88cff75b96637c2069b1e86348095d6dc06e7ba2 (diff)
downloadports-92dec795cd3fc00c5b9f62cd8be7b6540132f27e.tar.gz
ports-92dec795cd3fc00c5b9f62cd8be7b6540132f27e.zip
emulators/qemu-guest-agent: Delete port
- Remove port (being merged into a flavor of emulators/qemu) - Document change in MOVED
-rw-r--r--MOVED1
-rw-r--r--emulators/Makefile1
-rw-r--r--emulators/qemu-guest-agent/Makefile174
-rw-r--r--emulators/qemu-guest-agent/distinfo7
-rw-r--r--emulators/qemu-guest-agent/files/patch-Makefile106
-rw-r--r--emulators/qemu-guest-agent/files/patch-configure201
-rw-r--r--emulators/qemu-guest-agent/files/patch-qga_commands-posix.c758
-rw-r--r--emulators/qemu-guest-agent/files/patch-qga_main.c30
-rw-r--r--emulators/qemu-guest-agent/files/qemu-guest-agent.in31
-rw-r--r--emulators/qemu-guest-agent/pkg-descr3
-rw-r--r--emulators/qemu-guest-agent/pkg-message17
-rw-r--r--emulators/qemu-guest-agent/pkg-plist1
12 files changed, 1 insertions, 1329 deletions
diff --git a/MOVED b/MOVED
index 0f0683261de7..76df71372c3b 100644
--- a/MOVED
+++ b/MOVED
@@ -17759,3 +17759,4 @@ net-p2p/tootle|net-p2p/tooth|2023-01-16|Upstream archived, forked
lang/zig-devel|lang/zig|2023-01-19|Development version no longer necessary
irc/cwirc||2023-01-19|Has expired: No upstream, no apparent use seen online
sysutils/ior|benchmarks/ior|2023-01-20|Moved to a better fit category
+emulators/qemu-guest-agent|emulators/qemu@guestagent|2023-01-20|Seperate port merged with main port as a flavor
diff --git a/emulators/Makefile b/emulators/Makefile
index 74ed1ba7a151..6cdea843d238 100644
--- a/emulators/Makefile
+++ b/emulators/Makefile
@@ -111,7 +111,6 @@
SUBDIR += qemu
SUBDIR += qemu-cheri
SUBDIR += qemu-devel
- SUBDIR += qemu-guest-agent
SUBDIR += qemu-powernv
SUBDIR += qemu-user-static
SUBDIR += qemu-user-static-devel
diff --git a/emulators/qemu-guest-agent/Makefile b/emulators/qemu-guest-agent/Makefile
deleted file mode 100644
index 30bac25acd4e..000000000000
--- a/emulators/qemu-guest-agent/Makefile
+++ /dev/null
@@ -1,174 +0,0 @@
-PORTNAME= qemu
-DISTVERSION= 5.0.1
-CATEGORIES= emulators
-MASTER_SITES= https://download.qemu.org/
-PKGNAMESUFFIX= -guest-agent
-
-MAINTAINER= zhecka@gmail.com
-COMMENT= QEMU guest-agent utilities
-WWW= https://www.qemu.org/
-
-LICENSE= GPLv2
-
-DIST_SUBDIR= qemu/${PORTVERSION}
-FILESDIR= ${.CURDIR}/files
-HAS_CONFIGURE= yes
-USES= compiler:c++11-lang gmake gnome pkgconfig python:build tar:xz
-USE_GNOME= glib20
-USE_RC_SUBR= qemu-guest-agent
-MAKE_ENV+= BSD_MAKE="${MAKE}" PREFIX=${PREFIX}
-
-OPTIONS_EXCLUDE=SAMBA X11 GTK3 OPENGL GNUTLS SASL JPEG PNG CURL \
- CDROM_DMA PCAP USBREDIR GNS3 X86_TARGETS DOCS\
- STATIC_LINK NCURSES VDE
-
-PLIST= ${.CURDIR}/pkg-plist
-DESCR= ${.CURDIR}/pkg-descr
-
-CONFIGURE_ARGS?=--localstatedir=/var --extra-ldflags=-L\"${LOCALBASE}/lib\" \
- --mandir=${MANPREFIX}/man \
- --prefix=${PREFIX} --cc=${CC} --disable-kvm \
- --python=${PYTHON_CMD} \
- --extra-cflags=-I${WRKSRC}\ -I${LOCALBASE}/include\ -DPREFIX=\\\"\"${PREFIX}\\\"\"\ -DBSD_GUEST_AGENT\ -DFREEBSD \
- --disable-blobs \
- --disable-system \
- --disable-user \
- --disable-linux-user \
- --disable-bsd-user \
- --disable-docs \
- --enable-guest-agent \
- --disable-guest-agent-msi \
- --disable-pie \
- --disable-modules \
- --disable-module-upgrades \
- --disable-debug-tcg \
- --disable-debug-info \
- --disable-sparse \
- --disable-gnutls \
- --disable-nettle \
- --disable-gcrypt \
- --disable-auth-pam \
- --disable-sdl \
- --disable-sdl-image \
- --disable-gtk \
- --disable-vte \
- --disable-curses \
- --disable-iconv \
- --disable-vnc \
- --disable-vnc-sasl \
- --disable-vnc-jpeg \
- --disable-vnc-png \
- --disable-cocoa \
- --disable-virtfs \
- --disable-mpath \
- --disable-xen \
- --disable-xen-pci-passthrough \
- --disable-brlapi \
- --disable-curl \
- --disable-membarrier \
- --disable-fdt \
- --disable-kvm \
- --disable-hax \
- --disable-hvf \
- --disable-whpx \
- --disable-rdma \
- --disable-pvrdma \
- --disable-vde \
- --disable-netmap \
- --disable-linux-aio \
- --disable-linux-io-uring \
- --disable-cap-ng \
- --disable-attr \
- --disable-vhost-net \
- --disable-vhost-vsock \
- --disable-vhost-scsi \
- --disable-vhost-crypto \
- --disable-vhost-kernel \
- --disable-vhost-user \
- --disable-spice \
- --disable-rbd \
- --disable-libiscsi \
- --disable-libnfs \
- --disable-smartcard \
- --disable-libusb \
- --disable-live-block-migration \
- --disable-usb-redir \
- --disable-lzo \
- --disable-snappy \
- --disable-bzip2 \
- --disable-lzfse \
- --disable-zstd \
- --disable-seccomp \
- --disable-coroutine-pool \
- --disable-glusterfs \
- --disable-tpm \
- --disable-libssh \
- --disable-numa \
- --disable-libxml2 \
- --disable-tcmalloc \
- --disable-jemalloc \
- --disable-avx2 \
- --disable-avx512f \
- --disable-replication \
- --disable-opengl \
- --disable-virglrenderer \
- --disable-xfsctl \
- --disable-qom-cast-debug \
- --enable-tools \
- --disable-vxhs \
- --disable-bochs \
- --disable-cloop \
- --disable-dmg \
- --disable-qcow1 \
- --disable-vdi \
- --disable-vvfat \
- --disable-qed \
- --disable-parallels \
- --disable-sheepdog \
- --disable-crypto-afalg \
- --disable-capstone \
- --disable-debug-mutex \
- --disable-libpmem \
- --disable-xkbcommon
-
-post-install:
- @${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/qemu-*
- @${RM} ${STAGEDIR}${PREFIX}/bin/qemu-nbd
- @${RM} ${STAGEDIR}${PREFIX}/bin/qemu-edid
- @${RM} ${STAGEDIR}${PREFIX}/bin/qemu-img
- @${RM} ${STAGEDIR}${PREFIX}/bin/qemu-io
- @${RMDIR} ${STAGEDIR}${DATADIR}
- ${MKDIR} ${STAGEDIR}${PREFIX}/qemu
-
-.include <bsd.port.options.mk>
-
-.if !defined(STRIP) || ${STRIP} == ""
-CONFIGURE_ARGS+=--disable-strip
-.endif
-
-.if ${ARCH} == "amd64"
-MAKE_ARGS+= ARCH=x86_64
-.endif
-
-.if ${ARCH} == "powerpc"
-MAKE_ARGS+= ARCH=ppc
-.endif
-
-.if ${ARCH} == "powerpc64"
-MAKE_ARGS+= ARCH=ppc64
-.endif
-
-.if ${ARCH} == "sparc64"
-CONFIGURE_ARGS+= --sparc_cpu=v9
-.endif
-
-PLIST_SUB+= LINUXBOOT_DMA=""
-
-# 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
-
-.include <bsd.port.mk>
diff --git a/emulators/qemu-guest-agent/distinfo b/emulators/qemu-guest-agent/distinfo
deleted file mode 100644
index d5f50ec2c84a..000000000000
--- a/emulators/qemu-guest-agent/distinfo
+++ /dev/null
@@ -1,7 +0,0 @@
-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
diff --git a/emulators/qemu-guest-agent/files/patch-Makefile b/emulators/qemu-guest-agent/files/patch-Makefile
deleted file mode 100644
index 3520d14c1d94..000000000000
--- a/emulators/qemu-guest-agent/files/patch-Makefile
+++ /dev/null
@@ -1,106 +0,0 @@
---- Makefile.orig 2020-09-15 19:31:13 UTC
-+++ Makefile
-@@ -361,29 +361,6 @@
- MANUAL_BUILDDIR := docs
- endif
-
--ifdef BUILD_DOCS
--DOCS+=$(MANUAL_BUILDDIR)/system/qemu.1
--DOCS+=$(MANUAL_BUILDDIR)/tools/qemu-img.1
--DOCS+=$(MANUAL_BUILDDIR)/tools/qemu-nbd.8
--DOCS+=$(MANUAL_BUILDDIR)/interop/qemu-ga.8
--ifeq ($(CONFIG_LINUX)$(CONFIG_SECCOMP)$(CONFIG_LIBCAP_NG),yyy)
--DOCS+=$(MANUAL_BUILDDIR)/tools/virtiofsd.1
--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
--DOCS+=$(MANUAL_BUILDDIR)/system/qemu-cpu-models.7
--DOCS+=$(MANUAL_BUILDDIR)/index.html
--ifdef CONFIG_VIRTFS
--DOCS+=$(MANUAL_BUILDDIR)/tools/virtfs-proxy-helper.1
--endif
--ifdef CONFIG_TRACE_SYSTEMTAP
--DOCS+=$(MANUAL_BUILDDIR)/tools/qemu-trace-stap.1
--endif
--else
--DOCS=
--endif
--
- SUBDIR_MAKEFLAGS=$(if $(V),,--no-print-directory --quiet) BUILD_DIR=$(BUILD_DIR)
- SUBDIR_DEVICES_MAK=$(patsubst %, %/config-devices.mak, $(filter %-softmmu, $(TARGET_DIRS)))
- SUBDIR_DEVICES_MAK_DEP=$(patsubst %, %.d, $(SUBDIR_DEVICES_MAK))
-@@ -878,10 +855,6 @@
- $(call install-manual,user)
-
- install-doc: $(DOCS) install-sphinxdocs
-- $(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)"
- ifdef CONFIG_POSIX
- $(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/system/qemu.1 "$(DESTDIR)$(mandir)/man1"
-@@ -889,21 +862,10 @@
- $(INSTALL_DATA) docs/interop/qemu-qmp-ref.7 "$(DESTDIR)$(mandir)/man7"
- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/system/qemu-block-drivers.7 "$(DESTDIR)$(mandir)/man7"
- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/system/qemu-cpu-models.7 "$(DESTDIR)$(mandir)/man7"
--ifeq ($(CONFIG_TOOLS),y)
-- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/tools/qemu-img.1 "$(DESTDIR)$(mandir)/man1"
-- $(INSTALL_DIR) "$(DESTDIR)$(mandir)/man8"
-- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/tools/qemu-nbd.8 "$(DESTDIR)$(mandir)/man8"
--endif
- ifdef CONFIG_TRACE_SYSTEMTAP
- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/tools/qemu-trace-stap.1 "$(DESTDIR)$(mandir)/man1"
- endif
--ifneq (,$(findstring qemu-ga,$(TOOLS)))
-- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/interop/qemu-ga.8 "$(DESTDIR)$(mandir)/man8"
-- $(INSTALL_DATA) docs/interop/qemu-ga-ref.html "$(DESTDIR)$(qemu_docdir)"
-- $(INSTALL_DATA) docs/interop/qemu-ga-ref.txt "$(DESTDIR)$(qemu_docdir)"
-- $(INSTALL_DATA) docs/interop/qemu-ga-ref.7 "$(DESTDIR)$(mandir)/man7"
- endif
--endif
- ifdef CONFIG_VIRTFS
- $(INSTALL_DIR) "$(DESTDIR)$(mandir)/man1"
- $(INSTALL_DATA) $(MANUAL_BUILDDIR)/tools/virtfs-proxy-helper.1 "$(DESTDIR)$(mandir)/man1"
-@@ -927,7 +889,7 @@
- install-includedir:
- $(INSTALL_DIR) "$(DESTDIR)$(includedir)"
-
--install: all $(if $(BUILD_DOCS),install-doc) \
-+install: all \
- install-datadir install-localstatedir install-includedir \
- $(if $(INSTALL_BLOBS),$(edk2-decompressed)) \
- recurse-install
-@@ -974,31 +936,12 @@
- "$(DESTDIR)$(qemu_datadir)/firmware/$$x"; \
- done
- endif
-- for s in $(ICON_SIZES); do \
-- mkdir -p "$(DESTDIR)$(qemu_icondir)/hicolor/$${s}/apps"; \
-- $(INSTALL_DATA) $(SRC_PATH)/ui/icons/qemu_$${s}.png \
-- "$(DESTDIR)$(qemu_icondir)/hicolor/$${s}/apps/qemu.png"; \
-- done; \
-- mkdir -p "$(DESTDIR)$(qemu_icondir)/hicolor/32x32/apps"; \
-- $(INSTALL_DATA) $(SRC_PATH)/ui/icons/qemu_32x32.bmp \
-- "$(DESTDIR)$(qemu_icondir)/hicolor/32x32/apps/qemu.bmp"; \
-- mkdir -p "$(DESTDIR)$(qemu_icondir)/hicolor/scalable/apps"; \
-- $(INSTALL_DATA) $(SRC_PATH)/ui/icons/qemu.svg \
-- "$(DESTDIR)$(qemu_icondir)/hicolor/scalable/apps/qemu.svg"
-- mkdir -p "$(DESTDIR)$(qemu_desktopdir)"
-- $(INSTALL_DATA) $(SRC_PATH)/ui/qemu.desktop \
-- "$(DESTDIR)$(qemu_desktopdir)/qemu.desktop"
- ifdef CONFIG_GTK
- $(MAKE) -C po $@
- endif
- ifeq ($(CONFIG_PLUGIN),y)
- $(INSTALL_DATA) $(SRC_PATH)/include/qemu/qemu-plugin.h "$(DESTDIR)$(includedir)/qemu-plugin.h"
- endif
-- $(INSTALL_DIR) "$(DESTDIR)$(qemu_datadir)/keymaps"
-- set -e; for x in $(KEYMAPS); do \
-- $(INSTALL_DATA) $(SRC_PATH)/pc-bios/keymaps/$$x "$(DESTDIR)$(qemu_datadir)/keymaps"; \
-- done
-- $(INSTALL_DATA) $(BUILD_DIR)/trace-events-all "$(DESTDIR)$(qemu_datadir)/trace-events-all"
-
- .PHONY: ctags
- ctags:
diff --git a/emulators/qemu-guest-agent/files/patch-configure b/emulators/qemu-guest-agent/files/patch-configure
deleted file mode 100644
index adf14fe21462..000000000000
--- a/emulators/qemu-guest-agent/files/patch-configure
+++ /dev/null
@@ -1,201 +0,0 @@
---- configure.orig 2020-09-15 19:31:13 UTC
-+++ configure
-@@ -360,7 +360,7 @@
- sdl=""
- sdl_image=""
- virtfs=""
--mpath=""
-+mpath="no"
- vnc="yes"
- sparse="no"
- vde=""
-@@ -408,7 +408,7 @@
- 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 @@
- tcmalloc="no"
- jemalloc="no"
- replication="yes"
-+pcap="no"
-+pcap_create="no"
-+bpf="no"
- vxhs=""
- bochs="yes"
- cloop="yes"
-@@ -509,6 +512,7 @@
- default_devices="yes"
- plugins="no"
- fuzzing="no"
-+libudev="no"
-
- supported_cpu="no"
- supported_os="no"
-@@ -904,7 +908,7 @@
- kvm="yes"
- QEMU_INCLUDES="-isystem \$(SRC_PATH)/linux-headers -isystem $PWD/linux-headers $QEMU_INCLUDES"
- supported_os="yes"
-- libudev="yes"
-+ libudev="no"
- ;;
- esac
-
-@@ -1168,6 +1172,10 @@
- ;;
- --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 +3145,14 @@
- 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 +3822,7 @@
- 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
-@@ -3926,7 +3942,7 @@
- ##########################################
- # pixman support probe
-
--if test "$want_tools" = "no" && test "$softmmu" = "no"; then
-+if test "$softmmu" = "no"; then
- pixman_cflags=
- pixman_libs=
- elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
-@@ -4957,14 +4973,6 @@
- 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 +5106,7 @@
-
- # 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 +5509,51 @@
- 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 +6679,7 @@
- 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 +6917,15 @@
- 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 +7182,9 @@
- # if this macro is set.
- if test "$have_fsxattr" = "yes" ; then
- echo "HAVE_FSXATTR=y" >> $config_host_mak
-+fi
-+if test "$have_ifaddrs_h" = "yes" ; then
-+ echo "HAVE_IFADDRS_H=y" >> $config_host_mak
- fi
- if test "$have_copy_file_range" = "yes" ; then
- echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
diff --git a/emulators/qemu-guest-agent/files/patch-qga_commands-posix.c b/emulators/qemu-guest-agent/files/patch-qga_commands-posix.c
deleted file mode 100644
index 11dce8e5b8fc..000000000000
--- a/emulators/qemu-guest-agent/files/patch-qga_commands-posix.c
+++ /dev/null
@@ -1,758 +0,0 @@
---- qga/commands-posix.c.orig 2020-09-15 16:31:14 UTC
-+++ qga/commands-posix.c
-@@ -28,6 +28,21 @@
- #include "qemu/cutils.h"
- #include "commands-common.h"
-
-+#ifdef BSD_GUEST_AGENT
-+#include <ifaddrs.h>
-+#include <arpa/inet.h>
-+#include <sys/socket.h>
-+#include <sys/sysctl.h>
-+#include <net/if.h>
-+#include <sys/socket.h>
-+#include <ifaddrs.h>
-+#include <sys/statvfs.h>
-+#include <net/if_dl.h>
-+#include <net/if_types.h>
-+#include <net/ethernet.h>
-+#include <net/if_var.h>
-+#endif
-+
- #ifdef HAVE_UTMPX
- #include <utmpx.h>
- #endif
-@@ -85,14 +100,25 @@ void qmp_guest_shutdown(bool has_mode, const char *mod
- {
- const char *shutdown_flag;
- Error *local_err = NULL;
-+#ifdef BSD_GUEST_AGENT
-+ char *shutdown_mode;
-+#endif // BSD_GUEST_AGENT
- pid_t pid;
- int status;
-
- slog("guest-shutdown called, mode: %s", mode);
- if (!has_mode || strcmp(mode, "powerdown") == 0) {
-+#ifdef BSD_GUEST_AGENT
-+ shutdown_flag = "-p";
-+#else
- shutdown_flag = "-P";
-+#endif // BSD_GUEST_AGENT
- } else if (strcmp(mode, "halt") == 0) {
-+#ifdef BSD_GUEST_AGENT
-+ shutdown_flag = "-h";
-+#else
- shutdown_flag = "-H";
-+#endif // BSD_GUEST_AGENT
- } else if (strcmp(mode, "reboot") == 0) {
- shutdown_flag = "-r";
- } else {
-@@ -108,9 +134,15 @@ void qmp_guest_shutdown(bool has_mode, const char *mod
- reopen_fd_to_null(0);
- reopen_fd_to_null(1);
- reopen_fd_to_null(2);
-+#ifdef BSD_GUEST_AGENT
-+ shutdown_mode = g_strdup_printf("hypervisor initiated %s", mode);
-
-+ execle("/sbin/shutdown", "-h", shutdown_flag, "+0",
-+ shutdown_mode, (char*)NULL, environ);
-+#else
- execle("/sbin/shutdown", "shutdown", "-h", shutdown_flag, "+0",
- "hypervisor initiated shutdown", (char*)NULL, environ);
-+#endif // BSD_GUEST_AGENT
- _exit(EXIT_FAILURE);
- } else if (pid < 0) {
- error_setg_errno(errp, errno, "failed to create child process");
-@@ -153,9 +185,11 @@ int64_t qmp_guest_get_time(Error **errp)
- void qmp_guest_set_time(bool has_time, int64_t time_ns, Error **errp)
- {
- int ret;
-+#ifndef BSD_GUEST_AGENT
- int status;
- pid_t pid;
- Error *local_err = NULL;
-+#endif
- struct timeval tv;
- static const char hwclock_path[] = "/sbin/hwclock";
- static int hwclock_available = -1;
-@@ -193,7 +227,7 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns
- return;
- }
- }
--
-+#ifndef BSD_GUEST_AGENT
- /* Now, if user has passed a time to set and the system time is set, we
- * just need to synchronize the hardware clock. However, if no time was
- * passed, user is requesting the opposite: set the system time from the
-@@ -230,6 +264,7 @@ void qmp_guest_set_time(bool has_time, int64_t time_ns
- error_setg(errp, "hwclock failed to set hardware clock to system time");
- return;
- }
-+#endif // BSD_GUEST_AGENT
- }
-
- typedef enum {
-@@ -2625,25 +2660,263 @@ void qmp_guest_suspend_hybrid(Error **errp)
- {
- error_setg(errp, QERR_UNSUPPORTED);
- }
--
-+#ifndef BSD_GUEST_AGENT
- GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
- {
- error_setg(errp, QERR_UNSUPPORTED);
- return NULL;
- }
-+#else
-+static GuestNetworkInterfaceList *
-+guest_find_interface(GuestNetworkInterfaceList *head,
-+ const char *name)
-+{
-+ for (; head; head = head->next) {
-+ if (strcmp(head->value->name, name) == 0) {
-+ break;
-+ }
-+ }
-
-+ return head;
-+}
-+
-+static int guest_get_network_stats(const char *name,
-+ GuestNetworkInterfaceStat *stats)
-+{
-+ return -1;
-+}
-+
-+GuestNetworkInterfaceList *qmp_guest_network_get_interfaces(Error **errp)
-+{
-+ GuestNetworkInterfaceList *head = NULL, *cur_item = NULL;
-+ struct ifaddrs *ifap, *ifa;
-+
-+ if (getifaddrs(&ifap) < 0) {
-+ error_setg_errno(errp, errno, "getifaddrs failed");
-+ goto error;
-+ }
-+
-+ for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
-+ GuestNetworkInterfaceList *info;
-+ GuestIpAddressList **address_list = NULL, *address_item = NULL;
-+ GuestNetworkInterfaceStat *interface_stat = NULL;
-+ char addr4[INET_ADDRSTRLEN];
-+ char addr6[INET6_ADDRSTRLEN];
-+ int sock;
-+ struct ifreq ifr;
-+ // struct ifnet ifp;
-+ // struct if_data ifd;
-+ // unsigned char *mac_addr;
-+ char mac_addr[18]="00:00:00:00:00:00"; // = char[18];
-+ void *p;
-+
-+ g_debug("Processing %s interface", ifa->ifa_name);
-+
-+ info = guest_find_interface(head, ifa->ifa_name);
-+
-+ if (!info) {
-+ info = g_malloc0(sizeof(*info));
-+ info->value = g_malloc0(sizeof(*info->value));
-+ info->value->name = g_strdup(ifa->ifa_name);
-+
-+ if (!cur_item) {
-+ head = cur_item = info;
-+ } else {
-+ cur_item->next = info;
-+ cur_item = info;
-+ }
-+ }
-+
-+ if (!info->value->has_hardware_address &&
-+ ifa->ifa_flags & SIOCGHWADDR) {
-+ /* we haven't obtained HW address yet */
-+ sock = socket(PF_INET, SOCK_STREAM, 0);
-+ if (sock == -1) {
-+ error_setg_errno(errp, errno, "failed to create socket");
-+ goto error;
-+ }
-+ close(sock);
-+
-+ memset(&ifr, 0, sizeof(ifr));
-+ pstrcpy(ifr.ifr_name, IF_NAMESIZE, info->value->name);
-+ // memset(&ifp, 0, sizeof(ifp));
-+ // memset(&ifd, 0, sizeof(ifd));
-+
-+ if (ifa->ifa_addr->sa_family == AF_LINK) {
-+ struct sockaddr_dl *sdl =
-+ (struct sockaddr_dl *)ifa->ifa_addr;
-+
-+ info->value->has_hardware_address = false;
-+
-+ if (sdl->sdl_type == IFT_ETHER &&
-+ sdl->sdl_alen == ETHER_ADDR_LEN) {
-+ snprintf(mac_addr, 18, "%s", ether_ntoa((struct ether_addr *)LLADDR(sdl)));
-+ info->value->has_hardware_address = true;
-+ }
-+ else
-+ {
-+ info->value->has_hardware_address = true;
-+ }
-+ info->value->hardware_address = g_strdup_printf("%s", mac_addr);
-+ }
-+
-+ }
-+
-+ if (ifa->ifa_addr &&
-+ ifa->ifa_addr->sa_family == AF_INET) {
-+ /* interface with IPv4 address */
-+ p = &((struct sockaddr_in *)ifa->ifa_addr)->sin_addr;
-+ if (!inet_ntop(AF_INET, p, addr4, sizeof(addr4))) {
-+ error_setg_errno(errp, errno, "inet_ntop failed");
-+ goto error;
-+ }
-+
-+ address_item = g_malloc0(sizeof(*address_item));
-+ address_item->value = g_malloc0(sizeof(*address_item->value));
-+ address_item->value->ip_address = g_strdup(addr4);
-+ address_item->value->ip_address_type = GUEST_IP_ADDRESS_TYPE_IPV4;
-+
-+ if (ifa->ifa_netmask) {
-+ /* Count the number of set bits in netmask.
-+ * This is safe as '1' and '0' cannot be shuffled in netmask. */
-+ p = &((struct sockaddr_in *)ifa->ifa_netmask)->sin_addr;
-+ address_item->value->prefix = ctpop32(((uint32_t *) p)[0]);
-+ }
-+ } else if (ifa->ifa_addr &&
-+ ifa->ifa_addr->sa_family == AF_INET6) {
-+ /* interface with IPv6 address */
-+ p = &((struct sockaddr_in6 *)ifa->ifa_addr)->sin6_addr;
-+ if (!inet_ntop(AF_INET6, p, addr6, sizeof(addr6))) {
-+ error_setg_errno(errp, errno, "inet_ntop failed");
-+ goto error;
-+ }
-+
-+ address_item = g_malloc0(sizeof(*address_item));
-+ address_item->value = g_malloc0(sizeof(*address_item->value));
-+ address_item->value->ip_address = g_strdup(addr6);
-+ address_item->value->ip_address_type = GUEST_IP_ADDRESS_TYPE_IPV6;
-+
-+ if (ifa->ifa_netmask) {
-+ /* Count the number of set bits in netmask.
-+ * This is safe as '1' and '0' cannot be shuffled in netmask. */
-+ p = &((struct sockaddr_in6 *)ifa->ifa_netmask)->sin6_addr;
-+ address_item->value->prefix =
-+ ctpop32(((uint32_t *) p)[0]) +
-+ ctpop32(((uint32_t *) p)[1]) +
-+ ctpop32(((uint32_t *) p)[2]) +
-+ ctpop32(((uint32_t *) p)[3]);
-+ }
-+ }
-+
-+ if (!address_item) {
-+ continue;
-+ }
-+
-+ address_list = &info->value->ip_addresses;
-+
-+ while (*address_list && (*address_list)->next) {
-+ address_list = &(*address_list)->next;
-+ }
-+
-+ if (!*address_list) {
-+ *address_list = address_item;
-+ } else {
-+ (*address_list)->next = address_item;
-+ }
-+
-+ info->value->has_ip_addresses = true;
-+
-+ if (!info->value->has_statistics) {
-+ interface_stat = g_malloc0(sizeof(*interface_stat));
-+ if (guest_get_network_stats(info->value->name,
-+ interface_stat) == -1) {
-+ info->value->has_statistics = false;
-+ g_free(interface_stat);
-+ } else {
-+ info->value->statistics = interface_stat;
-+ info->value->has_statistics = true;
-+ }
-+ }
-+ }
-+
-+ freeifaddrs(ifap);
-+ return head;
-+
-+error:
-+ freeifaddrs(ifap);
-+ qapi_free_GuestNetworkInterfaceList(head);
-+ return NULL;
-+}
-+#endif // BSD_GUEST_AGENT
-+
-+#ifndef BSD_GUEST_AGENT
- GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
- {
- error_setg(errp, QERR_UNSUPPORTED);
- return NULL;
- }
-+#else
-+GuestLogicalProcessorList *qmp_guest_get_vcpus(Error **errp)
-+{
-+ int64_t current;
-+ GuestLogicalProcessorList *head, **link;
-+ long sc_max;
-+ Error *local_err = NULL;
-+ int Query[2];
-+ int NumCpu = 0;
-+ size_t Length = sizeof(NumCpu);
-+ Query[0] = CTL_HW;
-+ Query[1] = HW_NCPU;
-
-+ current = 0;
-+ head = NULL;
-+ link = &head;
-+ if (sysctl(Query, 2, &NumCpu, &Length, NULL, 0) == -1) {
-+ error_setg(errp, "sysctl get CTL_HW.HW_NCPU failed");
-+ }
-+ sc_max = NumCpu;
-+
-+ while (local_err == NULL && current < sc_max) {
-+ GuestLogicalProcessor *vcpu;
-+ GuestLogicalProcessorList *entry;
-+ int64_t id = current++;
-+ // char *path = g_strdup_printf("/sys/devices/system/cpu/cpu%" PRId64 "/",
-+ // id);
-+
-+ // if (g_file_test(path, G_FILE_TEST_EXISTS)) {
-+ vcpu = g_malloc0(sizeof *vcpu);
-+ vcpu->logical_id = id;
-+ vcpu->has_can_offline = false; /* lolspeak ftw */
-+ vcpu->online = true;
-+ vcpu->can_offline = false;
-+ // transfer_vcpu(vcpu, true, path, &local_err);
-+ entry = g_malloc0(sizeof *entry);
-+ entry->value = vcpu;
-+ *link = entry;
-+ link = &entry->next;
-+ // }
-+ // g_free(path);
-+ }
-+
-+ if (local_err == NULL) {
-+ /* there's no guest with zero VCPUs */
-+ g_assert(head != NULL);
-+ return head;
-+ }
-+
-+ qapi_free_GuestLogicalProcessorList(head);
-+ error_propagate(errp, local_err);
-+ return NULL;
-+}
-+#endif // BSD_GUEST_AGENT
-+
- int64_t qmp_guest_set_vcpus(GuestLogicalProcessorList *vcpus, Error **errp)
- {
- error_setg(errp, QERR_UNSUPPORTED);
- return -1;
- }
-
-+#ifndef BSD_GUEST_AGENT
- void qmp_guest_set_user_password(const char *username,
- const char *password,
- bool crypted,
-@@ -2651,7 +2924,114 @@ void qmp_guest_set_user_password(const char *username,
- {
- error_setg(errp, QERR_UNSUPPORTED);
- }
-+#else
-+void qmp_guest_set_user_password(const char *username,
-+ const char *password,
-+ bool crypted,
-+ Error **errp)
-+{
-+ Error *local_err = NULL;
-+ char *pw_path = NULL;
-+ pid_t pid;
-+ int status;
-+ int datafd[2] = { -1, -1 };
-+ char *rawpasswddata = NULL;
-+ size_t rawpasswdlen;
-+ char *chpasswddata = NULL;
-+ size_t chpasswdlen;
-
-+ rawpasswddata = (char *)qbase64_decode(password, -1, &rawpasswdlen, errp);
-+ if (!rawpasswddata) {
-+ return;
-+ }
-+
-+ rawpasswddata = g_renew(char, rawpasswddata, rawpasswdlen + 1);
-+ rawpasswddata[rawpasswdlen] = '\0';
-+
-+ if (strchr(rawpasswddata, '\n')) {
-+ error_setg(errp, "forbidden characters in raw password");
-+ goto out;
-+ }
-+
-+ if (strchr(username, '\n') ||
-+ strchr(username, ':')) {
-+ error_setg(errp, "forbidden characters in username");
-+ goto out;
-+ }
-+
-+ chpasswddata = g_strdup_printf("%s", rawpasswddata);
-+ chpasswdlen = strlen(chpasswddata);
-+
-+ pw_path = g_find_program_in_path("pw");
-+
-+ if (!pw_path) {
-+ error_setg(errp, "cannot find 'pw' program in PATH");
-+ goto out;
-+ }
-+
-+ if (pipe(datafd) < 0) {
-+ error_setg(errp, "cannot create pipe FDs");
-+ goto out;
-+ }
-+
-+ pid = fork();
-+ if (pid == 0) {
-+ close(datafd[1]);
-+ /* child */
-+ setsid();
-+ dup2(datafd[0], 0);
-+ reopen_fd_to_null(1);
-+ reopen_fd_to_null(2);
-+
-+ if (crypted) {
-+ execle(pw_path, "pw", "usermod", username, "-H", "0", (char*)NULL, environ);
-+ } else {
-+ execle(pw_path, "pw", "usermod", username, "-h", "0", (char*)NULL, environ);
-+ }
-+ _exit(EXIT_FAILURE);
-+ } else if (pid < 0) {
-+ error_setg_errno(errp, errno, "failed to create child process");
-+ goto out;
-+ }
-+ close(datafd[0]);
-+ datafd[0] = -1;
-+
-+ if (qemu_write_full(datafd[1], chpasswddata, chpasswdlen) != chpasswdlen) {
-+ error_setg_errno(errp, errno, "cannot write new account password");
-+ goto out;
-+ }
-+ close(datafd[1]);
-+ datafd[1] = -1;
-+
-+ ga_wait_child(pid, &status, &local_err);
-+ if (local_err) {
-+ error_propagate(errp, local_err);
-+ goto out;
-+ }
-+
-+ if (!WIFEXITED(status)) {
-+ error_setg(errp, "child process has terminated abnormally");
-+ goto out;
-+ }
-+
-+ if (WEXITSTATUS(status)) {
-+ error_setg(errp, "child process has failed to set user password");
-+ goto out;
-+ }
-+
-+out:
-+ g_free(chpasswddata);
-+ g_free(rawpasswddata);
-+ g_free(pw_path);
-+ if (datafd[0] != -1) {
-+ close(datafd[0]);
-+ }
-+ if (datafd[1] != -1) {
-+ close(datafd[1]);
-+ }
-+}
-+#endif // BSD_GUEST_AGENT
-+
- GuestMemoryBlockList *qmp_guest_get_memory_blocks(Error **errp)
- {
- error_setg(errp, QERR_UNSUPPORTED);
-@@ -2675,12 +3055,240 @@ GuestMemoryBlockInfo *qmp_guest_get_memory_block_info(
-
- #if !defined(CONFIG_FSFREEZE)
-
-+#ifndef BSD_GUEST_AGENT
- GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
- {
- error_setg(errp, QERR_UNSUPPORTED);
- return NULL;
- }
-+#else
-
-+/* ===================================================================== */
-+typedef struct FsMount {
-+ char *dirname;
-+ char *devtype;
-+ char *size;
-+ char *used;
-+ char *free;
-+ char *load;
-+ char *mntpoint;
-+ unsigned int devmajor, devminor;
-+ QTAILQ_ENTRY(FsMount) next;
-+} FsMount;
-+
-+typedef QTAILQ_HEAD(FsMountList, FsMount) FsMountList;
-+
-+static void free_fs_mount_list(FsMountList *mounts)
-+{
-+ FsMount *mount, *temp;
-+
-+ if (!mounts) {
-+ return;
-+ }
-+
-+ QTAILQ_FOREACH_SAFE(mount, mounts, next, temp) {
-+ QTAILQ_REMOVE(mounts, mount, next);
-+ g_free(mount->dirname);
-+ g_free(mount->devtype);
-+ g_free(mount->size);
-+ g_free(mount->used);
-+ g_free(mount->free);
-+ g_free(mount->load);
-+ g_free(mount->mntpoint);
-+ g_free(mount);
-+ }
-+}
-+
-+
-+#define BUFSIZE 2048
-+
-+static void build_fs_mount_list(FsMountList *mounts, Error **errp)
-+{
-+ FsMount *mount;
-+ char const *dfcmd = "/bin/df -hT";
-+ //char buf[BUFSIZE];
-+
-+ FILE *fp;
-+ char *line = NULL;
-+ //, *dash;
-+ size_t n;
-+ int ret;
-+ //, dir_s, dir_e, type_s, type_e, dev_s, dev_e;
-+ char dev_name[30], fstype[10], size[10], used[10], free[10], load[10], mounted[30];
-+ //int dev_name, fstype, size, used, free, load, mounted;
-+
-+ if ((fp = popen(dfcmd, "r")) == NULL) {
-+ g_debug("Cannot open '%s'!!\n", dfcmd);
-+ return;
-+ }
-+ while (getline(&line, &n, fp) != -1) {
-+ //g_debug("line '%s'", line);
-+ ret = sscanf(line, "%s%s%s%s%s%s%s",
-+ dev_name, fstype, size, used, free, load, mounted);
-+ if (g_str_equal(dev_name, "Filesystem")
-+ ||g_str_equal(fstype,"devfs")
-+ ||g_str_equal(fstype,"procfs")
-+ ||g_str_equal(fstype,"fdescfs")) {
-+ continue;
-+ }
-+ //g_debug("ret '%d'", ret);
-+
-+ if (ret < 7) {
-+ continue;
-+ }
-+ mount = g_new0(FsMount, 1);
-+ mount->dirname = g_strdup(dev_name);
-+ mount->devtype = g_strdup(fstype);
-+ mount->free = g_strdup(free);
-+ mount->load = g_strdup(load);
-+ mount->size = g_strdup(size);
-+ mount->used = g_strdup(used);
-+ mount->mntpoint = g_strdup(mounted);
-+ mount->devmajor = 0;
-+ mount->devminor = 0;
-+
-+ QTAILQ_INSERT_TAIL(mounts, mount, next);
-+ }
-+ //free(line);
-+
-+ fclose(fp);
-+}
-+
-+/* ======================================================= */
-+
-+
-+/* Return a list of the disk device(s)' info which @mount lies on */
-+static GuestFilesystemInfo *build_guest_fsinfo(struct FsMount *mount,
-+ Error **errp)
-+{
-+ GuestFilesystemInfo *fs = g_malloc0(sizeof(*fs));
-+ struct statvfs buf;
-+ unsigned long used, nonroot_total, fr_size;
-+
-+ fs->name = g_strdup(mount->dirname);
-+ fs->mountpoint = g_strdup(mount->mntpoint);
-+ fs->type = g_strdup(mount->devtype);
-+
-+ /*
-+ * if you need extended structure like this
-+ *
-+ {
-+ "name": "/dev/vtbd0p2",
-+ "total-bytes": 9079570432,
-+ "mountpoint": "/",
-+ "disk": [
-+ {
-+ "serial": "serial",
-+ "bus-type": "virtio",
-+ "bus": 0,
-+ "unit": 0,
-+ "pci-controller": {
-+ "bus": 0,
-+ "slot": 0,
-+ "domain": 0,
-+ "function": 0
-+ },
-+ "dev": "/dev/vtbd0p2",
-+ "target": 0
-+ }
-+ ],
-+ "used-bytes": 7378640896,
-+ "type": "ufs"
-+ }
-+
-+ instead
-+
-+ {
-+ "name": "/dev/vtbd0p2",
-+ "total-bytes": 9079570432,
-+ "mountpoint": "/",
-+ "disk": [],
-+ "used-bytes": 7378747392,
-+ "type": "ufs"
-+ }
-+
-+ uncomment next block with pciaddr
-+
-+ */
-+ /*
-+ GuestPCIAddress *pciaddr = NULL;
-+ GuestDiskAddressList *list = NULL;
-+ GuestDiskAddress *disk;
-+ pciaddr = g_malloc0(sizeof(*pciaddr));
-+ pciaddr->domain = 0;
-+ pciaddr->bus = 0;
-+ pciaddr->slot = 0;
-+ pciaddr->function = 0;
-+
-+ disk = g_malloc0(sizeof(*disk));
-+ disk->pci_controller = pciaddr;
-+
-+ disk->dev = g_strdup(mount->dirname);
-+ disk->has_dev = true;
-+ disk->bus_type = GUEST_DISK_BUS_TYPE_VIRTIO;
-+ disk->serial = g_strdup("serial");
-+ disk->has_serial = true;
-+
-+ list = g_malloc0(sizeof(*list));
-+ list->value = disk;
-+
-+ list->next = fs->disk;
-+ fs->disk = list;
-+ */
-+
-+ if (statvfs(fs->mountpoint, &buf) == 0) {
-+ fr_size = buf.f_frsize;
-+ used = buf.f_blocks - buf.f_bfree;
-+ nonroot_total = used + buf.f_bavail;
-+ fs->used_bytes = used * fr_size;
-+ fs->total_bytes = nonroot_total * fr_size;
-+
-+ fs->has_total_bytes = true;
-+ fs->has_used_bytes = true;
-+ }
-+
-+ //g_free(devpath);
-+
-+ return fs;
-+}
-+
-+GuestFilesystemInfoList *qmp_guest_get_fsinfo(Error **errp)
-+{
-+ FsMountList mounts;
-+ struct FsMount *mount;
-+ GuestFilesystemInfoList *new, *ret = NULL;
-+ Error *local_err = NULL;
-+
-+ QTAILQ_INIT(&mounts);
-+
-+ //g_debug("Entering to guest_get_fsinfo");
-+ build_fs_mount_list(&mounts, &local_err);
-+ if (local_err) {
-+ error_propagate(errp, local_err);
-+ return NULL;
-+ }
-+
-+
-+ QTAILQ_FOREACH(mount, &mounts, next) {
-+ //g_debug("Building guest fsinfo for '%s'", mount->dirname);
-+ //g_debug("Devtype '%s'", mount->devtype);
-+ new = g_malloc0(sizeof(*ret));
-+ new->value = build_guest_fsinfo(mount, &local_err);
-+ new->next = ret;
-+ ret = new;
-+ if (local_err) {
-+ error_propagate(errp, local_err);
-+ qapi_free_GuestFilesystemInfoList(ret);
-+ ret = NULL;
-+ break;
-+ }
-+ }
-+
-+ free_fs_mount_list(&mounts);
-+ return ret;
-+}
-+#endif // BSD_GUEST_AGENT
-+
- GuestFsfreezeStatus qmp_guest_fsfreeze_status(Error **errp)
- {
- error_setg(errp, QERR_UNSUPPORTED);
-@@ -2726,6 +3334,7 @@ GList *ga_command_blacklist_init(GList *blacklist)
- {
- #if !defined(__linux__)
- {
-+#ifndef BSD_GUEST_AGENT
- const char *list[] = {
- "guest-suspend-disk", "guest-suspend-ram",
- "guest-suspend-hybrid", "guest-network-get-interfaces",
-@@ -2733,6 +3342,15 @@ GList *ga_command_blacklist_init(GList *blacklist)
- "guest-get-memory-blocks", "guest-set-memory-blocks",
- "guest-get-memory-block-size", "guest-get-memory-block-info",
- NULL};
-+#else
-+ const char *list[] = {
-+ "guest-suspend-disk", "guest-suspend-ram",
-+ "guest-suspend-hybrid",
-+ "guest-set-vcpus",
-+ "guest-get-memory-blocks", "guest-set-memory-blocks",
-+ "guest-get-memory-block-size", "guest-get-memory-block-info",
-+ NULL};
-+#endif // BSD_GUEST_AGENT
- char **p = (char **)list;
-
- while (*p) {
-@@ -2743,10 +3361,17 @@ GList *ga_command_blacklist_init(GList *blacklist)
-
- #if !defined(CONFIG_FSFREEZE)
- {
-+#ifndef BSD_GUEST_AGENT
- const char *list[] = {
- "guest-get-fsinfo", "guest-fsfreeze-status",
- "guest-fsfreeze-freeze", "guest-fsfreeze-freeze-list",
- "guest-fsfreeze-thaw", "guest-get-fsinfo", NULL};
-+#else
-+ const char *list[] = {
-+ "guest-fsfreeze-status",
-+ "guest-fsfreeze-freeze", "guest-fsfreeze-freeze-list",
-+ "guest-fsfreeze-thaw", NULL};
-+#endif // BSD_GUEST_AGENT
- char **p = (char **)list;
-
- while (*p) {
diff --git a/emulators/qemu-guest-agent/files/patch-qga_main.c b/emulators/qemu-guest-agent/files/patch-qga_main.c
deleted file mode 100644
index a7ee80a840c5..000000000000
--- a/emulators/qemu-guest-agent/files/patch-qga_main.c
+++ /dev/null
@@ -1,30 +0,0 @@
---- qga/main.c.orig 2020-09-15 16:31:14 UTC
-+++ qga/main.c
-@@ -46,9 +46,15 @@
- #endif
-
- #ifndef _WIN32
-+#ifdef BSD_GUEST_AGENT
-+#define QGA_VIRTIO_PATH_DEFAULT "/dev/vtcon/org.qemu.guest_agent.0"
-+#define QGA_STATE_RELATIVE_DIR "run"
-+#define QGA_SERIAL_PATH_DEFAULT "/dev/vtcon/org.qemu.guest_agent.0"
-+#else
- #define QGA_VIRTIO_PATH_DEFAULT "/dev/virtio-ports/org.qemu.guest_agent.0"
- #define QGA_STATE_RELATIVE_DIR "run"
- #define QGA_SERIAL_PATH_DEFAULT "/dev/ttyS0"
-+#endif // BSD_GUEST_AGENT
- #else
- #define QGA_VIRTIO_PATH_DEFAULT "\\\\.\\Global\\org.qemu.guest_agent.0"
- #define QGA_STATE_RELATIVE_DIR "qemu-ga"
-@@ -1478,7 +1484,11 @@ int main(int argc, char **argv)
- }
-
- if (config->method == NULL) {
-+#ifdef BSD_GUEST_AGENT
-+ config->method = g_strdup("isa-serial");
-+#else
- config->method = g_strdup("virtio-serial");
-+#endif // BSD_GUEST_AGENT
- }
-
- socket_activation = check_socket_activation();
diff --git a/emulators/qemu-guest-agent/files/qemu-guest-agent.in b/emulators/qemu-guest-agent/files/qemu-guest-agent.in
deleted file mode 100644
index 158666dbbc31..000000000000
--- a/emulators/qemu-guest-agent/files/qemu-guest-agent.in
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-#
-# PROVIDE: qemu_guest_agent
-# REQUIRE: DAEMON
-# KEYWORD: nojail
-#
-
-#
-# Add the following lines to /etc/rc.conf to enable qemu-guest-agent:
-#
-#qemu_guest_agent_enable="YES"
-#
-# For detailed logging add flags -v and -l to /etc/rc.conf
-#
-#qemu_guest_agent_flags="-d -v -l /var/log/qemu-ga.log"
-
-. /etc/rc.subr
-
-name=qemu_guest_agent
-rcvar=qemu_guest_agent_enable
-
-load_rc_config $name
-
-qemu_guest_agent_flags=${qemu_guest_agent_flags-"-d"}
-qemu_guest_agent_enable=${qemu_guest_agent_enable:-"NO"}
-
-qemu_guest_agent_bin=/usr/local/bin/qemu-ga
-command=${qemu_guest_agent_bin}
-pidfile="/var/run/qemu-ga.pid"
-
-run_rc_command "$1"
diff --git a/emulators/qemu-guest-agent/pkg-descr b/emulators/qemu-guest-agent/pkg-descr
deleted file mode 100644
index 68a87e3a961a..000000000000
--- a/emulators/qemu-guest-agent/pkg-descr
+++ /dev/null
@@ -1,3 +0,0 @@
-QEMU Guest Agent for FreeBSD
-
-Port homepage https://github.com/aborche/qemu-guest-agent
diff --git a/emulators/qemu-guest-agent/pkg-message b/emulators/qemu-guest-agent/pkg-message
deleted file mode 100644
index aa56e6559686..000000000000
--- a/emulators/qemu-guest-agent/pkg-message
+++ /dev/null
@@ -1,17 +0,0 @@
-[
-{ type: install
- message: <<EOM
-=======================================================
-Modify your `/etc/rc.conf` by adding these settings
-
-qemu_guest_agent_enable="YES"
-qemu_guest_agent_flags="-d -v -l /var/log/qemu-ga.log"
-
-and run
-# service qemu-guest-agent start
-
-For detailed help use `qemu-ga -h`
-=======================================================
-EOM
-}
-]
diff --git a/emulators/qemu-guest-agent/pkg-plist b/emulators/qemu-guest-agent/pkg-plist
deleted file mode 100644
index bdf1d5673a6a..000000000000
--- a/emulators/qemu-guest-agent/pkg-plist
+++ /dev/null
@@ -1 +0,0 @@
-bin/qemu-ga