mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-09-28 09:45:00 +03:00
Compare commits
7 Commits
v5.5.0-rc2
...
v4.8-maint
Author | SHA1 | Date | |
---|---|---|---|
|
fc30929ffd | ||
|
38a16f7867 | ||
|
6dc29a174a | ||
|
56fadbbb25 | ||
|
5c3dcd0dd4 | ||
|
257c5589fe | ||
|
4369e90f8c |
@@ -1 +0,0 @@
|
||||
../.ctags
|
35
.gitignore
vendored
35
.gitignore
vendored
@@ -11,6 +11,7 @@
|
||||
*.gcov
|
||||
*.html
|
||||
*.i
|
||||
*.init
|
||||
*.la
|
||||
*.lo
|
||||
*.loT
|
||||
@@ -37,6 +38,7 @@
|
||||
.sc-start-sc_*
|
||||
.ycm_extra_conf.py
|
||||
/AUTHORS
|
||||
/ChangeLog
|
||||
/GNUmakefile
|
||||
/INSTALL
|
||||
/NEWS
|
||||
@@ -44,7 +46,6 @@
|
||||
/autom4te.cache
|
||||
/build-aux/*
|
||||
/build/
|
||||
/ci-tree/
|
||||
/confdefs.h
|
||||
/config.cache
|
||||
/config.guess
|
||||
@@ -67,22 +68,23 @@
|
||||
/docs/libvirt-qemu-*.xml
|
||||
/docs/libvirt-refs.xml
|
||||
/docs/news.html.in
|
||||
/docs/search.php
|
||||
/docs/todo.html.in
|
||||
/examples/c/admin/client_close
|
||||
/examples/c/admin/client_info
|
||||
/examples/c/admin/client_limits
|
||||
/examples/c/admin/list_clients
|
||||
/examples/c/admin/list_servers
|
||||
/examples/c/admin/logging
|
||||
/examples/c/admin/threadpool_params
|
||||
/examples/c/domain/dommigrate
|
||||
/examples/c/domain/domtop
|
||||
/examples/c/domain/info1
|
||||
/examples/c/domain/rename
|
||||
/examples/c/domain/suspend
|
||||
/examples/c/misc/event-test
|
||||
/examples/c/misc/hellolibvirt
|
||||
/examples/c/misc/openauth
|
||||
/examples/admin/client_close
|
||||
/examples/admin/client_info
|
||||
/examples/admin/client_limits
|
||||
/examples/admin/list_clients
|
||||
/examples/admin/list_servers
|
||||
/examples/admin/logging
|
||||
/examples/admin/threadpool_params
|
||||
/examples/object-events/event-test
|
||||
/examples/dominfo/info1
|
||||
/examples/domsuspend/suspend
|
||||
/examples/dommigrate/dommigrate
|
||||
/examples/domtop/domtop
|
||||
/examples/hellolibvirt/hellolibvirt
|
||||
/examples/openauth/openauth
|
||||
/examples/rename/rename
|
||||
/gnulib/lib/*
|
||||
/gnulib/m4/*
|
||||
/gnulib/tests/*
|
||||
@@ -188,6 +190,7 @@
|
||||
/tools/virt-admin
|
||||
/tools/virt-*-validate
|
||||
/tools/virt-sanlock-cleanup
|
||||
/tools/wireshark/src/plugin.c
|
||||
/tools/wireshark/src/libvirt
|
||||
/update.log
|
||||
GPATH
|
||||
|
@@ -1,46 +0,0 @@
|
||||
.job_template: &job_definition
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- ../autogen.sh $CONFIGURE_OPTS || (cat config.log && exit 1)
|
||||
- make -j $(getconf _NPROCESSORS_ONLN)
|
||||
|
||||
# We could run every arch on both versions, but it is a little
|
||||
# overkill. Instead we run half the jobs on 9 and half the jobs
|
||||
# on sid to give reasonable cross-coverage.
|
||||
|
||||
debian-9-cross-armv6l:
|
||||
<<: *job_definition
|
||||
image: quay.io/libvirt/buildenv-debian-9-cross-armv6l:master
|
||||
|
||||
debian-9-cross-mipsel:
|
||||
<<: *job_definition
|
||||
image: quay.io/libvirt/buildenv-debian-9-cross-mipsel:master
|
||||
|
||||
debian-9-cross-ppc64le:
|
||||
<<: *job_definition
|
||||
image: quay.io/libvirt/buildenv-debian-9-cross-ppc64le:master
|
||||
|
||||
debian-9-cross-s390x:
|
||||
<<: *job_definition
|
||||
image: quay.io/libvirt/buildenv-debian-9-cross-s390x:master
|
||||
|
||||
debian-sid-cross-aarch64:
|
||||
<<: *job_definition
|
||||
image: quay.io/libvirt/buildenv-debian-sid-cross-aarch64:master
|
||||
|
||||
debian-sid-cross-armv7l:
|
||||
<<: *job_definition
|
||||
image: quay.io/libvirt/buildenv-debian-sid-cross-armv7l:master
|
||||
|
||||
debian-sid-cross-i686:
|
||||
<<: *job_definition
|
||||
image: quay.io/libvirt/buildenv-debian-sid-cross-i686:master
|
||||
|
||||
debian-sid-cross-mips64el:
|
||||
<<: *job_definition
|
||||
image: quay.io/libvirt/buildenv-debian-sid-cross-mips64el:master
|
||||
|
||||
debian-sid-cross-mips:
|
||||
<<: *job_definition
|
||||
image: quay.io/libvirt/buildenv-debian-sid-cross-mips:master
|
2
.gnulib
2
.gnulib
Submodule .gnulib updated: 8089c00979...68df637b5f
4
.mailmap
4
.mailmap
@@ -43,10 +43,6 @@
|
||||
<nshirokovskiy@virtuozzo.com> <nshirokovskiy@parallels.com>
|
||||
<jyang@redhat.com> <osier@yunify.com>
|
||||
<kkoukiou@redhat.com> <k.koukiou@googlemail.com>
|
||||
<intrigeri@boum.org> <intrigeri+libvirt@boum.org>
|
||||
<fidencio@redhat.com> <fabiano@fidencio.org>
|
||||
<shi_lei@massclouds.com> <shilei.massclouds@gmx.com>
|
||||
<adrian.brzezinski@eo.pl> <redhat@adrb.pl>
|
||||
|
||||
# Name consolidation:
|
||||
# Preferred author spelling <preferred email>
|
||||
|
81
.travis.yml
81
.travis.yml
@@ -5,58 +5,95 @@ branches:
|
||||
except:
|
||||
- /^.*-maint$/
|
||||
|
||||
addons:
|
||||
homebrew:
|
||||
update: true
|
||||
packages:
|
||||
- ccache
|
||||
- rpcgen
|
||||
- xz
|
||||
- yajl
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- services:
|
||||
- docker
|
||||
env:
|
||||
- IMAGE="ubuntu-18"
|
||||
- MAKE_ARGS="syntax-check distcheck"
|
||||
script:
|
||||
- make -f Makefile.ci ci-build@$IMAGE CI_MAKE_ARGS="$MAKE_ARGS"
|
||||
- DISTCHECK_CONFIGURE_FLAGS="--with-init-script=systemd"
|
||||
- DOCKER_CMD="$LINUX_CMD"
|
||||
- services:
|
||||
- docker
|
||||
env:
|
||||
- IMAGE="centos-7"
|
||||
- MAKE_ARGS="syntax-check distcheck"
|
||||
script:
|
||||
- make -f Makefile.ci ci-build@$IMAGE CI_MAKE_ARGS="$MAKE_ARGS"
|
||||
- DISTCHECK_CONFIGURE_FLAGS="--with-init-script=upstart"
|
||||
- DOCKER_CMD="$LINUX_CMD"
|
||||
- services:
|
||||
- docker
|
||||
env:
|
||||
- IMAGE="fedora-rawhide"
|
||||
- MINGW="mingw32"
|
||||
script:
|
||||
- make -f Makefile.ci ci-build@$IMAGE CI_CONFIGURE="$MINGW-configure"
|
||||
- DOCKER_CMD="$MINGW_CMD"
|
||||
- services:
|
||||
- docker
|
||||
env:
|
||||
- IMAGE="fedora-rawhide"
|
||||
- MINGW="mingw64"
|
||||
script:
|
||||
- make -f Makefile.ci ci-build@$IMAGE CI_CONFIGURE="$MINGW-configure"
|
||||
- DOCKER_CMD="$MINGW_CMD"
|
||||
- compiler: clang
|
||||
language: c
|
||||
os: osx
|
||||
env:
|
||||
- PATH="/usr/local/opt/gettext/bin:/usr/local/opt/ccache/libexec:/usr/local/opt/rpcgen/bin:$PATH"
|
||||
script:
|
||||
# We can't run 'distcheck' or 'syntax-check' because they fail on
|
||||
# macOS, but doing 'install' and 'dist' gives us some useful coverage
|
||||
- ./autogen.sh --prefix=$(pwd)/install-root && make -j3 && make -j3 install && make -j3 dist
|
||||
/bin/sh -xc "$MACOS_CMD"
|
||||
|
||||
script:
|
||||
- docker run
|
||||
-v $(pwd):/build
|
||||
-w /build
|
||||
-e VIR_TEST_DEBUG="$VIR_TEST_DEBUG"
|
||||
-e MINGW="$MINGW"
|
||||
-e DISTCHECK_CONFIGURE_FLAGS="$DISTCHECK_CONFIGURE_FLAGS"
|
||||
"libvirt/buildenv-$IMAGE"
|
||||
/bin/sh -xc "$DOCKER_CMD"
|
||||
|
||||
git:
|
||||
submodules: true
|
||||
|
||||
env:
|
||||
global:
|
||||
- VIR_TEST_DEBUG=1
|
||||
- LINUX_CMD="
|
||||
./autogen.sh &&
|
||||
make -j3 syntax-check &&
|
||||
make -j3 distcheck DISTCHECK_CONFIGURE_FLAGS=\"\$DISTCHECK_CONFIGURE_FLAGS\" ||
|
||||
(
|
||||
echo '=== LOG FILE(S) START ===';
|
||||
find -name test-suite.log | xargs cat;
|
||||
echo '=== LOG FILE(S) END ===';
|
||||
exit 1
|
||||
)
|
||||
"
|
||||
- MINGW_CMD="
|
||||
NOCONFIGURE=1 ./autogen.sh &&
|
||||
\$MINGW-configure &&
|
||||
make -j3 ||
|
||||
(
|
||||
echo '=== LOG FILE(S) START ===';
|
||||
find -name test-suite.log | xargs cat;
|
||||
echo '=== LOG FILE(S) END ===';
|
||||
exit 1
|
||||
)
|
||||
"
|
||||
# We can't run 'distcheck' or 'syntax-check' because they fail on
|
||||
# macOS, but doing 'install' and 'dist' gives us some useful coverage
|
||||
- MACOS_CMD="
|
||||
brew update &&
|
||||
brew install ccache rpcgen xz yajl &&
|
||||
./autogen.sh --prefix=\$(pwd)/install-root &&
|
||||
make -j3 &&
|
||||
make -j3 install &&
|
||||
make -j3 dist ||
|
||||
(
|
||||
echo '=== LOG FILE(S) START ===';
|
||||
find -name test-suite.log | xargs cat;
|
||||
echo '=== LOG FILE(S) END ===';
|
||||
exit 1
|
||||
)
|
||||
"
|
||||
|
||||
notifications:
|
||||
irc:
|
||||
# The channel name "irc.oftc.net#virt" is encrypted against libvirt/libvirt
|
||||
|
15
ChangeLog
15
ChangeLog
@@ -1,15 +0,0 @@
|
||||
libvirt ChangeLog
|
||||
=================
|
||||
|
||||
The libvirt project doesn't include a detailed ChangeLog in its release
|
||||
archives.
|
||||
|
||||
If you're interested in the full list of changes made to libvirt since
|
||||
the project was started, you can clone the git repository from
|
||||
|
||||
https://libvirt.org/git/libvirt.git
|
||||
|
||||
and browse them locally using your favorite git history viewer or,
|
||||
alternatively, browse them online at
|
||||
|
||||
https://libvirt.org/git/?p=libvirt.git;a=log
|
16699
ChangeLog-old
Normal file
16699
ChangeLog-old
Normal file
File diff suppressed because it is too large
Load Diff
53
Makefile.am
53
Makefile.am
@@ -16,42 +16,32 @@
|
||||
## License along with this library. If not, see
|
||||
## <http://www.gnu.org/licenses/>.
|
||||
|
||||
LCOV = lcov
|
||||
GENHTML = genhtml
|
||||
|
||||
SUBDIRS = . gnulib/lib include/libvirt src tools docs gnulib/tests \
|
||||
tests po examples
|
||||
|
||||
XZ_OPT ?= -v -T0
|
||||
export XZ_OPT
|
||||
|
||||
# have gnulib 'make coverage' output to 'cov' dir
|
||||
COVERAGE_OUT = "cov"
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
EXTRA_DIST = \
|
||||
config-post.h \
|
||||
ChangeLog-old \
|
||||
libvirt.spec libvirt.spec.in \
|
||||
mingw-libvirt.spec.in \
|
||||
libvirt.pc.in \
|
||||
libvirt-qemu.pc.in \
|
||||
libvirt-lxc.pc.in \
|
||||
libvirt-admin.pc.in \
|
||||
Makefile.ci \
|
||||
Makefile.nonreentrant \
|
||||
autogen.sh \
|
||||
cfg.mk \
|
||||
run.in \
|
||||
README.md \
|
||||
AUTHORS.in \
|
||||
build-aux/augeas-gentest.pl \
|
||||
build-aux/check-spacing.pl \
|
||||
build-aux/gitlog-to-changelog \
|
||||
build-aux/header-ifdef.pl \
|
||||
build-aux/minimize-po.pl \
|
||||
build-aux/mock-noinline.pl \
|
||||
build-aux/prohibit-duplicate-header.pl \
|
||||
build-aux/useless-if-before-free \
|
||||
build-aux/vc-list-files \
|
||||
$(NULL)
|
||||
AUTHORS.in
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = libvirt.pc libvirt-qemu.pc libvirt-lxc.pc libvirt-admin.pc
|
||||
@@ -84,12 +74,38 @@ srpm: clean
|
||||
|
||||
check-local: all tests
|
||||
|
||||
check-access: all
|
||||
check-access:
|
||||
@($(MAKE) $(AM_MAKEFLAGS) -C tests check-access)
|
||||
|
||||
cov: clean-cov
|
||||
$(MKDIR_P) $(top_builddir)/coverage
|
||||
$(LCOV) -c -o $(top_builddir)/coverage/libvirt.info.tmp \
|
||||
-d $(top_builddir)/src \
|
||||
-d $(top_builddir)/tests
|
||||
$(LCOV) -r $(top_builddir)/coverage/libvirt.info.tmp \
|
||||
-o $(top_builddir)/coverage/libvirt.info
|
||||
rm $(top_builddir)/coverage/libvirt.info.tmp
|
||||
$(GENHTML) --show-details -t "libvirt" -o $(top_builddir)/coverage \
|
||||
--legend $(top_builddir)/coverage/libvirt.info
|
||||
|
||||
clean-cov:
|
||||
rm -rf $(top_builddir)/coverage
|
||||
|
||||
MAINTAINERCLEANFILES = .git-module-status
|
||||
|
||||
dist-hook: gen-AUTHORS
|
||||
dist-hook: gen-ChangeLog gen-AUTHORS
|
||||
|
||||
# Generate the ChangeLog file (with all entries since the switch to git)
|
||||
# and insert it into the directory we're about to use to create a tarball.
|
||||
gen_start_date = 2009-07-04
|
||||
.PHONY: gen-ChangeLog
|
||||
gen-ChangeLog:
|
||||
$(AM_V_GEN)if test -d .git; then \
|
||||
$(top_srcdir)/build-aux/gitlog-to-changelog \
|
||||
--since=$(gen_start_date) > $(distdir)/cl-t; \
|
||||
rm -f $(distdir)/ChangeLog; \
|
||||
mv $(distdir)/cl-t $(distdir)/ChangeLog; \
|
||||
fi
|
||||
|
||||
.PHONY: gen-AUTHORS
|
||||
gen-AUTHORS:
|
||||
@@ -107,6 +123,3 @@ gen-AUTHORS:
|
||||
mv -f $(distdir)/AUTHORS-tmp $(distdir)/AUTHORS && \
|
||||
rm -f all.list maint.list contrib.list; \
|
||||
fi
|
||||
|
||||
ci-%:
|
||||
$(MAKE) -f Makefile.ci $@
|
||||
|
269
Makefile.ci
269
Makefile.ci
@@ -1,269 +0,0 @@
|
||||
# -*- makefile -*-
|
||||
# vim: filetype=make
|
||||
|
||||
# Figure out name and path to this file. This isn't
|
||||
# portable but we only care for modern GNU make
|
||||
CI_MAKEFILE = $(abspath $(firstword $(MAKEFILE_LIST)))
|
||||
|
||||
# The directory holding content on the host that we will
|
||||
# expose to the container.
|
||||
CI_SCRATCHDIR = $(shell pwd)/ci-tree
|
||||
|
||||
# The root directory of the libvirt.git checkout
|
||||
CI_GIT_ROOT = $(shell git rev-parse --show-toplevel)
|
||||
|
||||
# The directory holding the clone of the git repo that
|
||||
# we will expose to the container
|
||||
CI_HOST_SRCDIR = $(CI_SCRATCHDIR)/src
|
||||
|
||||
# The directory holding the source inside the
|
||||
# container, i.e. where we want to expose
|
||||
# the $(CI_HOST_SRCDIR) directory from the host
|
||||
CI_CONT_SRCDIR = /src
|
||||
|
||||
# Relative directory to perform the build in. This
|
||||
# defaults to using a separate build dir, but can be
|
||||
# set to empty string for an in-source tree build.
|
||||
CI_VPATH = build
|
||||
|
||||
# The directory holding the build output inside the
|
||||
# container.
|
||||
CI_CONT_BUILDDIR = $(CI_CONT_SRCDIR)/$(CI_VPATH)
|
||||
|
||||
# Can be overridden with mingw{32,64}-configure if desired
|
||||
CI_CONFIGURE = $(CI_CONT_SRCDIR)/configure
|
||||
|
||||
# Default to using all possible CPUs
|
||||
CI_SMP = $(shell getconf _NPROCESSORS_ONLN)
|
||||
|
||||
# Any extra arguments to pass to make
|
||||
CI_MAKE_ARGS =
|
||||
|
||||
# Any extra arguments to pass to configure
|
||||
CI_CONFIGURE_ARGS =
|
||||
|
||||
# Avoid pulling submodules over the network by locally
|
||||
# cloning them
|
||||
CI_SUBMODULES = $(shell git submodule | awk '{ print $$2 }')
|
||||
|
||||
# Location of the container images we're going to pull
|
||||
# Can be useful to overridde to use a locally built
|
||||
# image instead
|
||||
CI_IMAGE_PREFIX = quay.io/libvirt/buildenv-
|
||||
|
||||
# The default tag is ':latest' but if the container
|
||||
# repo above uses different conventions this can override it
|
||||
CI_IMAGE_TAG = :master
|
||||
|
||||
# We delete the virtual root after completion, set
|
||||
# to 0 if you need to keep it around for debugging
|
||||
CI_CLEAN = 1
|
||||
|
||||
# We'll always freshly clone the virtual root each
|
||||
# time in case it was not cleaned up before. Set
|
||||
# to 1 if you want to try restarting a previously
|
||||
# preserved env
|
||||
CI_REUSE = 0
|
||||
|
||||
# We need the container process to run with current host IDs
|
||||
# so that it can access the passed in build directory
|
||||
CI_UID = $(shell id -u)
|
||||
CI_GID = $(shell id -g)
|
||||
|
||||
CI_ENGINE = auto
|
||||
# Container engine we are going to use, can be overridden per make
|
||||
# invocation, if it is not we try podman and then default to docker.
|
||||
ifeq ($(CI_ENGINE),auto)
|
||||
override CI_ENGINE = $(shell podman version >/dev/null 2>&1 && echo podman || echo docker)
|
||||
endif
|
||||
|
||||
# IDs you run as do not need to exist in
|
||||
# the container's /etc/passwd & /etc/group files, but
|
||||
# if they do not, then libvirt's 'make check' will fail
|
||||
# many tests.
|
||||
|
||||
# We do not directly mount /etc/{passwd,group} as Docker
|
||||
# is liable to mess with SELinux labelling which will
|
||||
# then prevent the host accessing them. And podman cannot
|
||||
# relabel the files due to it running rootless. So
|
||||
# copying them first is safer and error-prone.
|
||||
CI_PWDB_MOUNTS = \
|
||||
--volume $(CI_SCRATCHDIR)/group:/etc/group:ro,z \
|
||||
--volume $(CI_SCRATCHDIR)/passwd:/etc/passwd:ro,z \
|
||||
$(NULL)
|
||||
|
||||
# Docker containers can have very large ulimits
|
||||
# for nofiles - as much as 1048576. This makes
|
||||
# libvirt very slow at exec'ing programs.
|
||||
CI_ULIMIT_FILES = 1024
|
||||
|
||||
ifeq ($(CI_ENGINE),podman)
|
||||
# Podman cannot reuse host namespace when running non-root containers. Until
|
||||
# support for --keep-uid is added we can just create another mapping that will
|
||||
# do that for us. Beware, that in {uid,git}map=container_id:host_id:range,
|
||||
# the host_id does actually refer to the uid in the first mapping where 0
|
||||
# (root) is mapped to the current user and rest is offset.
|
||||
|
||||
# In order to set up this mapping, we need to keep all the user IDs to prevent
|
||||
# possible errors as some images might expect UIDs up to 90000 (looking at you
|
||||
# fedora), so we don't want the overflowuid to be used for them. For mapping
|
||||
# all the other users properly ther eneeds to be some math done. Don't worry,
|
||||
# it's just addition and subtraction.
|
||||
|
||||
# 65536 ought to be enough (tm), but for really rare cases the maximums might
|
||||
# need to be higher, but that only happens when your /etc/sub{u,g}id allow
|
||||
# users to have more IDs. Unless --keep-uid is supported, let's do this in a
|
||||
# way that should work for everyone.
|
||||
CI_MAX_UID = $(shell sed -n "s/^$USER:[^:]\+://p" /etc/subuid)
|
||||
CI_MAX_GID = $(shell sed -n "s/^$USER:[^:]\+://p" /etc/subgid)
|
||||
ifeq ($(CI_MAX_UID),)
|
||||
CI_MAX_UID = 65536
|
||||
endif
|
||||
ifeq ($(CI_MAX_GID),)
|
||||
CI_MAX_GID = 65536
|
||||
endif
|
||||
CI_UID_OTHER = $(shell echo $$(($(CI_UID)+1)))
|
||||
CI_GID_OTHER = $(shell echo $$(($(CI_GID)+1)))
|
||||
CI_UID_OTHER_RANGE = $(shell echo $$(($(CI_MAX_UID)-$(CI_UID))))
|
||||
CI_GID_OTHER_RANGE = $(shell echo $$(($(CI_MAX_GID)-$(CI_GID))))
|
||||
|
||||
CI_PODMAN_ARGS = \
|
||||
--uidmap 0:1:$(CI_UID) \
|
||||
--uidmap $(CI_UID):0:1 \
|
||||
--uidmap $(CI_UID_OTHER):$(CI_UID_OTHER):$(CI_UID_OTHER_RANGE) \
|
||||
--gidmap 0:1:$(CI_GID) \
|
||||
--gidmap $(CI_GID):0:1 \
|
||||
--gidmap $(CI_GID_OTHER):$(CI_GID_OTHER):$(CI_GID_OTHER_RANGE) \
|
||||
$(NULL)
|
||||
endif
|
||||
|
||||
# Args to use when cloning a git repo.
|
||||
# -c stop it complaining about checking out a random hash
|
||||
# -q stop it displaying progress info for local clone
|
||||
# --local ensure we don't actually copy files
|
||||
CI_GIT_ARGS = \
|
||||
-c advice.detachedHead=false \
|
||||
-q \
|
||||
--local \
|
||||
$(NULL)
|
||||
|
||||
# Args to use when running the container
|
||||
# --rm stop inactive containers getting left behind
|
||||
# --user we execute as the same user & group account
|
||||
# as dev so that file ownership matches host
|
||||
# instead of root:root
|
||||
# --volume to pass in the cloned git repo & config
|
||||
# --workdir to set cwd to vpath build location
|
||||
# --ulimit lower files limit for performance reasons
|
||||
# --interactive
|
||||
# --tty Ensure we have ability to Ctrl-C the build
|
||||
CI_ENGINE_ARGS = \
|
||||
--rm \
|
||||
--user $(CI_UID):$(CI_GID) \
|
||||
--interactive \
|
||||
--tty \
|
||||
$(CI_PODMAN_ARGS) \
|
||||
$(CI_PWDB_MOUNTS) \
|
||||
--volume $(CI_HOST_SRCDIR):$(CI_CONT_SRCDIR):z \
|
||||
--workdir $(CI_CONT_SRCDIR) \
|
||||
--ulimit nofile=$(CI_ULIMIT_FILES):$(CI_ULIMIT_FILES) \
|
||||
$(NULL)
|
||||
|
||||
ci-check-engine:
|
||||
@echo -n "Checking if $(CI_ENGINE) is available..." && \
|
||||
$(CI_ENGINE) version 1>/dev/null && echo "yes"
|
||||
|
||||
ci-prepare-tree: ci-check-engine
|
||||
@test "$(CI_REUSE)" != "1" && rm -rf $(CI_SCRATCHDIR) || :
|
||||
@if ! test -d $(CI_SCRATCHDIR) ; then \
|
||||
mkdir -p $(CI_SCRATCHDIR); \
|
||||
cp /etc/passwd $(CI_SCRATCHDIR); \
|
||||
cp /etc/group $(CI_SCRATCHDIR); \
|
||||
echo "Cloning $(CI_GIT_ROOT) to $(CI_HOST_SRCDIR)"; \
|
||||
git clone $(CI_GIT_ARGS) $(CI_GIT_ROOT) $(CI_HOST_SRCDIR) || exit 1; \
|
||||
for mod in $(CI_SUBMODULES) ; \
|
||||
do \
|
||||
test -f $(CI_GIT_ROOT)/$$mod/.git || continue ; \
|
||||
echo "Cloning $(CI_GIT_ROOT)/$$mod to $(CI_HOST_SRCDIR)/$$mod"; \
|
||||
git clone $(CI_GIT_ARGS) $(CI_GIT_ROOT)/$$mod $(CI_HOST_SRCDIR)/$$mod || exit 1; \
|
||||
done ; \
|
||||
fi
|
||||
|
||||
# $CONFIGURE_OPTS is a env that can optionally be set in the container,
|
||||
# populated at build time from the Dockerfile. A typical use case would
|
||||
# be to pass --host/--target args to trigger cross-compilation
|
||||
#
|
||||
# This can be augmented by make local args in $(CI_CONFIGURE_ARGS)
|
||||
#
|
||||
# gl_public_submodule_commit= to disable gnulib's submodule check
|
||||
# which breaks due to way we clone the submodules
|
||||
ci-build@%: ci-prepare-tree
|
||||
$(CI_ENGINE) run $(CI_ENGINE_ARGS) $(CI_IMAGE_PREFIX)$*$(CI_IMAGE_TAG) \
|
||||
/bin/bash -c '\
|
||||
mkdir -p $(CI_CONT_BUILDDIR) || exit 1 ; \
|
||||
cd $(CI_CONT_BUILDDIR) ; \
|
||||
NOCONFIGURE=1 $(CI_CONT_SRCDIR)/autogen.sh || exit 1 ; \
|
||||
$(CI_CONFIGURE) $${CONFIGURE_OPTS} $(CI_CONFIGURE_ARGS) ; \
|
||||
if test $$? != 0 ; \
|
||||
then \
|
||||
test -f config.log && cat config.log ; \
|
||||
exit 1 ; \
|
||||
fi; \
|
||||
find -name test-suite.log -delete ; \
|
||||
export VIR_TEST_DEBUG=1 ; \
|
||||
make -j$(CI_SMP) gl_public_submodule_commit= $(CI_MAKE_ARGS) ; \
|
||||
if test $$? != 0 ; then \
|
||||
LOGS=`find -name test-suite.log` ; \
|
||||
if test "$${LOGS}" != "" ; then \
|
||||
echo "=== LOG FILE(S) START ===" ; \
|
||||
cat $${LOGS} ; \
|
||||
echo "=== LOG FILE(S) END ===" ; \
|
||||
fi ; \
|
||||
exit 1 ;\
|
||||
fi'
|
||||
@test "$(CI_CLEAN)" = "1" && rm -rf $(CI_SCRATCHDIR) || :
|
||||
|
||||
ci-check@%:
|
||||
$(MAKE) -f $(CI_MAKEFILE) ci-build@$* CI_MAKE_ARGS="check"
|
||||
|
||||
ci-shell@%: ci-prepare-tree
|
||||
$(CI_ENGINE) run $(CI_ENGINE_ARGS) $(CI_IMAGE_PREFIX)$*$(CI_IMAGE_TAG) /bin/bash
|
||||
@test "$(CI_CLEAN)" = "1" && rm -rf $(CI_SCRATCHDIR) || :
|
||||
|
||||
ci-help:
|
||||
@echo "Build libvirt inside containers used for CI"
|
||||
@echo
|
||||
@echo "Available targets:"
|
||||
@echo
|
||||
@echo " ci-build@\$$IMAGE - run a default 'make'"
|
||||
@echo " ci-check@\$$IMAGE - run a 'make check'"
|
||||
@echo " ci-shell@\$$IMAGE - run an interactive shell"
|
||||
@echo
|
||||
@echo "Available x86 container images:"
|
||||
@echo
|
||||
@echo " centos-7"
|
||||
@echo " debian-9"
|
||||
@echo " debian-sid"
|
||||
@echo " fedora-28"
|
||||
@echo " fedora-29"
|
||||
@echo " fedora-rawhide"
|
||||
@echo " ubuntu-18"
|
||||
@echo
|
||||
@echo "Available cross-compiler container images:"
|
||||
@echo
|
||||
@echo " debian-{9,sid}-cross-aarch64"
|
||||
@echo " debian-{9,sid}-cross-armv6l"
|
||||
@echo " debian-{9,sid}-cross-armv7l"
|
||||
@echo " debian-sid-cross-i686"
|
||||
@echo " debian-{9,sid}-cross-mips64el"
|
||||
@echo " debian-{9,sid}-cross-mips"
|
||||
@echo " debian-{9,sid}-cross-mipsel"
|
||||
@echo " debian-{9,sid}-cross-ppc64le"
|
||||
@echo " debian-{9,sid}-cross-s390x"
|
||||
@echo
|
||||
@echo "Available make variables:"
|
||||
@echo
|
||||
@echo " CI_CLEAN=0 - do not delete '$(CI_SCRATCHDIR)' after completion"
|
||||
@echo " CI_REUSE=1 - re-use existing '$(CI_SCRATCHDIR)' content"
|
||||
@echo " CI_ENGINE=auto - container engine to use (podman, docker)"
|
||||
@echo
|
37
bootstrap
37
bootstrap
@@ -1,10 +1,10 @@
|
||||
#! /bin/sh
|
||||
# Print a version string.
|
||||
scriptversion=2019-01-04.17; # UTC
|
||||
scriptversion=2018-07-01.02; # UTC
|
||||
|
||||
# Bootstrap this package from checked-out sources.
|
||||
|
||||
# Copyright (C) 2003-2019 Free Software Foundation, Inc.
|
||||
# Copyright (C) 2003-2018 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@@ -142,9 +142,6 @@ die() { warn_ "$@"; exit 1; }
|
||||
|
||||
# Configuration.
|
||||
|
||||
# Name of the Makefile.am
|
||||
gnulib_mk=gnulib.mk
|
||||
|
||||
# List of gnulib modules needed.
|
||||
gnulib_modules=
|
||||
|
||||
@@ -162,11 +159,18 @@ bootstrap_post_import_hook() { :; }
|
||||
# Override it via your own definition in bootstrap.conf.
|
||||
bootstrap_epilogue() { :; }
|
||||
|
||||
# The command to download all .po files for a specified domain into a
|
||||
# specified directory. Fill in the first %s with the destination
|
||||
# directory and the second with the domain name.
|
||||
# The command to download all .po files for a specified domain into
|
||||
# a specified directory. Fill in the first %s is the domain name, and
|
||||
# the second with the destination directory. Use rsync's -L and -r
|
||||
# options because the latest/%s directory and the .po files within are
|
||||
# all symlinks.
|
||||
po_download_command_format=\
|
||||
"wget --mirror --level=1 -nd -q -A.po -P '%s' \
|
||||
"rsync --delete --exclude '*.s1' -Lrtvz \
|
||||
'translationproject.org::tp/latest/%s/' '%s'"
|
||||
|
||||
# Fallback for downloading .po files (if rsync fails).
|
||||
po_download_command_format2=\
|
||||
"wget --mirror -nd -q -np -A.po -P '%s' \
|
||||
https://translationproject.org/latest/%s/"
|
||||
|
||||
# Prefer a non-empty tarname (4th argument of AC_INIT if given), else
|
||||
@@ -734,7 +738,10 @@ download_po_files() {
|
||||
subdir=$1
|
||||
domain=$2
|
||||
echo "$me: getting translations into $subdir for $domain..."
|
||||
cmd=$(printf "$po_download_command_format" "$subdir" "$domain")
|
||||
cmd=$(printf "$po_download_command_format" "$domain" "$subdir")
|
||||
eval "$cmd" && return
|
||||
# Fallback to HTTPS.
|
||||
cmd=$(printf "$po_download_command_format2" "$subdir" "$domain")
|
||||
eval "$cmd"
|
||||
}
|
||||
|
||||
@@ -963,16 +970,6 @@ fi
|
||||
bootstrap_post_import_hook \
|
||||
|| die "bootstrap_post_import_hook failed"
|
||||
|
||||
# Don't proceed if there are uninitialized submodules. In particular,
|
||||
# the next step will remove dangling links, which might be links into
|
||||
# uninitialized submodules.
|
||||
#
|
||||
# Uninitialized submodules are listed with an initial dash.
|
||||
if $use_git && git submodule | grep '^-' >/dev/null; then
|
||||
die "some git submodules are not initialized. " \
|
||||
"Run 'git submodule init' and bootstrap again."
|
||||
fi
|
||||
|
||||
# Remove any dangling symlink matching "*.m4" or "*.[ch]" in some
|
||||
# gnulib-populated directories. Such .m4 files would cause aclocal to fail.
|
||||
# The following requires GNU find 4.2.3 or newer. Considering the usual
|
||||
|
@@ -10,7 +10,7 @@
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library. If not, see
|
||||
@@ -176,8 +176,8 @@ xmllint -
|
||||
xsltproc -
|
||||
"
|
||||
|
||||
# Automake requires that AUTHORS exist.
|
||||
touch AUTHORS || exit 1
|
||||
# Automake requires that ChangeLog and AUTHORS exist.
|
||||
touch AUTHORS ChangeLog || exit 1
|
||||
|
||||
# Override bootstrap's list - we don't use mdate-sh or texinfo.tex.
|
||||
gnulib_extra_files="
|
||||
|
@@ -16,6 +16,9 @@
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Authors:
|
||||
# Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
@@ -16,181 +16,363 @@
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Authors:
|
||||
# Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
#
|
||||
# CheckFunctionBody:
|
||||
# $_[0]: $data(in)
|
||||
# $_[1]: $location(in), which format is file-path:line-num:line-code
|
||||
# $_[2]: $fn_linenum(inout), maintains start line-num of function body
|
||||
# Returns 0 in case of success or 1 on failure
|
||||
#
|
||||
# Check incorrect indentation and blank first line in function body.
|
||||
# For efficiency, it only checks the first line of function body.
|
||||
# But it's enough for most cases.
|
||||
# (It could be better that we use *state* to declare @fn_linenum and
|
||||
# move it into this subroutine. But *state* requires version >= v5.10.)
|
||||
#
|
||||
sub CheckFunctionBody {
|
||||
my $ret = 0;
|
||||
my ($data, $location, $fn_linenum) = @_;
|
||||
|
||||
# Check first line of function block
|
||||
if ($$fn_linenum) {
|
||||
if ($$data =~ /^\s*$/) {
|
||||
print "Blank line before content in function body:\n$$location";
|
||||
$ret = 1;
|
||||
} elsif ($$data !~ /^[ ]{4}\S/) {
|
||||
unless ($$data =~ /^[ ]\w+:$/ || $$data =~ /^}/) {
|
||||
print "Incorrect indentation in function body:\n$$location";
|
||||
$ret = 1;
|
||||
}
|
||||
}
|
||||
$$fn_linenum = 0;
|
||||
}
|
||||
|
||||
# Detect start of function block
|
||||
if ($$data =~ /^{$/) {
|
||||
$$fn_linenum = $.;
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
#
|
||||
# KillComments:
|
||||
# $_[0]: $data(inout)
|
||||
# $_[1]: $incomment(inout)
|
||||
#
|
||||
# Remove all content of comments
|
||||
# (Also, the @incomment could be declared with *state* and move it in.)
|
||||
#
|
||||
sub KillComments {
|
||||
my ($data, $incomment) = @_;
|
||||
|
||||
# Kill contents of multi-line comments
|
||||
# and detect end of multi-line comments
|
||||
if ($$incomment) {
|
||||
if ($$data =~ m,\*/,) {
|
||||
$$incomment = 0;
|
||||
$$data =~ s,^.*\*/,*/,;
|
||||
} else {
|
||||
$$data = "";
|
||||
}
|
||||
}
|
||||
|
||||
# Kill single line comments, and detect
|
||||
# start of multi-line comments
|
||||
if ($$data =~ m,/\*.*\*/,) {
|
||||
$$data =~ s,/\*.*\*/,/* */,;
|
||||
} elsif ($$data =~ m,/\*,) {
|
||||
$$incomment = 1;
|
||||
$$data =~ s,/\*.*,/*,;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#
|
||||
# CheckWhiteSpaces:
|
||||
# $_[0]: $data(in)
|
||||
# $_[1]: $location(in), which format is file-path:line-num:line-code
|
||||
# Returns 0 in case of success or 1 on failure
|
||||
#
|
||||
# Check whitespaces according to code spec of libvirt.
|
||||
#
|
||||
sub CheckWhiteSpaces {
|
||||
my $ret = 0;
|
||||
my ($data, $location) = @_;
|
||||
|
||||
# We need to match things like
|
||||
#
|
||||
# int foo (int bar, bool wizz);
|
||||
# foo (bar, wizz);
|
||||
#
|
||||
# but not match things like:
|
||||
#
|
||||
# typedef int (*foo)(bar wizz)
|
||||
#
|
||||
# we can't do this (efficiently) without
|
||||
# missing things like
|
||||
#
|
||||
# foo (*bar, wizz);
|
||||
#
|
||||
# We also don't want to spoil the $data so it can be used
|
||||
# later on.
|
||||
|
||||
# For temporary modifications
|
||||
my $tmpdata = $$data;
|
||||
while ($tmpdata =~ /(\w+)\s\((?!\*)/) {
|
||||
my $kw = $1;
|
||||
|
||||
# Allow space after keywords only
|
||||
if ($kw =~ /^(?:if|for|while|switch|return)$/) {
|
||||
$tmpdata =~ s/(?:$kw\s\()/XXX(/;
|
||||
} else {
|
||||
print "Whitespace after non-keyword:\n$$location";
|
||||
$ret = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
# Require whitespace immediately after keywords
|
||||
if ($$data =~ /\b(?:if|for|while|switch|return)\(/) {
|
||||
print "No whitespace after keyword:\n$$location";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Forbid whitespace between )( of a function typedef
|
||||
if ($$data =~ /\(\*\w+\)\s+\(/) {
|
||||
print "Whitespace between ')' and '(':\n$$location";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Forbid whitespace following ( or prior to )
|
||||
# but allow whitespace before ) on a single line
|
||||
# (optionally followed by a semicolon)
|
||||
if (($$data =~ /\s\)/ && not $$data =~ /^\s+\);?$/) ||
|
||||
$$data =~ /\((?!$)\s/) {
|
||||
print "Whitespace after '(' or before ')':\n$$location";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Forbid whitespace before ";" or ",". Things like below are allowed:
|
||||
#
|
||||
# 1) The expression is empty for "for" loop. E.g.
|
||||
# for (i = 0; ; i++)
|
||||
#
|
||||
# 2) An empty statement. E.g.
|
||||
# while (write(statuswrite, &status, 1) == -1 &&
|
||||
# errno == EINTR)
|
||||
# ;
|
||||
#
|
||||
if ($$data =~ /\s[;,]/) {
|
||||
unless ($$data =~ /\S; ; / ||
|
||||
$$data =~ /^\s+;/) {
|
||||
print "Whitespace before semicolon or comma:\n$$location";
|
||||
$ret = 1;
|
||||
}
|
||||
}
|
||||
|
||||
# Require EOL, macro line continuation, or whitespace after ";".
|
||||
# Allow "for (;;)" as an exception.
|
||||
if ($$data =~ /;[^ \\\n;)]/) {
|
||||
print "Invalid character after semicolon:\n$$location";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Require EOL, space, or enum/struct end after comma.
|
||||
if ($$data =~ /,[^ \\\n)}]/) {
|
||||
print "Invalid character after comma:\n$$location";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Require spaces around assignment '=', compounds and '=='
|
||||
if ($$data =~ /[^ ]\b[!<>&|\-+*\/%\^=]?=/ ||
|
||||
$$data =~ /=[^= \\\n]/) {
|
||||
print "Spacing around '=' or '==':\n$$location";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
#
|
||||
# CheckCurlyBrackets:
|
||||
# $_[0]: $data(in)
|
||||
# $_[1]: $file(in)
|
||||
# $_[2]: $line(in)
|
||||
# $_[3]: $cb_linenum(inout)
|
||||
# $_[4]: $cb_code(inout)
|
||||
# $_[5]: $cb_scolon(inout)
|
||||
# Returns 0 in case of success or 1 on failure
|
||||
#
|
||||
# Check whitespaces according to code spec of libvirt.
|
||||
#
|
||||
sub CheckCurlyBrackets {
|
||||
my $ret = 0;
|
||||
my ($data, $file, $line, $cb_linenum, $cb_code, $cb_scolon) = @_;
|
||||
|
||||
# One line conditional statements with one line bodies should
|
||||
# not use curly brackets.
|
||||
if ($$data =~ /^\s*(if|while|for)\b.*\{$/) {
|
||||
$$cb_linenum = $.;
|
||||
$$cb_code = $$line;
|
||||
$$cb_scolon = 0;
|
||||
}
|
||||
|
||||
# We need to check for exactly one semicolon inside the body,
|
||||
# because empty statements (e.g. with comment only) are
|
||||
# allowed
|
||||
if ($$cb_linenum == $. - 1 && $$data =~ /^[^;]*;[^;]*$/) {
|
||||
$$cb_code .= $$line;
|
||||
$$cb_scolon = 1;
|
||||
}
|
||||
|
||||
if ($$data =~ /^\s*}\s*$/ &&
|
||||
$$cb_linenum == $. - 2 &&
|
||||
$$cb_scolon) {
|
||||
|
||||
print "Curly brackets around single-line body:\n";
|
||||
print "$$file:$$cb_linenum-$.:\n$$cb_code$$line";
|
||||
$ret = 1;
|
||||
|
||||
# There _should_ be no need to reset the values; but to
|
||||
# keep my inner peace...
|
||||
$$cb_linenum = 0;
|
||||
$$cb_scolon = 0;
|
||||
$$cb_code = "";
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
#
|
||||
# CheckMisalignment:
|
||||
# $_[0]: $data(in)
|
||||
# $_[1]: $file(in)
|
||||
# $_[2]: $line(in)
|
||||
# $_[3]: @paren_stack(inout), which maintains information
|
||||
# of the parenthesis
|
||||
# Returns 0 in case of success or 1 on failure
|
||||
#
|
||||
# Check misaligned stuff in parenthesis:
|
||||
# 1. For misaligned arguments of function
|
||||
# 2. For misaligned conditions of [if|while|switch|...]
|
||||
#
|
||||
sub CheckMisalignment {
|
||||
my $ret = 0;
|
||||
my ($data, $file, $line, $paren_stack) = @_;
|
||||
|
||||
# Check alignment based on @paren_stack
|
||||
if (@$paren_stack) {
|
||||
if ($$data =~ /(\S+.*$)/) {
|
||||
my $pos = $$paren_stack[-1][0];
|
||||
my $linenum = $$paren_stack[-1][1];
|
||||
my $code = $$paren_stack[-1][2];
|
||||
if ($pos + 1 != length($`)) {
|
||||
my $pad = "";
|
||||
if ($. > $linenum + 1) {
|
||||
$pad = " " x $pos . " ...\n";
|
||||
}
|
||||
print "Misaligned line in parenthesis:\n";
|
||||
print "$$file:$linenum-$.:\n$code$pad$$line\n";
|
||||
$ret = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Maintain @paren_stack
|
||||
if ($$data =~ /.*[()]/) {
|
||||
my $pos = 0;
|
||||
my $temp = $$data;
|
||||
|
||||
# Kill the content between matched parenthesis and themselves
|
||||
# within the current line.
|
||||
$temp =~ s,(\((?:[^()]++|(?R))*+\)),"X" x (length $&),ge;
|
||||
|
||||
# Pop a item for the open-paren when finding close-paren
|
||||
while (($pos = index($temp, "\)", $pos)) >= 0) {
|
||||
if (@$paren_stack) {
|
||||
pop(@$paren_stack);
|
||||
$pos++;
|
||||
} else {
|
||||
print "Warning: found unbalanced parenthesis:\n";
|
||||
print "$$file:$.:\n$$line\n";
|
||||
$ret = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
# Push the item for open-paren on @paren_stack
|
||||
# @item = [ position of the open-paren, linenum, code-line ]
|
||||
while (($pos = index($temp, "\(", $pos)) >= 0) {
|
||||
push @$paren_stack, [$pos, $., $$line];
|
||||
$pos++;
|
||||
}
|
||||
}
|
||||
|
||||
return $ret;
|
||||
}
|
||||
|
||||
my $ret = 0;
|
||||
my $incomment = 0;
|
||||
|
||||
foreach my $file (@ARGV) {
|
||||
# Per-file variables for multiline Curly Bracket (cb_) check
|
||||
my $cb_linenum = 0;
|
||||
my $cb_code = "";
|
||||
my $cb_scolon = 0;
|
||||
my $fn_linenum = 0;
|
||||
my $incomment = 0;
|
||||
my @paren_stack;
|
||||
|
||||
open FILE, $file;
|
||||
|
||||
while (defined (my $line = <FILE>)) {
|
||||
my $has_define = 0;
|
||||
my $data = $line;
|
||||
# For temporary modifications
|
||||
my $tmpdata;
|
||||
my $location = "$file:$.:\n$line";
|
||||
|
||||
# Kill any quoted , ; = or "
|
||||
$data =~ s/'[";,=]'/'X'/g;
|
||||
|
||||
# Kill any quoted strings
|
||||
$data =~ s,"(?:[^\\\"]|\\.)*","XXX",g;
|
||||
# Kill any quoted strings. Replace with equal-length "XXXX..."
|
||||
$data =~ s,"(([^\\\"]|\\.)*)","\"".'X'x(length $1)."\"",ge;
|
||||
$data =~ s,'(([^\\\']|\\.)*)',"\'".'X'x(length $1)."\'",ge;
|
||||
|
||||
next if $data =~ /^#/;
|
||||
# Kill any C++ style comments
|
||||
$data =~ s,//.*$,//,;
|
||||
|
||||
# Kill contents of multi-line comments
|
||||
# and detect end of multi-line comments
|
||||
if ($incomment) {
|
||||
if ($data =~ m,\*/,) {
|
||||
$incomment = 0;
|
||||
$data =~ s,^.*\*/,*/,;
|
||||
} else {
|
||||
$data = "";
|
||||
}
|
||||
$has_define = 1 if $data =~ /(?:^#\s*define\b)/;
|
||||
if (not $has_define) {
|
||||
# Ignore all macros except for #define
|
||||
next if $data =~ /^#/;
|
||||
|
||||
$ret = 1 if CheckFunctionBody(\$data, \$location, \$fn_linenum);
|
||||
|
||||
KillComments(\$data, \$incomment);
|
||||
|
||||
$ret = 1 if CheckWhiteSpaces(\$data, \$location);
|
||||
|
||||
$ret = 1 if CheckCurlyBrackets(\$data, \$file, \$line,
|
||||
\$cb_linenum, \$cb_code, \$cb_scolon);
|
||||
}
|
||||
|
||||
# Kill single line comments, and detect
|
||||
# start of multi-line comments
|
||||
if ($data =~ m,/\*.*\*/,) {
|
||||
$data =~ s,/\*.*\*/,/* */,;
|
||||
} elsif ($data =~ m,/\*,) {
|
||||
$incomment = 1;
|
||||
$data =~ s,/\*.*,/*,;
|
||||
}
|
||||
#####################################################################
|
||||
# Temporary Filter for CheckMisalignment:
|
||||
# Here we introduce a white-list of path, since there're
|
||||
# too much misalignment.
|
||||
# We _need_ fix these misalignment in batches.
|
||||
# We _should_ remove it as soon as fixing all.
|
||||
#####################################################################
|
||||
next unless $file =~ /^src\/util\//;
|
||||
|
||||
# We need to match things like
|
||||
#
|
||||
# int foo (int bar, bool wizz);
|
||||
# foo (bar, wizz);
|
||||
#
|
||||
# but not match things like:
|
||||
#
|
||||
# typedef int (*foo)(bar wizz)
|
||||
#
|
||||
# we can't do this (efficiently) without
|
||||
# missing things like
|
||||
#
|
||||
# foo (*bar, wizz);
|
||||
#
|
||||
# We also don't want to spoil the $data so it can be used
|
||||
# later on.
|
||||
$tmpdata = $data;
|
||||
while ($tmpdata =~ /(\w+)\s\((?!\*)/) {
|
||||
my $kw = $1;
|
||||
|
||||
# Allow space after keywords only
|
||||
if ($kw =~ /^(?:if|for|while|switch|return)$/) {
|
||||
$tmpdata =~ s/(?:$kw\s\()/XXX(/;
|
||||
} else {
|
||||
print "Whitespace after non-keyword:\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
# Require whitespace immediately after keywords
|
||||
if ($data =~ /\b(?:if|for|while|switch|return)\(/) {
|
||||
print "No whitespace after keyword:\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Forbid whitespace between )( of a function typedef
|
||||
if ($data =~ /\(\*\w+\)\s+\(/) {
|
||||
print "Whitespace between ')' and '(':\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Forbid whitespace following ( or prior to )
|
||||
# but allow whitespace before ) on a single line
|
||||
# (optionally followed by a semicolon)
|
||||
if (($data =~ /\s\)/ && not $data =~ /^\s+\);?$/) ||
|
||||
$data =~ /\((?!$)\s/) {
|
||||
print "Whitespace after '(' or before ')':\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Forbid whitespace before ";" or ",". Things like below are allowed:
|
||||
#
|
||||
# 1) The expression is empty for "for" loop. E.g.
|
||||
# for (i = 0; ; i++)
|
||||
#
|
||||
# 2) An empty statement. E.g.
|
||||
# while (write(statuswrite, &status, 1) == -1 &&
|
||||
# errno == EINTR)
|
||||
# ;
|
||||
#
|
||||
if ($data =~ /\s[;,]/) {
|
||||
unless ($data =~ /\S; ; / ||
|
||||
$data =~ /^\s+;/) {
|
||||
print "Whitespace before semicolon or comma:\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
}
|
||||
|
||||
# Require EOL, macro line continuation, or whitespace after ";".
|
||||
# Allow "for (;;)" as an exception.
|
||||
if ($data =~ /;[^ \\\n;)]/) {
|
||||
print "Invalid character after semicolon:\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Require EOL, space, or enum/struct end after comma.
|
||||
if ($data =~ /,[^ \\\n)}]/) {
|
||||
print "Invalid character after comma:\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# Require spaces around assignment '=', compounds and '=='
|
||||
if ($data =~ /[^ ]\b[!<>&|\-+*\/%\^=]?=/ ||
|
||||
$data =~ /=[^= \\\n]/) {
|
||||
print "Spacing around '=' or '==':\n";
|
||||
print "$file:$.: $line";
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
# One line conditional statements with one line bodies should
|
||||
# not use curly brackets.
|
||||
if ($data =~ /^\s*(if|while|for)\b.*\{$/) {
|
||||
$cb_linenum = $.;
|
||||
$cb_code = $line;
|
||||
$cb_scolon = 0;
|
||||
}
|
||||
|
||||
# We need to check for exactly one semicolon inside the body,
|
||||
# because empty statements (e.g. with comment only) are
|
||||
# allowed
|
||||
if ($cb_linenum == $. - 1 && $data =~ /^[^;]*;[^;]*$/) {
|
||||
$cb_code .= $line;
|
||||
$cb_scolon = 1;
|
||||
}
|
||||
|
||||
if ($data =~ /^\s*}\s*$/ &&
|
||||
$cb_linenum == $. - 2 &&
|
||||
$cb_scolon) {
|
||||
|
||||
print "Curly brackets around single-line body:\n";
|
||||
print "$file:$cb_linenum-$.:\n$cb_code$line";
|
||||
$ret = 1;
|
||||
|
||||
# There _should_ be no need to reset the values; but to
|
||||
# keep my inner peace...
|
||||
$cb_linenum = 0;
|
||||
$cb_scolon = 0;
|
||||
$cb_code = "";
|
||||
}
|
||||
$ret = 1 if CheckMisalignment(\$data, \$file, \$line, \@paren_stack);
|
||||
}
|
||||
close FILE;
|
||||
}
|
||||
|
@@ -1,182 +0,0 @@
|
||||
#!/usr/bin/perl
|
||||
#
|
||||
# Validate that header files follow a standard layout:
|
||||
#
|
||||
# /*
|
||||
# ...copyright header...
|
||||
# */
|
||||
# <one blank line>
|
||||
# #pragma once
|
||||
# ....content....
|
||||
#
|
||||
#---
|
||||
#
|
||||
# For any file ending priv.h, before the #pragma once
|
||||
# We will have a further section
|
||||
#
|
||||
# #ifndef SYMBOL_ALLOW
|
||||
# # error ....
|
||||
# #endif /* SYMBOL_ALLOW */
|
||||
# <one blank line>
|
||||
#
|
||||
#---
|
||||
#
|
||||
# For public headers (files in include/), use the standard header guard instead of #pragma once:
|
||||
# #ifndef SYMBOL
|
||||
# # define SYMBOL
|
||||
# ....content....
|
||||
# #endif /* SYMBOL */
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
my $STATE_COPYRIGHT_COMMENT = 0;
|
||||
my $STATE_COPYRIGHT_BLANK = 1;
|
||||
my $STATE_PRIV_START = 2;
|
||||
my $STATE_PRIV_ERROR = 3;
|
||||
my $STATE_PRIV_END = 4;
|
||||
my $STATE_PRIV_BLANK = 5;
|
||||
my $STATE_GUARD_START = 6;
|
||||
my $STATE_GUARD_DEFINE = 7;
|
||||
my $STATE_GUARD_END = 8;
|
||||
my $STATE_EOF = 9;
|
||||
my $STATE_PRAGMA = 10;
|
||||
|
||||
my $file = " ";
|
||||
my $ret = 0;
|
||||
my $ifdef = "";
|
||||
my $ifdefpriv = "";
|
||||
my $publicheader = 0;
|
||||
|
||||
my $state = $STATE_EOF;
|
||||
my $mistake = 0;
|
||||
|
||||
sub mistake {
|
||||
my $msg = shift;
|
||||
warn $msg;
|
||||
$mistake = 1;
|
||||
$ret = 1;
|
||||
}
|
||||
|
||||
while (<>) {
|
||||
if (not $file eq $ARGV) {
|
||||
if ($state == $STATE_COPYRIGHT_COMMENT) {
|
||||
&mistake("$file: missing copyright comment");
|
||||
} elsif ($state == $STATE_COPYRIGHT_BLANK) {
|
||||
&mistake("$file: missing blank line after copyright header");
|
||||
} elsif ($state == $STATE_PRIV_START) {
|
||||
&mistake("$file: missing '#ifndef $ifdefpriv'");
|
||||
} elsif ($state == $STATE_PRIV_ERROR) {
|
||||
&mistake("$file: missing '# error ...priv allow...'");
|
||||
} elsif ($state == $STATE_PRIV_END) {
|
||||
&mistake("$file: missing '#endif /* $ifdefpriv */'");
|
||||
} elsif ($state == $STATE_PRIV_BLANK) {
|
||||
&mistake("$file: missing blank line after priv header check");
|
||||
} elsif ($state == $STATE_GUARD_START) {
|
||||
if ($publicheader) {
|
||||
&mistake("$file: missing '#ifndef $ifdef'");
|
||||
} else {
|
||||
&mistake("$file: missing '#pragma once' header guard");
|
||||
}
|
||||
} elsif ($state == $STATE_GUARD_DEFINE) {
|
||||
&mistake("$file: missing '# define $ifdef'");
|
||||
} elsif ($state == $STATE_GUARD_END) {
|
||||
&mistake("$file: missing '#endif /* $ifdef */'");
|
||||
}
|
||||
|
||||
$ifdef = uc $ARGV;
|
||||
$ifdef =~ s,.*/,,;
|
||||
$ifdef =~ s,[^A-Z0-9],_,g;
|
||||
$ifdef =~ s,__+,_,g;
|
||||
unless ($ifdef =~ /^LIBVIRT_/ && $ARGV !~ /libvirt_internal.h/) {
|
||||
$ifdef = "LIBVIRT_" . $ifdef;
|
||||
}
|
||||
$ifdefpriv = $ifdef . "_ALLOW";
|
||||
|
||||
$file = $ARGV;
|
||||
$state = $STATE_COPYRIGHT_COMMENT;
|
||||
$mistake = 0;
|
||||
$publicheader = ($ARGV =~ /include\//);
|
||||
}
|
||||
|
||||
if ($mistake ||
|
||||
$ARGV =~ /config-post\.h$/ ||
|
||||
$ARGV =~ /vbox_(CAPI|XPCOM)/) {
|
||||
$state = $STATE_EOF;
|
||||
next;
|
||||
}
|
||||
|
||||
if ($state == $STATE_COPYRIGHT_COMMENT) {
|
||||
if (m,\*/,) {
|
||||
$state = $STATE_COPYRIGHT_BLANK;
|
||||
}
|
||||
} elsif ($state == $STATE_COPYRIGHT_BLANK) {
|
||||
if (! /^$/) {
|
||||
&mistake("$file: missing blank line after copyright header");
|
||||
}
|
||||
if ($ARGV =~ /priv\.h$/) {
|
||||
$state = $STATE_PRIV_START;
|
||||
} else {
|
||||
$state = $STATE_GUARD_START;
|
||||
}
|
||||
} elsif ($state == $STATE_PRIV_START) {
|
||||
if (/^$/) {
|
||||
&mistake("$file: too many blank lines after copyright header");
|
||||
} elsif (/#ifndef $ifdefpriv$/) {
|
||||
$state = $STATE_PRIV_ERROR;
|
||||
} else {
|
||||
&mistake("$file: missing '#ifndef $ifdefpriv'");
|
||||
}
|
||||
} elsif ($state == $STATE_PRIV_ERROR) {
|
||||
if (/# error ".*"$/) {
|
||||
$state = $STATE_PRIV_END;
|
||||
} else {
|
||||
&mistake("$file: missing '# error ...priv allow...'");
|
||||
}
|
||||
} elsif ($state == $STATE_PRIV_END) {
|
||||
if (m,#endif /\* $ifdefpriv \*/,) {
|
||||
$state = $STATE_PRIV_BLANK;
|
||||
} else {
|
||||
&mistake("$file: missing '#endif /* $ifdefpriv */'");
|
||||
}
|
||||
} elsif ($state == $STATE_PRIV_BLANK) {
|
||||
if (! /^$/) {
|
||||
&mistake("$file: missing blank line after priv guard");
|
||||
}
|
||||
$state = $STATE_GUARD_START;
|
||||
} elsif ($state == $STATE_GUARD_START) {
|
||||
if (/^$/) {
|
||||
&mistake("$file: too many blank lines after copyright header");
|
||||
}
|
||||
if ($publicheader) {
|
||||
if (/#ifndef $ifdef$/) {
|
||||
$state = $STATE_GUARD_DEFINE;
|
||||
} else {
|
||||
&mistake("$file: missing '#ifndef $ifdef'");
|
||||
}
|
||||
} else {
|
||||
if (/#pragma once/) {
|
||||
$state = $STATE_PRAGMA;
|
||||
} else {
|
||||
&mistake("$file: missing '#pragma once' header guard");
|
||||
}
|
||||
}
|
||||
} elsif ($state == $STATE_GUARD_DEFINE) {
|
||||
if (/# define $ifdef$/) {
|
||||
$state = $STATE_GUARD_END;
|
||||
} else {
|
||||
&mistake("$file: missing '# define $ifdef'");
|
||||
}
|
||||
} elsif ($state == $STATE_GUARD_END) {
|
||||
if (m,#endif /\* $ifdef \*/$,) {
|
||||
$state = $STATE_EOF;
|
||||
}
|
||||
} elsif ($state == $STATE_PRAGMA) {
|
||||
next;
|
||||
} elsif ($state == $STATE_EOF) {
|
||||
die "$file: unexpected content after '#endif /* $ifdef */'";
|
||||
} else {
|
||||
die "$file: unexpected state $state";
|
||||
}
|
||||
}
|
||||
exit $ret;
|
@@ -6,9 +6,6 @@ my %mocked;
|
||||
# Functions in public header don't get the noinline annotation
|
||||
# so whitelist them here
|
||||
$noninlined{"virEventAddTimeout"} = 1;
|
||||
# This one confuses the script as its defined in the mock file
|
||||
# but is actually just a local helper
|
||||
$noninlined{"virMockStatRedirect"} = 1;
|
||||
|
||||
foreach my $arg (@ARGV) {
|
||||
if ($arg =~ /\.h$/) {
|
||||
|
176
cfg.mk
176
cfg.mk
@@ -1,5 +1,5 @@
|
||||
# Customize Makefile.maint. -*- makefile -*-
|
||||
# Copyright (C) 2008-2019 Red Hat, Inc.
|
||||
# Copyright (C) 2008-2015 Red Hat, Inc.
|
||||
# Copyright (C) 2003-2008 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
@@ -120,6 +120,7 @@ useless_free_options = \
|
||||
--name=virConfFreeValue \
|
||||
--name=virDomainActualNetDefFree \
|
||||
--name=virDomainChrDefFree \
|
||||
--name=virDomainChrSourceDefFree \
|
||||
--name=virDomainControllerDefFree \
|
||||
--name=virDomainDefFree \
|
||||
--name=virDomainDeviceDefFree \
|
||||
@@ -133,6 +134,7 @@ useless_free_options = \
|
||||
--name=virDomainNetDefFree \
|
||||
--name=virDomainObjFree \
|
||||
--name=virDomainSmartcardDefFree \
|
||||
--name=virDomainSnapshotDefFree \
|
||||
--name=virDomainSnapshotObjFree \
|
||||
--name=virDomainSoundDefFree \
|
||||
--name=virDomainVideoDefFree \
|
||||
@@ -146,6 +148,9 @@ useless_free_options = \
|
||||
--name=virJSONValueFree \
|
||||
--name=virLastErrFreeData \
|
||||
--name=virNetMessageFree \
|
||||
--name=virNetServerMDNSFree \
|
||||
--name=virNetServerMDNSEntryFree \
|
||||
--name=virNetServerMDNSGroupFree \
|
||||
--name=virNWFilterDefFree \
|
||||
--name=virNWFilterEntryFree \
|
||||
--name=virNWFilterHashTableFree \
|
||||
@@ -207,6 +212,7 @@ useless_free_options = \
|
||||
# y virDomainInputDefFree
|
||||
# y virDomainNetDefFree
|
||||
# y virDomainObjFree
|
||||
# y virDomainSnapshotDefFree
|
||||
# n virDomainSnapshotFree (returns int)
|
||||
# n virDomainSnapshotFreeName (returns int)
|
||||
# y virDomainSnapshotObjFree
|
||||
@@ -299,11 +305,10 @@ sc_flags_usage:
|
||||
$(srcdir)/include/libvirt/libvirt-qemu.h \
|
||||
$(srcdir)/include/libvirt/libvirt-lxc.h \
|
||||
$(srcdir)/include/libvirt/libvirt-admin.h \
|
||||
| $(GREP) -c '\(long\|unsigned\) flags')" != 4 && \
|
||||
| grep -c '\(long\|unsigned\) flags')" != 4 && \
|
||||
{ echo '$(ME): new API should use "unsigned int flags"' 1>&2; \
|
||||
exit 1; } || :
|
||||
@prohibit=' flags ATTRIBUTE_UNUSED' \
|
||||
exclude='virSecurityDomainImageLabelFlags' \
|
||||
halt='flags should be checked with virCheckFlags' \
|
||||
$(_sc_search_regexp)
|
||||
@prohibit='^[^@]*([^d] (int|long long)|[^dg] long) flags[;,)]' \
|
||||
@@ -467,7 +472,6 @@ sc_prohibit_canonicalize_file_name:
|
||||
# Insist on correct types for [pug]id.
|
||||
sc_correct_id_types:
|
||||
@prohibit='\<(int|long) *[pug]id\>' \
|
||||
exclude='exempt from syntax-check' \
|
||||
halt='use pid_t for pid, uid_t for uid, gid_t for gid' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
@@ -611,7 +615,6 @@ msg_gen_function += virReportError
|
||||
msg_gen_function += virReportErrorHelper
|
||||
msg_gen_function += virReportSystemError
|
||||
msg_gen_function += xenapiSessionErrorHandler
|
||||
msg_gen_function += virLastErrorPrefixMessage
|
||||
|
||||
# Uncomment the following and run "make syntax-check" to see diagnostics
|
||||
# that are not yet marked for translation, but that need to be rewritten
|
||||
@@ -635,12 +638,10 @@ sc_libvirt_unmarked_diagnostics:
|
||||
exclude='_\(' \
|
||||
halt='found unmarked diagnostic(s)' \
|
||||
$(_sc_search_regexp)
|
||||
@{ $(VC_LIST_EXCEPT) | xargs \
|
||||
$(GREP) -nE '\<$(func_re) *\(.*;$$' /dev/null; \
|
||||
$(VC_LIST_EXCEPT) | xargs \
|
||||
$(GREP) -A1 -nE '\<$(func_re) *\(.*,$$' /dev/null; } \
|
||||
| $(SED) -E 's/_\("([^\"]|\\.)+"//;s/"%s"//' \
|
||||
| $(GREP) '"' && \
|
||||
@{ grep -nE '\<$(func_re) *\(.*;$$' $$($(VC_LIST_EXCEPT)); \
|
||||
grep -A1 -nE '\<$(func_re) *\(.*,$$' $$($(VC_LIST_EXCEPT)); } \
|
||||
| $(SED) 's/_("\([^\"]\|\\.\)\+"//;s/[ ]"%s"//' \
|
||||
| grep '[ ]"' && \
|
||||
{ echo '$(ME): found unmarked diagnostic(s)' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
@@ -652,9 +653,9 @@ sc_libvirt_unmarked_diagnostics:
|
||||
# there are functions to which this one applies but that do not get marked
|
||||
# diagnostics.
|
||||
sc_prohibit_newline_at_end_of_diagnostic:
|
||||
@$(VC_LIST_EXCEPT) | xargs $(GREP) -A2 -nE \
|
||||
'\<$(func_re) *\(' /dev/null \
|
||||
| $(GREP) '\\n"' \
|
||||
@grep -A2 -nE \
|
||||
'\<$(func_re) *\(' $$($(VC_LIST_EXCEPT)) \
|
||||
| grep '\\n"' \
|
||||
&& { echo '$(ME): newline at end of message(s)' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
@@ -662,14 +663,12 @@ sc_prohibit_newline_at_end_of_diagnostic:
|
||||
# allow VIR_ERROR to do this, and ignore functions that take a single
|
||||
# string rather than a format argument.
|
||||
sc_prohibit_diagnostic_without_format:
|
||||
@{ $(VC_LIST_EXCEPT) | xargs \
|
||||
$(GREP) -nE '\<$(func_re) *\(.*;$$' /dev/null; \
|
||||
$(VC_LIST_EXCEPT) | xargs \
|
||||
$(GREP) -A2 -nE '\<$(func_re) *\(.*,$$' /dev/null; } \
|
||||
@{ grep -nE '\<$(func_re) *\(.*;$$' $$($(VC_LIST_EXCEPT)); \
|
||||
grep -A2 -nE '\<$(func_re) *\(.*,$$' $$($(VC_LIST_EXCEPT)); } \
|
||||
| $(SED) -rn -e ':l; /[,"]$$/ {N;b l;}' \
|
||||
-e '/(xenapiSessionErrorHandler|vah_(error|warning))/d' \
|
||||
-e '/\<$(func_re) *\([^"]*"([^%"]|"\n[^"]*")*"[,)]/p' \
|
||||
| $(GREP) -vE 'VIR_ERROR' && \
|
||||
| grep -vE 'VIR_ERROR' && \
|
||||
{ echo '$(ME): found diagnostic without %' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
@@ -687,16 +686,16 @@ sc_prohibit_useless_translation:
|
||||
# When splitting a diagnostic across lines, ensure that there is a space
|
||||
# or \n on one side of the split.
|
||||
sc_require_whitespace_in_translation:
|
||||
@$(VC_LIST_EXCEPT) | xargs $(GREP) -n -A1 '"$$' /dev/null \
|
||||
@grep -n -A1 '"$$' $$($(VC_LIST_EXCEPT)) \
|
||||
| $(SED) -ne ':l; /"$$/ {N;b l;}; s/"\n[^"]*"/""/g; s/\\n/ /g' \
|
||||
-e '/_(.*[^\ ]""[^\ ]/p' | $(GREP) . && \
|
||||
-e '/_(.*[^\ ]""[^\ ]/p' | grep . && \
|
||||
{ echo '$(ME): missing whitespace at line split' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
# Enforce recommended preprocessor indentation style.
|
||||
sc_preprocessor_indentation:
|
||||
@if cppi --version >/dev/null 2>&1; then \
|
||||
$(VC_LIST_EXCEPT) | $(GREP) -E '\.[ch](\.in)?$$' | xargs cppi -a -c \
|
||||
$(VC_LIST_EXCEPT) | grep -E '\.[ch](\.in)?$$' | xargs cppi -a -c \
|
||||
|| { echo '$(ME): incorrect preprocessor indentation' 1>&2; \
|
||||
exit 1; }; \
|
||||
else \
|
||||
@@ -707,13 +706,13 @@ sc_preprocessor_indentation:
|
||||
# (comment-only) C file that mirrors the same layout as the spec file.
|
||||
sc_spec_indentation:
|
||||
@if cppi --version >/dev/null 2>&1; then \
|
||||
for f in $$($(VC_LIST_EXCEPT) | $(GREP) '\.spec\.in$$'); do \
|
||||
for f in $$($(VC_LIST_EXCEPT) | grep '\.spec\.in$$'); do \
|
||||
$(SED) -e 's|#|// #|; s|%ifn*\(arch\)* |#if a // |' \
|
||||
-e 's/%\(else\|endif\|define\)/#\1/' \
|
||||
-e 's/^\( *\)\1\1\1#/#\1/' \
|
||||
-e 's|^\( *[^#/ ]\)|// \1|; s|^\( */[^/]\)|// \1|' $$f \
|
||||
| cppi -a -c 2>&1 | $(SED) "s|standard input|$$f|"; \
|
||||
done | { if $(GREP) . >&2; then false; else :; fi; } \
|
||||
done | { if grep . >&2; then false; else :; fi; } \
|
||||
|| { echo '$(ME): incorrect preprocessor indentation' 1>&2; \
|
||||
exit 1; }; \
|
||||
else \
|
||||
@@ -788,8 +787,10 @@ sc_prohibit_cross_inclusion:
|
||||
case $$dir in \
|
||||
util/) safe="util";; \
|
||||
access/ | conf/) safe="($$dir|conf|util)";; \
|
||||
cpu/| network/| node_device/| rpc/| security/| storage/) \
|
||||
cpu/| network/| node_device/| rpc/| storage/) \
|
||||
safe="($$dir|util|conf|storage)";; \
|
||||
security/) \
|
||||
safe="($$dir|util|conf|storage|locking)";; \
|
||||
xenapi/ | xenconfig/ ) safe="($$dir|util|conf|xen|cpu)";; \
|
||||
*) safe="($$dir|$(mid_dirs)|util)";; \
|
||||
esac; \
|
||||
@@ -803,13 +804,12 @@ sc_prohibit_cross_inclusion:
|
||||
# When converting an enum to a string, make sure that we track any new
|
||||
# elements added to the enum by using a _LAST marker.
|
||||
sc_require_enum_last_marker:
|
||||
@$(VC_LIST_EXCEPT) | xargs \
|
||||
$(GREP) -A1 -nE '^[^#]*VIR_ENUM_IMPL *\(' /dev/null \
|
||||
| $(SED) -ne '/VIR_ENUM_IMPL.*,$$/N' \
|
||||
-e '/VIR_ENUM_IMPL[^,]*,[^,]*,[^,]*[^_,][^L,][^A,][^S,][^T,],/p' \
|
||||
@grep -A1 -nE '^[^#]*VIR_ENUM_IMPL *\(' $$($(VC_LIST_EXCEPT)) \
|
||||
| $(SED) -ne '/VIR_ENUM_IMPL[^,]*,$$/N' \
|
||||
-e '/VIR_ENUM_IMPL[^,]*,[^,]*[^_,][^L,][^A,][^S,][^T,],/p' \
|
||||
-e '/VIR_ENUM_IMPL[^,]*,[^,]\{0,4\},/p' \
|
||||
| $(GREP) . && \
|
||||
{ echo '$(ME): enum impl needs _LAST marker on second line' 1>&2; \
|
||||
| grep . && \
|
||||
{ echo '$(ME): enum impl needs to use _LAST marker' 1>&2; \
|
||||
exit 1; } || :
|
||||
|
||||
# In Python files we don't want to end lines with a semicolon like in C
|
||||
@@ -867,7 +867,8 @@ sc_prohibit_atoi:
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_wrong_filename_in_comment:
|
||||
@$(VC_LIST_EXCEPT) | $(GREP) '\.[ch]$$' | xargs awk 'BEGIN { \
|
||||
@fail=0; \
|
||||
awk 'BEGIN { \
|
||||
fail=0; \
|
||||
} FNR < 3 { \
|
||||
n=match($$0, /[[:space:]][^[:space:]]*[.][ch][[:space:]:]/); \
|
||||
@@ -883,8 +884,11 @@ sc_prohibit_wrong_filename_in_comment:
|
||||
if (fail == 1) { \
|
||||
exit 1; \
|
||||
} \
|
||||
}' || { echo '$(ME): The file name in comments must match the' \
|
||||
'actual file name' 1>&2; exit 1; }
|
||||
}' $$($(VC_LIST_EXCEPT) | grep '\.[ch]$$') || fail=1; \
|
||||
if test $$fail -eq 1; then \
|
||||
{ echo '$(ME): The file name in comments must match the' \
|
||||
'actual file name' 1>&2; exit 1; } \
|
||||
fi;
|
||||
|
||||
sc_prohibit_virConnectOpen_in_virsh:
|
||||
@prohibit='\bvirConnectOpen[a-zA-Z]* *\(' \
|
||||
@@ -915,21 +919,22 @@ sc_require_if_else_matching_braces:
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_curly_braces_style:
|
||||
@if $(VC_LIST_EXCEPT) | $(GREP) '\.[ch]$$' | xargs $(GREP) -nHP \
|
||||
@files=$$($(VC_LIST_EXCEPT) | grep '\.[ch]$$'); \
|
||||
if $(GREP) -nHP \
|
||||
'^\s*(?!([a-zA-Z_]*for_?each[a-zA-Z_]*) ?\()([_a-zA-Z0-9]+( [_a-zA-Z0-9]+)* ?\()?(\*?[_a-zA-Z0-9]+(,? \*?[_a-zA-Z0-9\[\]]+)+|void)\) ?\{' \
|
||||
/dev/null; then \
|
||||
$$files; then \
|
||||
echo '$(ME): Non-K&R style used for curly braces around' \
|
||||
'function body' 1>&2; exit 1; \
|
||||
fi; \
|
||||
if $(VC_LIST_EXCEPT) | $(GREP) '\.[ch]$$' | xargs \
|
||||
$(GREP) -A1 -En ' ((if|for|while|switch) \(|(else|do)\b)[^{]*$$' \
|
||||
/dev/null | $(GREP) '^[^ ]*- *{'; then \
|
||||
if $(GREP) -A1 -En ' ((if|for|while|switch) \(|(else|do)\b)[^{]*$$'\
|
||||
$$files | $(GREP) '^[^ ]*- *{'; then \
|
||||
echo '$(ME): Use hanging braces for compound statements' 1>&2; exit 1; \
|
||||
fi
|
||||
|
||||
sc_prohibit_windows_special_chars_in_filename:
|
||||
@$(VC_LIST_EXCEPT) | $(GREP) '[:*?"<>|]' && \
|
||||
{ echo '$(ME): Windows special chars in filename not allowed' 1>&2; echo exit 1; } || :
|
||||
@files=$$($(VC_LIST_EXCEPT) | grep '[:*?"<>|]'); \
|
||||
test -n "$$files" && { echo '$(ME): Windows special chars' \
|
||||
'in filename not allowed:' 1>&2; echo $$files 1>&2; exit 1; } || :
|
||||
|
||||
sc_prohibit_mixed_case_abbreviations:
|
||||
@prohibit='Pci|Usb|Scsi' \
|
||||
@@ -945,11 +950,11 @@ sc_require_locale_h:
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_empty_first_line:
|
||||
@$(VC_LIST_EXCEPT) | xargs awk 'BEGIN { fail=0; } \
|
||||
@awk 'BEGIN { fail=0; } \
|
||||
FNR == 1 { if ($$0 == "") { print FILENAME ":1:"; fail=1; } } \
|
||||
END { if (fail == 1) { \
|
||||
print "$(ME): Prohibited empty first line" > "/dev/stderr"; \
|
||||
} exit fail; }'
|
||||
} exit fail; }' $$($(VC_LIST_EXCEPT));
|
||||
|
||||
sc_prohibit_paren_brace:
|
||||
@prohibit='\)\{$$' \
|
||||
@@ -992,9 +997,8 @@ sc_prohibit_sysconf_pagesize:
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_virSecurity:
|
||||
@$(VC_LIST_EXCEPT) | $(GREP) 'src/qemu/' | \
|
||||
$(GREP) -v 'src/qemu/qemu_security' | \
|
||||
xargs $(GREP) -Pn 'virSecurityManager(?!Ptr)' /dev/null && \
|
||||
@grep -Pn 'virSecurityManager(?!Ptr)' $$($(VC_LIST_EXCEPT) | grep 'src/qemu/' | \
|
||||
grep -v 'src/qemu/qemu_security') && \
|
||||
{ echo '$(ME): prefer qemuSecurity wrappers' 1>&2; exit 1; } || :
|
||||
|
||||
sc_prohibit_pthread_create:
|
||||
@@ -1047,11 +1051,6 @@ sc_prohibit_http_urls:
|
||||
halt='Links must use https:// protocol' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
sc_prohibit_author:
|
||||
@prohibit="(\*|#)\s*(A|a)uthors?:" \
|
||||
halt="Author: statements are prohibited in source comments" \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# Alignment is usually achieved through spaces (at least two of them)
|
||||
# or tabs (at least one of them) right before the trailing backslash
|
||||
sc_prohibit_backslash_alignment:
|
||||
@@ -1063,36 +1062,14 @@ sc_prohibit_backslash_alignment:
|
||||
# Some syntax rules pertaining to the usage of cleanup macros
|
||||
# implementing GNU C's cleanup attribute
|
||||
|
||||
# Rule to ensure that variables declared using a cleanup macro are
|
||||
# Rule to ensure that varibales declared using a cleanup macro are
|
||||
# always initialized.
|
||||
sc_require_attribute_cleanup_initialization:
|
||||
@prohibit='VIR_AUTO((FREE|PTR|UNREF|CLEAN)\(.+\)|CLOSE|STRINGLIST) *[^=]+;' \
|
||||
@prohibit='VIR_AUTO((FREE|PTR)\(.+\)|CLOSE) *[^=]+;' \
|
||||
in_vc_files='\.[chx]$$' \
|
||||
halt='variable declared with a cleanup macro must be initialized' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# "class" in headers is not good because by default Vim treats it as a keyword
|
||||
# Let's prohibit it in source files as well.
|
||||
sc_prohibit_class:
|
||||
@prohibit=' +_?class *;' \
|
||||
in_vc_files='\.[chx]$$' \
|
||||
halt='use klass instead of class or _class' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
# The dirent "d_type" field is non-portable and even when it
|
||||
# exists some filesystems will only ever return DT_UNKNOWN.
|
||||
# This field should only be used by code which is exclusively
|
||||
# run platforms supporting "d_type" and must expect DT_UNKNOWN.
|
||||
# We blacklist it to discourage accidental usage which has
|
||||
# happened many times. Add an exclude rule if it is genuinely
|
||||
# needed and the above restrictions are acceptable.
|
||||
sc_prohibit_dirent_d_type:
|
||||
@prohibit='(->|\.)d_type' \
|
||||
in_vc_files='\.[chx]$$' \
|
||||
halt='do not use the d_type field in "struct dirent"' \
|
||||
$(_sc_search_regexp)
|
||||
|
||||
|
||||
# We don't use this feature of maint.mk.
|
||||
prev_version_file = /dev/null
|
||||
|
||||
@@ -1122,7 +1099,7 @@ maint.mk Makefile: _autogen_error
|
||||
# though, as it would be quite pointless
|
||||
ifeq (2,$(_dry_run_result)$(_clean_requested))
|
||||
$(info INFO: running autogen.sh is required, running it now...)
|
||||
$(shell touch $(srcdir)/AUTHORS)
|
||||
$(shell touch $(srcdir)/AUTHORS $(srcdir)/ChangeLog)
|
||||
maint.mk Makefile: _autogen
|
||||
endif
|
||||
endif
|
||||
@@ -1141,39 +1118,29 @@ _autogen_error:
|
||||
|
||||
ifneq ($(_gl-Makefile),)
|
||||
syntax-check: spacing-check test-wrap-argv \
|
||||
prohibit-duplicate-header mock-noinline group-qemu-caps \
|
||||
header-ifdef
|
||||
@if ! cppi --version >/dev/null 2>&1; then \
|
||||
echo "*****************************************************" >&2; \
|
||||
echo "* cppi not installed, some checks have been skipped *" >&2; \
|
||||
echo "*****************************************************" >&2; \
|
||||
fi
|
||||
prohibit-duplicate-header mock-noinline group-qemu-caps
|
||||
endif
|
||||
|
||||
# Don't include duplicate header in the source (either *.c or *.h)
|
||||
prohibit-duplicate-header:
|
||||
$(AM_V_GEN)$(VC_LIST_EXCEPT) | $(GREP) '\.[chx]$$' | xargs \
|
||||
$(PERL) -W $(top_srcdir)/build-aux/prohibit-duplicate-header.pl
|
||||
$(AM_V_GEN)files=$$($(VC_LIST_EXCEPT) | grep '\.[chx]$$'); \
|
||||
$(PERL) -W $(top_srcdir)/build-aux/prohibit-duplicate-header.pl $$files
|
||||
|
||||
spacing-check:
|
||||
$(AM_V_GEN)$(VC_LIST) | $(GREP) '\.c$$' | xargs \
|
||||
$(PERL) $(top_srcdir)/build-aux/check-spacing.pl || \
|
||||
$(AM_V_GEN)files=`$(VC_LIST) | grep '\.c$$'`; \
|
||||
$(PERL) $(top_srcdir)/build-aux/check-spacing.pl $$files || \
|
||||
{ echo '$(ME): incorrect formatting' 1>&2; exit 1; }
|
||||
|
||||
mock-noinline:
|
||||
$(AM_V_GEN)$(VC_LIST) | $(GREP) '\.[ch]$$' | xargs \
|
||||
$(PERL) $(top_srcdir)/build-aux/mock-noinline.pl
|
||||
|
||||
header-ifdef:
|
||||
$(AM_V_GEN)$(VC_LIST) | $(GREP) '\.[h]$$' | xargs \
|
||||
$(PERL) $(top_srcdir)/build-aux/header-ifdef.pl
|
||||
$(AM_V_GEN)files=`$(VC_LIST) | grep '\.[ch]$$'`; \
|
||||
$(PERL) $(top_srcdir)/build-aux/mock-noinline.pl $$files
|
||||
|
||||
test-wrap-argv:
|
||||
$(AM_V_GEN)$(VC_LIST) | $(GREP) -E '\.(ldargs|args)' | xargs \
|
||||
$(PERL) $(top_srcdir)/tests/test-wrap-argv.pl --check
|
||||
$(AM_V_GEN)files=`$(VC_LIST) | grep -E '\.(ldargs|args)'`; \
|
||||
$(PERL) $(top_srcdir)/tests/test-wrap-argv.pl --check $$files
|
||||
|
||||
group-qemu-caps:
|
||||
$(AM_V_GEN)$(PERL) $(top_srcdir)/tests/group-qemu-caps.pl --check $(top_srcdir)/
|
||||
$(PERL) $(top_srcdir)/tests/group-qemu-caps.pl --check $(top_srcdir)/
|
||||
|
||||
# sc_po_check can fail if generated files are not built first
|
||||
sc_po_check: \
|
||||
@@ -1212,7 +1179,7 @@ exclude_file_name_regexp--sc_copyright_usage = \
|
||||
^COPYING(|\.LESSER)$$
|
||||
|
||||
exclude_file_name_regexp--sc_flags_usage = \
|
||||
^(cfg\.mk|docs/|src/util/virnetdevtap\.c$$|tests/((vir(cgroup|pci|test|usb)|nss|qemuxml2argv|qemusecurity)mock|virfilewrapper)\.c$$)
|
||||
^(cfg\.mk|docs/|src/util/virnetdevtap\.c$$|tests/((vir(cgroup|pci|test|usb)|nss|qemuxml2argv)mock|virfilewrapper)\.c$$)
|
||||
|
||||
exclude_file_name_regexp--sc_libvirt_unmarked_diagnostics = \
|
||||
^(src/rpc/gendispatch\.pl$$|tests/)
|
||||
@@ -1235,7 +1202,7 @@ exclude_file_name_regexp--sc_prohibit_strdup = \
|
||||
^(docs/|examples/|src/util/virstring\.c|tests/vir(netserverclient|cgroup)mock.c|tests/commandhelper\.c$$)
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_close = \
|
||||
(\.p[yl]$$|\.spec\.in$$|^docs/|^(src/util/virfile\.c|src/libvirt-stream\.c|tests/(vir.+mock\.c|commandhelper\.c|qemusecuritymock\.c))$$)
|
||||
(\.p[yl]$$|\.spec\.in$$|^docs/|^(src/util/virfile\.c|src/libvirt-stream\.c|tests/vir.+mock\.c|tests/commandhelper\.c)$$)
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \
|
||||
(^tests/(virhostcpu|virpcitest)data/|docs/js/.*\.js|docs/fonts/.*\.woff|\.diff|tests/virconfdata/no-newline\.conf$$)
|
||||
@@ -1256,13 +1223,13 @@ exclude_file_name_regexp--sc_prohibit_newline_at_end_of_diagnostic = \
|
||||
^src/rpc/gendispatch\.pl$$
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_nonreentrant = \
|
||||
^((po|tests|examples)/|docs/.*(py|js|html\.in)|run.in$$|tools/wireshark/util/genxdrstub\.pl$$)
|
||||
^((po|tests)/|docs/.*(py|js|html\.in)|run.in$$|tools/wireshark/util/genxdrstub\.pl$$)
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_select = \
|
||||
^cfg\.mk$$
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_canonicalize_file_name = \
|
||||
^(cfg\.mk|tests/virfilemock\.c)$$
|
||||
^cfg\.mk$$
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_raw_allocation = \
|
||||
^(docs/hacking\.html\.in|src/util/viralloc\.[ch]|examples/.*|tests/(securityselinuxhelper|(vircgroup|nss)mock|commandhelper)\.c|tools/wireshark/src/packet-libvirt\.c)$$
|
||||
@@ -1286,10 +1253,10 @@ exclude_file_name_regexp--sc_prohibit_xmlURI = ^src/util/viruri\.c$$
|
||||
exclude_file_name_regexp--sc_prohibit_return_as_function = \.py$$
|
||||
|
||||
exclude_file_name_regexp--sc_require_config_h = \
|
||||
^(examples/|tools/virsh-edit\.c$$|tests/virmockstathelpers.c)
|
||||
^(examples/|tools/virsh-edit\.c$$)
|
||||
|
||||
exclude_file_name_regexp--sc_require_config_h_first = \
|
||||
^(examples/|tools/virsh-edit\.c$$|tests/virmockstathelpers.c)
|
||||
^(examples/|tools/virsh-edit\.c$$)
|
||||
|
||||
exclude_file_name_regexp--sc_trailing_blank = \
|
||||
/sysinfodata/.*\.data|/virhostcpudata/.*\.cpuinfo|^gnulib/local/.*/.*diff$$
|
||||
@@ -1305,7 +1272,7 @@ exclude_file_name_regexp--sc_correct_id_types = \
|
||||
exclude_file_name_regexp--sc_m4_quote_check = m4/virt-lib.m4
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_include_public_headers_quote = \
|
||||
^(src/internal\.h$$|tools/wireshark/src/packet-libvirt.c$$)
|
||||
^(src/internal\.h$$|tools/wireshark/src/packet-libvirt.h$$)
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_include_public_headers_brackets = \
|
||||
^(tools/|examples/|include/libvirt/(virterror|libvirt(-(admin|qemu|lxc))?)\.h$$)
|
||||
@@ -1351,6 +1318,3 @@ exclude_file_name_regexp--sc_prohibit_readdir = \
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_cross_inclusion = \
|
||||
^(src/util/virclosecallbacks\.h|src/util/virhostdev\.h)$$
|
||||
|
||||
exclude_file_name_regexp--sc_prohibit_dirent_d_type = \
|
||||
^(src/util/vircgroup.c)$
|
||||
|
@@ -19,7 +19,7 @@
|
||||
/*
|
||||
* Since virt-login-shell will be setuid, we must do everything
|
||||
* we can to avoid linking to other libraries. Many of them do
|
||||
* unsafe things in functions marked __attribute__((constructor)).
|
||||
* unsafe things in functions marked __atttribute__((constructor)).
|
||||
* The only way to avoid such deps is to re-compile the
|
||||
* functions with the code in question disabled, and for that we
|
||||
* must override the main config.h rules. Hence this file :-(
|
||||
@@ -44,6 +44,7 @@
|
||||
# undef WITH_SYSTEMD_DAEMON
|
||||
# undef WITH_VIRTUALPORT
|
||||
# undef WITH_YAJL
|
||||
# undef WITH_YAJL2
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -68,6 +69,7 @@
|
||||
# undef WITH_VIRTUALPORT
|
||||
# undef WITH_SECDRIVER_SELINUX
|
||||
# undef WITH_SECDRIVER_APPARMOR
|
||||
# undef WITH_CAPNG
|
||||
#endif /* LIBVIRT_NSS */
|
||||
|
||||
#ifndef __GNUC__
|
||||
|
115
configure.ac
115
configure.ac
@@ -16,21 +16,15 @@ dnl You should have received a copy of the GNU Lesser General Public
|
||||
dnl License along with this library. If not, see
|
||||
dnl <http://www.gnu.org/licenses/>.
|
||||
|
||||
AC_INIT([libvirt], [5.5.0], [libvir-list@redhat.com], [], [https://libvirt.org])
|
||||
AC_INIT([libvirt], [4.8.0], [libvir-list@redhat.com], [], [https://libvirt.org])
|
||||
AC_CONFIG_SRCDIR([src/libvirt.c])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
AH_BOTTOM([#include <config-post.h>])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
dnl Make automake keep quiet about wildcards & other GNUmake-isms
|
||||
AM_INIT_AUTOMAKE([
|
||||
foreign
|
||||
-Wno-portability
|
||||
tar-pax
|
||||
no-dist-gzip
|
||||
dist-xz
|
||||
subdir-objects
|
||||
])
|
||||
dnl Make automake keep quiet about wildcards & other GNUmake-isms; also keep
|
||||
dnl quiet about the fact that we intentionally cater to automake 1.9
|
||||
AM_INIT_AUTOMAKE([-Wno-portability -Wno-obsolete tar-pax no-dist-gzip dist-xz subdir-objects])
|
||||
dnl older automake's default of ARFLAGS=cru is noisy on newer binutils;
|
||||
dnl we don't really need the 'u' even in older toolchains. Then there is
|
||||
dnl older libtool, which spelled it AR_FLAGS
|
||||
@@ -180,13 +174,13 @@ want_ifconfig=no
|
||||
dnl Make some notes about which OS we're compiling for, as the lxc and qemu
|
||||
dnl drivers require linux headers, and storage_mpath, dtrace, and nwfilter
|
||||
dnl are also linux specific. The "network" and storage_fs drivers are known
|
||||
dnl to not work on macOS presently, so we also make a note if compiling
|
||||
dnl to not work on MacOS X presently, so we also make a note if compiling
|
||||
dnl for that
|
||||
|
||||
with_linux=no with_macos=no with_freebsd=no with_win=no with_cygwin=no
|
||||
with_linux=no with_osx=no with_freebsd=no with_win=no with_cygwin=no
|
||||
case $host in
|
||||
*-*-linux*) with_linux=yes ;;
|
||||
*-*-darwin*) with_macos=yes ;;
|
||||
*-*-darwin*) with_osx=yes ;;
|
||||
*-*-freebsd*) with_freebsd=yes ;;
|
||||
*-*-mingw* | *-*-msvc* ) with_win=yes ;;
|
||||
*-*-cygwin*) with_cygwin=yes ;;
|
||||
@@ -231,6 +225,7 @@ if test "$with_libvirtd" = "no" ; then
|
||||
with_qemu=no
|
||||
with_lxc=no
|
||||
with_libxl=no
|
||||
with_uml=no
|
||||
with_vbox=no
|
||||
fi
|
||||
|
||||
@@ -245,13 +240,13 @@ LIBVIRT_LINKER_NO_UNDEFINED
|
||||
LIBVIRT_ARG_APPARMOR
|
||||
LIBVIRT_ARG_ATTR
|
||||
LIBVIRT_ARG_AUDIT
|
||||
LIBVIRT_ARG_AVAHI
|
||||
LIBVIRT_ARG_BASH_COMPLETION
|
||||
LIBVIRT_ARG_BLKID
|
||||
LIBVIRT_ARG_CAPNG
|
||||
LIBVIRT_ARG_CURL
|
||||
LIBVIRT_ARG_DBUS
|
||||
LIBVIRT_ARG_FIREWALLD
|
||||
LIBVIRT_ARG_FIREWALLD_ZONE
|
||||
LIBVIRT_ARG_FUSE
|
||||
LIBVIRT_ARG_GLUSTER
|
||||
LIBVIRT_ARG_HAL
|
||||
@@ -283,6 +278,7 @@ LIBVIRT_CHECK_APPARMOR
|
||||
LIBVIRT_CHECK_ATOMIC
|
||||
LIBVIRT_CHECK_ATTR
|
||||
LIBVIRT_CHECK_AUDIT
|
||||
LIBVIRT_CHECK_AVAHI
|
||||
LIBVIRT_CHECK_BASH_COMPLETION
|
||||
LIBVIRT_CHECK_BLKID
|
||||
LIBVIRT_CHECK_CAPNG
|
||||
@@ -291,7 +287,6 @@ LIBVIRT_CHECK_DBUS
|
||||
LIBVIRT_CHECK_DEVMAPPER
|
||||
LIBVIRT_CHECK_DLOPEN
|
||||
LIBVIRT_CHECK_FIREWALLD
|
||||
LIBVIRT_CHECK_FIREWALLD_ZONE
|
||||
LIBVIRT_CHECK_FUSE
|
||||
LIBVIRT_CHECK_GLUSTER
|
||||
LIBVIRT_CHECK_GNUTLS
|
||||
@@ -327,49 +322,17 @@ AC_CHECK_SIZEOF([long])
|
||||
|
||||
dnl Availability of various common functions (non-fatal if missing),
|
||||
dnl and various less common threadsafe functions
|
||||
AC_CHECK_FUNCS_ONCE([\
|
||||
cfmakeraw \
|
||||
fallocate \
|
||||
geteuid \
|
||||
getgid \
|
||||
getifaddrs \
|
||||
getmntent_r \
|
||||
getpwuid_r \
|
||||
getrlimit \
|
||||
getuid \
|
||||
if_indextoname \
|
||||
mmap \
|
||||
newlocale \
|
||||
posix_fallocate \
|
||||
posix_memalign \
|
||||
prlimit \
|
||||
sched_getaffinity \
|
||||
sched_setscheduler \
|
||||
setgroups \
|
||||
setns \
|
||||
setrlimit \
|
||||
symlink \
|
||||
sysctlbyname \
|
||||
unshare \
|
||||
])
|
||||
AC_CHECK_FUNCS_ONCE([cfmakeraw fallocate geteuid getgid getgrnam_r \
|
||||
getmntent_r getpwuid_r getrlimit getuid if_indextoname kill mmap \
|
||||
newlocale posix_fallocate posix_memalign prlimit regexec \
|
||||
sched_getaffinity setgroups setns setrlimit symlink sysctlbyname \
|
||||
getifaddrs sched_setscheduler unshare])
|
||||
|
||||
dnl Availability of various common headers (non-fatal if missing).
|
||||
AC_CHECK_HEADERS([\
|
||||
ifaddrs.h \
|
||||
libtasn1.h \
|
||||
linux/magic.h \
|
||||
mntent.h \
|
||||
net/ethernet.h \
|
||||
netinet/tcp.h \
|
||||
pwd.h \
|
||||
stdarg.h \
|
||||
syslog.h \
|
||||
sys/mount.h \
|
||||
sys/syscall.h \
|
||||
sys/sysctl.h \
|
||||
sys/ucred.h \
|
||||
sys/un.h \
|
||||
])
|
||||
AC_CHECK_HEADERS([pwd.h regex.h sys/un.h \
|
||||
sys/poll.h syslog.h mntent.h net/ethernet.h linux/magic.h \
|
||||
sys/un.h sys/syscall.h sys/sysctl.h netinet/tcp.h ifaddrs.h \
|
||||
libtasn1.h sys/ucred.h sys/mount.h stdarg.h])
|
||||
dnl Check whether endian provides handy macros.
|
||||
AC_CHECK_DECLS([htole64], [], [], [[#include <endian.h>]])
|
||||
AC_CHECK_FUNCS([stat stat64 __xstat __xstat64 lstat lstat64 __lxstat __lxstat64])
|
||||
@@ -412,6 +375,19 @@ dnl
|
||||
|
||||
LIBVIRT_CHECK_EXTERNAL_PROGRAMS
|
||||
|
||||
|
||||
dnl Specific dir for HTML output ?
|
||||
LIBVIRT_ARG_WITH([HTML_DIR], [path to base html directory],
|
||||
['$(datadir)/doc'])
|
||||
LIBVIRT_ARG_WITH([HTML_SUBDIR], [directory used under html-dir],
|
||||
['$(PACKAGE)-$(VERSION)/html'])
|
||||
if test "x$with_html_subdir" != "x" ; then
|
||||
HTML_DIR="$with_html_dir/$with_html_subdir"
|
||||
else
|
||||
HTML_DIR="$with_html_dir"
|
||||
fi
|
||||
AC_SUBST([HTML_DIR])
|
||||
|
||||
dnl if --prefix is /usr, don't use /usr/var for localstatedir
|
||||
dnl or /usr/etc for sysconfdir
|
||||
dnl as this makes a lot of things break in testing situations
|
||||
@@ -437,6 +413,7 @@ LIBVIRT_DRIVER_ARG_VBOX
|
||||
LIBVIRT_DRIVER_ARG_LXC
|
||||
LIBVIRT_DRIVER_ARG_VZ
|
||||
LIBVIRT_DRIVER_ARG_BHYVE
|
||||
LIBVIRT_DRIVER_ARG_UML
|
||||
LIBVIRT_DRIVER_ARG_ESX
|
||||
LIBVIRT_DRIVER_ARG_HYPERV
|
||||
LIBVIRT_DRIVER_ARG_TEST
|
||||
@@ -455,6 +432,7 @@ LIBVIRT_DRIVER_CHECK_VBOX
|
||||
LIBVIRT_DRIVER_CHECK_LXC
|
||||
LIBVIRT_DRIVER_CHECK_VZ
|
||||
LIBVIRT_DRIVER_CHECK_BHYVE
|
||||
LIBVIRT_DRIVER_CHECK_UML
|
||||
LIBVIRT_DRIVER_CHECK_ESX
|
||||
LIBVIRT_DRIVER_CHECK_HYPERV
|
||||
LIBVIRT_DRIVER_CHECK_TEST
|
||||
@@ -612,9 +590,9 @@ if test "$with_libvirtd" = "no"; then
|
||||
with_storage_vstorage=no
|
||||
fi
|
||||
|
||||
dnl storage-fs does not work on macOS
|
||||
dnl storage-fs does not work on MacOS X
|
||||
|
||||
if test "$with_macos" = "yes"; then
|
||||
if test "$with_osx" = "yes"; then
|
||||
with_storage_fs=no
|
||||
fi
|
||||
|
||||
@@ -729,6 +707,23 @@ fi
|
||||
AC_SUBST([VIR_TEST_EXPENSIVE_DEFAULT])
|
||||
AM_CONDITIONAL([WITH_EXPENSIVE_TESTS], [test $VIR_TEST_EXPENSIVE_DEFAULT = 1])
|
||||
|
||||
LIBVIRT_ARG_ENABLE([TEST_COVERAGE], [turn on code coverage instrumentation], [no])
|
||||
case "$enable_test_coverage" in
|
||||
yes|no) ;;
|
||||
*) AC_MSG_ERROR([bad value ${enable_test_coverga} for test-coverage option]) ;;
|
||||
esac
|
||||
|
||||
if test "$enable_test_coverage" = yes; then
|
||||
save_WARN_CFLAGS=$WARN_CFLAGS
|
||||
WARN_CFLAGS=
|
||||
gl_WARN_ADD([-fprofile-arcs])
|
||||
gl_WARN_ADD([-ftest-coverage])
|
||||
COVERAGE_FLAGS=$WARN_CFLAGS
|
||||
AC_SUBST([COVERAGE_CFLAGS], [$COVERAGE_FLAGS])
|
||||
AC_SUBST([COVERAGE_LDFLAGS], [$COVERAGE_FLAGS])
|
||||
WARN_CFLAGS=$save_WARN_CFLAGS
|
||||
fi
|
||||
|
||||
LIBVIRT_ARG_ENABLE([TEST_OOM], [memory allocation failure checking], [no])
|
||||
case "$enable_test_oom" in
|
||||
yes|no) ;;
|
||||
@@ -920,6 +915,7 @@ AC_MSG_NOTICE([])
|
||||
AC_MSG_NOTICE([Drivers])
|
||||
AC_MSG_NOTICE([])
|
||||
LIBVIRT_DRIVER_RESULT_QEMU
|
||||
LIBVIRT_DRIVER_RESULT_UML
|
||||
LIBVIRT_DRIVER_RESULT_OPENVZ
|
||||
LIBVIRT_DRIVER_RESULT_VMWARE
|
||||
LIBVIRT_DRIVER_RESULT_VBOX
|
||||
@@ -968,6 +964,7 @@ LIBVIRT_RESULT_ACL
|
||||
LIBVIRT_RESULT_APPARMOR
|
||||
LIBVIRT_RESULT_ATTR
|
||||
LIBVIRT_RESULT_AUDIT
|
||||
LIBVIRT_RESULT_AVAHI
|
||||
LIBVIRT_RESULT_BASH_COMPLETION
|
||||
LIBVIRT_RESULT_BLKID
|
||||
LIBVIRT_RESULT_CAPNG
|
||||
@@ -975,7 +972,6 @@ LIBVIRT_RESULT_CURL
|
||||
LIBVIRT_RESULT_DBUS
|
||||
LIBVIRT_RESULT_DLOPEN
|
||||
LIBVIRT_RESULT_FIREWALLD
|
||||
LIBVIRT_RESULT_FIREWALLD_ZONE
|
||||
LIBVIRT_RESULT_FUSE
|
||||
LIBVIRT_RESULT_GLUSTER
|
||||
LIBVIRT_RESULT_GNUTLS
|
||||
@@ -1014,6 +1010,7 @@ LIBVIRT_WIN_RESULT_WINDRES
|
||||
AC_MSG_NOTICE([])
|
||||
AC_MSG_NOTICE([Test suite])
|
||||
AC_MSG_NOTICE([])
|
||||
AC_MSG_NOTICE([ Coverage: $enable_test_coverage])
|
||||
AC_MSG_NOTICE([ Alloc OOM: $enable_test_oom])
|
||||
AC_MSG_NOTICE([])
|
||||
AC_MSG_NOTICE([Miscellaneous])
|
||||
|
@@ -16,32 +16,26 @@
|
||||
## License along with this library. If not, see
|
||||
## <http://www.gnu.org/licenses/>.
|
||||
|
||||
HTML_DIR = $(docdir)/html
|
||||
DEVHELP_DIR=$(datadir)/gtk-doc/html/libvirt
|
||||
|
||||
modules = \
|
||||
libvirt-common \
|
||||
libvirt-domain \
|
||||
libvirt-domain-snapshot \
|
||||
libvirt-event \
|
||||
libvirt-host \
|
||||
libvirt-interface \
|
||||
libvirt-network \
|
||||
libvirt-nodedev \
|
||||
libvirt-nwfilter \
|
||||
libvirt-secret \
|
||||
libvirt-storage \
|
||||
libvirt-stream \
|
||||
virterror \
|
||||
$(NULL)
|
||||
|
||||
apihtml = \
|
||||
html/index.html \
|
||||
$(apihtml_generated)
|
||||
|
||||
apihtml_generated = \
|
||||
$(addprefix html/libvirt-,$(addsuffix .html,$(modules))) \
|
||||
$(NULL)
|
||||
html/libvirt-libvirt-common.html \
|
||||
html/libvirt-libvirt-domain.html \
|
||||
html/libvirt-libvirt-domain-snapshot.html \
|
||||
html/libvirt-libvirt-event.html \
|
||||
html/libvirt-libvirt-host.html \
|
||||
html/libvirt-libvirt-interface.html \
|
||||
html/libvirt-libvirt-network.html \
|
||||
html/libvirt-libvirt-nodedev.html \
|
||||
html/libvirt-libvirt-nwfilter.html \
|
||||
html/libvirt-libvirt-secret.html \
|
||||
html/libvirt-libvirt-storage.html \
|
||||
html/libvirt-libvirt-stream.html \
|
||||
html/libvirt-virterror.html
|
||||
|
||||
apipng = \
|
||||
html/left.png \
|
||||
@@ -53,11 +47,7 @@ devhelphtml = \
|
||||
devhelp/libvirt.devhelp \
|
||||
devhelp/index.html \
|
||||
devhelp/general.html \
|
||||
$(devhelphtml_generated)
|
||||
|
||||
devhelphtml_generated = \
|
||||
$(addprefix devhelp/libvirt-,$(addsuffix .html,$(modules))) \
|
||||
$(NULL)
|
||||
devhelp/libvirt-virterror.html
|
||||
|
||||
css = \
|
||||
generic.css \
|
||||
@@ -65,10 +55,6 @@ css = \
|
||||
mobile.css \
|
||||
main.css
|
||||
|
||||
javascript = \
|
||||
js/main.js \
|
||||
$(NULL)
|
||||
|
||||
fonts = \
|
||||
fonts/LICENSE.md \
|
||||
fonts/stylesheet.css \
|
||||
@@ -142,6 +128,10 @@ dot_html_in = \
|
||||
$(notdir $(wildcard $(srcdir)/*.html.in))
|
||||
dot_html = $(dot_html_in:%.html.in=%.html)
|
||||
|
||||
dot_php_in = $(notdir $(wildcard $(srcdir)/*.php.in))
|
||||
dot_php_code_in = $(dot_php_in:%.php.in=%.php.code.in)
|
||||
dot_php = $(dot_php_in:%.php.in=%.php)
|
||||
|
||||
xml = \
|
||||
libvirt-api.xml \
|
||||
libvirt-refs.xml
|
||||
@@ -185,7 +175,7 @@ EXTRA_DIST= \
|
||||
$(dot_html) $(dot_html_in) $(gif) $(apihtml) $(apipng) \
|
||||
$(devhelphtml) $(devhelppng) $(devhelpcss) $(devhelpxsl) \
|
||||
$(xml) $(qemu_xml) $(lxc_xml) $(admin_xml) $(fig) $(png) $(css) \
|
||||
$(javascript) $(logofiles) \
|
||||
$(logofiles) $(dot_php_in) $(dot_php_code_in) $(dot_php)\
|
||||
$(internals_html_in) $(internals_html) $(fonts) \
|
||||
aclperms.htmlinc \
|
||||
hvsupport.pl \
|
||||
@@ -202,6 +192,7 @@ MAINTAINERCLEANFILES = \
|
||||
$(addprefix $(srcdir)/,$(apihtml)) \
|
||||
$(addprefix $(srcdir)/,$(devhelphtml)) \
|
||||
$(addprefix $(srcdir)/,$(internals_html)) \
|
||||
$(addprefix $(srcdir)/,$(dot_php)) \
|
||||
$(srcdir)/hvsupport.html.in $(srcdir)/aclperms.htmlinc
|
||||
|
||||
timestamp="$(shell if test -n "$$SOURCE_DATE_EPOCH"; \
|
||||
@@ -218,7 +209,8 @@ qemu_api: $(srcdir)/libvirt-qemu-api.xml $(srcdir)/libvirt-qemu-refs.xml
|
||||
lxc_api: $(srcdir)/libvirt-lxc-api.xml $(srcdir)/libvirt-lxc-refs.xml
|
||||
admin_api: $(srcdir)/libvirt-admin-api.xml $(srcdir)/libvirt-admin-refs.xml
|
||||
|
||||
web: $(dot_html) $(internals_html) html/index.html devhelp/index.html
|
||||
web: $(dot_html) $(internals_html) html/index.html devhelp/index.html \
|
||||
$(dot_php)
|
||||
|
||||
hvsupport.html: $(srcdir)/hvsupport.html.in
|
||||
|
||||
@@ -273,6 +265,18 @@ MAINTAINERCLEANFILES += \
|
||||
$(AM_V_GEN)$(XMLLINT) --nonet --format $< > $(srcdir)/$@ \
|
||||
|| { rm $(srcdir)/$@ && exit 1; }
|
||||
|
||||
%.php.tmp: %.php.in site.xsl page.xsl
|
||||
$(AM_V_GEN)$(XSLTPROC) --stringparam pagename $(@:.tmp=) \
|
||||
--stringparam timestamp $(timestamp) --nonet \
|
||||
$(top_srcdir)/docs/site.xsl $< > $@ \
|
||||
|| { rm $@ && exit 1; }
|
||||
|
||||
%.php: %.php.tmp %.php.code.in
|
||||
$(AM_V_GEN)sed \
|
||||
-e '/<span id="php_placeholder"><\/span>/r '"$(srcdir)/$@.code.in" \
|
||||
-e /php_placeholder/d < $@.tmp > $(srcdir)/$@ \
|
||||
|| { rm $(srcdir)/$@ && exit 1; }
|
||||
|
||||
$(apihtml_generated): html/index.html
|
||||
|
||||
html/index.html: libvirt-api.xml newapi.xsl page.xsl $(APIBUILD_STAMP)
|
||||
@@ -367,9 +371,6 @@ install-data-local:
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)
|
||||
for f in $(css) $(dot_html) $(gif) $(png); do \
|
||||
$(INSTALL) -m 0644 $(srcdir)/$$f $(DESTDIR)$(HTML_DIR); done
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/js
|
||||
for f in $(javascript); do \
|
||||
$(INSTALL) -m 0644 $(srcdir)/$$f $(DESTDIR)$(HTML_DIR)/js/; done
|
||||
$(mkinstalldirs) $(DESTDIR)$(HTML_DIR)/logos
|
||||
for f in $(logofiles); do \
|
||||
$(INSTALL) -m 0644 $(srcdir)/$$f $(DESTDIR)$(HTML_DIR)/logos; done
|
||||
@@ -397,9 +398,6 @@ uninstall-local:
|
||||
for f in $(logofiles); do \
|
||||
rm -f $(DESTDIR)$(HTML_DIR)/$$f; \
|
||||
done
|
||||
for f in $(javascript); do \
|
||||
rm -f $(DESTDIR)$(HTML_DIR)/$$f; \
|
||||
done
|
||||
for h in $(apihtml); do rm -f $(DESTDIR)$(HTML_DIR)/$$h; done
|
||||
for p in $(apipng); do rm -f $(DESTDIR)$(HTML_DIR)/$$p; done
|
||||
for f in $(internals_html); do \
|
||||
|
@@ -287,119 +287,6 @@
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<h2><a id="connect_driver">Hypervisor Driver connect_driver</a></h2>
|
||||
<p>
|
||||
The <code>connect_driver</code> parameter describes the
|
||||
client's <a href="remote.html">remote Connection Driver</a>
|
||||
name based on the <a href="uri.html">URI</a> used for the
|
||||
connection.
|
||||
</p>
|
||||
<p>
|
||||
<span class="since">Since 4.1.0</span>, when calling an API
|
||||
outside the scope of the primary connection driver, the
|
||||
primary driver will attempt to open a secondary connection
|
||||
to the specific API driver in order to process the API. For
|
||||
example, when hypervisor domain processing needs to make an
|
||||
API call within the storage driver or the network filter driver
|
||||
an attempt to open a connection to the "storage" or "nwfilter"
|
||||
driver will be made. Similarly, a "storage" primary connection
|
||||
may need to create a connection to the "secret" driver in order
|
||||
to process secrets for the API. If successful, then calls to
|
||||
those API's will occur in the <code>connect_driver</code> context
|
||||
of the secondary connection driver rather than in the context of
|
||||
the primary driver. This affects the <code>connect_driver</code>
|
||||
returned from rule generation from the <code>action.loookup</code>
|
||||
function. The following table provides a list of the various
|
||||
connection drivers and the <code>connect_driver</code> name
|
||||
used by each regardless of primary or secondary connection.
|
||||
The access denied error message from libvirt will list the
|
||||
connection driver by name that denied the access.
|
||||
</p>
|
||||
|
||||
<h3><a id="object_connect_driver">Connection Driver Name</a></h3>
|
||||
<table class="acl">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Connection Driver</th>
|
||||
<th><code>connect_driver</code> name</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>bhyve</td>
|
||||
<td>bhyve</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>esx</td>
|
||||
<td>ESX</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>hyperv</td>
|
||||
<td>Hyper-V</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>interface</td>
|
||||
<td>interface</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>libxl</td>
|
||||
<td>xenlight</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>lxc</td>
|
||||
<td>LXC</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>network</td>
|
||||
<td>network</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nodedev</td>
|
||||
<td>nodedev</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nwfilter</td>
|
||||
<td>NWFilter</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>openvz</td>
|
||||
<td>OPENVZ</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>phyp</td>
|
||||
<td>PHYP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>qemu</td>
|
||||
<td>QEMU</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>secret</td>
|
||||
<td>secret</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>storage</td>
|
||||
<td>storage</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vbox</td>
|
||||
<td>VBOX</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vmware</td>
|
||||
<td>VMWARE</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>vz</td>
|
||||
<td>vz</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>xenapi</td>
|
||||
<td>XenAPI</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
|
||||
<h2><a id="user">User identity attributes</a></h2>
|
||||
|
||||
|
@@ -1003,8 +1003,6 @@ class CParser:
|
||||
# skip hidden macros
|
||||
if name in hidden_macros:
|
||||
return token
|
||||
if name[-2:] == "_H" or name[-8:] == "_H_ALLOW":
|
||||
return token
|
||||
|
||||
strValue = None
|
||||
if len(lst) == 1 and lst[0][0] == '"' and lst[0][-1] == '"':
|
||||
@@ -2117,22 +2115,12 @@ class docBuilder:
|
||||
self.modulename_file(id.header)))
|
||||
if id.info is not None:
|
||||
info = id.info
|
||||
valhex = ""
|
||||
if info[0] is not None and info[0] != '':
|
||||
try:
|
||||
val = eval(info[0])
|
||||
valhex = hex(val)
|
||||
except:
|
||||
val = info[0]
|
||||
output.write(" value='%s'" % (val))
|
||||
|
||||
if valhex != "":
|
||||
output.write(" value_hex='%s'" % (valhex))
|
||||
|
||||
m = re.match("\(?1<<(\d+)\)?", info[0])
|
||||
if m:
|
||||
output.write(" value_bitshift='%s'" % (m.group(1)))
|
||||
|
||||
if info[2] is not None and info[2] != '':
|
||||
output.write(" type='%s'" % info[2])
|
||||
if info[1] is not None and info[1] != '':
|
||||
@@ -2282,7 +2270,7 @@ class docBuilder:
|
||||
output.write(" <file name='%s'>\n" % (module))
|
||||
dict = self.headers[file]
|
||||
if dict.info is not None:
|
||||
for data in ('Summary', 'Description'):
|
||||
for data in ('Summary', 'Description', 'Author'):
|
||||
try:
|
||||
output.write(" <%s>%s</%s>\n" % (
|
||||
data.lower(),
|
||||
|
@@ -30,6 +30,26 @@
|
||||
<img src="logos/logo-square-powered-256.png" alt="libvirt powered"/>
|
||||
</p>
|
||||
|
||||
<h2><a id="clientserver">Client/Server applications</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="http://archipelproject.org">Archipel</a></dt>
|
||||
<dd>
|
||||
Archipel is a libvirt-based solution to manage and supervise virtual
|
||||
machines. It uses XMPP for all communication. There is no web
|
||||
service or custom protocol. You just need at least one XMPP server,
|
||||
like eJabberd, to start playing with it. This allows Archipel to
|
||||
work completely real time. You never have to refresh the user
|
||||
interface, you'll be notified as soon as something happens. You can
|
||||
even use your favorite chat clients to command your infrastructure.
|
||||
</dd>
|
||||
<dd>
|
||||
Isn't it great to be able to open a chat conversation with your
|
||||
virtual machine and say things like "How are you today?" or "Hey,
|
||||
please reboot"?
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="command">Command line tools</a></h2>
|
||||
|
||||
<dl>
|
||||
@@ -99,12 +119,6 @@
|
||||
machines. It is a command line tool for developers that makes it very
|
||||
fast and easy to deploy and re-deploy an environment of vm's.
|
||||
</dd>
|
||||
<dt><a href="https://github.com/virt-lightning/virt-lightning">virt-lightning</a></dt>
|
||||
<dd>
|
||||
Virt-Lightning uses libvirt, cloud-init and libguestfs to allow anyone
|
||||
to quickly start a new VM. Very much like a container CLI, but with a
|
||||
virtual machine.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="configmgmt">Configuration Management</a></h2>
|
||||
@@ -128,7 +142,7 @@
|
||||
<h2><a id="continuousintegration">Continuous Integration</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="http://docs.buildbot.net/latest/manual/configuration/workers-libvirt.html">BuildBot</a></dt>
|
||||
<dt><a href="https://buildbot.net/buildbot/docs/current/Libvirt.html">BuildBot</a></dt>
|
||||
<dd>
|
||||
BuildBot is a system to automate the compile/test cycle required
|
||||
by most software projects. CVS commits trigger new builds, run on
|
||||
@@ -359,6 +373,12 @@
|
||||
metrics. It supports pCPU, vCPU, memory, block device, network interface,
|
||||
and performance event metrics for each virtual guest.
|
||||
</dd>
|
||||
<dt><a href="https://community.zenoss.org/docs/DOC-4687">Zenoss</a></dt>
|
||||
<dd>
|
||||
The Zenoss libvirt Zenpack adds support for monitoring virtualization
|
||||
servers. It has been tested with KVM, QEMU, VMware ESX, and VMware
|
||||
GSX.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="provisioning">Provisioning</a></h2>
|
||||
@@ -463,6 +483,17 @@
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="mobile">Mobile applications</a></h2>
|
||||
|
||||
<dl>
|
||||
<dt><a href="https://market.android.com/details?id=vm.manager">VM Manager</a></dt>
|
||||
<dd>
|
||||
VM Manager is VM (libvirt) manager (over SSH) application. VM Manager
|
||||
is an application for libvirt VM / Domain management over SSH.
|
||||
Please keep in mind that this software is under heavy development.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h2><a id="other">Other</a></h2>
|
||||
|
||||
<dl>
|
||||
|
@@ -184,29 +184,15 @@ Default policy will still allow any application to connect to the RO socket.
|
||||
</p>
|
||||
<p>
|
||||
The default policy can be overridden by creating a new policy file in the
|
||||
<code>/etc/polkit-1/rules.d</code> directory. Information on the options
|
||||
available can be found by reading the <code>polkit(8)</code> man page. The
|
||||
two libvirt actions are named <code>org.libvirt.unix.manage</code> for full
|
||||
management access, and <code>org.libvirt.unix.monitor</code> for read-only
|
||||
access.
|
||||
</p>
|
||||
<p>
|
||||
As an example, creating <code>/etc/polkit-1/rules.d/80-libvirt-manage.rules</code>
|
||||
with the following gives the user <code>fred</code> full management access
|
||||
when accessing from an active local session:
|
||||
</p>
|
||||
<pre>polkit.addRule(function(action, subject) {
|
||||
if (action.id == "org.libvirt.unix.manage" &&
|
||||
subject.local && subject.active && subject.user == "fred") {
|
||||
return polkit.Result.YES;
|
||||
}
|
||||
});</pre>
|
||||
<p>
|
||||
Older versions of PolicyKit used policy files ending with .pkla in the
|
||||
local override directory <code>/etc/polkit-1/localauthority/50-local.d/</code>.
|
||||
Compatibility with this older format is provided by <a
|
||||
href="https://pagure.io/polkit-pkla-compat">polkit-pkla-compat</a>. As an
|
||||
example, this gives the user <code>fred</code> full management access:
|
||||
Policy files should have a unique name ending with .pkla. Using reverse DNS
|
||||
naming works well. Information on the options available can be found by
|
||||
reading the pklocalauthority man page. The two libvirt daemon actions
|
||||
available are named <code>org.libvirt.unix.manage</code> for full management
|
||||
access, and <code>org.libvirt.unix.monitor</code> for read-only access.
|
||||
</p>
|
||||
<p>
|
||||
As an example, this gives the user <code>fred</code> full management access:
|
||||
</p>
|
||||
<pre>[Allow fred libvirt management permissions]
|
||||
Identity=unix-user:fred
|
||||
@@ -214,6 +200,10 @@ Action=org.libvirt.unix.manage
|
||||
ResultAny=yes
|
||||
ResultInactive=yes
|
||||
ResultActive=yes</pre>
|
||||
<p>
|
||||
Further examples of PolicyKit setup can be found on the
|
||||
<a href="http://wiki.libvirt.org/page/SSHPolicyKitSetup">wiki page</a>.
|
||||
</p>
|
||||
<h2><a id="ACL_server_sasl">SASL pluggable authentication</a></h2>
|
||||
|
||||
<p>
|
||||
|
@@ -72,6 +72,7 @@
|
||||
<xsl:if test="deprecated">
|
||||
<p> WARNING: this module is deprecated !</p>
|
||||
</xsl:if>
|
||||
<p>Author(s): <xsl:value-of select="author"/></p>
|
||||
<div class="refsynopsisdiv">
|
||||
<h2>Synopsis</h2>
|
||||
<pre class="synopsis">
|
||||
|
@@ -565,6 +565,10 @@ by a Linux instance. The library aim at providing long term stable C API
|
||||
initially for the <a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.html">Xen
|
||||
paravirtualization</a> but should be able to integrate other virtualization
|
||||
mechanisms if needed.</p>
|
||||
<p> If you get lost searching for some specific API use, try
|
||||
<a href="https://libvirt.org/search.php">the online search
|
||||
engine</a> hosted on <a href="https://libvirt.org/">libvirt.org</a>
|
||||
it indexes the project page, the APIs as well as the mailing-list archives. </p>
|
||||
</body>
|
||||
</html>
|
||||
</xsl:document>
|
||||
|
@@ -72,13 +72,11 @@
|
||||
<dd>Description of the XML schemas for
|
||||
<a href="formatdomain.html">domains</a>,
|
||||
<a href="formatnetwork.html">networks</a>,
|
||||
<a href="formatnetworkport.html">network ports</a>,
|
||||
<a href="formatnwfilter.html">network filtering</a>,
|
||||
<a href="formatstorage.html">storage</a>,
|
||||
<a href="formatstorageencryption.html">storage encryption</a>,
|
||||
<a href="formatcaps.html">capabilities</a>,
|
||||
<a href="formatdomaincaps.html">domain capabilities</a>,
|
||||
<a href="formatstoragecaps.html">storage pool capabilities</a>,
|
||||
<a href="formatnode.html">node devices</a>,
|
||||
<a href="formatsecret.html">secrets</a>,
|
||||
<a href="formatsnapshot.html">snapshots</a></dd>
|
||||
|
@@ -27,7 +27,8 @@
|
||||
<tr>
|
||||
<td>libvirt</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt.git;a=summary">libvirt</a>
|
||||
@@ -47,7 +48,8 @@
|
||||
<tr>
|
||||
<td>C#</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/csharp/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/csharp/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/csharp/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-csharp.git;a=summary">libvirt</a>
|
||||
@@ -61,7 +63,8 @@
|
||||
<tr>
|
||||
<td>Go</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/go/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/go/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/go/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-go.git;a=summary">libvirt</a>
|
||||
@@ -77,7 +80,8 @@
|
||||
<tr>
|
||||
<td>Java</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/java/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/java/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/java/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-java.git;a=summary">libvirt</a>
|
||||
@@ -91,7 +95,8 @@
|
||||
<tr>
|
||||
<td>OCaml</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/ocaml/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/ocaml/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/ocaml/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-ocaml.git;a=summary">libvirt</a>
|
||||
@@ -105,7 +110,7 @@
|
||||
<tr>
|
||||
<td>Perl (Sys::Virt)</td>
|
||||
<td>
|
||||
<a href="https://metacpan.org/release/Sys-Virt/">cpan</a>
|
||||
<a href="http://search.cpan.org/dist/Sys-Virt/">cpan</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-perl.git;a=summary">libvirt</a>
|
||||
@@ -115,14 +120,15 @@
|
||||
<a href="https://github.com/libvirt/libvirt-perl">github</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://metacpan.org/release/Sys-Virt/">api ref</a>
|
||||
<a href="http://search.cpan.org/dist/Sys-Virt/">api ref</a>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-perl.git;a=blob;f=Changes;hb=HEAD">changes</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>PHP</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/php/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/php/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/php/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-php.git;a=summary">libvirt</a>
|
||||
@@ -136,7 +142,8 @@
|
||||
<tr>
|
||||
<td>Python</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/python/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/python/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/python/">https</a>
|
||||
<a href="https://pypi.python.org/pypi/libvirt-python">pypi</a>
|
||||
</td>
|
||||
<td>
|
||||
@@ -151,7 +158,8 @@
|
||||
<tr>
|
||||
<td>Ruby</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/ruby/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/ruby/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/ruby/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=ruby-libvirt.git;a=summary">libvirt</a>
|
||||
@@ -165,7 +173,8 @@
|
||||
<tr>
|
||||
<td>Rust</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/rust/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/rust/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/rust/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-rust.git;a=summary">libvirt</a>
|
||||
@@ -182,7 +191,8 @@
|
||||
<tr>
|
||||
<td>GLib / GConfig / GObject</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/glib/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/glib/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/glib/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-glib.git;a=summary">libvirt</a>
|
||||
@@ -196,7 +206,8 @@
|
||||
<tr>
|
||||
<td>Go XML</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/go/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/go/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/go/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-go-xml.git;a=summary">libvirt</a>
|
||||
@@ -212,7 +223,8 @@
|
||||
<tr>
|
||||
<td>D-Bus</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/dbus/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/dbus/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/dbus/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-dbus.git;a=summary">libvirt</a>
|
||||
@@ -226,7 +238,8 @@
|
||||
<tr>
|
||||
<td>Console Proxy</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/consoleproxy/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/consoleproxy/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/consoleproxy/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-console-proxy.git;a=summary">libvirt</a>
|
||||
@@ -240,7 +253,8 @@
|
||||
<tr>
|
||||
<td>CIM provider</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/CIM/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/CIM/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/CIM/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-cim.git;a=summary">libvirt</a>
|
||||
@@ -254,7 +268,8 @@
|
||||
<tr>
|
||||
<td>CIM utils</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/CIM/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/CIM/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/CIM/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libcmpiutil.git;a=summary">libvirt</a>
|
||||
@@ -268,7 +283,8 @@
|
||||
<tr>
|
||||
<td>SNMP</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/snmp/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/snmp/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/snmp/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-snmp.git;a=summary">libvirt</a>
|
||||
@@ -282,7 +298,8 @@
|
||||
<tr>
|
||||
<td>Application Sandbox</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/sandbox/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/sandbox/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/sandbox/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-sandbox.git;a=summary">libvirt</a>
|
||||
@@ -299,7 +316,8 @@
|
||||
<tr>
|
||||
<td>TCK</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/sources/tck/">libvirt</a>
|
||||
<a href="ftp://libvirt.org/libvirt/tck/">ftp</a>
|
||||
<a href="https://libvirt.org/sources/tck/">https</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://libvirt.org/git/?p=libvirt-tck.git;a=summary">libvirt</a>
|
||||
@@ -404,11 +422,14 @@
|
||||
|
||||
<p>
|
||||
Most modules have releases made available for download on the project
|
||||
site via HTTPS. Some modules are instead made available at alternative
|
||||
locations, for example, the Perl binding is made available only on CPAN.
|
||||
site, via FTP, HTTP or HTTPS. Some modules are instead made available
|
||||
at alternative locations, for example, the Perl binding is made
|
||||
available only on CPAN.
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li><a href="ftp://libvirt.org/libvirt/">libvirt.org FTP server</a></li>
|
||||
<li><a href="https://libvirt.org/sources/">libvirt.org HTTP server</a></li>
|
||||
<li><a href="https://libvirt.org/sources/">libvirt.org HTTPS server</a></li>
|
||||
</ul>
|
||||
|
||||
|
@@ -6,7 +6,7 @@
|
||||
|
||||
<ul>
|
||||
<li><a href="#hypervisor">Hypervisor drivers</a></li>
|
||||
<li><a href="storage.html">Storage drivers</a></li>
|
||||
<li><a href="#storage">Storage drivers</a></li>
|
||||
<li><a href="drvnodedev.html">Node device driver</a></li>
|
||||
</ul>
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
<li><strong><a href="drvopenvz.html">OpenVZ</a></strong></li>
|
||||
<li><strong><a href="drvqemu.html">QEMU</a></strong></li>
|
||||
<li><strong><a href="drvtest.html">Test</a></strong> - Used for testing</li>
|
||||
<li><strong><a href="drvuml.html">UML</a></strong> - User Mode Linux</li>
|
||||
<li><strong><a href="drvvbox.html">VirtualBox</a></strong></li>
|
||||
<li><strong><a href="drvesx.html">VMware ESX</a></strong></li>
|
||||
<li><strong><a href="drvvmware.html">VMware Workstation/Player</a></strong></li>
|
||||
@@ -39,5 +40,19 @@
|
||||
<li><strong><a href="drvbhyve.html">Bhyve</a></strong> - The BSD Hypervisor</li>
|
||||
</ul>
|
||||
|
||||
<h2><a id="storage">Storage drivers</a></h2>
|
||||
|
||||
<ul>
|
||||
<li><strong><a href="storage.html#StorageBackendDir">Directory backend</a></strong></li>
|
||||
<li><strong><a href="storage.html#StorageBackendFS">Local filesystem backend</a></strong></li>
|
||||
<li><strong><a href="storage.html#StorageBackendNetFS">Network filesystem backend</a></strong></li>
|
||||
<li><strong><a href="storage.html#StorageBackendLogical">Logical Volume Manager (LVM) backend</a></strong></li>
|
||||
<li><strong><a href="storage.html#StorageBackendDisk">Disk backend</a></strong></li>
|
||||
<li><strong><a href="storage.html#StorageBackendISCSI">iSCSI backend</a></strong></li>
|
||||
<li><strong><a href="storage.html#StorageBackendSCSI">SCSI backend</a></strong></li>
|
||||
<li><strong><a href="storage.html#StorageBackendMultipath">Multipath backend</a></strong></li>
|
||||
<li><strong><a href="storage.html#StorageBackendRBD">RBD (RADOS Block Device) backend</a></strong></li>
|
||||
<li><strong><a href="storage.html#StorageBackendSheepdog">Sheepdog backend</a></strong></li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -462,32 +462,5 @@ Example:</p>
|
||||
</domain>
|
||||
</pre>
|
||||
|
||||
<h3><a id="bhyvecommand">Pass-through of arbitrary bhyve commands</a></h3>
|
||||
|
||||
<p><span class="since">Since 5.1.0</span>, it's possible to pass additional command-line
|
||||
arguments to the bhyve process when starting the domain using the
|
||||
<code><bhyve:commandline></code> element under <code>domain</code>.
|
||||
To supply an argument, use the element <code><bhyve:arg></code> with
|
||||
the attribute <code>value</code> set to additional argument to be added.
|
||||
The arg element may be repeated multiple times. To use this XML addition, it is necessary
|
||||
to issue an XML namespace request (the special <code>xmlns:<i>name</i></code> attribute)
|
||||
that pulls in <code>http://libvirt.org/schemas/domain/bhyve/1.0</code>;
|
||||
typically, the namespace is given the name of <code>bhyve</code>.
|
||||
</p>
|
||||
<p>Example:</p>
|
||||
<pre>
|
||||
<domain type="bhyve" xmlns:bhyve="http://libvirt.org/schemas/domain/bhyve/1.0">
|
||||
...
|
||||
<bhyve:commandline>
|
||||
<bhyve:arg value='-somebhyvearg'/>
|
||||
</bhyve:commandline>
|
||||
</domain>
|
||||
</pre>
|
||||
|
||||
<p>Note that these extensions are for testing and development purposes only.
|
||||
They are <b>unsupported</b>, using them may result in inconsistent state,
|
||||
and upgrading either bhyve or libvirtd maybe break behavior of a domain that
|
||||
was relying on a specific commands pass-through.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -8,7 +8,7 @@
|
||||
|
||||
<p>
|
||||
The libvirt KVM/QEMU driver can manage any QEMU emulator from
|
||||
version 1.5.0 or later.
|
||||
version 0.12.0 or later.
|
||||
</p>
|
||||
|
||||
<h2><a id="project">Project Links</a></h2>
|
||||
@@ -395,8 +395,9 @@ chmod o+x /path/to/directory
|
||||
<pre>
|
||||
/dev/null, /dev/full, /dev/zero,
|
||||
/dev/random, /dev/urandom,
|
||||
/dev/ptmx, /dev/kvm,
|
||||
/dev/rtc, /dev/hpet
|
||||
/dev/ptmx, /dev/kvm, /dev/kqemu,
|
||||
/dev/rtc, /dev/hpet, /dev/net/tun,
|
||||
/dev/sev
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
@@ -426,10 +427,6 @@ mount -t cgroup none /dev/cgroup -o devices
|
||||
|
||||
<h3><a id="xmlimport">Converting from QEMU args to domain XML</a></h3>
|
||||
|
||||
<p>
|
||||
<b>Note:</b> this operation is <span class="removed"> deleted as of
|
||||
5.5.0</span> and will return an error.
|
||||
</p>
|
||||
<p>
|
||||
The <code>virsh domxml-from-native</code> provides a way to
|
||||
convert an existing set of QEMU args into a guest description
|
||||
@@ -443,17 +440,82 @@ mount -t cgroup none /dev/cgroup -o devices
|
||||
examples) or by manually crafting XML to pass to virsh.
|
||||
</p>
|
||||
|
||||
<pre>$ cat > demo.args <<EOF
|
||||
LC_ALL=C PATH=/bin HOME=/home/test USER=test \
|
||||
LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 \
|
||||
-nographic -monitor pty -no-acpi -boot c -hda \
|
||||
/dev/HostVG/QEMUGuest1 -net none -serial none \
|
||||
-parallel none -usb
|
||||
EOF
|
||||
|
||||
$ virsh domxml-from-native qemu-argv demo.args
|
||||
<domain type='qemu'>
|
||||
<uuid>00000000-0000-0000-0000-000000000000</uuid>
|
||||
<memory>219136</memory>
|
||||
<currentMemory>219136</currentMemory>
|
||||
<vcpu>1</vcpu>
|
||||
<os>
|
||||
<type arch='i686' machine='pc'>hvm</type>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu</emulator>
|
||||
<disk type='block' device='disk'>
|
||||
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
<target dev='hda' bus='ide'/>
|
||||
</disk>
|
||||
</devices>
|
||||
</domain>
|
||||
</pre>
|
||||
|
||||
<p>NB, don't include the literal \ in the args, put everything on one line</p>
|
||||
|
||||
<h3><a id="xmlexport">Converting from domain XML to QEMU args</a></h3>
|
||||
|
||||
<p>
|
||||
The <code>virsh domxml-to-native</code> provides a way to convert a
|
||||
guest description using libvirt Domain XML, into a set of QEMU args
|
||||
that can be run manually. Note that currently the command line formatted
|
||||
by libvirt is no longer suited for manually running qemu as the
|
||||
configuration expects various resources and open file descriptors passed
|
||||
to the process which are usually prepared by libvirtd.
|
||||
that can be run manually.
|
||||
</p>
|
||||
|
||||
<pre>$ cat > demo.xml <<EOF
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest1</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory>219200</memory>
|
||||
<currentMemory>219200</currentMemory>
|
||||
<vcpu>1</vcpu>
|
||||
<os>
|
||||
<type arch='i686' machine='pc'>hvm</type>
|
||||
<boot dev='hd'/>
|
||||
</os>
|
||||
<clock offset='utc'/>
|
||||
<on_poweroff>destroy</on_poweroff>
|
||||
<on_reboot>restart</on_reboot>
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/bin/qemu</emulator>
|
||||
<disk type='block' device='disk'>
|
||||
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
<target dev='hda' bus='ide'/>
|
||||
</disk>
|
||||
</devices>
|
||||
</domain>
|
||||
EOF
|
||||
|
||||
$ virsh domxml-to-native qemu-argv demo.xml
|
||||
LC_ALL=C PATH=/usr/bin:/bin HOME=/home/test \
|
||||
USER=test LOGNAME=test /usr/bin/qemu -S -M pc \
|
||||
-no-kqemu -m 214 -smp 1 -name QEMUGuest1 -nographic \
|
||||
-monitor pty -no-acpi -boot c -drive \
|
||||
file=/dev/HostVG/QEMUGuest1,if=ide,index=0 -net none \
|
||||
-serial none -parallel none -usb
|
||||
</pre>
|
||||
|
||||
<h2><a id="qemucommand">Pass-through of arbitrary qemu
|
||||
commands</a></h2>
|
||||
|
||||
@@ -519,36 +581,6 @@ mount -t cgroup none /dev/cgroup -o devices
|
||||
<qemu:env name='QEMU_ENV' value='VAL'/>
|
||||
</qemu:commandline>
|
||||
</domain>
|
||||
</pre>
|
||||
|
||||
<h2><a id="xmlnsfeatures">QEMU feature configuration for testing</a></h2>
|
||||
|
||||
<p>
|
||||
In some cases e.g. when developing a new feature or for testing it may
|
||||
be required to control a given qemu feature (or qemu capability) to test
|
||||
it before it's complete or disable it for debugging purposes.
|
||||
<span class="since">Since 5.5.0</span> it's possible to use the same
|
||||
special qemu namespace as above
|
||||
(<code>http://libvirt.org/schemas/domain/qemu/1.0</code>) and use
|
||||
<code><qemu:capabilities></code> element to add
|
||||
(<code><qemu:add capability="capname"/></code>) or remove
|
||||
(<code><qemu:del capability="capname"/></code>) capability bits.
|
||||
The naming of the feature bits is the same libvirt uses in the status
|
||||
XML. Note that this feature is meant for experiments only and should
|
||||
_not_ be used in production.
|
||||
</p>
|
||||
|
||||
<p>Example:</p><pre>
|
||||
<domain type='qemu' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
|
||||
<name>testvm</name>
|
||||
|
||||
[...]
|
||||
|
||||
<qemu:capabilities>
|
||||
<qemu:add capability='blockdev'/>
|
||||
<qemu:del capability='drive'/>
|
||||
</qemu:capabilities>
|
||||
</domain>
|
||||
</pre>
|
||||
|
||||
<h2><a id="xmlconfig">Example domain XML config</a></h2>
|
||||
|
93
docs/drvuml.html.in
Normal file
93
docs/drvuml.html.in
Normal file
@@ -0,0 +1,93 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>User Mode Linux driver</h1>
|
||||
|
||||
<p>
|
||||
The UML driver for libvirt allows use and management of paravirtualized
|
||||
guests built for User Mode Linux. UML requires no special support in
|
||||
the host kernel, so can be used by any user of any linux system, provided
|
||||
they have enough free RAM for their guest's needs, though there are
|
||||
certain restrictions on network connectivity unless the administrator
|
||||
has pre-created TAP devices.
|
||||
</p>
|
||||
|
||||
<h2><a id="project">Project Links</a></h2>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
The <a href="http://user-mode-linux.sourceforge.net/">User
|
||||
Mode Linux</a> paravirtualized kernel
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>Connections to UML driver</h2>
|
||||
|
||||
<p>
|
||||
The libvirt UML driver follows the QEMU driver in providing two
|
||||
types of connection. There is one privileged instance per host,
|
||||
which runs as root. This is called the "system" instance, and allows
|
||||
full use of all host resources. Then, there is a per-user unprivileged
|
||||
"session", instance. This has more restricted capabilities, and may
|
||||
require the host administrator to setup certain resources ahead of
|
||||
time to allow full integration with the network. Example connection
|
||||
URIs are
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
uml:///session (local access to per-user instance)
|
||||
uml+unix:///session (local access to per-user instance)
|
||||
|
||||
uml:///system (local access to system instance)
|
||||
uml+unix:///system (local access to system instance)
|
||||
uml://example.com/system (remote access, TLS/x509)
|
||||
uml+tcp://example.com/system (remote access, SASl/Kerberos)
|
||||
uml+ssh://root@example.com/system (remote access, SSH tunnelled)
|
||||
</pre>
|
||||
|
||||
<h2>Example XML configuration</h2>
|
||||
|
||||
<p>
|
||||
User mode Linux driver only supports directly kernel boot at
|
||||
this time. A future driver enhancement may allow a paravirt
|
||||
bootloader in a similar style to Xen's pygrub. For now though,
|
||||
the UML kernel must be stored on the host and referenced
|
||||
explicitly in the "os" element. Since UML is a paravirtualized
|
||||
technology, the kernel "type" is set to "uml"
|
||||
</p>
|
||||
|
||||
<p>
|
||||
There is not yet support for networking in the driver, but
|
||||
disks can be specified in the usual libvirt manner. The main
|
||||
variation is the target device naming scheme "ubd0", and
|
||||
bus type of "uml".
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Once booted the primary console is connected to a PTY, and
|
||||
thus accessible with "virsh console" or equivalent tools
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
<domain type='uml'>
|
||||
<name>demo</name>
|
||||
<uuid>b4433fc2-a22e-ffb3-0a3d-9c173b395800</uuid>
|
||||
<memory>500000</memory>
|
||||
<currentMemory>500000</currentMemory>
|
||||
<vcpu>1</vcpu>
|
||||
<os>
|
||||
<type arch='x86_64'>uml</type>
|
||||
<kernel>/home/berrange/linux-uml-2.6.26-x86_64</kernel>
|
||||
</os>
|
||||
<devices>
|
||||
<disk type='file' device='disk'>
|
||||
<source file='/home/berrange/FedoraCore6-AMD64-root_fs'/>
|
||||
<target dev='ubd0' bus='uml'/>
|
||||
</disk>
|
||||
<console type='pty'/>
|
||||
</devices>
|
||||
</domain>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
@@ -129,44 +129,6 @@ MASQUERADE all -- * * 192.168.122.0/24 !192.168.122.0/24</pre>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3><a id="fw-firewalld-and-virtual-network-driver">firewalld and the virtual network driver</a>
|
||||
</h3>
|
||||
<p>
|
||||
If <a href="https://firewalld.org">firewalld</a> is active on
|
||||
the host, libvirt will attempt to place the bridge interface of
|
||||
a libvirt virtual network into the firewalld zone named
|
||||
"libvirt" (thus making all guest->host traffic on that network
|
||||
subject to the rules of the "libvirt" zone). This is done
|
||||
because, if firewalld is using its nftables backend (available
|
||||
since firewalld 0.6.0) the default firewalld zone (which would
|
||||
be used if libvirt didn't explicitly set the zone) prevents
|
||||
forwarding traffic from guests through the bridge, as well as
|
||||
preventing DHCP, DNS, and most other traffic from guests to
|
||||
host. The zone named "libvirt" is installed into the firewalld
|
||||
configuration by libvirt (not by firewalld), and allows
|
||||
forwarded traffic through the bridge as well as DHCP, DNS, TFTP,
|
||||
and SSH traffic to the host - depending on firewalld's backend
|
||||
this will be implemented via either iptables or nftables
|
||||
rules. libvirt's own rules outlined above will *always* be
|
||||
iptables rules regardless of which backend is in use by
|
||||
firewalld.
|
||||
</p>
|
||||
<p>
|
||||
NB: It is possible to manually set the firewalld zone for a
|
||||
network's interface with the "zone" attribute of the network's
|
||||
"bridge" element.
|
||||
</p>
|
||||
<p>
|
||||
NB: Prior to libvirt 5.1.0, the firewalld "libvirt" zone did not
|
||||
exist, and prior to firewalld 0.7.0 a feature crucial to making
|
||||
the "libvirt" zone operate properly (rich rule priority
|
||||
settings) was not implemented in firewalld. In cases where one
|
||||
or the other of the two packages is missing the necessary
|
||||
functionality, it's still possible to have functional guest
|
||||
networking by setting the firewalld backend to "iptables" (in
|
||||
firewalld prior to 0.6.0, this was the only backend available).
|
||||
</p>
|
||||
|
||||
<h3><a id="fw-network-filter-driver">The network filter driver</a>
|
||||
</h3>
|
||||
<p>This driver provides a fully configurable network filtering capability
|
||||
|
@@ -21,7 +21,6 @@
|
||||
<li><a href="formatstorageencryption.html">Storage encryption</a></li>
|
||||
<li><a href="formatcaps.html">Capabilities</a></li>
|
||||
<li><a href="formatdomaincaps.html">Domain capabilities</a></li>
|
||||
<li><a href="formatstoragecaps.html">Storage Pool capabilities</a></li>
|
||||
<li><a href="formatnode.html">Node devices</a></li>
|
||||
<li><a href="formatsecret.html">Secrets</a></li>
|
||||
<li><a href="formatsnapshot.html">Snapshots</a></li>
|
||||
|
@@ -74,19 +74,19 @@
|
||||
is able to run. Possible values are:
|
||||
<dl>
|
||||
<dt><code>xen</code></dt>
|
||||
<dd>for XEN PV</dd>
|
||||
<dd>for XEN</dd>
|
||||
|
||||
<dt><code>linux</code></dt>
|
||||
<dd>legacy alias for <code>xen</code></dd>
|
||||
|
||||
<dt><code>xenpvh</code></dt>
|
||||
<dd>for XEN PVH</dd>
|
||||
|
||||
<dt><code>hvm</code></dt>
|
||||
<dd>Unmodified operating system</dd>
|
||||
|
||||
<dt><code>exe</code></dt>
|
||||
<dd>Container based virtualization</dd>
|
||||
|
||||
<dt><code>uml</code></dt>
|
||||
<dd>User Mode Linux</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
|
||||
@@ -104,8 +104,8 @@
|
||||
<dt><code>machine</code></dt><dd>Machine type, for use in
|
||||
<a href="formatdomain.html#attributeOSTypeMachine">machine</a>
|
||||
attribute of os/type element in domain XML. For example Xen
|
||||
supports <code>xenfv</code> for HVM, <code>xenpv</code> for
|
||||
PV, or <code>xenpvh</code> for PVH.</dd>
|
||||
supports <code>xenfv</code> for HVM or <code>xenpv</code> for
|
||||
PV.</dd>
|
||||
<dt><code>domain</code></dt><dd>The <code>type</code> attribute of
|
||||
this element specifies the type of hypervisor required to run the
|
||||
domain. Use in <a href="formatdomain.html#attributeDomainType">type</a>
|
||||
|
@@ -22,7 +22,7 @@
|
||||
<a id="attributeDomainType"><code>type</code></a>
|
||||
specifies the hypervisor used for running
|
||||
the domain. The allowed values are driver specific, but
|
||||
include "xen", "kvm", "qemu" and "lxc". The
|
||||
include "xen", "kvm", "qemu", "lxc" and "kqemu". The
|
||||
second attribute is <code>id</code> which is a unique
|
||||
integer identifier for the running guest machine. Inactive
|
||||
machines have no id value.
|
||||
@@ -128,7 +128,7 @@
|
||||
|
||||
<pre>
|
||||
...
|
||||
<os firmware='efi'>
|
||||
<os>
|
||||
<type>hvm</type>
|
||||
<loader readonly='yes' secure='no' type='rom'>/usr/lib/xen/boot/hvmloader</loader>
|
||||
<nvram template='/usr/share/OVMF/OVMF_VARS.fd'>/var/lib/libvirt/nvram/guest_VARS.fd</nvram>
|
||||
@@ -141,29 +141,6 @@
|
||||
...</pre>
|
||||
|
||||
<dl>
|
||||
<dt><code>firmware</code></dt>
|
||||
<dd>The <code>firmware</code> attribute allows management
|
||||
applications to automatically fill <code><loader/></code>
|
||||
and <code><nvram/></code> elements and possibly enable
|
||||
some features required by selected firmware. Accepted values are
|
||||
<code>bios</code> and <code>efi</code>.<br/>
|
||||
The selection process scans for files describing installed
|
||||
firmware images in specified location and uses the most specific
|
||||
one which fulfils domain requirements. The locations in order of
|
||||
preference (from generic to most specific one) are:
|
||||
<ul>
|
||||
<li><code>/usr/share/qemu/firmware</code></li>
|
||||
<li><code>/etc/qemu/firmware</code></li>
|
||||
<li><code>$XDG_CONFIG_HOME/qemu/firmware</code></li>
|
||||
</ul>
|
||||
For more information refer to firmware metadata specification as
|
||||
described in <code>docs/interop/firmware.json</code> in QEMU
|
||||
repository. Regular users do not need to bother.
|
||||
<span class="since">Since 5.2.0 (QEMU and KVM only)</span><br/>
|
||||
For VMware guests, this is set to <code>efi</code> when the guest
|
||||
uses UEFI, and it is not set when using BIOS.
|
||||
<span class="since">Since 5.3.0 (VMware ESX and Workstation/Player)</span>
|
||||
</dd>
|
||||
<dt><code>type</code></dt>
|
||||
<dd>The content of the <code>type</code> element specifies the
|
||||
type of operating system to be booted in the virtual machine.
|
||||
@@ -782,12 +759,6 @@
|
||||
<cachetune vcpus='0-3'>
|
||||
<cache id='0' level='3' type='both' size='3' unit='MiB'/>
|
||||
<cache id='1' level='3' type='both' size='3' unit='MiB'/>
|
||||
<monitor level='3' vcpus='1'/>
|
||||
<monitor level='3' vcpus='0-3'/>
|
||||
</cachetune>
|
||||
<cachetune vcpus='4-5'>
|
||||
<monitor level='3' vcpus='4'/>
|
||||
<monitor level='3' vcpus='5'/>
|
||||
</cachetune>
|
||||
<memorytune vcpus='0-3'>
|
||||
<node id='0' bandwidth='60'/>
|
||||
@@ -938,22 +909,16 @@
|
||||
<span class="since">Only QEMU driver support since 2.1.0</span>
|
||||
</dd>
|
||||
|
||||
<dt><code>vcpusched</code>, <code>iothreadsched</code>
|
||||
and <code>emulatorsched</code></dt>
|
||||
<dt><code>vcpusched</code> and <code>iothreadsched</code></dt>
|
||||
<dd>
|
||||
The optional
|
||||
<code>vcpusched</code>, <code>iothreadsched</code>
|
||||
and <code>emulatorsched</code> elements specify the scheduler type
|
||||
(values <code>batch</code>, <code>idle</code>, <code>fifo</code>,
|
||||
<code>rr</code>) for particular vCPU, IOThread and emulator threads
|
||||
respecively. For <code>vcpusched</code> and <code>iothreadsched</code>
|
||||
the attributes <code>vcpus</code> and <code>iothreads</code> select
|
||||
which vCPUs/IOThreads this setting applies to, leaving them out sets the
|
||||
default. The element <code>emulatorsched</code> does not have that
|
||||
attribute. Valid <code>vcpus</code> values start at 0 through one less
|
||||
than the number of vCPU's defined for the
|
||||
domain. Valid <code>iothreads</code> values are described in
|
||||
the <code>iothreadids</code>
|
||||
The optional <code>vcpusched</code> elements specifies the scheduler
|
||||
type (values <code>batch</code>, <code>idle</code>, <code>fifo</code>,
|
||||
<code>rr</code>) for particular vCPU/IOThread threads (based on
|
||||
<code>vcpus</code> and <code>iothreads</code>, leaving out
|
||||
<code>vcpus</code>/<code>iothreads</code> sets the default). Valid
|
||||
<code>vcpus</code> values start at 0 through one less than the
|
||||
number of vCPU's defined for the domain. Valid <code>iothreads</code>
|
||||
values are described in the <code>iothreadids</code>
|
||||
<a href="#elementsIOThreadsAllocation"><code>description</code></a>.
|
||||
If no <code>iothreadids</code> are defined, then libvirt numbers
|
||||
IOThreads from 1 to the number of <code>iothreads</code> available
|
||||
@@ -962,7 +927,6 @@
|
||||
well (and is ignored for non-real-time ones). The value range
|
||||
for the priority depends on the host kernel (usually 1-99).
|
||||
<span class="since">Since 1.2.13</span>
|
||||
<code>emulatorsched</code> <span class="since">since 5.3.0</span>
|
||||
</dd>
|
||||
|
||||
<dt><code>cachetune</code><span class="since">Since 4.1.0</span></dt>
|
||||
@@ -979,8 +943,8 @@
|
||||
<dl>
|
||||
<dt><code>cache</code></dt>
|
||||
<dd>
|
||||
This optional element controls the allocation of CPU cache and has
|
||||
the following attributes:
|
||||
This element controls the allocation of CPU cache and has the
|
||||
following attributes:
|
||||
<dl>
|
||||
<dt><code>level</code></dt>
|
||||
<dd>
|
||||
@@ -1014,26 +978,6 @@
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>monitor</code><span class="since">Since 4.10.0</span></dt>
|
||||
<dd>
|
||||
The optional element <code>monitor</code> creates the cache
|
||||
monitor(s) for current cache allocation and has the following
|
||||
required attributes:
|
||||
<dl>
|
||||
<dt><code>level</code></dt>
|
||||
<dd>
|
||||
Host cache level the monitor belongs to.
|
||||
</dd>
|
||||
<dt><code>vcpus</code></dt>
|
||||
<dd>
|
||||
vCPU list the monitor applies to. A monitor's vCPU list
|
||||
can only be the member(s) of the vCPU list of the associated
|
||||
allocation. The default monitor has the same vCPU list as the
|
||||
associated allocation. For non-default monitors, overlapping
|
||||
vCPUs are not permitted.
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
|
||||
@@ -1156,7 +1100,7 @@
|
||||
</hugepages>
|
||||
<nosharepages/>
|
||||
<locked/>
|
||||
<source type="file|anonymous|memfd"/>
|
||||
<source type="file|anonymous"/>
|
||||
<access mode="shared|private"/>
|
||||
<allocation mode="immediate|ondemand"/>
|
||||
<discard/>
|
||||
@@ -1207,10 +1151,9 @@
|
||||
suitable for the specific environment at the same time to mitigate
|
||||
the risks described above. <span class="since">Since 1.0.6</span></dd>
|
||||
<dt><code>source</code></dt>
|
||||
<dd>Using the <code>type</code> attribute, it's possible to
|
||||
provide "file" to utilize file memorybacking or keep the
|
||||
default "anonymous". <span class="since">Since 4.10.0</span>,
|
||||
you may choose "memfd" backing. (QEMU/KVM only)</dd>
|
||||
<dd>Using the <code>type</code> attribute, it's possible to provide
|
||||
"file" to utilize file memorybacking or keep the default
|
||||
"anonymous".</dd>
|
||||
<dt><code>access</code></dt>
|
||||
<dd>Using the <code>mode</code> attribute, specify if the memory is
|
||||
to be "shared" or "private". This can be overridden per numa node by
|
||||
@@ -1273,9 +1216,9 @@
|
||||
<a href="#elementsMemoryBacking">memory backing</a> because your
|
||||
workload demands it, you'll have to take into account the specifics of
|
||||
your deployment and figure out a value for <code>hard_limit</code> that
|
||||
is large enough to support the memory requirements of your guest, but
|
||||
small enough to protect your host against a malicious guest locking all
|
||||
memory.</dd>
|
||||
balances the risk of your guest being killed because the limit was set
|
||||
too low and the risk of your host crashing because it cannot reclaim
|
||||
the memory used by the guest due to <code>locked</code>. Good luck!</dd>
|
||||
<dt><code>soft_limit</code></dt>
|
||||
<dd> The optional <code>soft_limit</code> element is the memory limit to
|
||||
enforce during memory contention. The units for this value are
|
||||
@@ -2038,9 +1981,6 @@
|
||||
<frequencies state='on'/>
|
||||
<reenlightenment state='on'/>
|
||||
<tlbflush state='on'/>
|
||||
<ipi state='on'/>
|
||||
<evmcs state='on'/>
|
||||
<msrs unknown='ignore'/>
|
||||
</hyperv>
|
||||
<kvm>
|
||||
<hidden state='on'/>
|
||||
@@ -2112,7 +2052,7 @@
|
||||
<tr>
|
||||
<td>relaxed</td>
|
||||
<td>Relax constraints on timers</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.0.0 (QEMU 2.0)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -2130,31 +2070,31 @@
|
||||
<tr>
|
||||
<td>vpindex</td>
|
||||
<td>Virtual processor index</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>runtime</td>
|
||||
<td>Processor time spent on running guest code and on behalf of guest code</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>synic</td>
|
||||
<td>Enable Synthetic Interrupt Controller (SyNIC)</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.6)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>stimer</td>
|
||||
<td>Enable SyNIC timers</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.6)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>reset</td>
|
||||
<td>Enable hypervisor reset</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">1.3.3 (QEMU 2.5)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -2166,33 +2106,21 @@
|
||||
<tr>
|
||||
<td>frequencies</td>
|
||||
<td>Expose frequency MSRs</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">4.7.0 (QEMU 2.12)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>reenlightenment</td>
|
||||
<td>Enable re-enlightenment notification on migration</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">4.7.0 (QEMU 3.0)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tlbflush</td>
|
||||
<td>Enable PV TLB flush support</td>
|
||||
<td>on, off</td>
|
||||
<td> on, off</td>
|
||||
<td><span class="since">4.7.0 (QEMU 3.0)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ipi</td>
|
||||
<td>Enable PV IPI support</td>
|
||||
<td>on, off</td>
|
||||
<td><span class="since">4.10.0 (QEMU 3.1)</span></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>evmcs</td>
|
||||
<td>Enable Enlightened VMCS</td>
|
||||
<td>on, off</td>
|
||||
<td><span class="since">4.10.0 (QEMU 3.1)</span></td>
|
||||
</tr>
|
||||
</table>
|
||||
</dd>
|
||||
<dt><code>pvspinlock</code></dt>
|
||||
@@ -2326,27 +2254,6 @@
|
||||
defined, the hypervisor default will be used.
|
||||
<span class="since">Since 4.6.0</span> (QEMU/KVM only)
|
||||
</dd>
|
||||
<dt><code>nested-hv</code></dt>
|
||||
<dd>Configure nested HV availability for pSeries guests. This needs to
|
||||
be enabled from the host (L0) in order to be effective; having HV
|
||||
support in the (L1) guest is very desiderable if it's planned to
|
||||
run nested (L2) guests inside it, because it will result in those
|
||||
nested guests having much better performance than they would when
|
||||
using KVM PR or TCG.
|
||||
Possible values for the <code>state</code> attribute are
|
||||
<code>on</code> and <code>off</code>. If the attribute is not
|
||||
defined, the hypervisor default will be used.
|
||||
<span class="since">Since 4.10.0</span> (QEMU/KVM only)
|
||||
</dd>
|
||||
<dt><code>msrs</code></dt>
|
||||
<dd>Some guests might require ignoring unknown
|
||||
Model Specific Registers (MSRs) reads and writes. It's possible
|
||||
to switch this by setting <code>unknown</code> attribute
|
||||
of <code>msrs</code> to <code>ignore</code>. If the attribute is
|
||||
not defined, or set to <code>fault</code>, unknown reads and writes
|
||||
will not be ignored.
|
||||
<span class="since">Since 5.1.0</span> (bhyve only)
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h3><a id="elementsTime">Time keeping</a></h3>
|
||||
@@ -2888,6 +2795,7 @@
|
||||
</source>
|
||||
<target dev='sdb' bus='scsi'/>
|
||||
</disk>
|
||||
</disk>
|
||||
<disk type='network' device='lun'>
|
||||
<driver name='qemu' type='raw'/>
|
||||
<source protocol='iscsi' name='iqn.2013-07.com.example:iscsi-nopool/0'>
|
||||
@@ -2962,17 +2870,6 @@
|
||||
<span class="since">Since 0.1.4</span>
|
||||
</p>
|
||||
</dd>
|
||||
<dt><code>model</code></dt>
|
||||
<dd>
|
||||
Indicates the emulated device model of the disk. Typically
|
||||
this is indicated solely by the <code>bus</code> property but
|
||||
for <code>bus</code> "virtio" the model can be specified further
|
||||
with "virtio-transitional", "virtio-non-transitional", or
|
||||
"virtio". See
|
||||
<a href="#elementsVirtioTransitional">Virtio transitional devices</a>
|
||||
for more details.
|
||||
<span class="since">Since 5.2.0</span>
|
||||
</dd>
|
||||
<dt><code>rawio</code></dt>
|
||||
<dd>
|
||||
Indicates whether the disk needs rawio capability. Valid
|
||||
@@ -3921,11 +3818,6 @@
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<span class="since">Since 5.2.0</span>, the filesystem element
|
||||
has an optional attribute <code>model</code> with supported values
|
||||
"virtio-transitional", "virtio-non-transitional", or "virtio".
|
||||
See <a href="#elementsVirtioTransitional">Virtio transitional devices</a>
|
||||
for more details.
|
||||
</dd>
|
||||
|
||||
<dt><code>driver</code></dt>
|
||||
@@ -4033,15 +3925,7 @@
|
||||
(<span class="since">since 0.9.7, requires QEMU
|
||||
0.13</span>). <code>multifunction</code> defaults to 'off',
|
||||
but should be set to 'on' for function 0 of a slot that will
|
||||
have multiple functions used.
|
||||
(<span class="since">Since 4.10.0</span>), PCI address extensions
|
||||
depending on the architecture are supported. For example, PCI
|
||||
addresses for S390 guests will have a <code>zpci</code> child
|
||||
element, with two attributes: <code>uid</code> (a hex value
|
||||
between 0x0001 and 0xffff, inclusive), and <code>fid</code> (a
|
||||
hex value between 0x00000000 and 0xffffffff, inclusive) used by
|
||||
PCI devices on S390 for User-defined Identifiers and Function
|
||||
Identifiers.<br/>
|
||||
have multiple functions used.<br/>
|
||||
<span class="since">Since 1.3.5</span>, some hypervisor
|
||||
drivers may accept an <code><address type='pci'/></code>
|
||||
element with no other attributes as an explicit request to
|
||||
@@ -4076,9 +3960,9 @@
|
||||
</dd>
|
||||
<dt><code>spapr-vio</code></dt>
|
||||
<dd>On PowerPC pseries guests, devices can be assigned to the
|
||||
SPAPR-VIO bus. It has a flat 32-bit address space; by
|
||||
SPAPR-VIO bus. It has a flat 64-bit address space; by
|
||||
convention, devices are generally assigned at a non-zero
|
||||
multiple of 0x00001000, but other addresses are valid and
|
||||
multiple of 0x1000, but other addresses are valid and
|
||||
permitted by libvirt. Each address has the following
|
||||
additional attribute: <code>reg</code> (the hex value address
|
||||
of the starting register). <span class="since">Since
|
||||
@@ -4130,63 +4014,6 @@
|
||||
<span class="since">Since 3.5.0</span>
|
||||
</p>
|
||||
|
||||
<h4><a id="elementsVirtioTransitional">Virtio transitional devices</a></h4>
|
||||
|
||||
<p>
|
||||
<span class="since">Since 5.2.0</span>, some of QEMU's virtio devices,
|
||||
when used with PCI/PCIe machine types, accept the following
|
||||
<code>model</code> values:
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>virtio-transitional</code></dt>
|
||||
<dd>This device can work both with virtio 0.9 and virtio 1.0 guest
|
||||
drivers, so it's the best choice when compatibility with older
|
||||
guest operating systems is desired. libvirt will plug the device
|
||||
into a conventional PCI slot.
|
||||
</dd>
|
||||
<dt><code>virtio-non-transitional</code></dt>
|
||||
<dd>This device can only work with virtio 1.0 guest drivers, and it's
|
||||
the recommended option unless compatibility with older guest
|
||||
operating systems is necessary. libvirt will plug the device into
|
||||
either a PCI Express slot or a conventional PCI slot based on the
|
||||
machine type, resulting in a more optimized PCI topology.
|
||||
</dd>
|
||||
<dt><code>virtio</code></dt>
|
||||
<dd>This device will work like a <code>virtio-non-transitional</code>
|
||||
device when plugged into a PCI Express slot, and like a
|
||||
<code>virtio-transitional</code> device otherwise; libvirt will
|
||||
pick one or the other based on the machine type. This is the best
|
||||
choice when compatibility with libvirt versions older than 5.2.0
|
||||
is necessary, but it's otherwise not recommended to use it.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
While the information outlined above applies to most virtio devices,
|
||||
there are a few exceptions:
|
||||
</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
for SCSI controllers, <code>virtio-scsi</code> must be used instead
|
||||
of <code>virtio</code> for backwards compatibility reasons;
|
||||
</li>
|
||||
<li>
|
||||
some devices, such as GPUs and input devices (keyboard, tablet and
|
||||
mouse), are only defined in the virtio 1.0 spec and as such don't
|
||||
have a transitional variant: the only accepted model is
|
||||
<code>virtio</code>, which will result in a non-transitional device.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
For more details see the
|
||||
<a href="https://lists.gnu.org/archive/html/qemu-devel/2018-12/msg00923.html">qemu patch posting</a> and the
|
||||
<a href="http://docs.oasis-open.org/virtio/virtio/v1.0/virtio-v1.0.html">virtio-1.0 spec</a>.
|
||||
</p>
|
||||
|
||||
|
||||
<h4><a id="elementsControllers">Controllers</a></h4>
|
||||
|
||||
<p>
|
||||
@@ -4211,7 +4038,6 @@
|
||||
<driver iothread='4'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
|
||||
</controller>
|
||||
<controller type='xenbus' maxGrantFrames='64'/>
|
||||
...
|
||||
</devices>
|
||||
...</pre>
|
||||
@@ -4235,20 +4061,12 @@
|
||||
<dd>The <code>virtio-serial</code> controller has two additional
|
||||
optional attributes <code>ports</code> and <code>vectors</code>,
|
||||
which control how many devices can be connected through the
|
||||
controller. <span class="since">Since 5.2.0</span>, it
|
||||
supports an optional attribute <code>model</code> which can
|
||||
be 'virtio', 'virtio-transitional', or 'virtio-non-transitional'. See
|
||||
<a href="#elementsVirtioTransitional">Virtio transitional devices</a>
|
||||
for more details.
|
||||
</dd>
|
||||
controller.</dd>
|
||||
<dt><code>scsi</code></dt>
|
||||
<dd>A <code>scsi</code> controller has an optional attribute
|
||||
<code>model</code>, which is one of 'auto', 'buslogic', 'ibmvscsi',
|
||||
'lsilogic', 'lsisas1068', 'lsisas1078', 'virtio-scsi',
|
||||
'vmpvscsi', 'virtio-transitional', 'virtio-non-transitional'. See
|
||||
<a href="#elementsVirtioTransitional">Virtio transitional devices</a>
|
||||
for more details.
|
||||
</dd>
|
||||
'lsilogic', 'lsisas1068', 'lsisas1078', 'virtio-scsi' or
|
||||
'vmpvscsi'.</dd>
|
||||
<dt><code>usb</code></dt>
|
||||
<dd>A <code>usb</code> controller has an optional attribute
|
||||
<code>model</code>, which is one of "piix3-uhci", "piix4-uhci",
|
||||
@@ -4267,11 +4085,6 @@
|
||||
<dd><span class="since">Since 3.10.0</span> for the vbox driver, the
|
||||
<code>ide</code> controller has an optional attribute
|
||||
<code>model</code>, which is one of "piix3", "piix4" or "ich6".</dd>
|
||||
<dt><code>xenbus</code></dt>
|
||||
<dd><span class="since">Since 5.2.0</span>, the <code>xenbus</code>
|
||||
controller has an optional attribute <code>maxGrantFrames</code>,
|
||||
which specifies the maximum number of grant frames the controller
|
||||
makes available for connected devices.</dd>
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
@@ -4414,7 +4227,7 @@
|
||||
subelement <code><model></code> with an attribute
|
||||
<code>name</code>. The name attribute holds the name of the
|
||||
specific device that qemu is emulating (e.g. "i82801b11-bridge")
|
||||
rather than simply the class of device ("pcie-to-pci-bridge",
|
||||
rather than simply the class of device ("dmi-to-pci-bridge",
|
||||
"pci-bridge"), which is set in the controller element's
|
||||
model <b>attribute</b>. In almost all cases, you should not
|
||||
manually add a <code><model></code> subelement to a
|
||||
@@ -4603,11 +4416,11 @@
|
||||
...
|
||||
<devices>
|
||||
<controller type='pci' index='0' model='pcie-root'/>
|
||||
<controller type='pci' index='1' model='pcie-root-port'>
|
||||
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
|
||||
<controller type='pci' index='1' model='dmi-to-pci-bridge'>
|
||||
<address type='pci' domain='0' bus='0' slot='0xe' function='0'/>
|
||||
</controller>
|
||||
<controller type='pci' index='2' model='pcie-to-pci-bridge'>
|
||||
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
|
||||
<controller type='pci' index='2' model='pci-bridge'>
|
||||
<address type='pci' domain='0' bus='1' slot='1' function='0'/>
|
||||
</controller>
|
||||
</devices>
|
||||
...</pre>
|
||||
@@ -4797,20 +4610,14 @@
|
||||
<dd><span class="since">since 2.5.0</span>For SCSI devices, user
|
||||
is responsible to make sure the device is not used by host. This
|
||||
<code>type</code> passes all LUNs presented by a single HBA to
|
||||
the guest. <span class="since">Since 5.2.0,</span> the
|
||||
<code>model</code> attribute can be specified further
|
||||
with "virtio-transitional", "virtio-non-transitional", or
|
||||
"virtio". See
|
||||
<a href="#elementsVirtioTransitional">Virtio transitional devices</a>
|
||||
for more details.
|
||||
the guest.
|
||||
</dd>
|
||||
<dt><code>mdev</code></dt>
|
||||
<dd>For mediated devices (<span class="since">Since 3.2.0</span>)
|
||||
the <code>model</code> attribute specifies the device API which
|
||||
determines how the host's vfio driver will expose the device to the
|
||||
guest. Currently, <code>model='vfio-pci'</code>,
|
||||
guest. Currently, <code>model='vfio-pci'</code> and
|
||||
<code>model='vfio-ccw'</code> (<span class="since">Since 4.4.0</span>)
|
||||
and <code>model='vfio-ap'</code> (<span class="since">Since 4.9.0</span>)
|
||||
is supported. <a href="drvnodedev.html#MDEV">MDEV</a> section
|
||||
provides more information about mediated devices as well as how to
|
||||
create mediated devices on the host.
|
||||
@@ -5309,14 +5116,6 @@
|
||||
information for different classes of network
|
||||
connections. <span class="since">Since 0.9.4</span>.
|
||||
</p>
|
||||
<p>
|
||||
When a guest is running an interface of type <code>network</code>
|
||||
may include a <code>portid</code> attribute. This provides the UUID
|
||||
of an associated virNetworkPortPtr object that records the association
|
||||
between the domain interface and the network. This attribute is
|
||||
read-only since port objects are create and deleted automatically
|
||||
during startup and shutdown. <span class="since">Since 5.1.0</span>
|
||||
</p>
|
||||
<p>
|
||||
Also, similar to <code>direct</code> network connections
|
||||
(described below), a connection of type <code>network</code> may
|
||||
@@ -5368,6 +5167,7 @@
|
||||
<virtualport>
|
||||
<parameters instanceid='09b11c53-8b5c-4eeb-8f00-d84eaa0aaa4f'/>
|
||||
</virtualport>
|
||||
|
||||
</interface>
|
||||
</devices>
|
||||
...</pre>
|
||||
@@ -5844,11 +5644,7 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
|
||||
<p>
|
||||
Typical values for QEMU and KVM include:
|
||||
ne2k_isa i82551 i82557b i82559er ne2k_pci pcnet rtl8139 e1000 virtio.
|
||||
<span class="since">Since 5.2.0</span>, <code>virtio-transitional</code>
|
||||
and <code>virtio-non-transitional</code> values are supported.
|
||||
See <a href="#elementsVirtioTransitional">Virtio transitional devices</a>
|
||||
for more details.
|
||||
ne2k_isa i82551 i82557b i82559er ne2k_pci pcnet rtl8139 e1000 virtio
|
||||
</p>
|
||||
|
||||
<h5><a id="elementsDriverBackendOptions">Setting NIC driver-specific options</a></h5>
|
||||
@@ -5864,7 +5660,8 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<host csum='off' gso='off' tso4='off' tso6='off' ecn='off' ufo='off' mrg_rxbuf='off'/>
|
||||
<guest csum='off' tso4='off' tso6='off' ecn='off' ufo='off'/>
|
||||
</driver>
|
||||
</b></interface>
|
||||
</b>
|
||||
</interface>
|
||||
</devices>
|
||||
...</pre>
|
||||
|
||||
@@ -6366,7 +6163,7 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<b><route family='ipv4' address='192.168.122.0' prefix='24' gateway='192.168.122.1'/></b>
|
||||
<b><route family='ipv4' address='192.168.122.8' gateway='192.168.122.1'/></b>
|
||||
</hostdev>
|
||||
...
|
||||
|
||||
</devices>
|
||||
...
|
||||
</pre>
|
||||
@@ -6558,12 +6355,6 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
For type <code>passthrough</code>, the mandatory sub-element <code>source</code>
|
||||
must have an <code>evdev</code> attribute containing the absolute path to the
|
||||
event device passed through to guests. (KVM only)
|
||||
|
||||
<span class="since">Since 5.2.0</span>, the <code>input</code> element
|
||||
accepts a <code>model</code> attribute which has the values 'virtio',
|
||||
'virtio-transitional' and 'virtio-non-transitional'. See
|
||||
<a href="#elementsVirtioTransitional">Virtio transitional devices</a>
|
||||
for more details.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
@@ -6854,17 +6645,12 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
the other types, for practical reasons it should be paired with
|
||||
either <code>vnc</code> or <code>spice</code> graphics types.
|
||||
This display type is only supported by QEMU domains
|
||||
(needs QEMU <span class="since">2.10</span> or newer).
|
||||
<span class="Since">5.0.0</span> this element accepts a
|
||||
<code><gl/></code> sub-element with an optional attribute
|
||||
<code>rendernode</code> which can be used to specify an absolute
|
||||
path to a host's DRI device to be used for OpenGL rendering.
|
||||
(needs QEMU <span class="since">2.10</span> or newer) and doesn't
|
||||
accept any attributes.
|
||||
</p>
|
||||
<pre>
|
||||
<graphics type='spice' autoport='yes'/>
|
||||
<graphics type='egl-headless'>
|
||||
<gl rendernode='/dev/dri/renderD128'/>
|
||||
</graphics>
|
||||
<graphics type='egl-headless'/>
|
||||
</pre>
|
||||
</dd>
|
||||
</dl>
|
||||
@@ -7311,9 +7097,9 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
Valid values for the <code>type</code> attribute are:
|
||||
<code>serial</code> (described below);
|
||||
<code>virtio</code> (usable whenever VirtIO support is available);
|
||||
<code>xen</code>, <code>lxc</code> and <code>openvz</code>
|
||||
(available when the corresponding hypervisor is in use).
|
||||
<code>sclp</code> and <code>sclplm</code> (usable for s390 and
|
||||
<code>xen</code>, <code>lxc</code>, <code>uml</code> and
|
||||
<code>openvz</code> (available when the corresponding hypervisor is in
|
||||
use). <code>sclp</code> and <code>sclplm</code> (usable for s390 and
|
||||
s390x QEMU guests) are supported for compatibility reasons but should
|
||||
not be used for new guests: use the <code>sclpconsole</code> and
|
||||
<code>sclplmconsole</code> target models, respectively, with the
|
||||
@@ -8035,12 +7821,8 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
</p>
|
||||
<ul>
|
||||
<li>'virtio' - default with QEMU/KVM</li>
|
||||
<li>'virtio-transitional' <span class="since">Since 5.2.0</span></li>
|
||||
<li>'virtio-non-transitional' <span class="since">Since 5.2.0</span></li>
|
||||
<li>'xen' - default with Xen</li>
|
||||
</ul>
|
||||
See <a href="#elementsVirtioTransitional">Virtio transitional devices</a>
|
||||
for more details.
|
||||
</dd>
|
||||
<dt><code>autodeflate</code></dt>
|
||||
<dd>
|
||||
@@ -8112,11 +7894,7 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
</p>
|
||||
<ul>
|
||||
<li>'virtio' - supported by qemu and virtio-rng kernel module</li>
|
||||
<li>'virtio-transitional' <span class='since'>Since 5.2.0</span></li>
|
||||
<li>'virtio-non-transitional' <span class='since'>Since 5.2.0</span></li>
|
||||
</ul>
|
||||
See <a href="#elementsVirtioTransitional">Virtio transitional devices</a>
|
||||
for more details.
|
||||
</dd>
|
||||
<dt><code>rate</code></dt>
|
||||
<dd>
|
||||
@@ -8299,7 +8077,7 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
...
|
||||
<devices>
|
||||
<nvram>
|
||||
<address type='spapr-vio' reg='0x00003000'/>
|
||||
<address type='spapr-vio' reg='0x3000'/>
|
||||
</nvram>
|
||||
</devices>
|
||||
...
|
||||
@@ -8480,21 +8258,6 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<memory model='nvdimm'>
|
||||
<source>
|
||||
<path>/tmp/nvdimm</path>
|
||||
<alignsize unit='KiB'>2048</alignsize>
|
||||
</source>
|
||||
<target>
|
||||
<size unit='KiB'>524288</size>
|
||||
<node>1</node>
|
||||
<label>
|
||||
<size unit='KiB'>128</size>
|
||||
</label>
|
||||
<readonly/>
|
||||
</target>
|
||||
</memory>
|
||||
<memory model='nvdimm'>
|
||||
<source>
|
||||
<path>/dev/dax0.0</path>
|
||||
<pmem/>
|
||||
</source>
|
||||
<target>
|
||||
<size unit='KiB'>524288</size>
|
||||
@@ -8576,36 +8339,10 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
</dl>
|
||||
|
||||
<p>
|
||||
For model <code>nvdimm</code> this element is mandatory. The
|
||||
mandatory child element <code>path</code> represents a path in
|
||||
the host that backs the nvdimm module in the guest. The following
|
||||
optional elements may be used:
|
||||
For model <code>nvdimm</code> this element is mandatory and has a
|
||||
single child element <code>path</code> that represents a path
|
||||
in the host that backs the nvdimm module in the guest.
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>alignsize</code></dt>
|
||||
<dd>
|
||||
<p>
|
||||
The <code>alignsize</code> element defines the page size
|
||||
alignment used to mmap the address range for the backend
|
||||
<code>path</code>. If not supplied the host page size is used.
|
||||
For example, to mmap a real NVDIMM device a 2M-aligned page may
|
||||
be required.
|
||||
<span class="since">Since 5.0.0</span>
|
||||
</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>pmem</code></dt>
|
||||
<dd>
|
||||
<p>
|
||||
If persistent memory is supported and enabled by the hypervisor
|
||||
in order to guarantee the persistence of writes to the vNVDIMM
|
||||
backend, then use the <code>pmem</code> element in order to
|
||||
utilize the feature.
|
||||
<span class="since">Since 5.0.0</span>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
|
||||
<dt><code>target</code></dt>
|
||||
@@ -8624,39 +8361,19 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
NUMA nodes configured.
|
||||
</p>
|
||||
<p>
|
||||
The following optional elements may be used:
|
||||
For NVDIMM type devices one can optionally use
|
||||
<code>label</code> and its subelement <code>size</code>
|
||||
to configure the size of namespaces label storage
|
||||
within the NVDIMM module. The <code>size</code> element
|
||||
has usual meaning described
|
||||
<a href="#elementsMemoryAllocation">here</a>.
|
||||
For QEMU domains the following restrictions apply:
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt><code>label</code></dt>
|
||||
<dd>
|
||||
<p>
|
||||
For NVDIMM type devices one can optionally use
|
||||
<code>label</code> and its subelement <code>size</code>
|
||||
to configure the size of namespaces label storage
|
||||
within the NVDIMM module. The <code>size</code> element
|
||||
has usual meaning described
|
||||
<a href="#elementsMemoryAllocation">here</a>.
|
||||
For QEMU domains the following restrictions apply:
|
||||
</p>
|
||||
<ol>
|
||||
<li>the minimum label size is 128KiB,</li>
|
||||
<li>the remaining size (total-size - label-size) will be aligned
|
||||
to 4KiB as default.</li>
|
||||
</ol>
|
||||
</dd>
|
||||
|
||||
<dt><code>readonly</code></dt>
|
||||
<dd>
|
||||
<p>
|
||||
The <code>readonly</code> element is used to mark the vNVDIMM
|
||||
as read-only. Only the real NVDIMM device backend can guarantee
|
||||
the guest write persistence, so other backend types should use
|
||||
the <code>readonly</code> element.
|
||||
<span class="since">Since 5.0.0</span>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<ol>
|
||||
<li>the minimum label size is 128KiB,</li>
|
||||
<li>the remaining size (total-size - label-size) has to be aligned to
|
||||
4KiB</li>
|
||||
</ol>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@@ -8683,17 +8400,14 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<dt><code>model</code></dt>
|
||||
<dd>
|
||||
<p>
|
||||
Supported values are <code>intel</code> (for Q35 guests) and,
|
||||
<span class="since">since 5.5.0</span>, <code>smmuv3</code> (for
|
||||
ARM virt guests).
|
||||
Currently only the <code>intel</code> model is supported.
|
||||
</p>
|
||||
</dd>
|
||||
<dt><code>driver</code></dt>
|
||||
<dd>
|
||||
<p>
|
||||
The <code>driver</code> subelement can be used to configure
|
||||
additional options, some of which might only be available for
|
||||
certain IOMMU models:
|
||||
additional options:
|
||||
</p>
|
||||
<dl>
|
||||
<dt><code>intremap</code></dt>
|
||||
@@ -8746,11 +8460,7 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
<h3><a id="vsock">Vsock</a></h3>
|
||||
|
||||
<p>A vsock host/guest interface. The <code>model</code> attribute
|
||||
defaults to <code>virtio</code>. <span class="since">Since 5.2.0</span>
|
||||
<code>model</code> can also be 'virtio-transitional' and
|
||||
'virtio-non-transitional', see
|
||||
<a href="#elementsVirtioTransitional">Virtio transitional devices</a>
|
||||
for more details.
|
||||
defaults to <code>virtio</code>.
|
||||
The optional attribute <code>address</code> of the <code>cid</code>
|
||||
element specifies the CID assigned to the guest. If the attribute
|
||||
<code>auto</code> is set to <code>yes</code>, libvirt
|
||||
@@ -8935,7 +8645,7 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
|
||||
<p>Note: DEA/TDEA is synonymous with DES/TDES.</p>
|
||||
|
||||
<h3><a id="launchSecurity">Launch Security</a></h3>
|
||||
<h3><a id="sev">Launch Security</a></h3>
|
||||
|
||||
<p>
|
||||
The contents of the <code><launchSecurity type='sev'></code> element
|
||||
@@ -8950,8 +8660,8 @@ qemu-kvm -net nic,model=? /dev/null
|
||||
different entity using a different key the encrypted guests data will
|
||||
be incorrectly decrypted, leading to unintelligible data.
|
||||
|
||||
For more information see various input parameters and its format see the
|
||||
<a href="https://support.amd.com/TechDocs/55766_SEV-KM_API_Specification.pdf">SEV API spec</a>
|
||||
For more information see various input parameters and its format see the SEV API spec
|
||||
<a href="https://support.amd.com/TechDocs/55766_SEV-KM%20API_Specification.pdf"> https://support.amd.com/TechDocs/55766_SEV-KM%20API_Specification.pdf </a>
|
||||
<span class="since">Since 4.4.0</span>
|
||||
</p>
|
||||
<pre>
|
||||
|
@@ -37,17 +37,6 @@
|
||||
management application to choose an appropriate mode for a pass-through
|
||||
host device as well as which adapter to utilize.</p>
|
||||
|
||||
<p>Some XML elements may be entirely omitted from the domaincapabilities
|
||||
XML, depending on what the libvirt driver has filled in. Applications
|
||||
should only act on what is explicitly reported in the domaincapabilities
|
||||
XML. For example, if <disk supported='yes'/> is present, you can safely
|
||||
assume the driver supports <disk> devices. If <disk supported='no'/> is
|
||||
present, you can safely assume the driver does NOT support <disk>
|
||||
devices. If the <disk> block is omitted entirely, the driver is not
|
||||
indicating one way or the other whether it supports <disk> devices, and
|
||||
applications should not interpret the missing block to mean any thing in
|
||||
particular.</p>
|
||||
|
||||
<h2><a id="elements">Element and attribute overview</a></h2>
|
||||
|
||||
<p> A new query interface was added to the virConnect API's to retrieve the
|
||||
@@ -119,10 +108,6 @@
|
||||
<domainCapabilities>
|
||||
...
|
||||
<os supported='yes'>
|
||||
<enum name='firmware'>
|
||||
<value>bios</value>
|
||||
<value>efi</value>
|
||||
</enum>
|
||||
<loader supported='yes'>
|
||||
<value>/usr/share/OVMF/OVMF_CODE.fd</value>
|
||||
<enum name='type'>
|
||||
@@ -133,26 +118,12 @@
|
||||
<value>yes</value>
|
||||
<value>no</value>
|
||||
</enum>
|
||||
<enum name='secure'>
|
||||
<value>yes</value>
|
||||
<value>no</value>
|
||||
</enum>
|
||||
</loader>
|
||||
</os>
|
||||
...
|
||||
<domainCapabilities>
|
||||
</pre>
|
||||
|
||||
<p>The <code>firmware</code> enum corresponds to
|
||||
<code>firmware</code> attribute of the <code>os</code> element.
|
||||
Plain presence of this enum means that libvirt is capable of so
|
||||
called firmware auto selection. The listed values then represent
|
||||
accepted values for the domain attribute. Only values for which
|
||||
there exists a firmware descriptor that matches machine type and
|
||||
architecture are listed, i.e. those which won't cause a failure
|
||||
on domain startup.
|
||||
</p>
|
||||
|
||||
<p>For the <code>loader</code> element, the following can occur:</p>
|
||||
|
||||
<dl>
|
||||
@@ -170,11 +141,6 @@
|
||||
<dt><code>readonly</code></dt>
|
||||
<dd>Options for the <code>readonly</code> attribute of the
|
||||
<loader/> element.</dd>
|
||||
|
||||
<dt><code>secure</code></dt>
|
||||
<dd>Options for the <code>secure</code> attribute of the
|
||||
<loader/> element. Note, that <code>yes</code> is listed
|
||||
only if there is a firmware that supports it.</dd>
|
||||
</dl>
|
||||
|
||||
<h3><a id="elementsCPU">CPU configuration</a></h3>
|
||||
@@ -312,6 +278,7 @@
|
||||
<value>virtio</value>
|
||||
<value>xen</value>
|
||||
<value>usb</value>
|
||||
<value>uml</value>
|
||||
<value>sata</value>
|
||||
<value>sd</value>
|
||||
</enum>
|
||||
@@ -514,9 +481,10 @@
|
||||
encrypted with a key unique to that VM.</p>
|
||||
|
||||
<p>
|
||||
For more details on the SEV feature, please follow resources in the
|
||||
AMD developer's document store. In order to use SEV with libvirt have
|
||||
a look at <a href="formatdomain.html#launchSecurity">SEV in domain XML</a>
|
||||
For more details on SEV feature see:
|
||||
<a href="https://support.amd.com/TechDocs/55766_SEV-KM%20API_Specification.pdf">
|
||||
SEV API spec</a> and <a href="http://amd-dev.wpengine.netdna-cdn.com/wordpress/media/2013/12/AMD_Memory_Encryption_Whitepaper_v7-Public.pdf">
|
||||
SEV White Paper</a>
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
|
@@ -107,13 +107,13 @@
|
||||
may also be connected to the LAN. When defining
|
||||
a new network with a <code><forward></code> mode of
|
||||
|
||||
"nat", "route", or "open" (or an isolated network with
|
||||
"nat" or "route" (or an isolated network with
|
||||
no <code><forward></code> element), libvirt will
|
||||
automatically generate a unique name for the bridge device if
|
||||
none is given, and this name will be permanently stored in the
|
||||
network configuration so that that the same name will be used
|
||||
every time the network is started. For these types of networks
|
||||
(nat, route, open, and isolated), a bridge name beginning with the
|
||||
(nat, routed, and isolated), a bridge name beginning with the
|
||||
prefix "virbr" is recommended (and that is what is
|
||||
auto-generated), but not enforced.
|
||||
Attribute <code>stp</code> specifies if Spanning Tree Protocol
|
||||
@@ -152,23 +152,6 @@
|
||||
<span class="since">Since 1.2.11, requires kernel 3.17 or
|
||||
newer</span>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The optional <code>zone</code> attribute of
|
||||
the <code>bridge</code> element is used to specify
|
||||
the <a href="https://firewalld.org">firewalld</a>
|
||||
zone for the bridge of a network with <code>forward</code>
|
||||
mode of "nat", "route", "open", or one with
|
||||
no <code>forward</code> specified. By default, the bridges
|
||||
of all virtual networks with these forward modes are placed
|
||||
in the firewalld zone named "libvirt", which permits
|
||||
incoming DNS, DHCP, TFTP, and SSH to the host from guests on
|
||||
the network. This behavior can be changed either by
|
||||
modifying the libvirt zone (using firewalld management
|
||||
tools), or by placing the network in a different zone (which
|
||||
will also be managed using firewalld tools).
|
||||
<span class="since">Since 5.1.0</span>
|
||||
</p>
|
||||
</dd>
|
||||
|
||||
<dt><code>mtu</code></dt>
|
||||
|
@@ -1,212 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Network XML format</h1>
|
||||
|
||||
<ul id="toc">
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
This page provides an introduction to the network port XML format.
|
||||
This stores information about the connection between a virtual
|
||||
interface of a virtual domain, and the virtual network it is
|
||||
attached to.
|
||||
</p>
|
||||
|
||||
<h2><a id="elements">Element and attribute overview</a></h2>
|
||||
|
||||
<p>
|
||||
The root element required for all virtual network ports is
|
||||
named <code>networkport</code> and has no configurable attributes
|
||||
The network port XML format is available <span class="since">since
|
||||
5.5.0</span>
|
||||
</p>
|
||||
|
||||
<h3><a id="elementsMetadata">General metadata</a></h3>
|
||||
|
||||
<p>
|
||||
The first elements provide basic metadata about the virtual
|
||||
network port.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
<networkport
|
||||
<uuid>7ae63b5f-fe96-4af0-a7c3-da04ba1b3f54</uuid>
|
||||
<owner>
|
||||
<uuid>06578fc1-c686-46fa-bc2c-220893b466a6</uuid>
|
||||
<name>myguest<name>
|
||||
</owner>
|
||||
<group>webfront<group>
|
||||
<mac address='52:54:0:7b:35:93'/>
|
||||
...</pre>
|
||||
|
||||
<dl>
|
||||
<dt><code>uuid</code></dt>
|
||||
<dd>The content of the <code>uuid</code> element provides
|
||||
a globally unique identifier for the virtual network port.
|
||||
The format must be RFC 4122 compliant, eg <code>3e3fce45-4f53-4fa7-bb32-11f34168b82b</code>.
|
||||
If omitted when defining/creating a new network port, a random
|
||||
UUID is generated.</dd>
|
||||
<dd>The <code>owner</code> node records the domain object that
|
||||
is the owner of the network port. It contains two child nodes:
|
||||
<dl>
|
||||
<dt><code>uuid</code></dt>
|
||||
<dd>The content of the <code>uuid</code> element provides
|
||||
a globally unique identifier for the virtual domain.</dd>
|
||||
<dt><code>name</code></dt>
|
||||
<dd>The unique name of the virtual domain</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>group</code></dt>
|
||||
<dd>The port group in the virtual network to which the
|
||||
port belongs. Can be omitted if no port groups are
|
||||
defined on the network.</dd>
|
||||
<dt><code>mac</code></dt>
|
||||
<dd>The <code>address</code> attribute provides the MAC
|
||||
address of the virtual port that will be see by the
|
||||
guest. The MAC address must not start with 0xFE as this
|
||||
byte is reserved for use on the host side of the port.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h3><a id="elementsCommon">Common elements</a></h3>
|
||||
|
||||
<p>
|
||||
The following elements are common to one or more of the plug
|
||||
types listed later
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
...
|
||||
<bandwidth>
|
||||
<inbound average='1000' peak='5000' floor='200' burst='1024'/>
|
||||
<outbound average='128' peak='256' burst='256'/>
|
||||
</bandwidth>
|
||||
<rxfilters trustGuest='yes'/>
|
||||
<virtualport type='802.1Qbg'>
|
||||
<parameters managerid='11' typeid='1193047' typeidversion='2'/>
|
||||
</virtualport>
|
||||
...</pre>
|
||||
|
||||
<dl>
|
||||
<dt><code>bandwidth</code></dt>
|
||||
<dd>This part of the network port XML provides setting quality of service.
|
||||
Incoming and outgoing traffic can be shaped independently.
|
||||
The <code>bandwidth</code> element and its child elements are described
|
||||
in the <a href="formatnetwork.html#elementQoS">QoS</a> section of
|
||||
the Network XML. In addition the <code>classID</code> attribute may
|
||||
exist to provide the ID of the traffic shaping class that is active.
|
||||
</dd>
|
||||
<dt><code>rxfilters</code></dt>
|
||||
<dd>The <code>rxfilters</code> element property
|
||||
<code>trustGuest</code> provides the
|
||||
capability for the host to detect and trust reports from the
|
||||
guest regarding changes to the interface mac address and receive
|
||||
filters by setting the attribute to <code>yes</code>. The default
|
||||
setting for the attribute is <code>no</code> for security
|
||||
reasons and support depends on the guest network device model as
|
||||
well as the type of connection on the host - currently it is
|
||||
only supported for the virtio device model and for macvtap
|
||||
connections on the host.
|
||||
</dd>
|
||||
<dt><code>virtualport</code></dt>
|
||||
<dd>The <code>virtualport</code> element describes metadata that
|
||||
needs to be provided to the underlying network subsystem. It
|
||||
is described in the domain XML
|
||||
<a href="formatdomain.html#elementsNICS">interface documentation</a>.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
<h3><a id="elementsPlug">Plugs</a></h3>
|
||||
|
||||
<p>
|
||||
The <code>plug</code> element has varying content depending
|
||||
on the value of the <code>type</code> attribute.
|
||||
</p>
|
||||
|
||||
<h4><a id="elementsPlugNetwork">Network</a></h4>
|
||||
|
||||
<p>
|
||||
The <code>network</code> plug type refers to a managed virtual
|
||||
network plug that is based on a traditional software bridge
|
||||
device privately managed by libvirt.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
...
|
||||
<plug type='network' bridge='virbr0'/>
|
||||
...</pre>
|
||||
|
||||
<p>
|
||||
The <code>bridge</code> attribute provides the name of the
|
||||
privately managed bridge device associated with the virtual
|
||||
network.
|
||||
</p>
|
||||
|
||||
<h4><a id="elementsPlugNetwork">Bridge</a></h4>
|
||||
|
||||
<p>
|
||||
The <code>bridge</code> plug type refers to an externally
|
||||
managed traditional software bridge.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
...
|
||||
<plug type='bridge' bridge='br2'/>
|
||||
...</pre>
|
||||
|
||||
<p>
|
||||
The <code>bridge</code> attribute provides the name of the
|
||||
externally managed bridge device associated with the virtual
|
||||
network.
|
||||
</p>
|
||||
|
||||
<h4><a id="elementsPlugNetwork">Direct</a></h4>
|
||||
|
||||
<p>
|
||||
The <code>direct</code> plug type refers to a connection
|
||||
directly to a physical network interface.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
...
|
||||
<plug type='direct' dev='ens3' mode='vepa'/>
|
||||
...</pre>
|
||||
|
||||
<p>
|
||||
The <code>dev</code> attribute provides the name of the
|
||||
physical network interface to which the port will be
|
||||
connected. The <code>mode</code> attribute describes
|
||||
how the connection will be setup and takes the same
|
||||
values described in the
|
||||
<a href="formatdomain.html#elementsNICSDirect">domain XML</a>.
|
||||
</p>
|
||||
|
||||
<h4><a id="elementsPlugNetwork">Host PCI</a></h4>
|
||||
|
||||
<p>
|
||||
The <code>hostdev-pci</code> plug type refers to the
|
||||
passthrough of a physical PCI device rather than emulation.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
...
|
||||
<plug type='hostdev-pci' managed='yes'>
|
||||
<driver name='vfio'/>
|
||||
<address domain='0x0001' bus='0x02' slot='0x03' function='0x4'/>
|
||||
</plug>
|
||||
...</pre>
|
||||
|
||||
<p>
|
||||
The <code>managed</code> attribute indicates who is responsible for
|
||||
managing the PCI device in the host. When set to the value <code>yes</code>
|
||||
libvirt is responsible for automatically detaching the device from host
|
||||
drivers and resetting it if needed. If the value is <code>no</code>,
|
||||
some other party must ensure the device is not attached to any
|
||||
host drivers.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -70,10 +70,6 @@
|
||||
<dd>Describes a device on the host's PCI bus. Sub-elements
|
||||
include:
|
||||
<dl>
|
||||
<dt><code>class</code></dt>
|
||||
<dd>Optional element for combined class, subclass and
|
||||
programming interface codes as 6-digit hexadecimal number.
|
||||
<span class="since">Since 5.2.0</span></dd>
|
||||
<dt><code>domain</code></dt>
|
||||
<dd>Which domain the device belongs to.</dd>
|
||||
<dt><code>bus</code></dt>
|
||||
@@ -385,7 +381,6 @@
|
||||
<name>igb</name>
|
||||
</driver>
|
||||
<capability type='pci'>
|
||||
<class>0x020000</class>
|
||||
<domain>0</domain>
|
||||
<bus>2</bus>
|
||||
<slot>0</slot>
|
||||
|
@@ -2265,7 +2265,7 @@ echo 3 > /proc/sys/net/netfilter/nf_conntrack_icmp_timeout
|
||||
to the incoming and outgoing direction. All this is related to the ftp
|
||||
data traffic originating from TCP port 20 of the VM. This then leads to
|
||||
the following solution
|
||||
<span class="since">(since 0.8.5 (QEMU, KVM))</span>:
|
||||
<span class="since">(since 0.8.5 (QEMU, KVM, UML))</span>:
|
||||
</p>
|
||||
<pre>
|
||||
<filter name='test-eth0'>
|
||||
|
@@ -33,7 +33,7 @@
|
||||
resume in a consistent state; but if the disks are modified
|
||||
externally in the meantime, this is likely to lead to data
|
||||
corruption.</dd>
|
||||
<dt>full system</dt>
|
||||
<dt>system checkpoint</dt>
|
||||
<dd>A combination of disk snapshots for all disks as well as VM
|
||||
memory state, which can be used to resume the guest from where it
|
||||
left off with symptoms similar to hibernation (that is, TCP
|
||||
@@ -55,12 +55,11 @@
|
||||
as <code>virDomainSaveImageGetXMLDesc()</code> to work with
|
||||
those files.
|
||||
</p>
|
||||
<p>Full system snapshots are created
|
||||
by <code>virDomainSnapshotCreateXML()</code> with no flags, while
|
||||
<p>System checkpoints are created
|
||||
by <code>virDomainSnapshotCreateXML()</code> with no flags, and
|
||||
disk snapshots are created by the same function with
|
||||
the <code>VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY</code>
|
||||
flag. Regardless of the flags provided, restoration of the
|
||||
snapshot is handled by
|
||||
the <code>VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY</code> flag; in
|
||||
both cases, they are restored by
|
||||
the <code>virDomainRevertToSnapshot()</code> function. For
|
||||
these types of snapshots, libvirt tracks each snapshot as a
|
||||
separate <code>virDomainSnapshotPtr</code> object, and maintains
|
||||
@@ -79,8 +78,7 @@
|
||||
redefining a snapshot (<span class="since">since 0.9.5</span>),
|
||||
with the <code>VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE</code> flag
|
||||
of <code>virDomainSnapshotCreateXML()</code>, all of the XML
|
||||
described here is relevant on input, even the fields that are
|
||||
normally described as readonly for output.
|
||||
described here is relevant.
|
||||
</p>
|
||||
<p>
|
||||
Snapshots are maintained in a hierarchy. A domain can have a
|
||||
@@ -99,14 +97,16 @@
|
||||
</p>
|
||||
<dl>
|
||||
<dt><code>name</code></dt>
|
||||
<dd>The optional name for this snapshot. If the name is
|
||||
omitted, libvirt will create a name based on the time of the
|
||||
creation.
|
||||
<dd>The name for this snapshot. If the name is specified when
|
||||
initially creating the snapshot, then the snapshot will have
|
||||
that particular name. If the name is omitted when initially
|
||||
creating the snapshot, then libvirt will make up a name for
|
||||
the snapshot, based on the time when it was created.
|
||||
</dd>
|
||||
<dt><code>description</code></dt>
|
||||
<dd>An optional human-readable description of the snapshot. If
|
||||
the description is omitted when initially creating the
|
||||
snapshot, then this field will be empty.
|
||||
<dd>A human-readable description of the snapshot. If the
|
||||
description is omitted when initially creating the snapshot,
|
||||
then this field will be empty.
|
||||
</dd>
|
||||
<dt><code>memory</code></dt>
|
||||
<dd>On input, this is an optional request for how to handle VM
|
||||
@@ -128,10 +128,13 @@
|
||||
what file name is created in an external snapshot. On output,
|
||||
this is fully populated to show the state of each disk in the
|
||||
snapshot, including any properties that were generated by the
|
||||
hypervisor defaults. For full system snapshots, this field is
|
||||
ignored on input and omitted on output (a full system snapshot
|
||||
implies that all disks participate in the snapshot process).
|
||||
This element has a list of <code>disk</code>
|
||||
hypervisor defaults. For system checkpoints, this field is
|
||||
ignored on input and omitted on output (a system checkpoint
|
||||
implies that all disks participate in the snapshot process,
|
||||
and since the current implementation only does internal system
|
||||
checkpoints, there are no extra details to add); a future
|
||||
release may allow the use of <code>disks</code> with a system
|
||||
checkpoint. This element has a list of <code>disk</code>
|
||||
sub-elements, describing anywhere from zero to all of the
|
||||
disks associated with the domain. <span class="since">Since
|
||||
0.9.5</span>
|
||||
@@ -140,8 +143,8 @@
|
||||
<dd>This sub-element describes the snapshot properties of a
|
||||
specific disk. The attribute <code>name</code> is
|
||||
mandatory, and must match either the <code><target
|
||||
dev='name'/></code> (recommended) or an unambiguous
|
||||
<code><source file='name'/></code> of one of
|
||||
dev='name'/></code> or an unambiguous <code><source
|
||||
file='name'/></code> of one of
|
||||
the <a href="formatdomain.html#elementsDisks">disk
|
||||
devices</a> specified for the domain at the time of the
|
||||
snapshot. The attribute <code>snapshot</code> is
|
||||
@@ -170,12 +173,6 @@
|
||||
snapshots, the original file name becomes the read-only
|
||||
snapshot, and the new file name contains the read-write
|
||||
delta of all disk changes since the snapshot.
|
||||
<p/>
|
||||
The <code>source</code> element also may contain the
|
||||
<code>seclabel</code> element (described in the
|
||||
<a href="formatdomain.html#seclabel">domain XML documentation</a>)
|
||||
which can be used to override the domain security labeling policy
|
||||
for <code>source</code>.
|
||||
</dd>
|
||||
<dt><code>driver</code></dt>
|
||||
<dd>An optional sub-element <code>driver</code>,
|
||||
@@ -183,7 +180,6 @@
|
||||
as qcow2), of the new file created by the external
|
||||
snapshot of the new file.
|
||||
</dd>
|
||||
<dt><code>seclabel</code></dt>
|
||||
</dl>
|
||||
|
||||
<span class="since">Since 1.2.2</span> the <code>disk</code> element
|
||||
@@ -205,52 +201,45 @@
|
||||
</dl>
|
||||
</dd>
|
||||
<dt><code>creationTime</code></dt>
|
||||
<dd>A readonly representation of the time this snapshot was
|
||||
created. The time is specified in seconds since the Epoch,
|
||||
UTC (i.e. Unix time).
|
||||
<dd>The time this snapshot was created. The time is specified
|
||||
in seconds since the Epoch, UTC (i.e. Unix time). Readonly.
|
||||
</dd>
|
||||
<dt><code>state</code></dt>
|
||||
<dd>A readonly representation of the state of the domain at the
|
||||
time this snapshot was taken. If a full system snapshot was
|
||||
created, then this is the state of the domain at that
|
||||
time. When the domain is reverted to this snapshot, the
|
||||
domain's state will default to this state, unless overridden
|
||||
by <code>virDomainRevertToSnapshot()</code> flags to revert to
|
||||
a running or paused state. Additionally, this field can be the
|
||||
value "disk-snapshot" (<span class="since">since 0.9.5</span>)
|
||||
when it represents only a disk snapshot (no VM memory state),
|
||||
and reverting to this snapshot will default to an inactive
|
||||
guest.
|
||||
<dd>The state of the domain at the time this snapshot was taken.
|
||||
If the snapshot was created as a system checkpoint, then this
|
||||
is the state of the domain at that time; when the domain is
|
||||
reverted to this snapshot, the domain's state will default to
|
||||
whatever is in this field unless additional flags are passed
|
||||
to <code>virDomainRevertToSnapshot()</code>. Additionally,
|
||||
this field can be the value "disk-snapshot"
|
||||
(<span class="since">since 0.9.5</span>) when it represents
|
||||
only a disk snapshot (no VM memory state), and reverting to this
|
||||
snapshot will default to an inactive guest. Readonly.
|
||||
</dd>
|
||||
<dt><code>parent</code></dt>
|
||||
<dd>An optional readonly representation of the parent of this
|
||||
snapshot. If present, this element contains exactly one child
|
||||
element, <code>name</code>. This specifies the name of the
|
||||
parent snapshot of this snapshot, and is used to represent
|
||||
trees of snapshots.
|
||||
<dd>The parent of this snapshot. If present, this element
|
||||
contains exactly one child element, name. This specifies the
|
||||
name of the parent snapshot of this snapshot, and is used to
|
||||
represent trees of snapshots. Readonly.
|
||||
</dd>
|
||||
<dt><code>domain</code></dt>
|
||||
<dd>A readonly representation of the domain that this snapshot
|
||||
was taken against. Older versions of libvirt stored only a
|
||||
single child element, uuid; reverting to a snapshot like this
|
||||
is risky if the current state of the domain differs from the
|
||||
state that the domain was created in, and requires the use of
|
||||
the <code>VIR_DOMAIN_SNAPSHOT_REVERT_FORCE</code> flag
|
||||
<dd>The domain that this snapshot was taken against. Older
|
||||
versions of libvirt stored only a single child element, uuid;
|
||||
reverting to a snapshot like this is risky if the current
|
||||
state of the domain differs from the state that the domain was
|
||||
created in, and requires the use of the
|
||||
<code>VIR_DOMAIN_SNAPSHOT_REVERT_FORCE</code> flag
|
||||
in <code>virDomainRevertToSnapshot()</code>. Newer versions
|
||||
of libvirt (<span class="since">since 0.9.5</span>) store the
|
||||
entire inactive <a href="formatdomain.html">domain
|
||||
configuration</a> at the time of the snapshot
|
||||
(<span class="since">since 0.9.5</span>). The domain will have
|
||||
security-sensitive information omitted
|
||||
unless the flag <code>VIR_DOMAIN_SNAPSHOT_XML_SECURE</code> is
|
||||
provided on a read-write connection.
|
||||
of libvirt (<span class="since">since 0.9.5</span>) store the entire
|
||||
inactive <a href="formatdomain.html">domain configuration</a>
|
||||
at the time of the snapshot (<span class="since">since
|
||||
0.9.5</span>). Readonly.
|
||||
</dd>
|
||||
<dt><code>cookie</code></dt>
|
||||
<dd>An optional readonly representation of a save image cookie
|
||||
containing additional data libvirt may need to properly
|
||||
restore a domain from an active snapshot when such data cannot
|
||||
be stored directly in the <code>domain</code> to maintain
|
||||
compatibility with older libvirt or hypervisor.
|
||||
<dd>Save image cookie containing additional data libvirt may need to
|
||||
properly restore a domain from an active snapshot when such data
|
||||
cannot be stored directly in the <code>domain</code> to maintain
|
||||
compatibility with older libvirt or hypervisor. Readonly.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@@ -262,15 +251,10 @@
|
||||
<domainsnapshot>
|
||||
<description>Snapshot of OS install and updates</description>
|
||||
<disks>
|
||||
<disk name='vda'>
|
||||
<disk name='/path/to/old'>
|
||||
<source file='/path/to/new'/>
|
||||
</disk>
|
||||
<disk name='vdb' snapshot='no'/>
|
||||
<disk name='vdc'>
|
||||
<source file='/path/to/newc'>
|
||||
<seclabel model='dac' relabel='no'/>
|
||||
</source>
|
||||
</disk>
|
||||
</disks>
|
||||
</domainsnapshot></pre>
|
||||
|
||||
|
@@ -19,15 +19,14 @@
|
||||
a single attribute <code>type</code>, which is one of <code>dir</code>,
|
||||
<code>fs</code>, <code>netfs</code>, <code>disk</code>,
|
||||
<code>iscsi</code>, <code>logical</code>, <code>scsi</code>
|
||||
(all <span class="since">since 0.4.1</span>),
|
||||
<code>mpath</code> (<span class="since">since 0.7.1</span>),
|
||||
<code>rbd</code> (<span class="since">since 0.9.13</span>),
|
||||
<code>sheepdog</code> (<span class="since">since 0.10.0</span>),
|
||||
<code>gluster</code> (<span class="since">since 1.2.0</span>),
|
||||
<code>zfs</code> (<span class="since">since 1.2.8</span>),
|
||||
<code>vstorage</code> (<span class="since">since 3.1.0</span>),
|
||||
or <code>iscsi-direct</code> (<span class="since">since 4.7.0</span>).
|
||||
This corresponds to the
|
||||
(all <span class="since">since 0.4.1</span>), <code>mpath</code>
|
||||
(<span class="since">since 0.7.1</span>), <code>rbd</code>
|
||||
(<span class="since">since 0.9.13</span>), <code>sheepdog</code>
|
||||
(<span class="since">since 0.10.0</span>),
|
||||
<code>gluster</code> (<span class="since">since
|
||||
1.2.0</span>), <code>zfs</code> (<span class="since">since
|
||||
1.2.8</span>) or <code>vstorage</code> (<span class="since">since
|
||||
3.1.0</span>). This corresponds to the
|
||||
storage backend drivers listed further along in this document.
|
||||
</p>
|
||||
<h3><a id="StoragePoolFirst">General metadata</a></h3>
|
||||
@@ -122,26 +121,15 @@
|
||||
</source>
|
||||
...</pre>
|
||||
|
||||
<pre>
|
||||
...
|
||||
<source>
|
||||
<host name='localhost'/>
|
||||
<dir path='/var/lib/libvirt/images'/>
|
||||
<format type='nfs'/>
|
||||
<protocol ver='3'/>
|
||||
</source>
|
||||
...</pre>
|
||||
|
||||
<dl>
|
||||
<dt><code>device</code></dt>
|
||||
<dd>Provides the source for pools backed by physical devices
|
||||
(pool types <code>fs</code>, <code>logical</code>, <code>disk</code>,
|
||||
<code>iscsi</code>, <code>iscsi-direct</code>, <code>zfs</code>,
|
||||
<code>vstorage</code>).
|
||||
<code>iscsi</code>, <code>zfs</code>, <code>vstorage</code>).
|
||||
May be repeated multiple times depending on backend driver. Contains
|
||||
a required attribute <code>path</code> which is either the fully
|
||||
qualified path to the block device node or for <code>iscsi</code>
|
||||
or <code>iscsi-direct</code> the iSCSI Qualified Name (IQN).
|
||||
the iSCSI Qualified Name (IQN).
|
||||
<span class="since">Since 0.4.1</span>
|
||||
<p>An optional attribute <code>part_separator</code> for each
|
||||
<code>path</code> may be supplied. Valid values for the attribute
|
||||
@@ -346,7 +334,6 @@
|
||||
<dt><code>host</code></dt>
|
||||
<dd>Provides the source for pools backed by storage from a
|
||||
remote server (pool types <code>netfs</code>, <code>iscsi</code>,
|
||||
<code>iscsi-direct</code>,
|
||||
<code>rbd</code>, <code>sheepdog</code>, <code>gluster</code>). Will be
|
||||
used in combination with a <code>directory</code>
|
||||
or <code>device</code> element. Contains an attribute <code>name</code>
|
||||
@@ -361,19 +348,11 @@
|
||||
server. See the <a href="storage.html">storage driver page</a> for
|
||||
any restrictions for specific storage backends.
|
||||
<span class="since">Since 0.4.1</span></dd>
|
||||
<dt><code>initiator</code></dt>
|
||||
<dd>Required by the <code>iscsi-direct</code> pool in order to provide
|
||||
the iSCSI Qualified Name (IQN) to communicate with the pool's
|
||||
<code>device</code> target IQN. There is one sub-element
|
||||
<code>iqn</code> with the <code>name</code> attribute to describe
|
||||
the IQN for the initiator.
|
||||
<span class="since">Since 4.7.0</span></dd>
|
||||
<dt><code>auth</code></dt>
|
||||
<dd>If present, the <code>auth</code> element provides the
|
||||
authentication credentials needed to access the source by the
|
||||
setting of the <code>type</code> attribute (pool
|
||||
types <code>iscsi</code>, <code>iscsi-direct</code>, <code>rbd</code>).
|
||||
The <code>type</code>
|
||||
types <code>iscsi</code>, <code>rbd</code>). The <code>type</code>
|
||||
must be either "chap" or "ceph". Use "ceph" for
|
||||
Ceph RBD (Rados Block Device) network sources and use "iscsi" for CHAP
|
||||
(Challenge-Handshake Authentication Protocol) iSCSI
|
||||
@@ -407,12 +386,6 @@
|
||||
LVM metadata type. All drivers are required to have a default
|
||||
value for this, so it is optional. <span class="since">Since 0.4.1</span></dd>
|
||||
|
||||
<dt><code>protocol</code></dt>
|
||||
<dd>For a <code>netfs</code> Storage Pool provide a mechanism to
|
||||
define which NFS protocol version number will be used to contact
|
||||
the server's NFS service. The attribute <code>ver</code> accepts
|
||||
an unsigned integer as the version number to use.
|
||||
<span class="since">Since 5.1.0</span></dd>
|
||||
<dt><code>vendor</code></dt>
|
||||
<dd>Provides optional information about the vendor of the
|
||||
storage device. This contains a single
|
||||
@@ -478,8 +451,8 @@
|
||||
The <code>owner</code> element contains the numeric user ID.
|
||||
The <code>group</code> element contains the numeric group ID.
|
||||
If <code>owner</code> or <code>group</code> aren't specified when
|
||||
creating a directory, the UID and GID of the libvirtd process are used.
|
||||
The <code>label</code> element contains the MAC (eg SELinux)
|
||||
creating a directory, the values are inherited from the parent
|
||||
directory. The <code>label</code> element contains the MAC (eg SELinux)
|
||||
label string.
|
||||
<span class="since">Since 0.4.1</span>
|
||||
For running directory or filesystem based pools, these fields
|
||||
@@ -508,145 +481,6 @@
|
||||
device, measured in bytes. <span class="since">Since 0.4.1</span>
|
||||
</p>
|
||||
|
||||
<h3><a id="StoragePoolRefresh">Refresh overrides</a></h3>
|
||||
|
||||
<p>
|
||||
The optional <code>refresh</code> element can control how the pool and
|
||||
associated volumes are refreshed (pool type <code>rbd</code>). The
|
||||
<code>allocation</code> attribute of the <code>volume</code> child element
|
||||
controls the method used for computing the allocation of a volume. The
|
||||
valid attribute values are <code>default</code> to compute the actual
|
||||
usage or <code>capacity</code> to use the logical capacity for cases where
|
||||
computing the allocation is too expensive. The following XML snippet
|
||||
shows the syntax:
|
||||
<pre>
|
||||
<pool type="rbd">
|
||||
<name>myrbdpool</name>
|
||||
...
|
||||
<source/>
|
||||
...
|
||||
<refresh>
|
||||
<volume allocation='capacity'/>
|
||||
</refresh>
|
||||
...
|
||||
</pool>
|
||||
</pre>
|
||||
<span class="since">Since 5.2.0</span>
|
||||
</p>
|
||||
|
||||
<h3><a id="StoragePoolNamespaces">Storage Pool Namespaces</a></h3>
|
||||
|
||||
<p>
|
||||
Usage of Storage Pool Namespaces provides a mechanism to provide
|
||||
pool type specific data in a free form or arbitrary manner via
|
||||
XML syntax targeted solely for the needs of the specific pool type
|
||||
which is not otherwise supported in standard XML. For the "fs" and
|
||||
"netfs" pool types this provides a mechanism to provide additional
|
||||
mount options on the command line. For the "rbd" pool this provides
|
||||
a mechanism to override default settings for RBD configuration options.
|
||||
</p>
|
||||
<p>
|
||||
Usage of namespaces comes with no support guarantees. It is intended
|
||||
for developers testing out a concept prior to requesting an explicitly
|
||||
supported XML option in libvirt, and thus should never be used in
|
||||
production.
|
||||
</p>
|
||||
<dl>
|
||||
<dt><code>fs:mount_opts</code></dt>
|
||||
<dd>Provides an XML namespace mechanism to optionally utilize
|
||||
specifically named options for the mount command via the "-o"
|
||||
option for the <code>fs</code> or <code>netfs</code> type storage
|
||||
pools. In order to designate that the Storage Pool will be using
|
||||
the mechanism, the <code>pool</code> element must be modified to
|
||||
provide the XML namespace attribute syntax as follows:
|
||||
|
||||
<p>
|
||||
xmlns:fs='http://libvirt.org/schemas/storagepool/fs/1.0'
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The <code>fs:mount_opts</code> defines the mount options by
|
||||
specifying multiple <code>fs:option</code> subelements with
|
||||
the attribute <code>name</code> specifying the mount option to
|
||||
be added. The value of the named option is not checked since
|
||||
it's possible options don't exist on all distributions. It is
|
||||
expected that proper and valid options will be supplied for the
|
||||
target host.
|
||||
</p>
|
||||
|
||||
The following XML snippet shows the syntax required in order to
|
||||
utilize for a netfs pool:
|
||||
<pre>
|
||||
<pool type="netfs" xmlns:fs='http://libvirt.org/schemas/storagepool/fs/1.0'>
|
||||
<name>nfsimages</name>
|
||||
...
|
||||
<source>
|
||||
...
|
||||
</source>
|
||||
...
|
||||
<target>
|
||||
...
|
||||
</target>
|
||||
<fs:mount_opts>
|
||||
<fs:option name='sync'/>
|
||||
<fs:option name='lazytime'/>
|
||||
</fs:mount_opts>
|
||||
</pool>
|
||||
...</pre>
|
||||
|
||||
<span class="since">Since 5.1.0.</span></dd>
|
||||
|
||||
<dt><code>rbd:config_opts</code></dt>
|
||||
<dd>Provides an XML namespace mechanism to optionally utilize
|
||||
specifically named options for the RBD configuration options
|
||||
via the rados_conf_set API for the <code>rbd</code> type
|
||||
storage pools. In order to designate that the Storage Pool
|
||||
will be using the mechanism, the <code>pool</code> element
|
||||
must be modified to provide the XML namespace attribute
|
||||
syntax as follows:
|
||||
|
||||
<p>
|
||||
xmlns:rbd='http://libvirt.org/schemas/storagepool/rbd/1.0'
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The <code>rbd:config_opts</code> defines the configuration options
|
||||
by specifying multiple <code>rbd:option</code> subelements with
|
||||
the attribute <code>name</code> specifying the configuration option
|
||||
to be added and <code>value</code> specifying the configuration
|
||||
option value. The name and value for each option is only checked
|
||||
to be not empty. The name and value provided are not checked since
|
||||
it's possible options don't exist on all distributions. It is
|
||||
expected that proper and valid options will be supplied for the
|
||||
target host.
|
||||
</p>
|
||||
|
||||
The following XML snippet shows the syntax required in order to
|
||||
utilize
|
||||
<pre>
|
||||
<pool type="rbd" xmlns:rbd='http://libvirt.org/schemas/storagepool/rbd/1.0'>
|
||||
<name>myrbdpool</name>
|
||||
...
|
||||
<source>
|
||||
...
|
||||
</source>
|
||||
...
|
||||
<target>
|
||||
...
|
||||
</target>
|
||||
...
|
||||
<rbd:config_opts>
|
||||
<rbd:option name='client_mount_timeout' value='45'/>
|
||||
<rbd:option name='rados_mon_op_timeout' value='20'/>
|
||||
<rbd:option name='rados_osd_op_timeout' value='10'/>
|
||||
</rbd:config_opts>
|
||||
</pool>
|
||||
</pre>
|
||||
|
||||
<span class="since">Since 5.1.0.</span></dd>
|
||||
|
||||
</dl>
|
||||
|
||||
<h2><a id="StorageVol">Storage volume XML</a></h2>
|
||||
<p>
|
||||
A storage volume will generally be either a file or a device
|
||||
@@ -802,8 +636,8 @@
|
||||
The <code>owner</code> element contains the numeric user ID.
|
||||
The <code>group</code> element contains the numeric group ID.
|
||||
If <code>owner</code> or <code>group</code> aren't specified when
|
||||
creating a supported volume, the UID and GID of the libvirtd process
|
||||
are used. The <code>label</code> element contains the MAC (eg SELinux)
|
||||
creating a supported volume, the values are inherited from the parent
|
||||
directory. The <code>label</code> element contains the MAC (eg SELinux)
|
||||
label string.
|
||||
For existing directory or filesystem based volumes, these fields
|
||||
will be filled with the values used by the existing file.
|
||||
|
@@ -1,101 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Storage Pool Capabilities XML format</h1>
|
||||
|
||||
<ul id="toc"></ul>
|
||||
|
||||
<h2><a id="Overview">Overview</a></h2>
|
||||
|
||||
<p>The Storage Pool Capabilities XML will provide the information
|
||||
to determine what types of Storage Pools exist, whether the pool is
|
||||
supported, and if relevant the source format types, the required
|
||||
source elements, and the target volume format types. </p>
|
||||
|
||||
<p>The Storage Pool Capabilities XML provides more information than the
|
||||
<a href="/html/libvirt-libvirt-host.html#virConnectGetCapabilities">
|
||||
<code>virConnectGetCapabilities</code>
|
||||
</a>
|
||||
which only provides an enumerated list of supported pool types.</p>
|
||||
|
||||
<h2><a id="elements">Element and attribute overview</a></h2>
|
||||
|
||||
<p>A query interface was added to the virConnect API's to retrieve the
|
||||
XML listing of the set of Storage Pool Capabilities
|
||||
(<span class="since">Since 5.2.0</span>):</p>
|
||||
|
||||
<pre>
|
||||
<a href="/html/libvirt-libvirt-domain.html#virConnectGetStoragePoolCapabilities">virConnectGetStoragePoolCapabilities</a>
|
||||
</pre>
|
||||
|
||||
<p>The root element that emulator capability XML document starts with is
|
||||
named <code>storagepoolCapabilities</code>. There will be any number of
|
||||
<code>pool</code> child elements with two attributes <code>type</code>
|
||||
and <code>supported</code>. Each <code>pool</code> element may have
|
||||
a <code>poolOptions</code> or <code>volOptions</code> subelements to
|
||||
describe the available features. Sample XML output is:</p>
|
||||
|
||||
<pre>
|
||||
<storagepoolCapabilities>
|
||||
<pool type='dir' supported='yes'>
|
||||
<volOptions>
|
||||
<defaultFormat type='raw'</>
|
||||
<enum name='targetFormatType'>
|
||||
<value>none</value>
|
||||
<value>raw</value>
|
||||
...
|
||||
</enum>
|
||||
</volOptions>
|
||||
</pool>
|
||||
<pool type='fs' supported='yes'>
|
||||
<poolOptions>
|
||||
<defaultFormat type='auto'</>
|
||||
<enum name='sourceFormatType'>
|
||||
<value>auto</value>
|
||||
<value>ext2</value>
|
||||
...
|
||||
</enum>
|
||||
</poolOptions>
|
||||
<volOptions>
|
||||
<defaultFormat type='raw'</>
|
||||
<enum name='targetFormatType'>
|
||||
<value>none</value>
|
||||
<value>raw</value>
|
||||
...
|
||||
</enum>
|
||||
</volOptions>
|
||||
</pool>
|
||||
...
|
||||
</storagepoolCapabilities>
|
||||
</pre>
|
||||
|
||||
<p>The following section decribes subelements of the
|
||||
<code>poolOptions</code> and <code>volOptions</code> subelements </p>:
|
||||
|
||||
<dl>
|
||||
<dt><code>defaultFormat</code></dt>
|
||||
<dd>For the <code>poolOptions</code>, the <code>type</code> attribute
|
||||
describes the default format name used for the pool source. For the
|
||||
<code>volOptions</code>, the <code>type</code> attribute describes
|
||||
the default volume name used for each volume.
|
||||
</dd>
|
||||
<dl>
|
||||
<dt><code>enum</code></dt>
|
||||
<dd>Each enum uses a name from the list below with any number of
|
||||
<code>value</code> value subelements describing the valid values.
|
||||
<dl>
|
||||
<dt><code>sourceFormatType</code></dt>
|
||||
<dd>Lists all the possible <code>poolOptions</code> source
|
||||
pool format types.
|
||||
</dd>
|
||||
<dt><code>targetFormatType</code></dt>
|
||||
<dd>Lists all the possible <code>volOptions</code> target volume
|
||||
format types.
|
||||
</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
</dl>
|
||||
</body>
|
||||
</html>
|
@@ -1,25 +0,0 @@
|
||||
# Silly mistakes, mostly found in S-o-b or R-b tags.
|
||||
|
||||
"jdenemar redhat com" jdenemar@redhat.com
|
||||
"pkrempa@redhat st.com" pkrempa@redhat.com
|
||||
jyang@redhat jyang@redhat.com
|
||||
wangjie88.huawei.com wangjie88@huawei.com
|
||||
|
||||
# This is information that's already present in .mailmap, and having to
|
||||
# duplicate it is annoying. Unfortunately gitdm doesn't parse .mailmap
|
||||
# and the format is different, so we can't just point it to the file
|
||||
# either.
|
||||
|
||||
cedric.bosdonnat@free.fr cbosdonnat@suse.com
|
||||
dan@berrange.com berrange@redhat.com
|
||||
fabiano@fidencio.org fidencio@redhat.com
|
||||
intrigeri+libvirt@boum.org intrigeri@boum.org
|
||||
jim@meyering.net meyering@redhat.com
|
||||
laine@laine.org laine@redhat.com
|
||||
redhat@adrb.pl adrian.brzezinski@eo.pl
|
||||
shilei.massclouds@gmx.com shi_lei@massclouds.com
|
||||
|
||||
# This deviates from what's found in .mailmap, but it makes more sense as
|
||||
# far as gitdm is concerned since Jim was employed by Novell at the time.
|
||||
|
||||
jfehlig@linux-ypgk.site jfehlig@novell.com
|
@@ -1,11 +0,0 @@
|
||||
canonical.com
|
||||
|
||||
# Having an @ubuntu.com email address doesn't necessarily imply you're
|
||||
# a Canonical employee; these people, however, seem to have been employed
|
||||
# by Canonical at the time they contributed to libvirt.
|
||||
|
||||
jamie@ubuntu.com
|
||||
serge.hallyn@ubuntu.com
|
||||
smoser@ubuntu.com
|
||||
soren@ubuntu.com
|
||||
wgrant@ubuntu.com
|
@@ -1,2 +0,0 @@
|
||||
datto.com
|
||||
dattobackup.com
|
@@ -1,4 +0,0 @@
|
||||
dreamhost.com
|
||||
dreamhost.net
|
||||
newdream.com
|
||||
newdream.net
|
@@ -1,2 +0,0 @@
|
||||
nec.co.jp
|
||||
nec.com
|
@@ -1,98 +0,0 @@
|
||||
6wind.com 6WIND
|
||||
active.by ActiveCloud
|
||||
aero.org Aerospace
|
||||
akamai.com Akamai
|
||||
amd.com AMD
|
||||
anchor.net.au Anchor
|
||||
aristanetworks.com Arista Networks
|
||||
arpnetworks.com ARP Networks
|
||||
av-test.de AV-TEST
|
||||
b1-systems.de B1 Systems
|
||||
brightbox.co.uk Brightbox
|
||||
cisco.com Cisco
|
||||
citrix.com Citrix
|
||||
cloudwatt.com Cloudwatt
|
||||
codethink.co.uk Codethink
|
||||
cumulusnetworks.com Cumulus Networks
|
||||
datagravity.com DataGravity
|
||||
dell.com Dell
|
||||
diateam.net DIATEAM
|
||||
eldorado.org.br ELDORADO
|
||||
endocode.com Endocode
|
||||
eo.pl eo Networks
|
||||
ericsson.com Ericsson
|
||||
fb.com Facebook
|
||||
firewall-services.com Firewall-Services
|
||||
freescale.com Freescale
|
||||
fujitsu.com Fujitsu
|
||||
gluster.com Gluster
|
||||
gridcentric.ca Gridcentric
|
||||
h3c.com H3C
|
||||
hde.co.jp HDE
|
||||
hds.com Hitachi Data Systems
|
||||
hitachi.com Hitachi
|
||||
hoster-ok.com hoster-ok.com
|
||||
hp.com HP
|
||||
huawei.com Huawei
|
||||
ibm.com IBM
|
||||
inktank.com Inktank Storage
|
||||
intel.com Intel
|
||||
intellilink.co.jp NTT DATA INTELLILINK
|
||||
invisiblethingslab.com Invisible Things Lab
|
||||
jtan.com JTAN
|
||||
juniper.net Juniper Networks
|
||||
laposte.net La Poste
|
||||
le.com Le.com
|
||||
linaro.org Linaro
|
||||
linutronix.de Linutronix
|
||||
linux2go.dk Linux2Go
|
||||
liquidweb.com Liquid Web
|
||||
massclouds.com MassClouds
|
||||
designassembly.de Coffee-Break-Games
|
||||
mellanox.com Mellanox
|
||||
midokura.com Midokura
|
||||
mirantis.com Mirantis
|
||||
munzinger.de Munzinger Archiv
|
||||
netease.com NetEase
|
||||
netzquadrat.de [netzquadrat]
|
||||
nicira.com Nicira
|
||||
nimboxx.com NIMBOXX
|
||||
novell.com Novell
|
||||
ntt.co.jp NTT Group
|
||||
ohmu.fi OHMU
|
||||
open-minds.org OpenThink
|
||||
oracle.com Oracle
|
||||
os-t.de OpenSource Training
|
||||
otb.bg Open Technologies Bulgaria
|
||||
outscale.com OUTSCALE
|
||||
parallels.com Parallels
|
||||
petalogix.com PetaLogix
|
||||
ravellosystems.com Ravello Systems
|
||||
samsung.com Samsung
|
||||
sde.cz SDE
|
||||
semihalf.com Semihalf
|
||||
siemens.com Siemens
|
||||
smartjog.com SmartJog
|
||||
solarflare.com Solarflare
|
||||
ssatr.ch Swiss Satellite Radio
|
||||
sun.com Sun Microsystems
|
||||
taobao.com Taobao
|
||||
tdf.fr TDF
|
||||
tencent.com Tencent
|
||||
transip.nl TransIP
|
||||
tresys.com Tresys
|
||||
uniudc.com Tsinghua Uniudc
|
||||
univention.de Univention
|
||||
veritas.com Veritas
|
||||
vhgroup.net VHGroup
|
||||
virtualopensystems.com Virtual Open Systems
|
||||
websense.com Websense
|
||||
wiktel.com Wikstrom Telephone Company
|
||||
windriver.com Wind River
|
||||
xmission.com XMission
|
||||
xs4all.nl XS4ALL
|
||||
yadro.com YADRO
|
||||
yandex.ru Yandex
|
||||
yunify.com Yunify
|
||||
zstack.io ZStack
|
||||
zte.com.cn ZTE
|
@@ -1,6 +0,0 @@
|
||||
redhat.com
|
||||
|
||||
# These Red Hat employees used their personal email address when contributing
|
||||
# to libvirt and we don't have the corresponding @redhat.com address on file.
|
||||
|
||||
lkundrak@v3.sk
|
@@ -1,7 +0,0 @@
|
||||
suse.com
|
||||
suse.de
|
||||
|
||||
# These SUSE employees used their personal email address when contributing
|
||||
# to libvirt and we don't have the corresponding @suse.com address on file.
|
||||
|
||||
olaf@aepfle.de
|
@@ -1,2 +0,0 @@
|
||||
openvz.org
|
||||
virtuozzo.com
|
@@ -1,17 +0,0 @@
|
||||
byu.net
|
||||
csiro.au
|
||||
epita.fr
|
||||
hibikino.ne.jp
|
||||
infn.it
|
||||
inria.fr
|
||||
isi.edu
|
||||
nict.go.jp
|
||||
parisdescartes.fr
|
||||
telecom-bretagne.eu
|
||||
tu-berlin.de
|
||||
tu-dresden.de
|
||||
ucla.edu
|
||||
upc.edu
|
||||
utah.edu
|
||||
uvt.ro
|
||||
wide.ad.jp
|
@@ -1,12 +0,0 @@
|
||||
alpinelinux.org
|
||||
debian.org
|
||||
fedoraproject.org
|
||||
fsf.org
|
||||
gentoo.org
|
||||
gnome.org
|
||||
gnu.org
|
||||
kernel.org
|
||||
linux.com
|
||||
openbsd.org
|
||||
salasaga.org
|
||||
samba.org
|
@@ -1,83 +0,0 @@
|
||||
# These are all domains you can get a personal email address from, so it's
|
||||
# fair to assume people using such addresses are contributing in their spare
|
||||
# time rather than on behalf of their respective employers.
|
||||
|
||||
126.com
|
||||
gmail.com
|
||||
gmx.com
|
||||
googlemail.com
|
||||
hotmail.com
|
||||
mail.ru
|
||||
pobox.com
|
||||
riseup.net
|
||||
web.de
|
||||
yahoo.com
|
||||
|
||||
# Same as the above, but for domains that don't generally allow random
|
||||
# people to sign up for an email address. In this case we list the email
|
||||
# addresses directly rather than just the domain, because we can't really
|
||||
# consider the domain itself one way or the other.
|
||||
|
||||
adam@pandorasboxen.com
|
||||
agx@sigxcpu.org
|
||||
alexander.nusov@nfvexpress.com
|
||||
andres@lagarcavilla.org
|
||||
asad.saeed@acidseed.com
|
||||
atler@pld-linux.org
|
||||
benoar@dolka.fr
|
||||
beorn@binaries.fr
|
||||
bigon@bigon.be
|
||||
bugzilla.redhat.simon@arlott.org
|
||||
cardoe@cardoe.com
|
||||
charles@dyfis.net
|
||||
d.herrendoerfer@herrendoerfer.name
|
||||
dan@danny.cz
|
||||
debfx@fobos.de
|
||||
eike@sf-mail.de
|
||||
exo@tty.sk
|
||||
fritz@fritz-elfert.de
|
||||
gene@czarc.net
|
||||
gordon@dragonsdawn.net
|
||||
heathpetersen@kandre.com
|
||||
ibaldo@adinet.com.uy
|
||||
igor47@moomers.org
|
||||
infos@nafets.de
|
||||
intrigeri@boum.org
|
||||
james410@cowgill.org.uk
|
||||
james@shubin.ca
|
||||
jasper@humppa.nl
|
||||
jeremy@goop.org
|
||||
jk@ozlabs.org
|
||||
jwm@horde.net
|
||||
klaus@ethgen.de
|
||||
lacos@caesar.elte.hu
|
||||
lenaic@lhuard.fr.eu.org
|
||||
libvirt@dunquino.com
|
||||
lists@egidy.de
|
||||
marti@juffo.org
|
||||
max@rfc2324.org
|
||||
michael@ellerman.id.au
|
||||
mike@very.puzzling.org
|
||||
n0ano@n0ano.com
|
||||
neil@aldur.co.uk
|
||||
nobody@nowhere.ws
|
||||
peter@kieser.ca
|
||||
pieter@hollants.com
|
||||
raimue@codingfarm.de
|
||||
richard@nod.at
|
||||
rmy@tigress.co.uk
|
||||
ruben@rubenkerkhof.com
|
||||
rufo@rufoa.com
|
||||
slawek@kaplonski.pl
|
||||
soulxu@soulxu-thinkpad-t410.(none)
|
||||
stybla@turnovfree.net
|
||||
tai@rakugaki.org
|
||||
thomas@scripty.at
|
||||
v.tolstov@selfip.ru
|
||||
ville.skytta@iki.fi
|
||||
vincent@bernat.im
|
||||
wido@widodh.nl
|
||||
wiedi@frubar.net
|
||||
wongc-redhat@hoku.net
|
||||
xschen@tnsoft.com.cn
|
||||
yurchor@ukr.net
|
@@ -155,7 +155,7 @@
|
||||
also implicitly stating that they have the legal right to make the
|
||||
contribution, if doing so on behalf of a broader organization /
|
||||
company. Most of the project's code is distributed under the GNU
|
||||
Lesser General Public License, version 2.1 or later. Details of the
|
||||
Lesser General Public License, version 2 or later. Details of the
|
||||
exact license under which contributions will be presumed to be
|
||||
covered are found in the source repositories, or website in question.
|
||||
</p>
|
||||
|
@@ -826,39 +826,6 @@
|
||||
}
|
||||
</pre>
|
||||
|
||||
<h2><a id="conditions">Conditional expressions</a></h2>
|
||||
<p>For readability reasons new code should avoid shortening comparisons
|
||||
to 0 for numeric types. Boolean and pointer comparisions may be
|
||||
shortened. All long forms are okay:
|
||||
</p>
|
||||
<pre>
|
||||
virFooPtr foos = NULL;
|
||||
size nfoos = 0;
|
||||
bool hasFoos = false;
|
||||
|
||||
GOOD:
|
||||
if (!foos)
|
||||
if (!hasFoos)
|
||||
if (nfoos == 0)
|
||||
if (foos == NULL)
|
||||
if (hasFoos == true)
|
||||
|
||||
BAD:
|
||||
if (!nfoos)
|
||||
if (nfoos)
|
||||
</pre>
|
||||
<p>New code should avoid the ternary operator as much as possible.
|
||||
Specifically it must never span more than one line or nest:
|
||||
</p>
|
||||
<pre>
|
||||
BAD:
|
||||
char *foo = baz ?
|
||||
virDoSomethingReallyComplex(driver, vm, something, baz->foo) :
|
||||
NULL;
|
||||
|
||||
char *foo = bar ? bar->baz ? bar->baz->foo : "nobaz" : "nobar";
|
||||
</pre>
|
||||
|
||||
<h2><a id="preprocessor">Preprocessor</a></h2>
|
||||
|
||||
<p>Macros defined with an ALL_CAPS name should generally be
|
||||
@@ -1317,34 +1284,6 @@ BAD:
|
||||
does for snprintf.
|
||||
</p>
|
||||
|
||||
<h2><a id="errors">Error message format</a></h2>
|
||||
|
||||
<p>
|
||||
Error messages visible to the user should be short and descriptive. All
|
||||
error messages are translated using gettext and thus must be wrapped in
|
||||
<code>_()</code> macro. To simplify the translation work, the error message
|
||||
must not be concatenated from various parts. To simplify searching for
|
||||
the error message in the code the strings should not be broken even
|
||||
if they result into a line longer than 80 columns and any formatting
|
||||
modifier should be enclosed by quotes or other obvious separator.
|
||||
If a string used with <code>%s</code> can be NULL the NULLSTR macro must
|
||||
be used.
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
GOOD: virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to connect to remote host '%s'"), hostname)
|
||||
|
||||
BAD: virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to %s to remote host '%s'"),
|
||||
"connect", hostname);
|
||||
|
||||
BAD: virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("Failed to connect "
|
||||
"to remote host '%s'),
|
||||
hostname);
|
||||
</pre>
|
||||
|
||||
<h2><a id="goto">Use of goto</a></h2>
|
||||
|
||||
<p>
|
||||
@@ -1473,34 +1412,5 @@ int foo()
|
||||
in the same way, but still make sure they get reviewed if non-trivial.
|
||||
</li>
|
||||
</ul>
|
||||
<h2><a id="coverage">Code coverage reports</a></h2>
|
||||
|
||||
<p>
|
||||
Code coverage HTML reports can be generated with:
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
make coverage
|
||||
</pre>
|
||||
|
||||
<p>
|
||||
Reports will be generated in the <code>cov/</code> directory. Point a
|
||||
web browser at <code>cov/index.html</code> for the full report.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The <code>make coverage</code> target is provided by <code>gnulib</code>.
|
||||
It is a convenience helper for calling the following 3 targets in order.
|
||||
It may be useful to occasionally call these directly.
|
||||
|
||||
<ul>
|
||||
<li><code>make init-coverage</code>: run <code>make clean</code> and
|
||||
remove all code coverage counter files (*.gcno, etc.)</li>
|
||||
<li><code>make build-coverage</code>: run <code>make</code> and
|
||||
<code>make check</code> with <code>CFLAGS</code> filled in with
|
||||
necessary coverage flags</li>
|
||||
<li><code>make gen-coverage</code>: generate the HTML report</li>
|
||||
</ul>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -91,8 +91,10 @@
|
||||
</network>
|
||||
</hookData></pre>
|
||||
|
||||
<p>In the case of an network port being created / deleted, the network
|
||||
XML will be followed with the full XML description of the port:</p>
|
||||
<p>In the case of an interface
|
||||
being plugged/unplugged to/from the network, the network XML will be
|
||||
followed with the full XML description of the domain containing the
|
||||
interface that is being plugged/unplugged:</p>
|
||||
|
||||
<pre><hookData>
|
||||
<network>
|
||||
@@ -100,11 +102,11 @@
|
||||
<uuid>afca425a-2c3a-420c-b2fb-dd7b4950d722</uuid>
|
||||
...
|
||||
</network>
|
||||
<networkport>
|
||||
<uuid>5d744f21-ba4a-4d6e-bdb2-30a35ff3207d</uuid>
|
||||
...
|
||||
<plug type='direct' dev='ens3' mode='vepa'/>
|
||||
</networkport>
|
||||
<domain type='$domain_type' id='$domain_id'>
|
||||
<name>$domain_name</name>
|
||||
<uuid>afca425a-2c3a-420c-b2fb-dd7b4950d722</uuid>
|
||||
...
|
||||
</domain>
|
||||
</hookData></pre>
|
||||
|
||||
<p>Please note that this approach is different from other cases such as
|
||||
@@ -294,15 +296,15 @@
|
||||
<pre>/etc/libvirt/hooks/network network_name stopped end -</pre></li>
|
||||
<li>Later, when network is started and there's an interface from a
|
||||
domain to be plugged into the network, the hook script is called as:<br/>
|
||||
<pre>/etc/libvirt/hooks/network network_name port-created begin -</pre>
|
||||
<pre>/etc/libvirt/hooks/network network_name plugged begin -</pre>
|
||||
Please note, that in this case, the script is passed both network and
|
||||
port XMLs on its stdin.</li>
|
||||
domain XMLs on its stdin.</li>
|
||||
<li>When network is updated, the hook script is called as:<br/>
|
||||
<pre>/etc/libvirt/hooks/network network_name updated begin -</pre></li>
|
||||
<li>When the domain from previous case is shutting down, the interface
|
||||
is unplugged. This leads to another script invocation:<br/>
|
||||
<pre>/etc/libvirt/hooks/network network_name port-deleted begin -</pre>
|
||||
And again, as in previous case, both network and port XMLs are passed
|
||||
<pre>/etc/libvirt/hooks/network network_name unplugged begin -</pre>
|
||||
And again, as in previous case, both network and domain XMLs are passed
|
||||
onto script's stdin.</li>
|
||||
</ul>
|
||||
|
||||
|
@@ -234,39 +234,29 @@ foreach my $src (@srcs) {
|
||||
}
|
||||
|
||||
} else {
|
||||
if ($line =~ m!\s*\.(\w+)\s*=\s*(\w+)\s*,?\s*(?:/\*\s*(\d+\.\d+\.\d+)\s*(?:-\s*(\d+\.\d+\.\d+))?\s*\*/\s*)?$!) {
|
||||
if ($line =~ m!\s*\.(\w+)\s*=\s*(\w+)\s*,?\s*(?:/\*\s*(\d+\.\d+\.\d+)\s*\*/\s*)?$!) {
|
||||
my $api = $1;
|
||||
my $meth = $2;
|
||||
my $vers = $3;
|
||||
my $deleted = $4;
|
||||
|
||||
next if $api eq "no" || $api eq "name";
|
||||
|
||||
if ($meth eq "NULL" && !defined $deleted) {
|
||||
die "Method impl for $api is NULL, but no deleted version is provided";
|
||||
}
|
||||
if ($meth ne "NULL" && defined $deleted) {
|
||||
die "Method impl for $api is non-NULL, but deleted version is provided";
|
||||
}
|
||||
|
||||
die "Method $meth in $src is missing version" unless defined $vers || $api eq "connectURIProbe";
|
||||
|
||||
die "Driver method for $api is NULL in $src" if $meth eq "NULL";
|
||||
|
||||
if (!exists($groups{$ingrp}->{apis}->{$api})) {
|
||||
next if $api =~ /\w(Open|Close|URIProbe)/;
|
||||
|
||||
die "Found unexpected method $api in $ingrp\n";
|
||||
}
|
||||
|
||||
$groups{$ingrp}->{drivers}->{$impl}->{$api} = {};
|
||||
$groups{$ingrp}->{drivers}->{$impl}->{$api}->{vers} = $vers;
|
||||
$groups{$ingrp}->{drivers}->{$impl}->{$api}->{deleted} = $deleted;
|
||||
$groups{$ingrp}->{drivers}->{$impl}->{$api} = $vers;
|
||||
if ($api eq "domainMigratePrepare" ||
|
||||
$api eq "domainMigratePrepare2" ||
|
||||
$api eq "domainMigratePrepare3") {
|
||||
if (!$groups{$ingrp}->{drivers}->{$impl}->{"domainMigrate"}) {
|
||||
$groups{$ingrp}->{drivers}->{$impl}->{"domainMigrate"} = {};
|
||||
$groups{$ingrp}->{drivers}->{$impl}->{"domainMigrate"}->{vers} = $vers;
|
||||
}
|
||||
$groups{$ingrp}->{drivers}->{$impl}->{"domainMigrate"} = $vers
|
||||
unless $groups{$ingrp}->{drivers}->{$impl}->{"domainMigrate"};
|
||||
}
|
||||
|
||||
} elsif ($line =~ /}/) {
|
||||
@@ -290,7 +280,7 @@ $groups{virHypervisorDriver}->{apis}->{"domainMigrate"} = "virDomainMigrate";
|
||||
my $openAuthVers = (0 * 1000 * 1000) + (4 * 1000) + 0;
|
||||
|
||||
foreach my $drv (keys %{$groups{"virHypervisorDriver"}->{drivers}}) {
|
||||
my $openVersStr = $groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"connectOpen"}->{vers};
|
||||
my $openVersStr = $groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"connectOpen"};
|
||||
my $openVers;
|
||||
if ($openVersStr =~ /(\d+)\.(\d+)\.(\d+)/) {
|
||||
$openVers = ($1 * 1000 * 1000) + ($2 * 1000) + $3;
|
||||
@@ -300,16 +290,14 @@ foreach my $drv (keys %{$groups{"virHypervisorDriver"}->{drivers}}) {
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"connectOpenReadOnly"} =
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"connectOpen"};
|
||||
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"connectOpenAuth"} = {};
|
||||
|
||||
# virConnectOpenAuth is always 0.4.0 if the driver existed
|
||||
# before this time, otherwise it matches the version of
|
||||
# the driver's virConnectOpen entry
|
||||
if ($openVersStr eq "Y" ||
|
||||
$openVers >= $openAuthVers) {
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"connectOpenAuth"}->{vers} = $openVersStr;
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"connectOpenAuth"} = $openVersStr;
|
||||
} else {
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"connectOpenAuth"}->{vers} = "0.4.0";
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"connectOpenAuth"} = "0.4.0";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -321,23 +309,21 @@ $groups{virHypervisorDriver}->{apis}->{"domainCreateLinux"} = "virDomainCreateLi
|
||||
my $createAPIVers = (0 * 1000 * 1000) + (0 * 1000) + 3;
|
||||
|
||||
foreach my $drv (keys %{$groups{"virHypervisorDriver"}->{drivers}}) {
|
||||
my $createVersStr = $groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"domainCreateXML"}->{vers};
|
||||
my $createVersStr = $groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"domainCreateXML"};
|
||||
next unless defined $createVersStr;
|
||||
my $createVers;
|
||||
if ($createVersStr =~ /(\d+)\.(\d+)\.(\d+)/) {
|
||||
$createVers = ($1 * 1000 * 1000) + ($2 * 1000) + $3;
|
||||
}
|
||||
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"domainCreateLinux"} = {};
|
||||
|
||||
# virCreateLinux is always 0.0.3 if the driver existed
|
||||
# before this time, otherwise it matches the version of
|
||||
# the driver's virCreateXML entry
|
||||
if ($createVersStr eq "Y" ||
|
||||
$createVers >= $createAPIVers) {
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"domainCreateLinux"}->{vers} = $createVersStr;
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"domainCreateLinux"} = $createVersStr;
|
||||
} else {
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"domainCreateLinux"}->{vers} = "0.0.3";
|
||||
$groups{"virHypervisorDriver"}->{drivers}->{$drv}->{"domainCreateLinux"} = "0.0.3";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -356,9 +342,7 @@ print <<EOF;
|
||||
<p>
|
||||
This page documents which <a href="html/">libvirt calls</a> work on
|
||||
which libvirt drivers / hypervisors, and which version the API appeared
|
||||
in. If a hypervisor driver later dropped support for the API, the version
|
||||
when it was removed is also mentioned (highlighted in
|
||||
<span class="removedhv">dark red</span>).
|
||||
in.
|
||||
</p>
|
||||
|
||||
EOF
|
||||
@@ -411,16 +395,11 @@ EOF
|
||||
EOF
|
||||
|
||||
foreach my $drv (sort {$a cmp $b } keys %{$groups{$grp}->{drivers}}) {
|
||||
print "<td>";
|
||||
if (exists $groups{$grp}->{drivers}->{$drv}->{$field}) {
|
||||
if ($groups{$grp}->{drivers}->{$drv}->{$field}->{vers}) {
|
||||
print $groups{$grp}->{drivers}->{$drv}->{$field}->{vers};
|
||||
}
|
||||
if ($groups{$grp}->{drivers}->{$drv}->{$field}->{deleted}) {
|
||||
print " - <span class=\"removedhv\">", $groups{$grp}->{drivers}->{$drv}->{$field}->{deleted}, "</span>";
|
||||
}
|
||||
print "<td>", $groups{$grp}->{drivers}->{$drv}->{$field}, "</td>\n";
|
||||
} else {
|
||||
print "<td></td>\n";
|
||||
}
|
||||
print "</td>\n";
|
||||
}
|
||||
|
||||
print <<EOF;
|
||||
|
@@ -2,9 +2,20 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<script type="text/javascript" src="js/jquery-3.1.1.min.js"> </script>
|
||||
<script type="text/javascript" src="js/moment.min.js"> </script>
|
||||
<script type="text/javascript" src="js/jquery.rss.min.js"> </script>
|
||||
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
window.addEventListener("load", function() { fetchRSS() });
|
||||
jQuery(function($) {
|
||||
$("#planet").rss("http://planet.virt-tools.org/atom.xml", {
|
||||
ssl: true,
|
||||
layoutTemplate: '<dl>{entries}</dl>',
|
||||
entryTemplate: '<dt><a href="{url}">{title}</a></dt><dd>by {author} on {date}</li>',
|
||||
dateFormat: 'DD MMM YYYY'
|
||||
})
|
||||
})
|
||||
// -->
|
||||
</script>
|
||||
</head>
|
||||
@@ -55,7 +66,6 @@
|
||||
<a href="formatstorageencryption.html">storage encryption</a>,
|
||||
<a href="formatcaps.html">capabilities</a>,
|
||||
<a href="formatdomaincaps.html">domain capabilities</a>,
|
||||
<a href="formatstoragecaps.html">storage pool capabilities</a>,
|
||||
<a href="formatnode.html">node devices</a>,
|
||||
<a href="formatsecret.html">secrets</a>,
|
||||
<a href="formatsnapshot.html">snapshots</a></dd>
|
||||
|
1266
docs/index.py
Executable file
1266
docs/index.py
Executable file
File diff suppressed because it is too large
Load Diff
@@ -426,7 +426,7 @@ dprintf(logfd, "%s: ", timestamp);
|
||||
VIR_FREE(timestamp);
|
||||
virCommandWriteArgLog(cmd, logfd);
|
||||
|
||||
string = virCommandToString(cmd, false);
|
||||
string = virCommandToString(cmd);
|
||||
if (string)
|
||||
VIR_DEBUG("about to run %s", string);
|
||||
VIR_FREE(string);
|
||||
|
@@ -539,6 +539,13 @@ C <-- |32| 8 | 1 | 3 | 1 | 1 | 0 | .o.oOo | <-- S (reply)
|
||||
be part of the underlying server.
|
||||
</dd>
|
||||
|
||||
<dt><code>virNetServerMDNSPtr</code> (virnetservermdns.h)</dt>
|
||||
<dd>The virNetServerMDNS APIs are used to advertise a server
|
||||
across the local network, enabling clients to automatically
|
||||
detect the existence of remote services. This is done by
|
||||
interfacing with the Avahi mDNS advertisement service.
|
||||
</dd>
|
||||
|
||||
<dt><code>virNetServerClientPtr</code> (virnetserverclient.h)</dt>
|
||||
<dd>The virNetServerClient APIs are used to manage I/O related
|
||||
to a single client network connection. It handles initial
|
||||
|
4
docs/js/jquery-3.1.1.min.js
vendored
Normal file
4
docs/js/jquery-3.1.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11
docs/js/jquery.rss.min.js
vendored
Normal file
11
docs/js/jquery.rss.min.js
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
(function(d){var e=function(a,b,c,f){this.target=a;this.url=b;this.html=[];this.effectQueue=[];this.options=d.extend({ssl:!1,host:"www.feedrapp.info",limit:null,key:null,layoutTemplate:"<ul>{entries}</ul>",entryTemplate:'<li><a href="{url}">[{author}@{date}] {title}</a><br/>{shortBodyPlain}</li>',tokens:{},outputMode:"json",dateFormat:"dddd MMM Do",dateLocale:"en",effect:"show",offsetStart:!1,offsetEnd:!1,error:function(){console.log("jQuery RSS: url doesn't link to RSS-Feed")},onData:function(){},
|
||||
success:function(){}},c||{});this.options.ssl&&"www.feedrapp.info"===this.options.host&&(this.options.host="feedrapp.herokuapp.com");this.callback=f||this.options.success};e.htmlTags="doctype,html,head,title,base,link,meta,style,script,noscript,body,article,nav,aside,section,header,footer,h1-h6,hgroup,address,p,hr,pre,blockquote,ol,ul,li,dl,dt,dd,figure,figcaption,div,table,caption,thead,tbody,tfoot,tr,th,td,col,colgroup,form,fieldset,legend,label,input,button,select,datalist,optgroup,option,textarea,keygen,output,progress,meter,details,summary,command,menu,del,ins,img,iframe,embed,object,param,video,audio,source,canvas,track,map,area,a,em,strong,i,b,u,s,small,abbr,q,cite,dfn,sub,sup,time,code,kbd,samp,var,mark,bdi,bdo,ruby,rt,rp,span,br,wbr".split(",");
|
||||
e.prototype.load=function(a){var b="http"+(this.options.ssl?"s":"")+"://"+this.options.host+"?callback=?&q="+encodeURIComponent(this.url);this.options.offsetStart&&this.options.offsetEnd&&(this.options.limit=this.options.offsetEnd);null!==this.options.limit&&(b+="&num="+this.options.limit);null!==this.options.key&&(b+="&key="+this.options.key);d.getJSON(b,a)};e.prototype.render=function(){var a=this;this.load(function(b){try{a.feed=b.responseData.feed,a.entries=b.responseData.feed.entries}catch(c){return a.entries=
|
||||
[],a.feed=null,a.options.error.call(a)}b=a.generateHTMLForEntries();a.target.append(b.layout);if(0!==b.entries.length){d.isFunction(a.options.onData)&&a.options.onData.call(a);var f=d(b.layout).is("entries")?b.layout:d("entries",b.layout);a.appendEntriesAndApplyEffects(f,b.entries)}0<a.effectQueue.length?a.executeEffectQueue(a.callback):d.isFunction(a.callback)&&a.callback.call(a)})};e.prototype.appendEntriesAndApplyEffects=function(a,b){var c=this;d.each(b,function(b,e){var d=c.wrapContent(e);"show"===
|
||||
c.options.effect?a.before(d):(d.css({display:"none"}),a.before(d),c.applyEffect(d,c.options.effect))});a.remove()};e.prototype.generateHTMLForEntries=function(){var a=this,b={entries:[],layout:null};d(this.entries).each(function(){var c=a.options.offsetStart,f=a.options.offsetEnd;c&&f?index>=c&&index<=f&&a.isRelevant(this,b.entries)&&(c=a.evaluateStringForEntry(a.options.entryTemplate,this),b.entries.push(c)):a.isRelevant(this,b.entries)&&(c=a.evaluateStringForEntry(a.options.entryTemplate,this),
|
||||
b.entries.push(c))});b.layout=this.options.entryTemplate?this.wrapContent(this.options.layoutTemplate.replace("{entries}","<entries></entries>")):this.wrapContent("<div><entries></entries></div>");return b};e.prototype.wrapContent=function(a){return 0!==d.trim(a).indexOf("<")?d("<div>"+a+"</div>"):d(a)};e.prototype.applyEffect=function(a,b,c){switch(b){case "slide":a.slideDown("slow",c);break;case "slideFast":a.slideDown(c);break;case "slideSynced":this.effectQueue.push({element:a,effect:"slide"});
|
||||
break;case "slideFastSynced":this.effectQueue.push({element:a,effect:"slideFast"})}};e.prototype.executeEffectQueue=function(a){var b=this;this.effectQueue.reverse();var c=function(){var f=b.effectQueue.pop();f?b.applyEffect(f.element,f.effect,c):a&&a()};c()};e.prototype.evaluateStringForEntry=function(a,b){var c=a,f=this;d(a.match(/(\{.*?\})/g)).each(function(){var a=this.toString();c=c.replace(a,f.getValueForToken(a,b))});return c};e.prototype.isRelevant=function(a,b){var c=this.getTokenMap(a);
|
||||
return this.options.filter?this.options.filterLimit&&this.options.filterLimit===b.length?!1:this.options.filter(a,c):!0};e.prototype.getFormattedDate=function(a){if(this.options.dateFormatFunction)return this.options.dateFormatFunction(a);return"undefined"!==typeof moment?(a=moment(new Date(a)),a=a.locale?a.locale(this.options.dateLocale):a.lang(this.options.dateLocale),a.format(this.options.dateFormat)):a};e.prototype.getTokenMap=function(a){if(!this.feedTokens){var b=JSON.parse(JSON.stringify(this.feed));
|
||||
delete b.entries;this.feedTokens=b}return d.extend({feed:this.feedTokens,url:a.link,author:a.author,date:this.getFormattedDate(a.publishedDate),title:a.title,body:a.content,shortBody:a.contentSnippet,bodyPlain:function(a){for(var a=a.content.replace(/<script[\\r\\\s\S]*<\/script>/mgi,"").replace(/<\/?[^>]+>/gi,""),b=0;b<e.htmlTags.length;b++)a=a.replace(RegExp("<"+e.htmlTags[b],"gi"),"");return a}(a),shortBodyPlain:a.contentSnippet.replace(/<\/?[^>]+>/gi,""),index:d.inArray(a,this.entries),totalEntries:this.entries.length,
|
||||
teaserImage:function(a){try{return a.content.match(/(<img.*?>)/gi)[0]}catch(b){return""}}(a),teaserImageUrl:function(a){try{return a.content.match(/(<img.*?>)/gi)[0].match(/src="(.*?)"/)[1]}catch(b){return""}}(a)},this.options.tokens)};e.prototype.getValueForToken=function(a,b){var c=this.getTokenMap(b),d=a.replace(/[\{\}]/g,""),d=c[d];if("undefined"!==typeof d)return"function"===typeof d?d(b,c):d;throw Error("Unknown token: "+a+", url:"+this.url);};d.fn.rss=function(a,b,c){(new e(this,a,b,c)).render();
|
||||
return this}})(jQuery);
|
141
docs/js/main.js
141
docs/js/main.js
@@ -1,141 +0,0 @@
|
||||
"use strict";
|
||||
|
||||
function pageload() {
|
||||
window.addEventListener("scroll", function(e){
|
||||
var distanceY = window.pageYOffset || document.documentElement.scrollTop;
|
||||
var shrinkOn = 94;
|
||||
var home = document.getElementById("home");
|
||||
var links = document.getElementById("jumplinks");
|
||||
var search = document.getElementById("search");
|
||||
var body = document.getElementById("body");
|
||||
if (distanceY > shrinkOn) {
|
||||
if (home.className != "navhide") {
|
||||
body.className = "navhide";
|
||||
home.className = "navhide";
|
||||
links.className = "navhide";
|
||||
search.className = "navhide";
|
||||
}
|
||||
} else {
|
||||
if (home.className == "navhide") {
|
||||
body.className = "";
|
||||
home.className = "";
|
||||
links.className = "";
|
||||
search.className = "";
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/* Setting this class makes the advanced search options visible */
|
||||
var advancedSearch = document.getElementById("advancedsearch");
|
||||
advancedSearch.className = "advancedsearch";
|
||||
|
||||
var simpleSearch = document.getElementById("simplesearch");
|
||||
simpleSearch.addEventListener("submit", advancedsearch);
|
||||
}
|
||||
|
||||
function advancedsearch(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
var form = document.createElement("form");
|
||||
form.setAttribute("method", "get");
|
||||
|
||||
var newq = document.createElement("input");
|
||||
newq.setAttribute("type", "hidden");
|
||||
form.appendChild(newq);
|
||||
|
||||
var q = document.getElementById("searchq");
|
||||
var whats = document.getElementsByName("what");
|
||||
var what = "website";
|
||||
for (var i = 0; i < whats.length; i++) {
|
||||
if (whats[i].checked) {
|
||||
what = whats[i].value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (what == "website") {
|
||||
form.setAttribute("action", "https://google.com/search");
|
||||
newq.setAttribute("name", "q");
|
||||
newq.value = "site:libvirt.org " + q.value;
|
||||
} else if (what == "wiki") {
|
||||
form.setAttribute("action", "https://wiki.libvirt.org/index.php");
|
||||
newq.setAttribute("name", "search");
|
||||
newq.value = q.value;
|
||||
} else if (what == "devs") {
|
||||
form.setAttribute("action", "https://google.com/search");
|
||||
newq.setAttribute("name", "q");
|
||||
newq.value = "site:redhat.com/archives/libvir-list " + q.value;
|
||||
} else if (what == "users") {
|
||||
form.setAttribute("action", "https://google.com/search");
|
||||
newq.setAttribute("name", "q");
|
||||
newq.value = "site:redhat.com/archives/libvirt-users " + q.value;
|
||||
}
|
||||
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function fetchRSS() {
|
||||
if (document.location.protocol == "file:")
|
||||
return;
|
||||
|
||||
var planet = document.getElementById("planet");
|
||||
if (planet === null)
|
||||
return;
|
||||
|
||||
var req = new XMLHttpRequest();
|
||||
req.open("GET", "https://planet.virt-tools.org/atom.xml");
|
||||
req.setRequestHeader("Accept", "application/atom+xml, text/xml");
|
||||
req.onerror = function(e) {
|
||||
if (this.statusText != "")
|
||||
console.error(this);
|
||||
};
|
||||
req.onload = function(e) {
|
||||
if (this.readyState !== 4)
|
||||
return;
|
||||
|
||||
if (this.status != 200) {
|
||||
console.error(this.statusText);
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.responseXML === null) {
|
||||
console.error("Atom response is not an XML");
|
||||
return;
|
||||
}
|
||||
|
||||
var dl = document.createElement("dl");
|
||||
var dateOpts = { day: "numeric", month: "short", year: "numeric"};
|
||||
|
||||
var entries = this.responseXML.querySelectorAll("feed > entry:not(:nth-of-type(1n+5))");
|
||||
|
||||
entries.forEach(function(e) {
|
||||
var name = e.querySelector("author > name").textContent;
|
||||
var title = e.querySelector("title").textContent;
|
||||
var updated = e.querySelector("updated").textContent;
|
||||
var link = e.querySelector("link").attributes.href.textContent;
|
||||
|
||||
var a = document.createElement("a");
|
||||
a.href = link;
|
||||
a.innerText = title;
|
||||
|
||||
var dt = document.createElement("dt");
|
||||
dt.appendChild(a);
|
||||
dl.appendChild(dt);
|
||||
|
||||
var date = new Date(updated);
|
||||
date = date.toLocaleDateString("default", dateOpts);
|
||||
|
||||
var dd = document.createElement("dd");
|
||||
dd.innerText = ` by ${name} on ${date}`;
|
||||
|
||||
dl.appendChild(dd);
|
||||
});
|
||||
|
||||
planet.appendChild(dl);
|
||||
};
|
||||
req.send();
|
||||
}
|
7
docs/js/moment.min.js
vendored
Normal file
7
docs/js/moment.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -100,15 +100,14 @@
|
||||
margin-right: auto;
|
||||
padding: 0px;
|
||||
padding-bottom: 1em;
|
||||
max-width: 95%;
|
||||
width: 70em;
|
||||
max-width: 60em;
|
||||
}
|
||||
|
||||
body.index #content,
|
||||
body.docs #content,
|
||||
body.hvsupport #content
|
||||
{
|
||||
width: inherit;
|
||||
max-width: inherit;
|
||||
}
|
||||
|
||||
pre {
|
||||
@@ -274,12 +273,6 @@ span.since {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
span.removed {
|
||||
color: darkred;
|
||||
font-style: italic;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img.diagram {
|
||||
background: rgb(230,230,230);
|
||||
border: 2px dotted rgb(178,178,178);
|
||||
@@ -400,7 +393,6 @@ table.acl {
|
||||
|
||||
table.acl tr, table.acl td {
|
||||
padding: 0.3em;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
table.acl thead {
|
||||
@@ -544,65 +536,3 @@ dl.mail dt a:hover {
|
||||
color: rgb(255, 230, 0);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
td.enumvalue {
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
#advancedsearch {
|
||||
display: none;
|
||||
vertical-align: bottom;
|
||||
position: absolute;
|
||||
padding: 1em;
|
||||
padding-top: 0em;
|
||||
margin-top: 0em;
|
||||
top: 100px;
|
||||
right: 0px;
|
||||
width: 13em;
|
||||
text-align: left;
|
||||
color: white;
|
||||
background: rgb(0, 95, 97);
|
||||
border-left: 3px solid rgb(60, 133, 124);
|
||||
border-bottom: 3px solid rgb(60, 133, 124);
|
||||
}
|
||||
|
||||
/* Use div.advancedsearch, not #advancedsearch because the
|
||||
* 'advancedsearch' class is set dynamically when javascript
|
||||
* loads. This ensures that the advancedsearch options are
|
||||
* not displayed when javascript is disabled.
|
||||
*/
|
||||
#search:hover div.advancedsearch {
|
||||
display: table;
|
||||
}
|
||||
|
||||
#advancedsearch span {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#advancedsearch input[type=radio] {
|
||||
height: inherit;
|
||||
display: inline;
|
||||
}
|
||||
|
||||
#advancedsearch label {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
.removedhv {
|
||||
color: darkred;
|
||||
}
|
||||
|
||||
ul.news-section-content {
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
|
||||
ul.news-section-content li dl dt {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
ul.news-section-content li dl dd {
|
||||
margin-left: 1em;
|
||||
margin-right: 0;
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
@@ -15,7 +15,6 @@
|
||||
margin: 0px;
|
||||
background: white;
|
||||
padding: 0px;
|
||||
height: 2em;
|
||||
}
|
||||
#search form {
|
||||
padding: 5px;
|
||||
@@ -92,10 +91,4 @@
|
||||
float: none;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
#advancedsearch {
|
||||
margin-top: 4em;
|
||||
border: 0px;
|
||||
background: white;
|
||||
color: black;
|
||||
}
|
||||
}
|
||||
|
@@ -288,24 +288,6 @@
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template name="enumvalue">
|
||||
<xsl:param name="value" select="@value"/>
|
||||
<xsl:param name="valuehex" select="@value_hex"/>
|
||||
<xsl:param name="valuebitshift" select="@value_bitshift"/>
|
||||
<xsl:value-of select="@value"/>
|
||||
<xsl:if test="$valuehex != '' or $valuebitshift != ''">
|
||||
<xsl:text> (</xsl:text>
|
||||
<xsl:if test="$valuehex != ''">
|
||||
<xsl:value-of select="@value_hex"/>
|
||||
</xsl:if>
|
||||
<xsl:if test="$valuebitshift != ''">
|
||||
<xsl:text>; 1 << </xsl:text>
|
||||
<xsl:value-of select="@value_bitshift"/>
|
||||
</xsl:if>
|
||||
<xsl:text>)</xsl:text>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="typedef[@type = 'enum']">
|
||||
<xsl:variable name="name" select="string(@name)"/>
|
||||
<h3><a name="{$name}"><code><xsl:value-of select="$name"/></code></a></h3>
|
||||
@@ -324,7 +306,7 @@
|
||||
<td><xsl:text> = </xsl:text></td>
|
||||
<xsl:choose>
|
||||
<xsl:when test="@info != ''">
|
||||
<td class="enumvalue"><xsl:call-template name="enumvalue"/></td>
|
||||
<td><xsl:value-of select="@value"/></td>
|
||||
<td>
|
||||
<div class="comment">
|
||||
<xsl:call-template name="dumptext">
|
||||
@@ -334,7 +316,7 @@
|
||||
</td>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<td colspan="2" class="enumvalue"><xsl:call-template name="enumvalue"/></td>
|
||||
<td colspan="2"><xsl:value-of select="@value"/></td>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</tr>
|
||||
|
@@ -15,8 +15,7 @@
|
||||
<xsl:text>
|
||||
==============================================================================
|
||||
Older libvirt releases didn't have proper release notes: if you are interested
|
||||
in changes between them, you should check out docs/news-*.html or the full git
|
||||
log (see instructions in ChangeLog).
|
||||
in changes between them, you should check out ChangeLog* and docs/news-*.html.
|
||||
</xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
|
@@ -58,7 +58,7 @@
|
||||
<xsl:value-of select="@title"/>
|
||||
</strong>
|
||||
<xsl:if test="*">
|
||||
<ul class="news-section-content">
|
||||
<ul>
|
||||
<xsl:apply-templates select="change"/>
|
||||
</ul>
|
||||
</xsl:if>
|
||||
@@ -68,14 +68,8 @@
|
||||
<!-- Change -->
|
||||
<xsl:template match="change">
|
||||
<li>
|
||||
<dl>
|
||||
<dt>
|
||||
<xsl:apply-templates select="summary"/>
|
||||
</dt>
|
||||
<dd>
|
||||
<xsl:apply-templates select="description"/>
|
||||
</dd>
|
||||
</dl>
|
||||
<xsl:apply-templates select="summary"/>
|
||||
<xsl:apply-templates select="description"/>
|
||||
</li>
|
||||
</xsl:template>
|
||||
|
||||
@@ -86,6 +80,7 @@
|
||||
|
||||
<!-- Change description -->
|
||||
<xsl:template match="description">
|
||||
<br/>
|
||||
<xsl:apply-templates/>
|
||||
</xsl:template>
|
||||
|
||||
|
1032
docs/news.xml
1032
docs/news.xml
File diff suppressed because it is too large
Load Diff
@@ -99,11 +99,40 @@
|
||||
<meta name="description" content="libvirt, virtualization, virtualization API"/>
|
||||
<xsl:apply-templates select="/html:html/html:head/*" mode="content"/>
|
||||
|
||||
<script type="text/javascript" src="{$href_base}js/main.js">
|
||||
<xsl:comment>// forces non-empty element</xsl:comment>
|
||||
<script type="text/javascript">
|
||||
<xsl:comment>
|
||||
<![CDATA[
|
||||
function init() {
|
||||
window.addEventListener('scroll', function(e){
|
||||
var distanceY = window.pageYOffset || document.documentElement.scrollTop,
|
||||
shrinkOn = 94
|
||||
home = document.getElementById("home");
|
||||
links = document.getElementById("jumplinks");
|
||||
search = document.getElementById("search");
|
||||
body = document.getElementById("body");
|
||||
if (distanceY > shrinkOn) {
|
||||
if (home.className != "navhide") {
|
||||
body.className = "navhide"
|
||||
home.className = "navhide"
|
||||
links.className = "navhide"
|
||||
search.className = "navhide"
|
||||
}
|
||||
} else {
|
||||
if (home.className == "navhide") {
|
||||
body.className = ""
|
||||
home.className = ""
|
||||
links.className = ""
|
||||
search.className = ""
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
window.onload = init();
|
||||
]]>
|
||||
</xsl:comment>
|
||||
</script>
|
||||
</head>
|
||||
<body onload="pageload()">
|
||||
<body>
|
||||
<xsl:if test="html:html/html:body/@class">
|
||||
<xsl:attribute name="class">
|
||||
<xsl:value-of select="html:html/html:body/@class"/>
|
||||
@@ -126,19 +155,12 @@
|
||||
</ul>
|
||||
</div>
|
||||
<div id="search">
|
||||
<form id="simplesearch" action="https://www.google.com/search" enctype="application/x-www-form-urlencoded" method="get">
|
||||
<form action="{$href_base}search.php" enctype="application/x-www-form-urlencoded" method="get">
|
||||
<div>
|
||||
<input id="searchsite" name="sitesearch" type="hidden" value="libvirt.org"/>
|
||||
<input id="searchq" name="q" type="text" size="12" value=""/>
|
||||
<input name="query" type="text" size="12" value=""/>
|
||||
<input name="submit" type="submit" value="Go"/>
|
||||
</div>
|
||||
</form>
|
||||
<div id="advancedsearch">
|
||||
<span><input type="radio" name="what" id="whatwebsite" checked="checked" value="website"/><label for="whatwebsite">Website</label></span>
|
||||
<span><input type="radio" name="what" id="whatwiki" value="wiki"/><label for="whatwiki">Wiki</label></span>
|
||||
<span><input type="radio" name="what" id="whatdevs" value="devs"/><label for="whatdevs">Developers list</label></span>
|
||||
<span><input type="radio" name="what" id="whatusers" value="users"/><label for="whatusers">Users list</label></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="footer">
|
||||
@@ -153,6 +175,7 @@
|
||||
<h3>Community</h3>
|
||||
<ul>
|
||||
<li><a href="https://twitter.com/hashtag/libvirt">twitter</a></li>
|
||||
<li><a href="https://plus.google.com/communities/109522598353007505282">google+</a></li>
|
||||
<li><a href="http://stackoverflow.com/questions/tagged/libvirt">stackoverflow</a></li>
|
||||
<li><a href="http://serverfault.com/questions/tagged/libvirt">serverfault</a></li>
|
||||
</ul>
|
||||
|
@@ -99,12 +99,13 @@
|
||||
</p>
|
||||
|
||||
<pre>
|
||||
<controller type='pci' model='pcie-to-pci-bridge'/></pre>
|
||||
<controller type='pci' model='dmi-to-pci-bridge'/>
|
||||
<controller type='pci' model='pci-bridge'/></pre>
|
||||
|
||||
<p>
|
||||
and you'll be able to hotplug up to 31 legacy PCI devices,
|
||||
either emulated or assigned from the host, in the slots
|
||||
from 0x01 to 0x1f of the <code>pcie-to-pci-bridge</code> controller.
|
||||
from 0x01 to 0x1f of the <code>pci-bridge</code> controller.
|
||||
</p>
|
||||
|
||||
<h3><a id="x86_64-i440fx">i440fx (pc) machine type</a></h3>
|
||||
|
@@ -39,7 +39,7 @@
|
||||
<ul>
|
||||
<li><a href="https://repology.org/metapackage/libvirt/versions">libvirt</a></li>
|
||||
<li><a href="https://repology.org/metapackage/qemu/versions">qemu</a></li>
|
||||
<li><a href="https://repology.org/metapackage/qemu-kvm/versions">qemu-kvm</a></li>
|
||||
<li><a href="https://repology.org/metapackage/qemu/versions">qemu-kvm</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
@@ -17,6 +17,9 @@
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
# Authors:
|
||||
# Andrea Bolognani <abologna@redhat.com>
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
|
@@ -821,6 +821,23 @@ Blank lines and comments beginning with <code>#</code> are ignored.
|
||||
<td> "16509" </td>
|
||||
<td>
|
||||
The port number or service name to listen on for unencrypted TCP connections.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> mdns_adv <i>[0|1]</i> </td>
|
||||
<td> 0 (advertise with mDNS) </td>
|
||||
<td>
|
||||
If set to 1 then the virtualization service will be advertised over
|
||||
mDNS to hosts on the local LAN segment.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> mdns_name <i>"name"</i> </td>
|
||||
<td> "Virtualization Host HOSTNAME" </td>
|
||||
<td>
|
||||
The name to advertise for this host with Avahi mDNS. The default
|
||||
includes the machine's short hostname. This must be unique to the
|
||||
local LAN segment.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
|
@@ -65,17 +65,6 @@
|
||||
</data>
|
||||
</choice>
|
||||
</define>
|
||||
<define name="uint32">
|
||||
<choice>
|
||||
<data type="string">
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{1,8}</param>
|
||||
</data>
|
||||
<data type="unsignedInt">
|
||||
<param name="minInclusive">0</param>
|
||||
<param name="maxInclusive">4294967295</param>
|
||||
</data>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
<define name="UUID">
|
||||
<choice>
|
||||
@@ -122,22 +111,6 @@
|
||||
</attribute>
|
||||
</optional>
|
||||
</define>
|
||||
<define name="zpciaddress">
|
||||
<optional>
|
||||
<element name="zpci">
|
||||
<optional>
|
||||
<attribute name="uid">
|
||||
<ref name="uint16"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="fid">
|
||||
<ref name="uint32"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</element>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<!-- a 6 byte MAC address in ASCII-hex format, eg "12:34:56:78:9A:BC" -->
|
||||
<!-- The lowest bit of the 1st byte is the "multicast" bit. a -->
|
||||
@@ -279,12 +252,6 @@
|
||||
</data>
|
||||
</define>
|
||||
|
||||
<define name="zoneName">
|
||||
<data type="string">
|
||||
<param name="pattern">[a-zA-Z0-9_\-]+</param>
|
||||
</data>
|
||||
</define>
|
||||
|
||||
<define name="filePath">
|
||||
<data type="string">
|
||||
<param name="pattern">.+</param>
|
||||
@@ -412,7 +379,6 @@
|
||||
<choice>
|
||||
<value>aarch64</value>
|
||||
<value>alpha</value>
|
||||
<value>armv6l</value>
|
||||
<value>armv7l</value>
|
||||
<value>cris</value>
|
||||
<value>i686</value>
|
||||
|
@@ -412,7 +412,7 @@
|
||||
but is also used by phyp driver -->
|
||||
<value>hvm</value> <!-- unmodified OS -->
|
||||
<value>exe</value> <!-- For container based virt -->
|
||||
<value>uml</value> <!-- user mode linux; NOT USED ANYMORE -->
|
||||
<value>uml</value> <!-- user mode linux -->
|
||||
</choice>
|
||||
</element>
|
||||
</define>
|
||||
@@ -484,7 +484,7 @@
|
||||
<value>kqemu</value>
|
||||
<value>kvm</value>
|
||||
<value>xen</value>
|
||||
<value>uml</value> <!-- NOT USED ANYMORE -->
|
||||
<value>uml</value>
|
||||
<value>lxc</value>
|
||||
<value>openvz</value>
|
||||
<value>test</value>
|
||||
|
@@ -77,7 +77,6 @@
|
||||
<element name='os'>
|
||||
<interleave>
|
||||
<ref name='supported'/>
|
||||
<ref name='enum'/>
|
||||
<optional>
|
||||
<ref name='loader'/>
|
||||
</optional>
|
||||
@@ -143,18 +142,12 @@
|
||||
|
||||
<define name='devices'>
|
||||
<element name='devices'>
|
||||
<optional>
|
||||
<interleave>
|
||||
<ref name='disk'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='graphics'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='video'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='hostdev'/>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
@@ -188,18 +181,12 @@
|
||||
|
||||
<define name='features'>
|
||||
<element name='features'>
|
||||
<optional>
|
||||
<interleave>
|
||||
<ref name='gic'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='vmcoreinfo'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='vmgenid'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='sev'/>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
|
@@ -72,9 +72,6 @@
|
||||
<optional>
|
||||
<ref name='qemucmdline'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='qemucapabilities'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='lxcsharens'/>
|
||||
</optional>
|
||||
@@ -84,9 +81,6 @@
|
||||
<optional>
|
||||
<ref name='launchSecurity'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='bhyvecmdline'/>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
@@ -210,7 +204,7 @@
|
||||
<value>kvm</value>
|
||||
<value>xen</value>
|
||||
<value>lxc</value>
|
||||
<value>uml</value> <!-- NOT USED ANYMORE -->
|
||||
<value>uml</value>
|
||||
<value>openvz</value>
|
||||
<value>test</value>
|
||||
<value>vmware</value>
|
||||
@@ -259,14 +253,6 @@
|
||||
</optional>
|
||||
<element name="os">
|
||||
<interleave>
|
||||
<optional>
|
||||
<attribute name="firmware">
|
||||
<choice>
|
||||
<value>bios</value>
|
||||
<value>efi</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<ref name="ostypehvm"/>
|
||||
<optional>
|
||||
<element name="loader">
|
||||
@@ -294,9 +280,7 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="absFilePath"/>
|
||||
</optional>
|
||||
<ref name="absFilePath"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
@@ -357,14 +341,12 @@
|
||||
<choice>
|
||||
<value>xenpv</value>
|
||||
<value>xenfv</value>
|
||||
<value>xenpvh</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<choice>
|
||||
<value>xen</value>
|
||||
<value>linux</value>
|
||||
<value>xenpvh</value>
|
||||
</choice>
|
||||
</element>
|
||||
</define>
|
||||
@@ -673,7 +655,6 @@
|
||||
<choice>
|
||||
<value>file</value>
|
||||
<value>anonymous</value>
|
||||
<value>memfd</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</element>
|
||||
@@ -970,17 +951,12 @@
|
||||
<ref name="schedparam"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<optional>
|
||||
<element name="emulatorsched">
|
||||
<ref name="schedparam"/>
|
||||
</element>
|
||||
</optional>
|
||||
<zeroOrMore>
|
||||
<element name="cachetune">
|
||||
<attribute name="vcpus">
|
||||
<ref name='cpuset'/>
|
||||
</attribute>
|
||||
<zeroOrMore>
|
||||
<oneOrMore>
|
||||
<element name="cache">
|
||||
<attribute name="id">
|
||||
<ref name='unsignedInt'/>
|
||||
@@ -1004,17 +980,7 @@
|
||||
</attribute>
|
||||
</optional>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<zeroOrMore>
|
||||
<element name="monitor">
|
||||
<attribute name="level">
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
<attribute name="vcpus">
|
||||
<ref name='cpuset'/>
|
||||
</attribute>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</oneOrMore>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<zeroOrMore>
|
||||
@@ -1527,15 +1493,6 @@
|
||||
</interleave>
|
||||
</group>
|
||||
</choice>
|
||||
<optional>
|
||||
<attribute name="model">
|
||||
<choice>
|
||||
<value>virtio</value>
|
||||
<value>virtio-transitional</value>
|
||||
<value>virtio-non-transitional</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="snapshot"/>
|
||||
</optional>
|
||||
@@ -1937,7 +1894,7 @@
|
||||
<value>virtio</value>
|
||||
<value>xen</value>
|
||||
<value>usb</value>
|
||||
<value>uml</value> <!-- NOT USED ANYMORE -->
|
||||
<value>uml</value>
|
||||
<value>sata</value>
|
||||
<value>sd</value>
|
||||
</choice>
|
||||
@@ -2174,8 +2131,6 @@
|
||||
<value>ibmvscsi</value>
|
||||
<value>virtio-scsi</value>
|
||||
<value>lsisas1078</value>
|
||||
<value>virtio-transitional</value>
|
||||
<value>virtio-non-transitional</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
@@ -2333,15 +2288,6 @@
|
||||
<attribute name="type">
|
||||
<value>virtio-serial</value>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="model">
|
||||
<choice>
|
||||
<value>virtio</value>
|
||||
<value>virtio-transitional</value>
|
||||
<value>virtio-non-transitional</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="ports">
|
||||
<ref name="unsignedInt"/>
|
||||
@@ -2353,17 +2299,6 @@
|
||||
</attribute>
|
||||
</optional>
|
||||
</group>
|
||||
<!-- xenbus has an optional attribute "maxGrantFrames" -->
|
||||
<group>
|
||||
<attribute name="type">
|
||||
<value>xenbus</value>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="maxGrantFrames">
|
||||
<ref name="unsignedInt"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</group>
|
||||
</choice>
|
||||
<optional>
|
||||
<element name="driver">
|
||||
@@ -2542,15 +2477,6 @@
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
<optional>
|
||||
<attribute name="model">
|
||||
<choice>
|
||||
<value>virtio</value>
|
||||
<value>virtio-transitional</value>
|
||||
<value>virtio-non-transitional</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
</element>
|
||||
</define>
|
||||
<define name="fsDriver">
|
||||
@@ -2594,11 +2520,6 @@
|
||||
<ref name="deviceName"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="portid">
|
||||
<ref name="UUID"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="interface-bridge-attributes">
|
||||
@@ -2831,7 +2752,7 @@
|
||||
<ref name="usbAddr"/>
|
||||
</attribute>
|
||||
<attribute name="device">
|
||||
<ref name="usbAddr"/>
|
||||
<ref name="usbPort"/>
|
||||
</attribute>
|
||||
</group>
|
||||
</choice>
|
||||
@@ -3484,20 +3405,9 @@
|
||||
</attribute>
|
||||
</optional>
|
||||
</group>
|
||||
<group>
|
||||
<attribute name="type">
|
||||
<value>egl-headless</value>
|
||||
</attribute>
|
||||
<optional>
|
||||
<element name="gl">
|
||||
<optional>
|
||||
<attribute name="rendernode">
|
||||
<ref name="absFilePath"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</element>
|
||||
</optional>
|
||||
</group>
|
||||
<attribute name="type">
|
||||
<value>egl-headless</value>
|
||||
</attribute>
|
||||
</choice>
|
||||
</element>
|
||||
</define>
|
||||
@@ -3791,7 +3701,7 @@
|
||||
<choice>
|
||||
<value>xen</value>
|
||||
<value>serial</value>
|
||||
<value>uml</value> <!-- NOT USED ANYMORE -->
|
||||
<value>uml</value>
|
||||
<value>virtio</value>
|
||||
<value>lxc</value>
|
||||
<value>openvz</value>
|
||||
@@ -4138,8 +4048,6 @@
|
||||
<attribute name="model">
|
||||
<choice>
|
||||
<value>virtio</value>
|
||||
<value>virtio-transitional</value>
|
||||
<value>virtio-non-transitional</value>
|
||||
<value>xen</value>
|
||||
<value>none</value>
|
||||
</choice>
|
||||
@@ -4349,11 +4257,7 @@
|
||||
<element name="vsock">
|
||||
<optional>
|
||||
<attribute name="model">
|
||||
<choice>
|
||||
<value>virtio</value>
|
||||
<value>virtio-transitional</value>
|
||||
<value>virtio-non-transitional</value>
|
||||
</choice>
|
||||
<value>virtio</value>
|
||||
</attribute>
|
||||
</optional>
|
||||
<interleave>
|
||||
@@ -4383,10 +4287,7 @@
|
||||
<define name="iommu">
|
||||
<element name="iommu">
|
||||
<attribute name="model">
|
||||
<choice>
|
||||
<value>intel</value>
|
||||
<value>smmuv3</value>
|
||||
</choice>
|
||||
<value>intel</value>
|
||||
</attribute>
|
||||
<optional>
|
||||
<element name="driver">
|
||||
@@ -4457,15 +4358,6 @@
|
||||
</element>
|
||||
</group>
|
||||
</choice>
|
||||
<optional>
|
||||
<attribute name="model">
|
||||
<choice>
|
||||
<value>virtio</value>
|
||||
<value>virtio-transitional</value>
|
||||
<value>virtio-non-transitional</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="alias"/>
|
||||
</optional>
|
||||
@@ -4702,15 +4594,6 @@
|
||||
<attribute name="type">
|
||||
<value>scsi_host</value>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="model">
|
||||
<choice>
|
||||
<value>virtio</value>
|
||||
<value>virtio-transitional</value>
|
||||
<value>virtio-non-transitional</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<element name="source">
|
||||
<choice>
|
||||
<group>
|
||||
@@ -4735,7 +4618,6 @@
|
||||
<choice>
|
||||
<value>vfio-pci</value>
|
||||
<value>vfio-ccw</value>
|
||||
<value>vfio-ap</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
<optional>
|
||||
@@ -4802,7 +4684,7 @@
|
||||
<ref name="usbAddr"/>
|
||||
</attribute>
|
||||
<attribute name="device">
|
||||
<ref name="usbAddr"/>
|
||||
<ref name="usbPort"/>
|
||||
</attribute>
|
||||
</element>
|
||||
</define>
|
||||
@@ -5082,14 +4964,6 @@
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="nested-hv">
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="msrs"/>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</optional>
|
||||
@@ -5338,17 +5212,6 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="msrs">
|
||||
<element name="msrs">
|
||||
<attribute name="unknown">
|
||||
<choice>
|
||||
<value>ignore</value>
|
||||
<value>fault</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="address">
|
||||
<element name="address">
|
||||
<choice>
|
||||
@@ -5357,7 +5220,6 @@
|
||||
<value>pci</value>
|
||||
</attribute>
|
||||
<ref name="pciaddress"/>
|
||||
<ref name="zpciaddress"/>
|
||||
</group>
|
||||
<group>
|
||||
<attribute name="type">
|
||||
@@ -5491,21 +5353,9 @@
|
||||
</interleave>
|
||||
</group>
|
||||
<group>
|
||||
<interleave>
|
||||
<element name="path">
|
||||
<ref name="absFilePath"/>
|
||||
</element>
|
||||
<optional>
|
||||
<element name="alignsize">
|
||||
<ref name="scaledInteger"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="pmem">
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
<element name="path">
|
||||
<ref name="absFilePath"/>
|
||||
</element>
|
||||
</group>
|
||||
</choice>
|
||||
</element>
|
||||
@@ -5529,11 +5379,6 @@
|
||||
</element>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="readonly">
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
@@ -5541,11 +5386,7 @@
|
||||
<define name="rng">
|
||||
<element name="rng">
|
||||
<attribute name="model">
|
||||
<choice>
|
||||
<value>virtio</value>
|
||||
<value>virtio-transitional</value>
|
||||
<value>virtio-non-transitional</value>
|
||||
</choice>
|
||||
<value>virtio</value>
|
||||
</attribute>
|
||||
<interleave>
|
||||
<ref name="rng-backend"/>
|
||||
@@ -5609,8 +5450,6 @@
|
||||
<attribute name="iommu">
|
||||
<ref name="virOnOff"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<attribute name="ats">
|
||||
<ref name="virOnOff"/>
|
||||
</attribute>
|
||||
@@ -5692,7 +5531,6 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
</optional>
|
||||
<ref name="diskBackingChain"/>
|
||||
</element>
|
||||
</define>
|
||||
<define name="diskAuth">
|
||||
@@ -5930,16 +5768,6 @@
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="ipi">
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="evmcs">
|
||||
<ref name="featurestate"/>
|
||||
</element>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
@@ -6200,22 +6028,6 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="qemucapabilities">
|
||||
<element name="capabilities" ns="http://libvirt.org/schemas/domain/qemu/1.0">
|
||||
<zeroOrMore>
|
||||
<element name="add">
|
||||
<attribute name="capability"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
<zeroOrMore>
|
||||
<element name="del">
|
||||
<attribute name="capability"/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
|
||||
<!--
|
||||
Optional hypervisor extensions in their own namespace:
|
||||
LXC
|
||||
@@ -6255,20 +6067,6 @@
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<!--
|
||||
Optional hypervisor extensions in their own namespace:
|
||||
Bhyve
|
||||
-->
|
||||
<define name="bhyvecmdline">
|
||||
<element name="commandline" ns="http://libvirt.org/schemas/domain/bhyve/1.0">
|
||||
<zeroOrMore>
|
||||
<element name="arg">
|
||||
<attribute name='value'/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<!--
|
||||
Type library
|
||||
-->
|
||||
@@ -6410,7 +6208,7 @@
|
||||
</define>
|
||||
<define name="spaprvioReg">
|
||||
<data type="string">
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{1,8}</param>
|
||||
<param name="pattern">(0x)?[0-9a-fA-F]{1,16}</param>
|
||||
</data>
|
||||
</define>
|
||||
<define name='aliasName'>
|
||||
|
@@ -103,6 +103,7 @@
|
||||
|
||||
<define name='state'>
|
||||
<choice>
|
||||
<value>nostate</value>
|
||||
<value>running</value>
|
||||
<value>blocked</value>
|
||||
<value>paused</value>
|
||||
@@ -157,9 +158,6 @@
|
||||
<optional>
|
||||
<ref name='storageStartupPolicy'/>
|
||||
</optional>
|
||||
<zeroOrMore>
|
||||
<ref name='devSeclabel'/>
|
||||
</zeroOrMore>
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
@@ -176,9 +174,6 @@
|
||||
<attribute name="dev">
|
||||
<ref name="absFilePath"/>
|
||||
</attribute>
|
||||
<zeroOrMore>
|
||||
<ref name='devSeclabel'/>
|
||||
</zeroOrMore>
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
|
@@ -58,12 +58,6 @@
|
||||
</attribute>
|
||||
</optional>
|
||||
|
||||
<optional>
|
||||
<attribute name="zone">
|
||||
<ref name="zoneName"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
|
||||
<optional>
|
||||
<attribute name="stp">
|
||||
<ref name="virOnOff"/>
|
||||
|
@@ -134,11 +134,6 @@
|
||||
|
||||
<define name="bandwidth">
|
||||
<element name="bandwidth">
|
||||
<optional>
|
||||
<attribute name="classID">
|
||||
<ref name="positiveInteger"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<interleave>
|
||||
<optional>
|
||||
<element name="inbound">
|
||||
|
@@ -1,154 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- A Relax NG schema for the libvirt network port XML format -->
|
||||
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
||||
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||
<include href='basictypes.rng'/>
|
||||
<include href='networkcommon.rng'/>
|
||||
|
||||
<start>
|
||||
<ref name="networkport"/>
|
||||
</start>
|
||||
|
||||
<define name="networkport">
|
||||
<element name="networkport">
|
||||
<interleave>
|
||||
<element name="uuid">
|
||||
<ref name="UUID"/>
|
||||
</element>
|
||||
<ref name="owner"/>
|
||||
<ref name="mac"/>
|
||||
<optional>
|
||||
<ref name="group"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="rxfilters"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="virtualPortProfile"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="bandwidth"/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name="plug"/>
|
||||
</optional>
|
||||
</interleave>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="owner">
|
||||
<element name="owner">
|
||||
<element name="name">
|
||||
<text/>
|
||||
</element>
|
||||
<element name="uuid">
|
||||
<ref name="UUID"/>
|
||||
</element>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="mac">
|
||||
<element name="mac">
|
||||
<attribute name="address">
|
||||
<ref name="uniMacAddr"/>
|
||||
</attribute>
|
||||
<empty/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="group">
|
||||
<element name="group">
|
||||
<ref name="deviceName"/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="rxfilters">
|
||||
<element name="rxfilters">
|
||||
<attribute name="trustGuest">
|
||||
<ref name="virYesNo"/>
|
||||
</attribute>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="plug">
|
||||
<element name="plug">
|
||||
<choice>
|
||||
<ref name="plugnetwork"/>
|
||||
<ref name="plugbridge"/>
|
||||
<ref name="plugdirect"/>
|
||||
<ref name="plughostdevpci"/>
|
||||
</choice>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name="plugnetwork">
|
||||
<attribute name="type">
|
||||
<value>network</value>
|
||||
</attribute>
|
||||
<attribute name="bridge">
|
||||
<ref name="deviceName"/>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="macTableManager">
|
||||
<ref name="macTableManager"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="plugbridge">
|
||||
<attribute name="type">
|
||||
<value>bridge</value>
|
||||
</attribute>
|
||||
<attribute name="bridge">
|
||||
<ref name="deviceName"/>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="macTableManager">
|
||||
<ref name="macTableManager"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name="plugdirect">
|
||||
<attribute name="type">
|
||||
<value>direct</value>
|
||||
</attribute>
|
||||
<attribute name="dev">
|
||||
<ref name="deviceName"/>
|
||||
</attribute>
|
||||
<attribute name="mode">
|
||||
<choice>
|
||||
<value>bridge</value>
|
||||
<value>passthrough</value>
|
||||
<value>private</value>
|
||||
<value>vepa</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
</define>
|
||||
|
||||
<define name="plughostdevpci">
|
||||
<attribute name="type">
|
||||
<value>hostdev-pci</value>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name="managed">
|
||||
<ref name="virYesNo"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
<optional>
|
||||
<element name="driver">
|
||||
<attribute name="name">
|
||||
<choice>
|
||||
<value>kvm</value>
|
||||
<value>vfio</value>
|
||||
</choice>
|
||||
</attribute>
|
||||
<empty/>
|
||||
</element>
|
||||
</optional>
|
||||
<element name='address'>
|
||||
<ref name="pciaddress"/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
</grammar>
|
@@ -133,13 +133,6 @@
|
||||
<value>pci</value>
|
||||
</attribute>
|
||||
|
||||
<optional>
|
||||
<element name='class'>
|
||||
<data type="string">
|
||||
<param name="pattern">0x[0-9a-fA-F]{6}</param>
|
||||
</data>
|
||||
</element>
|
||||
</optional>
|
||||
<element name='domain'>
|
||||
<ref name='unsignedLong'/>
|
||||
</element>
|
||||
|
@@ -24,7 +24,9 @@
|
||||
</choice>
|
||||
</attribute>
|
||||
<interleave>
|
||||
<ref name='secret'/>
|
||||
<zeroOrMore>
|
||||
<ref name='secret'/>
|
||||
</zeroOrMore>
|
||||
<optional>
|
||||
<element name='cipher'>
|
||||
<ref name='keycipher'/>
|
||||
@@ -236,11 +238,4 @@
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name='refreshVolumeAllocation'>
|
||||
<choice>
|
||||
<value>default</value>
|
||||
<value>capacity</value>
|
||||
</choice>
|
||||
</define>
|
||||
|
||||
</grammar>
|
||||
|
@@ -52,9 +52,6 @@
|
||||
<ref name='sourcefs'/>
|
||||
<ref name='target'/>
|
||||
</interleave>
|
||||
<optional>
|
||||
<ref name='fs_mount_opts'/>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name='poolnetfs'>
|
||||
@@ -67,9 +64,6 @@
|
||||
<ref name='sourcenetfs'/>
|
||||
<ref name='target'/>
|
||||
</interleave>
|
||||
<optional>
|
||||
<ref name='fs_mount_opts'/>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name='poollogical'>
|
||||
@@ -155,11 +149,7 @@
|
||||
<ref name='commonMetadataNameOptional'/>
|
||||
<ref name='sizing'/>
|
||||
<ref name='sourcerbd'/>
|
||||
<ref name='refresh'/>
|
||||
</interleave>
|
||||
<optional>
|
||||
<ref name='rbd_config_opts'/>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name='poolsheepdog'>
|
||||
@@ -305,10 +295,7 @@
|
||||
<oneOrMore>
|
||||
<element name='host'>
|
||||
<attribute name='name'>
|
||||
<choice>
|
||||
<ref name="dnsName"/>
|
||||
<ref name="ipAddr"/>
|
||||
</choice>
|
||||
<text/>
|
||||
</attribute>
|
||||
<optional>
|
||||
<attribute name='port'>
|
||||
@@ -544,13 +531,6 @@
|
||||
<ref name='sourceinfohost'/>
|
||||
<ref name='sourceinfodir'/>
|
||||
<ref name='sourcefmtnetfs'/>
|
||||
<optional>
|
||||
<element name='protocol'>
|
||||
<attribute name='ver'>
|
||||
<ref name='unsignedInt'/>
|
||||
</attribute>
|
||||
</element>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='sourceinfovendor'/>
|
||||
</optional>
|
||||
@@ -695,63 +675,4 @@
|
||||
</data>
|
||||
</define>
|
||||
|
||||
<define name='refresh'>
|
||||
<optional>
|
||||
<element name='refresh'>
|
||||
<interleave>
|
||||
<ref name='refreshVolume'/>
|
||||
</interleave>
|
||||
</element>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<define name='refreshVolume'>
|
||||
<optional>
|
||||
<element name='volume'>
|
||||
<optional>
|
||||
<attribute name='allocation'>
|
||||
<ref name="refreshVolumeAllocation"/>
|
||||
</attribute>
|
||||
</optional>
|
||||
</element>
|
||||
</optional>
|
||||
</define>
|
||||
|
||||
<!--
|
||||
Optional storage pool extensions in their own namespace:
|
||||
"fs" or "netfs"
|
||||
-->
|
||||
|
||||
<define name="fs_mount_opts">
|
||||
<element name="mount_opts" ns="http://libvirt.org/schemas/storagepool/fs/1.0">
|
||||
<zeroOrMore>
|
||||
<element name="option">
|
||||
<attribute name='name'>
|
||||
<text/>
|
||||
</attribute>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<!--
|
||||
Optional storage pool extensions in their own namespace:
|
||||
RBD
|
||||
-->
|
||||
|
||||
<define name="rbd_config_opts">
|
||||
<element name="config_opts" ns="http://libvirt.org/schemas/storagepool/rbd/1.0">
|
||||
<zeroOrMore>
|
||||
<element name="option">
|
||||
<attribute name='name'>
|
||||
<text/>
|
||||
</attribute>
|
||||
<attribute name='value'>
|
||||
<text/>
|
||||
</attribute>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
</grammar>
|
||||
|
@@ -1,88 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<!-- A Relax NG schema for the libvirt storage pool capabilities XML format -->
|
||||
<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
||||
<include href='basictypes.rng'/>
|
||||
<start>
|
||||
<ref name='storagepoolCapabilities'/>
|
||||
</start>
|
||||
|
||||
|
||||
<define name='storagepoolCapabilities'>
|
||||
<element name='storagepoolCapabilities'>
|
||||
<zeroOrMore>
|
||||
<ref name='poolCapsType'/>
|
||||
</zeroOrMore>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='poolCapsType'>
|
||||
<element name='pool'>
|
||||
<ref name='poolCapsTypes'/>
|
||||
<ref name='poolCapsSupported'/>
|
||||
<optional>
|
||||
<ref name='poolCapsPoolOptions'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='poolCapsVolOptions'/>
|
||||
</optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='poolCapsTypes'>
|
||||
<attribute name='type'>
|
||||
<text/>
|
||||
</attribute>
|
||||
</define>
|
||||
|
||||
<define name='poolCapsSupported'>
|
||||
<attribute name='supported'>
|
||||
<ref name="virYesNo"/>
|
||||
</attribute>
|
||||
</define>
|
||||
|
||||
<define name='poolCapsPoolOptions'>
|
||||
<element name='poolOptions'>
|
||||
<optional>
|
||||
<ref name='poolDefaultFormat'/>
|
||||
</optional>
|
||||
<optional>
|
||||
<ref name='poolCapsEnum'/>
|
||||
</optional>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='poolCapsVolOptions'>
|
||||
<element name='volOptions'>
|
||||
<ref name='poolDefaultFormat'/>
|
||||
<ref name='poolCapsEnum'/>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='poolDefaultFormat'>
|
||||
<element name='defaultFormat'>
|
||||
<attribute name='type'>
|
||||
<text/>
|
||||
</attribute>
|
||||
</element>
|
||||
</define>
|
||||
|
||||
<define name='poolCapsEnum'>
|
||||
<zeroOrMore>
|
||||
<element name='enum'>
|
||||
<attribute name='name'>
|
||||
<text/>
|
||||
</attribute>
|
||||
<ref name='value'/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</define>
|
||||
|
||||
<define name='value'>
|
||||
<zeroOrMore>
|
||||
<element name='value'>
|
||||
<text/>
|
||||
</element>
|
||||
</zeroOrMore>
|
||||
</define>
|
||||
|
||||
</grammar>
|
225
docs/search.php.code.in
Normal file
225
docs/search.php.code.in
Normal file
@@ -0,0 +1,225 @@
|
||||
<?php
|
||||
$query = $_GET['query'];
|
||||
// We handle only the first argument so far
|
||||
$query = ltrim ($query);
|
||||
|
||||
$scope = $_GET['scope'];
|
||||
if ($scope == NULL)
|
||||
$scope = "any";
|
||||
$scope = ltrim ($scope);
|
||||
if ($scope == "")
|
||||
$scope = "any";
|
||||
$querystr = htmlspecialchars($query, ENT_QUOTES, 'UTF-8');
|
||||
?>
|
||||
|
||||
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8'), "?query=", rawurlencode($query) ?>"
|
||||
enctype="application/x-www-form-urlencoded" method="get">
|
||||
<input name="query" type="text" size="50" value="<?php echo $querystr ?>"/>
|
||||
<select name="scope">
|
||||
<option value="any">Search All</option>
|
||||
<option value="API" <?php if ($scope == 'API') print "selected='selected'"?>>Only the APIs</option>
|
||||
<option value="DOCS" <?php if ($scope == 'DOCS') print "selected='selected'"?>>Only the Documentation</option>
|
||||
<option value="LISTS" <?php if ($scope == 'LISTS') print "selected='selected'"?>>Only the lists archives</option>
|
||||
</select>
|
||||
<input name="submit" type="submit" value="Search ..."/>
|
||||
</form>
|
||||
|
||||
<?php
|
||||
function logQueryWord($word) {
|
||||
$result = mysql_query ("SELECT ID,Count FROM Queries WHERE Value='$word'");
|
||||
if ($result) {
|
||||
$i = mysql_num_rows($result);
|
||||
if ($i == 0) {
|
||||
mysql_free_result($result);
|
||||
mysql_query ("INSERT INTO Queries (Value,Count) VALUES ('$word',1)");
|
||||
} else {
|
||||
$id = mysql_result($result, 0, 0);
|
||||
$count = mysql_result($result, 0, 1);
|
||||
$count ++;
|
||||
mysql_query ("UPDATE Queries SET Count=$count WHERE ID=$id");
|
||||
}
|
||||
} else {
|
||||
mysql_query ("INSERT INTO Queries (Value,Count) VALUES ('$word',1)");
|
||||
}
|
||||
}
|
||||
function queryWord($word) {
|
||||
$result = NULL;
|
||||
$j = 0;
|
||||
if ($word) {
|
||||
$result = mysql_query ("SELECT words.relevance, symbols.name, symbols.type, symbols.module, symbols.descr FROM words, symbols WHERE LCASE(words.name) LIKE LCASE('$word') and words.symbol = symbols.name ORDER BY words.relevance DESC LIMIT 75");
|
||||
if ($result) {
|
||||
$j = mysql_num_rows($result);
|
||||
if ($j == 0)
|
||||
mysql_free_result($result);
|
||||
}
|
||||
logQueryWord($word);
|
||||
}
|
||||
return array($result, $j);
|
||||
}
|
||||
function queryHTMLWord($word) {
|
||||
$result = NULL;
|
||||
$j = 0;
|
||||
if ($word) {
|
||||
$result = mysql_query ("SELECT relevance, name, id, resource, section FROM wordsHTML WHERE LCASE(name) LIKE LCASE('$word') ORDER BY relevance DESC LIMIT 75");
|
||||
if ($result) {
|
||||
$j = mysql_num_rows($result);
|
||||
if ($j == 0)
|
||||
mysql_free_result($result);
|
||||
}
|
||||
logQueryWord($word);
|
||||
}
|
||||
return array($result, $j);
|
||||
}
|
||||
function queryArchiveWord($word) {
|
||||
$result = NULL;
|
||||
$j = 0;
|
||||
if ($word) {
|
||||
$result = mysql_query ("SELECT wordsArchive.relevance, wordsArchive.name, 'libvir-list', archives.resource, archives.title FROM wordsArchive, archives WHERE LCASE(wordsArchive.name) LIKE LCASE('$word') and wordsArchive.ID = archives.ID ORDER BY relevance DESC LIMIT 75");
|
||||
if ($result) {
|
||||
$j = mysql_num_rows($result);
|
||||
if ($j == 0)
|
||||
mysql_free_result($result);
|
||||
}
|
||||
logQueryWord($word);
|
||||
}
|
||||
return array($result, $j);
|
||||
}
|
||||
function resSort ($a, $b) {
|
||||
list($ra,$ta,$ma,$na,$da) = $a;
|
||||
list($rb,$tb,$mb,$nb,$db) = $b;
|
||||
if ($ra == $rb) return 0;
|
||||
return ($ra > $rb) ? -1 : 1;
|
||||
}
|
||||
if (($query) && (strlen($query) <= 50)) {
|
||||
$link = mysql_connect ("localhost", "nobody");
|
||||
if (!$link) {
|
||||
echo "<p> Could not connect to the database: ", mysql_error();
|
||||
} else {
|
||||
mysql_select_db("libvir", $link);
|
||||
$list = explode (" ", $query);
|
||||
$results = array();
|
||||
$number = 0;
|
||||
for ($number = 0;$number < count($list);$number++) {
|
||||
|
||||
$word = $list[$number];
|
||||
if (($scope == 'any') || ($scope == 'API')) {
|
||||
list($result, $j) = queryWord($word);
|
||||
if ($j > 0) {
|
||||
for ($i = 0; $i < $j; $i++) {
|
||||
$relevance = mysql_result($result, $i, 0);
|
||||
$name = mysql_result($result, $i, 1);
|
||||
$type = mysql_result($result, $i, 2);
|
||||
$module = mysql_result($result, $i, 3);
|
||||
$desc = mysql_result($result, $i, 4);
|
||||
if (array_key_exists($name, $results)) {
|
||||
list($r,$t,$m,$d,$w,$u) = $results[$name];
|
||||
$results[$name] = array(($r + $relevance) * 2,
|
||||
$t,$m,$d,$w,$u);
|
||||
} else {
|
||||
$id = $name;
|
||||
$m = strtolower($module);
|
||||
$url = "html/libvirt-$module.html#$id";
|
||||
$results[$name] = array($relevance,$type,
|
||||
$module, $desc, $name, $url);
|
||||
}
|
||||
}
|
||||
mysql_free_result($result);
|
||||
}
|
||||
}
|
||||
if (($scope == 'any') || ($scope == 'DOCS')) {
|
||||
list($result, $k) = queryHTMLWord($word);
|
||||
if ($k > 0) {
|
||||
for ($i = 0; $i < $k; $i++) {
|
||||
$relevance = mysql_result($result, $i, 0);
|
||||
$name = mysql_result($result, $i, 1);
|
||||
$id = mysql_result($result, $i, 2);
|
||||
$module = mysql_result($result, $i, 3);
|
||||
$desc = mysql_result($result, $i, 4);
|
||||
$url = $module;
|
||||
if ($id != "") {
|
||||
$url = $url + "#$id";
|
||||
}
|
||||
$results["$name _html_ $number _ $i"] =
|
||||
array($relevance, "XML docs",
|
||||
$module, $desc, $name, $url);
|
||||
}
|
||||
mysql_free_result($result);
|
||||
}
|
||||
}
|
||||
if (($scope == 'any') || ($scope == 'LISTS')) {
|
||||
list($result, $j) = queryArchiveWord($word);
|
||||
if ($j > 0) {
|
||||
for ($i = 0; $i < $j; $i++) {
|
||||
$relevance = mysql_result($result, $i, 0);
|
||||
$name = mysql_result($result, $i, 1);
|
||||
$type = mysql_result($result, $i, 2);
|
||||
$url = mysql_result($result, $i, 3);
|
||||
$desc = mysql_result($result, $i, 4);
|
||||
if (array_key_exists($url, $results)) {
|
||||
list($r,$t,$m,$d,$w,$u) = $results[$url];
|
||||
$results[$name] = array(($r + $relevance) * 2,
|
||||
$t,$m,$d,$w,$u);
|
||||
} else {
|
||||
$id = $name;
|
||||
$m = strtolower($module);
|
||||
$u = str_replace(
|
||||
"http://www.redhat.com/archives/libvir-list/", "", $url);
|
||||
$results[$url] = array($relevance,$type,
|
||||
$u, $desc, $name, $url);
|
||||
}
|
||||
}
|
||||
mysql_free_result($result);
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((count($results) == 0) && (count($list) == 1)) {
|
||||
$word = $list[0];
|
||||
if (($scope == 'any') || ($scope == 'XMLAPI')) {
|
||||
list($result, $j) = queryWord("vir$word");
|
||||
if ($j > 0) {
|
||||
for ($i = 0; $i < $j; $i++) {
|
||||
$relevance = mysql_result($result, $i, 0);
|
||||
$name = mysql_result($result, $i, 1);
|
||||
$type = mysql_result($result, $i, 2);
|
||||
$module = mysql_result($result, $i, 3);
|
||||
$desc = mysql_result($result, $i, 4);
|
||||
if (array_key_exists($name, $results)) {
|
||||
list($r,$t,$m,$d,$w,$u) = $results[$name];
|
||||
$results[$name] = array(($r + $relevance) * 2,
|
||||
$t,$m,$d,$w,$u);
|
||||
} else {
|
||||
$id = $name;
|
||||
$m = strtolower($module);
|
||||
$url = "html/libvirt-$module.html#$id";
|
||||
$results[$name] = array($relevance,$type,
|
||||
$module, $desc, $name, $url);
|
||||
}
|
||||
}
|
||||
mysql_free_result($result);
|
||||
}
|
||||
}
|
||||
}
|
||||
mysql_close($link);
|
||||
$nb = count($results);
|
||||
echo "<h3 align='center'>Found $nb results for query $querystr</h3>\n";
|
||||
usort($results, "resSort");
|
||||
|
||||
if ($nb > 0) {
|
||||
printf("<table><tbody>\n");
|
||||
printf("<tr><td>Quality</td><td>Symbol</td><td>Type</td><td>module</td><td>Description</td></tr>\n");
|
||||
$i = 0;
|
||||
while (list ($name, $val) = each ($results)) {
|
||||
list($r,$t,$m,$d,$s,$u) = $val;
|
||||
$m = str_replace("<", "<", $m);
|
||||
$s = str_replace("<", "<", $s);
|
||||
$d = str_replace("<", "<", $d);
|
||||
echo "<tr><td>$r</td><td><a href='$u'>$s</a></td><td>$t</td><td>$m</td><td>$d</td></tr>";
|
||||
$i = $i + 1;
|
||||
if ($i > 75)
|
||||
break;
|
||||
}
|
||||
printf("</tbody></table>\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
16
docs/search.php.in
Normal file
16
docs/search.php.in
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<body>
|
||||
<h1>Search the documentation on Libvirt.org</h1>
|
||||
|
||||
<p>
|
||||
The search service indexes the libvirt APIs and documentation as
|
||||
well as the libvir-list@redhat.com mailing-list archives. To use
|
||||
it simply provide a set of keywords:
|
||||
</p>
|
||||
|
||||
<span id="php_placeholder"/>
|
||||
|
||||
</body>
|
||||
</html>
|
@@ -90,10 +90,10 @@
|
||||
A pool with a type of <code>dir</code> provides the means to manage
|
||||
files within a directory. The files can be fully allocated raw files,
|
||||
sparsely allocated raw files, or one of the special disk formats
|
||||
such as <code>qcow2</code>, <code>vmdk</code>, etc as supported
|
||||
by the <code>qemu-img</code> program. If the directory does not exist
|
||||
at the time the pool is defined, the <code>build</code>
|
||||
operation can be used to create it.
|
||||
such as <code>qcow</code>,<code>qcow2</code>,<code>vmdk</code>,
|
||||
<code>cow</code>, etc as supported by the <code>qemu-img</code>
|
||||
program. If the directory does not exist at the time the pool is
|
||||
defined, the <code>build</code> operation can be used to create it.
|
||||
</p>
|
||||
|
||||
<h3>Example pool input definition</h3>
|
||||
@@ -132,8 +132,9 @@
|
||||
natively. When creating new volumes, only a subset may be
|
||||
available. The <code>raw</code> type is guaranteed always
|
||||
available. The <code>qcow2</code> type can be created if
|
||||
the <code>qemu-img</code> tool is present. The others are
|
||||
dependent on support of the <code>qemu-img</code> tool.
|
||||
either <code>qemu-img</code> or <code>qcow-create</code> tools
|
||||
are present. The others are dependent on support of the
|
||||
<code>qemu-img</code> tool.
|
||||
|
||||
</p>
|
||||
|
||||
@@ -308,7 +309,7 @@
|
||||
by adding partitions to the disk. Disk pools have constraints
|
||||
on the size and placement of volumes. The 'free extents'
|
||||
information will detail the regions which are available for creating
|
||||
new volumes. A volume cannot span across two different free extents.
|
||||
new volumes. A volume cannot span across 2 different free extents.
|
||||
It will default to using <code>dos</code> as the pool source format.
|
||||
</p>
|
||||
|
||||
@@ -359,16 +360,7 @@
|
||||
The formats <code>dos</code> ("msdos" in parted terminology,
|
||||
good for BIOS systems) or <code>gpt</code> (good for UEFI
|
||||
systems) are recommended for best portability - the latter is
|
||||
needed for disks larger than 2TB. Note that the <code>lvm2</code>
|
||||
format refers to the physical volume format (i.e. the whole
|
||||
disk is a physical volume - not the usual usage of LVM where
|
||||
physical volumes are partitions). This is not really
|
||||
a partition table and such pool cannot be built by libvirt,
|
||||
only detected.
|
||||
</p>
|
||||
<p>
|
||||
Building a pool of a certain format depends on its availability
|
||||
in <code>parted</code>.
|
||||
needed for disks larger than 2TB.
|
||||
</p>
|
||||
|
||||
<h3>Valid volume format types</h3>
|
||||
@@ -445,9 +437,9 @@
|
||||
|
||||
<h2><a id="StorageBackendISCSIDirect">iSCSI direct pool</a></h2>
|
||||
<p>
|
||||
This is a variant of the iSCSI pool. Instead of using iscsiadm, it uses
|
||||
This is a variant of the iSCSI pool. Instead of unsing iscsiadm, it uses
|
||||
libiscsi.
|
||||
It requires a host, a path which is the target IQN, and an initiator IQN.
|
||||
It require a host, a path which is the target iqn and an initiator iqn.
|
||||
</p>
|
||||
|
||||
<h3>Example pool input</h3>
|
||||
@@ -465,12 +457,12 @@
|
||||
|
||||
<h3>Valid pool format types</h3>
|
||||
<p>
|
||||
The iSCSI direct volume pool does not use the pool format type element.
|
||||
The iSCSI volume pool does not use the pool format type element.
|
||||
</p>
|
||||
|
||||
<h3>Valid volume format types</h3>
|
||||
<p>
|
||||
The iSCSI direct volume pool does not use the volume format type element.
|
||||
The iSCSI volume pool does not use the volume format type element.
|
||||
</p>
|
||||
|
||||
<h2><a id="StorageBackendSCSI">SCSI pool</a></h2>
|
||||
@@ -790,7 +782,7 @@
|
||||
The ZFS volume pool does not use the pool format type element.
|
||||
</p>
|
||||
|
||||
<h3>Valid volume format types</h3>
|
||||
<h3>Valid pool format types</h3>
|
||||
<p>
|
||||
The ZFS volume pool does not use the volume format type element.
|
||||
</p>
|
||||
@@ -818,12 +810,6 @@
|
||||
<path>/mnt/clustername</path>
|
||||
</target>
|
||||
</pool></pre>
|
||||
|
||||
<h3>Valid pool format types</h3>
|
||||
<p>
|
||||
The Vstorage volume pool does not use the pool format type element.
|
||||
</p>
|
||||
|
||||
<h3>Valid volume format types</h3>
|
||||
<p>The valid volume types are the same as for the directory pool.</p>
|
||||
</body>
|
||||
|
@@ -182,6 +182,7 @@
|
||||
<pre>
|
||||
./configure \
|
||||
--without-sasl \
|
||||
--without-avahi \
|
||||
--without-polkit \
|
||||
--without-python \
|
||||
--without-libxl \
|
||||
|
@@ -18,128 +18,107 @@
|
||||
|
||||
FILTERS = $(wildcard $(srcdir)/xml/nwfilter/*.xml)
|
||||
|
||||
ADMIN_EXAMPLES = \
|
||||
$(wildcard $(srcdir)/c/admin/*.c) \
|
||||
$(NULL)
|
||||
|
||||
DOMAIN_EXAMPLES = \
|
||||
$(wildcard $(srcdir)/c/domain/*.c) \
|
||||
$(NULL)
|
||||
|
||||
MISC_EXAMPLES = \
|
||||
$(wildcard $(srcdir)/c/misc/*.c) \
|
||||
$(NULL)
|
||||
|
||||
POLKIT_EXAMPLES = \
|
||||
$(wildcard $(srcdir)/polkit/*.rules) \
|
||||
$(NULL)
|
||||
|
||||
SH_EXAMPLES = \
|
||||
$(wildcard $(srcdir)/sh/*) \
|
||||
$(NULL)
|
||||
|
||||
STORAGE_XML_EXAMPLES = \
|
||||
$(wildcard $(srcdir)/xml/storage/*.xml) \
|
||||
$(NULL)
|
||||
|
||||
SYSTEMTAP_EXAMPLES = \
|
||||
$(wildcard $(srcdir)/systemtap/*.stp) \
|
||||
$(NULL)
|
||||
|
||||
TEST_XML_EXAMPLES = \
|
||||
$(wildcard $(srcdir)/xml/test/*.xml) \
|
||||
$(NULL)
|
||||
|
||||
EXTRA_DIST = \
|
||||
$(POLKIT_EXAMPLES) \
|
||||
$(SH_EXAMPLES) \
|
||||
$(STORAGE_XML_EXAMPLES) \
|
||||
$(SYSTEMTAP_EXAMPLES) \
|
||||
$(TEST_XML_EXAMPLES) \
|
||||
apparmor/TEMPLATE.qemu \
|
||||
apparmor/TEMPLATE.lxc \
|
||||
apparmor/libvirt-qemu \
|
||||
apparmor/libvirt-lxc \
|
||||
apparmor/usr.lib.libvirt.virt-aa-helper \
|
||||
apparmor/usr.sbin.libvirtd \
|
||||
lxcconvert/virt-lxc-convert \
|
||||
polkit/libvirt-acl.rules \
|
||||
$(wildcard $(srcdir)/systemtap/*.stp) \
|
||||
$(FILTERS) \
|
||||
$(wildcard $(srcdir)/xml/storage/*.xml) \
|
||||
$(wildcard $(srcdir)/xml/test/*.xml)
|
||||
|
||||
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include -I$(top_srcdir) \
|
||||
-I$(top_builddir)/gnulib/lib -I$(top_srcdir)/gnulib/lib
|
||||
LDADD = $(STATIC_BINARIES) $(WARN_CFLAGS) $(COVERAGE_LDFLAGS) \
|
||||
$(top_builddir)/src/libvirt.la $(top_builddir)/gnulib/lib/libgnu.la \
|
||||
$(top_builddir)/src/libvirt-admin.la
|
||||
|
||||
noinst_PROGRAMS=dominfo/info1 dommigrate/dommigrate domsuspend/suspend \
|
||||
domtop/domtop hellolibvirt/hellolibvirt object-events/event-test \
|
||||
openauth/openauth rename/rename admin/list_servers admin/list_clients \
|
||||
admin/threadpool_params admin/client_limits admin/client_info \
|
||||
admin/client_close admin/logging
|
||||
|
||||
dominfo_info1_SOURCES = dominfo/info1.c
|
||||
dommigrate_dommigrate_SOURCES = dommigrate/dommigrate.c
|
||||
domsuspend_suspend_SOURCES = domsuspend/suspend.c
|
||||
domtop_domtop_SOURCES = domtop/domtop.c
|
||||
hellolibvirt_hellolibvirt_SOURCES = hellolibvirt/hellolibvirt.c
|
||||
|
||||
object_events_event_test_CFLAGS = \
|
||||
$(WARN_CFLAGS) \
|
||||
$(NULL)
|
||||
object_events_event_test_SOURCES = object-events/event-test.c
|
||||
|
||||
openauth_openauth_SOURCES = openauth/openauth.c
|
||||
rename_rename_SOURCES = rename/rename.c
|
||||
|
||||
admin_list_servers_SOURCES = admin/list_servers.c
|
||||
admin_list_clients_SOURCES = admin/list_clients.c
|
||||
admin_threadpool_params_SOURCES = admin/threadpool_params.c
|
||||
admin_client_limits_SOURCES = admin/client_limits.c
|
||||
admin_client_info_SOURCES = admin/client_info.c
|
||||
admin_client_close_SOURCES = admin/client_close.c
|
||||
admin_logging_SOURCES = admin/logging.c
|
||||
|
||||
INSTALL_DATA_LOCAL =
|
||||
UNINSTALL_LOCAL =
|
||||
|
||||
if WITH_APPARMOR_PROFILES
|
||||
apparmordir = $(sysconfdir)/apparmor.d/
|
||||
apparmor_DATA = \
|
||||
apparmor/usr.lib.libvirt.virt-aa-helper \
|
||||
apparmor/usr.sbin.libvirtd \
|
||||
$(NULL)
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_builddir)/include \
|
||||
-I$(top_srcdir)/include \
|
||||
abstractionsdir = $(apparmordir)/abstractions
|
||||
abstractions_DATA = \
|
||||
apparmor/libvirt-qemu \
|
||||
apparmor/libvirt-lxc \
|
||||
$(NULL)
|
||||
|
||||
AM_CFLAGS = \
|
||||
$(WARN_CFLAGS) \
|
||||
templatesdir = $(apparmordir)/libvirt
|
||||
templates_DATA = \
|
||||
apparmor/TEMPLATE.qemu \
|
||||
apparmor/TEMPLATE.lxc \
|
||||
$(NULL)
|
||||
|
||||
AM_LDFLAGS = \
|
||||
$(STATIC_BINARIES) \
|
||||
$(NULL)
|
||||
APPARMOR_LOCAL_DIR = "$(DESTDIR)$(apparmordir)/local"
|
||||
install-apparmor-local:
|
||||
$(MKDIR_P) "$(APPARMOR_LOCAL_DIR)"
|
||||
echo "# Site-specific additions and overrides for \
|
||||
'usr.lib.libvirt.virt-aa-helper'" \
|
||||
>$(APPARMOR_LOCAL_DIR)/usr.lib.libvirt.virt-aa-helper
|
||||
|
||||
LDADD = \
|
||||
$(top_builddir)/src/libvirt.la \
|
||||
$(top_builddir)/src/libvirt-admin.la \
|
||||
$(NULL)
|
||||
|
||||
noinst_PROGRAMS = \
|
||||
c/admin/client_close \
|
||||
c/admin/client_info \
|
||||
c/admin/client_limits \
|
||||
c/admin/list_clients \
|
||||
c/admin/list_servers \
|
||||
c/admin/logging \
|
||||
c/admin/threadpool_params \
|
||||
c/domain/dommigrate \
|
||||
c/domain/domtop \
|
||||
c/domain/info1 \
|
||||
c/domain/rename \
|
||||
c/domain/suspend \
|
||||
c/misc/event-test \
|
||||
c/misc/hellolibvirt \
|
||||
c/misc/openauth \
|
||||
$(NULL)
|
||||
|
||||
c_admin_client_close_SOURCES = c/admin/client_close.c
|
||||
c_admin_client_info_SOURCES = c/admin/client_info.c
|
||||
c_admin_client_limits_SOURCES = c/admin/client_limits.c
|
||||
c_admin_list_clients_SOURCES = c/admin/list_clients.c
|
||||
c_admin_list_servers_SOURCES = c/admin/list_servers.c
|
||||
c_admin_logging_SOURCES = c/admin/logging.c
|
||||
c_admin_threadpool_params_SOURCES = c/admin/threadpool_params.c
|
||||
c_domain_dommigrate_SOURCES = c/domain/dommigrate.c
|
||||
c_domain_domtop_SOURCES = c/domain/domtop.c
|
||||
c_domain_info1_SOURCES = c/domain/info1.c
|
||||
c_domain_rename_SOURCES = c/domain/rename.c
|
||||
c_domain_suspend_SOURCES = c/domain/suspend.c
|
||||
c_misc_event_test_SOURCES = c/misc/event-test.c
|
||||
c_misc_hellolibvirt_SOURCES = c/misc/hellolibvirt.c
|
||||
c_misc_openauth_SOURCES = c/misc/openauth.c
|
||||
INSTALL_DATA_LOCAL += install-apparmor-local
|
||||
UNINSTALL_LOCAL += uninstall-apparmor-local
|
||||
endif WITH_APPARMOR_PROFILES
|
||||
|
||||
if WITH_NWFILTER
|
||||
NWFILTER_DIR = "$(DESTDIR)$(sysconfdir)/libvirt/nwfilter"
|
||||
|
||||
nwfilterdir = $(sysconfdir)/libvirt/nwfilter
|
||||
nwfilter_DATA = $(FILTERS)
|
||||
install-nwfilter-local:
|
||||
$(MKDIR_P) "$(NWFILTER_DIR)"
|
||||
for f in $(FILTERS); do \
|
||||
$(INSTALL_DATA) $$f "$(NWFILTER_DIR)"; \
|
||||
done
|
||||
|
||||
uninstall-nwfilter-local::
|
||||
for f in $(FILTERS); do \
|
||||
rm -f "$(NWFILTER_DIR)/`basename $$f`"; \
|
||||
done
|
||||
-test -z "$(shell ls $(NWFILTER_DIR))" || rmdir $(NWFILTER_DIR)
|
||||
|
||||
INSTALL_DATA_LOCAL += install-nwfilter-local
|
||||
UNINSTALL_LOCAL += uninstall-nwfilter-local
|
||||
endif WITH_NWFILTER
|
||||
|
||||
examplesdir = $(docdir)/examples
|
||||
install-data-local: $(INSTALL_DATA_LOCAL)
|
||||
|
||||
adminexamplesdir = $(examplesdir)/c/admin
|
||||
adminexamples_DATA = $(ADMIN_EXAMPLES)
|
||||
|
||||
domainexamplesdir = $(examplesdir)/c/domain
|
||||
domainexamples_DATA = $(DOMAIN_EXAMPLES)
|
||||
|
||||
miscexamplesdir = $(examplesdir)/c/misc
|
||||
miscexamples_DATA = $(MISC_EXAMPLES)
|
||||
|
||||
polkitexamplesdir = $(examplesdir)/polkit
|
||||
polkitexamples_DATA = $(POLKIT_EXAMPLES)
|
||||
|
||||
shexamplesdir = $(examplesdir)/sh
|
||||
shexamples_DATA = $(SH_EXAMPLES)
|
||||
|
||||
storagexmlexamplesdir = $(examplesdir)/xml/storage
|
||||
storagexmlexamples_DATA = $(STORAGE_XML_EXAMPLES)
|
||||
|
||||
systemtapexamplesdir = $(examplesdir)/systemtap
|
||||
systemtapexamples_DATA = $(SYSTEMTAP_EXAMPLES)
|
||||
|
||||
testxmlexamplesdir = $(examplesdir)/xml/test
|
||||
testxmlexamples_DATA = $(TEST_XML_EXAMPLES)
|
||||
uninstall-local: $(UNINSTALL_LOCAL)
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <libvirt/libvirt.h>
|
||||
#include <libvirt/libvirt-admin.h>
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<libvirt/libvirt.h>
|
||||
#include<libvirt/libvirt-admin.h>
|
||||
|
||||
int main(void)
|
||||
{
|
@@ -1,10 +1,9 @@
|
||||
#define _GNU_SOURCE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include <inttypes.h>
|
||||
#include <libvirt/libvirt-admin.h>
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<time.h>
|
||||
#include<string.h>
|
||||
#include<libvirt/libvirt-admin.h>
|
||||
|
||||
static const char *
|
||||
exampleTransportToString(int transport)
|
||||
@@ -31,13 +30,9 @@ exampleGetTimeStr(time_t then)
|
||||
{
|
||||
char *ret = NULL;
|
||||
struct tm timeinfo;
|
||||
struct tm *timeinfop;
|
||||
|
||||
/* localtime_r() is smarter, but since mingw lacks it and this
|
||||
* example is single-threaded, we can get away with localtime */
|
||||
if (!(timeinfop = localtime(&then)))
|
||||
if (!localtime_r(&then, &timeinfo))
|
||||
return NULL;
|
||||
timeinfo = *timeinfop;
|
||||
|
||||
if (!(ret = calloc(64, sizeof(char))))
|
||||
return NULL;
|
||||
@@ -67,11 +62,11 @@ exampleGetTypedParamValue(virTypedParameterPtr item)
|
||||
break;
|
||||
|
||||
case VIR_TYPED_PARAM_LLONG:
|
||||
ret = asprintf(&str, "%" PRId64, (int64_t)item->value.l);
|
||||
ret = asprintf(&str, "%lld", item->value.l);
|
||||
break;
|
||||
|
||||
case VIR_TYPED_PARAM_ULLONG:
|
||||
ret = asprintf(&str, "%" PRIu64, (uint64_t)item->value.ul);
|
||||
ret = asprintf(&str, "%llu", item->value.ul);
|
||||
break;
|
||||
|
||||
case VIR_TYPED_PARAM_DOUBLE:
|
||||
@@ -144,7 +139,7 @@ int main(int argc, char **argv)
|
||||
if (!(timestr = exampleGetTimeStr(virAdmClientGetTimestamp(clnt))))
|
||||
goto cleanup;
|
||||
|
||||
printf("%-15s: %" PRIu64 "\n", "id", (uint64_t)virAdmClientGetID(clnt));
|
||||
printf("%-15s: %llu\n", "id", virAdmClientGetID(clnt));
|
||||
printf("%-15s: %s\n", "connection_time", timestr);
|
||||
printf("%-15s: %s\n", "transport",
|
||||
exampleTransportToString(virAdmClientGetTransport(clnt)));
|
@@ -1,6 +1,6 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <libvirt/libvirt-admin.h>
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<libvirt/libvirt-admin.h>
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
@@ -9,7 +9,6 @@ int main(int argc, char **argv)
|
||||
virAdmServerPtr srv = NULL; /* which server to work with */
|
||||
virTypedParameterPtr params = NULL;
|
||||
int nparams = 0;
|
||||
int maxparams = 0;
|
||||
ssize_t i;
|
||||
|
||||
if (argc != 2) {
|
||||
@@ -40,6 +39,7 @@ int main(int argc, char **argv)
|
||||
nparams = 0;
|
||||
|
||||
/* set nclients_max to 100 and nclients_unauth_max to 20 */
|
||||
int maxparams = 0;
|
||||
if (virTypedParamsAddUInt(¶ms, &nparams, &maxparams,
|
||||
VIR_SERVER_CLIENTS_MAX, 100) < 0 ||
|
||||
virTypedParamsAddUInt(¶ms, &nparams, &maxparams,
|
@@ -1,8 +1,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <inttypes.h>
|
||||
#include <libvirt/libvirt-admin.h>
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<time.h>
|
||||
#include<libvirt/libvirt-admin.h>
|
||||
|
||||
static const char *
|
||||
exampleTransportToString(int transport)
|
||||
@@ -29,13 +28,9 @@ exampleGetTimeStr(time_t then)
|
||||
{
|
||||
char *ret = NULL;
|
||||
struct tm timeinfo;
|
||||
struct tm *timeinfop;
|
||||
|
||||
/* localtime_r() is smarter, but since mingw lacks it and this
|
||||
* example is single-threaded, we can get away with localtime */
|
||||
if (!(timeinfop = localtime(&then)))
|
||||
if (!localtime_r(&then, &timeinfo))
|
||||
return NULL;
|
||||
timeinfo = *timeinfop;
|
||||
|
||||
if (!(ret = calloc(64, sizeof(char))))
|
||||
return NULL;
|
||||
@@ -97,7 +92,7 @@ int main(int argc, char **argv)
|
||||
exampleGetTimeStr(virAdmClientGetTimestamp(client))))
|
||||
goto cleanup;
|
||||
|
||||
printf(" %-5" PRIu64 " %-15s %-15s\n", (uint64_t)id,
|
||||
printf(" %-5llu %-15s %-15s\n", id,
|
||||
exampleTransportToString(transport), timestr);
|
||||
free(timestr);
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user