[libvirt] ANNOUNCE: libvirt-glib version 0.2.2 released
by Daniel P. Berrange
I am pleased to announce that a new release of the libvirt-glib package,
version 0.2.2, is now available from
ftp://libvirt.org/libvirt/glib/
The packages are GPG signed with
Key fingerprint: DAF3 A6FD B26B 6291 2D0E 8E3F BE86 EBB4 1510 4FDF (4096R)
Changes in this release:
- Add API for getting interface MAC address
- Simplify implementation of object listing APIs
- Fix memory leaks of virConnect objects
- Port to use GTask instead of GSimpleAsyncResult
- Add API to get list of physical network interfaces
- Add API to get list of virtual networks
- Add API to get DHCP address of virtual networks
- Avoid overwriting filesystem type when setting format
- Include XML data for tests in dist
- Add support for UNIX chardev sources
- Fix test linking on platforms with strict linker deps
- Add ability to set video ram + vgamem
libvirt-glib comprises three distinct libraries:
- libvirt-glib - Integrate with the GLib event loop and error handling
- libvirt-gconfig - Representation of libvirt XML documents as GObjects
- libvirt-gobject - Mapping of libvirt APIs into the GObject type system
NB: While libvirt aims to be API/ABI stable forever, with libvirt-glib
we are not currently guaranteeing that libvirt-glib libraries are
permanently API/ABI stable. That said we do not expect to break the
API/ABI for the forseeable future and will always strive avoid it.
Follow up comments about libvirt-glib should be directed to the regular
libvir-list(a)redhat.com development list.
Thanks to all the people involved in contributing to this release.
Regards,
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
9 years, 4 months
[libvirt] ANNOUNCE: libguestfs 1.30 released
by Richard W.M. Jones
I'm pleased to announce libguestfs 1.30, a library and set of tools
for accessing and modifying virtual machine disk images.
This release took 9 months of work by a considerable number of people,
and has many new features (see release notes below).
You can get libguestfs 1.30 here:
Main website: http://libguestfs.org/
Source: http://libguestfs.org/download/1.30-stable/
You will also need latest supermin from here:
http://libguestfs.org/download/supermin/
Fedora 22+: http://koji.fedoraproject.org/koji/packageinfo?packageID=8391
It will appear as an update for F22/F23 in about a week.
Debian/experimental coming soon, see:
https://packages.debian.org/experimental/libguestfs0
[ From http://libguestfs.org/guestfs-release-notes.1.html ]
NAME
guestfs-release-notes - libguestfs Release Notes
RELEASE NOTES FOR LIBGUESTFS 1.30
These release notes only cover the differences from the previous
stable/dev branch split (1.28.0). For detailed changelogs, please see
the git repository, or the ChangeLog file distributed in the tarball.
New features
New tools
virt-dib(1) is a secure and safe alternative to the OpenStack
"diskimage-builder" tool. It is compatible with diskimage-builder
elements. (Pino Toscano)
virt-get-kernel(1) extracts the kernel and ramdisk from a disk image.
Previously this functionality was part of virt-builder(1), but the new
tool is more featureful. (Pino Toscano)
New features in existing tools
virt-v2v(1) -i ova mode can now read a wider range of OVA files, and
also unpacked files (directories).
virt-v2v now securely passes options to curl, so passwords, cookies and
so on cannot be seen by users with shell access on the same machine.
virt-v2v has a new --password-file option to allow you to securely pass
in a password, and to avoid an interactive prompt.
virt-v2v disables Windows autoreboot, making debugging conversion
failures on Windows easier.
virt-v2v now comes with an extensive external test suite. See
virt-v2v-test-harness(1).
virt-v2v allows virtio drivers to come from any location (Roman Kagan),
and drivers can be read directly from the virtio ISO.
virt-v2v supports conversion of Windows ≥ 8. Note this is experimental,
and possibly broken. Use with caution.
virt-v2v can now convert UEFI guests.
virt-p2v(1) adds a network configuration dialog.
virt-p2v now has p2v.pre, p2v.post and p2v.fail triggers, allowing
arbitrary scripts for preparing the host for conversion and tidying up
post-conversion.
virt-p2v now uses the more advanced metacity window manager (instead of
matchbox).
virt-sysprep(1) will remove /var/spool/mail/username for non-root
accounts (Hu Tao).
virt-customize(1), virt-builder(1) and virt-sysprep have the following
new options:
--commands-from-file
allow long lists of commands to be read from a file instead of from
the command line (Pino Toscano)
--copy
copy files inside the guest (Maros Zatko)
--copy-in
copy host files recursively into the guest (Pino Toscano)
--move
move files inside the guest (Maros Zatko)
--ssh-inject
inject SSH keys into a guest (Pino Toscano)
--sm-attach
--sm-credentials
--sm-register
--sm-remove
--sm-unregister
register and unregister a guest from subscription-manager (Pino
Toscano)
--touch
touch a file in the guest (Pino Toscano)
--truncate
--truncate-recursive
truncate files (Maros Zatko)
Improvements to virt-customize firstboot support. In particular,
Windows firstboot should work as well as Linux (Roman Kagan).
virt-df(1) can now use PolicyKit, SASL and other authentication methods
when getting the list of domains from libvirt.
Improvements to guestfish bash completion (Pino Toscano).
Bash completion now completes short options as well as long options
(Pino Toscano).
guestfish(1) now displays a command synopsis if the number of
parameters given to a command is wrong (Hu Tao).
virt-builder now supports Red Hat Enterprise Linux versions back to
RHEL 3.
virt-builder supports SUSE guests using zypper (Cédric Bosdonnat).
Language bindings
The Java bindings now include validated Javadoc, and other improvements
(Pino Toscano).
Multiple fixes and improvements to the PHP bindings (Pino Toscano).
Inspection
Inspection can now get icons from RHEL 7 and CentOS 7.
/etc/favicon.png is now allowed to be a symbolic link.
For RPM-based guests, inspection now returns RPM Epoch fields.
Debian packages now have separate Epoch and Version fields (Nikos
Skalkotos).
OpenBSD detection added, FreeBSD and NetBSD added as separate
"distros", and other BSD inspection improvements and bug fixes (Nikos
Skalkotos).
CoreOS detection added (Nikos Skalkotos).
The package manager in Fedora ≥ 22 is dnf.
ReactOS guests can be inspected (Maros Zatko).
Add support for UEFI guests.
Inspection now works when kernel modules are gzip or xz compressed
(Pino Toscano).
Inspection now recognizes ppc64 and ppc64le guests (Maros Zatko).
Inspection lists the installed applications on Archlinux guests (Nikos
Skalkotos).
Architectures and platforms
PPC64 (POWER7) and PPC64LE (POWER8) architectures are now much better
supported, and should work out of the box.
For aarch64, we use AAVMF (an open source UEFI implementation based on
OVMF) if available to run the appliance.
For armv7, we now use the -M virt machine type by default.
There is better support for compiling on non-Linux platforms (Pino
Toscano, Margaret Lewicka).
Libguestfs should now work on MIPS 32 bit little endian ("mipsel"). I
have not been able to try 64 bit or big endian.
Security
CVE-2014-8484
CVE-2014-8485
Libguestfs previously ran the strings(1) utility on untrusted files.
Strings could parse BFD headers in an unsafe way, leading to possible
arbitrary code execution. Libguestfs now runs strings with a flag to
ensure it does not try to parse BFD headers. This could have led to
exploitation of the libguestfs appliance, but since libguestfs
further constrains the appliance through virtualization, SELinux and
other techniques, it was unlikely to have caused any privilege
escalation on the host.
XPath injection in virt-v2v
One possible XPath injection vulnerability was fixed in virt-v2v.
This might have allowed a malicious guest which was being converted
by virt-v2v to construct an arbitrary XPath expression which would
have been evaluated on the host (by the libxml2 library linked to the
virt-v2v binary). It is not clear what the effects of this might be.
For further information, see upstream commit
https://github.com/libguestfs/libguestfs/commit/6c6ce85f94c36803fe2db35a9...
Denial of service problems when using qemu-img info
When using the American Fuzzy Lop fuzzer (afl-fuzz) on the qemu-img
info command, Richard W.M. Jones found that certain files can cause
the qemu-img program to use lots of memory and time (for example 6GB
of heap and 14 seconds of CPU time on a fast Intel processor), and in
some cases to crash. Since libguestfs may run qemu-img info on disk
images to find out what they contain, this transitively could cause
libguestfs to hang or consume lots of memory.
Libguestfs was modified so that it uses resource limits to limit the
space and time used by qemu-img info, to avoid this problem. If a
malicious user tries to pass one of these disk images to libguestfs,
qemu-img will crash and the crash is reported back to libguestfs
callers as an error message.
API
New APIs
guestfs_add_libvirt_dom
This exposes a previously private API that allows you to pass a
virDomainPtr object directly from libvirt to libguestfs.
guestfs_blockdev_setra
Adjust readahead parameter for devices. See blockdev --setra command.
guestfs_btrfs_balance
guestfs_btrfs_balance_cancel
guestfs_btrfs_balance_pause
guestfs_btrfs_balance_resume
guestfs_btrfs_balance_status
Balance support for Btrfs filesystems (Hu Tao).
guestfs_btrfs_filesystem_defragment
Filesystem defragmentation support for Btrfs filesystems (Hu Tao).
guestfs_btrfs_image
Create an image of a Btrfs filesystem (Chen Hanxiao)
guestfs_btrfs_qgroup_assign
guestfs_btrfs_qgroup_create
guestfs_btrfs_qgroup_destroy
guestfs_btrfs_qgroup_limit
guestfs_btrfs_qgroup_remove
guestfs_btrfs_qgroup_show
guestfs_btrfs_quota_enable
guestfs_btrfs_quota_rescan
Quote support for Btrfs filesystems (Hu Tao).
guestfs_btrfs_rescue_chunk_recover
Scan and recover the chunk tree in Btrfs filesystems (Hu Tao).
guestfs_btrfs_rescue_super_recover
Restore superblocks in Btrfs filesystems (Hu Tao).
guestfs_btrfs_replace
Replace a device in a Btrfs filesystem (Cao Jin).
guestfs_btrfs_scrub
guestfs_btrfs_scrub_cancel
guestfs_btrfs_scrub_resume
guestfs_btrfs_scrub_status
Scrub a Btrfs filesystem (Hu Tao).
guestfs_btrfs_subvolume_get_default
Get the default subvolume of a Btrfs filesystem (Hu Tao).
guestfs_btrfs_subvolume_show
List detailed information about the subvolume of a Btrfs filesystem
(Hu Tao).
guestfs_btrfstune_enable_extended_inode_refs
guestfs_btrfstune_enable_skinny_metadata_extent_refs
guestfs_btrfstune_seeding
Various tuning parameters for Btrfs filesystems (Chen Hanxiao).
guestfs_c_pointer
Return the C pointer to the underlying guestfs_h *. This allows
interworking of libguestfs bindings with bindings from other
libraries. For further information see
https://bugzilla.redhat.com/1075164
guestfs_copy_in
guestfs_copy_out
Flexible APIs for recursively copying directories of files between
the host and guest filesystem. Previously these were available only
as guestfish commands, but now any API users can call them (Pino
Toscano).
guestfs_part_get_gpt_guid
guestfs_part_set_gpt_guid
Get and set the GPT per-partition GUID.
guestfs_part_get_mbr_part_type
Get MBR partition type (Chen Hanxiao).
guestfs_set_uuid_random
Set the UUID of a filesystem to a randomly generated value; supported
filesystems currently are ext2/3/4, XFS, Btrfs, and swap partitions.
(Chen Hanxiao).
Other API changes
guestfs_disk_create can now use VMDK files as backing files.
guestfs_btrfs_subvolume_snapshot takes extra optional parameters (all
added by Hu Tao):
ro
for creating a read-only Btrfs snapshot
qgroupid
for adding the snapshot to a qgroup
guestfs_btrfs_subvolume_create can also take the optional qgroupid
parameter (Hu Tao).
guestfs_set_uuid can set UUID of swap partitions, Btrfs (Hu Tao, Chen
Hanxiao).
guestfs_copy_device_to_file and guestfs_copy_file_to_file have a new
optional append parameter, allowing you to append to the output file
instead of truncating it.
guestfs_mkfs has a new optional label parameter to set the initial
label of the new filesystem (Pino Toscano).
guestfs_set_label and guestfs_set_uuid now set ENOTSUP as errno when
there is no implemented support for the filesystem of the specified
mountable (Chen Hanxiao).
Environment variables now let you write LIBGUESTFS_DEBUG=true,
LIBGUESTFS_DEBUG=0 and so on.
All guestfs_sfdisk* APIs have been deprecated. Because sfdisk(8) was
rewritten, incompatibly, upstream, we don't recommend using these APIs
in future code. Use the guestfs_part* APIs as replacements.
APIs such as guestfs_download do not truncate /dev/stdout or
/dev/stderr when writing to them, meaning that if you redirect stdout
or stderr to a file, the file is no longer truncated.
Build changes
The daemon no longer uses its own separate copy of gnulib. Instead it
shares a single copy with the library.
OCaml .annot files are now created, so IDEs and editors like emacs and
vi can browse OCaml types in the source code.
Various fixes to allow different host/appliance architecture builds
(Pino Toscano).
Automake is now used directly to build all the OCaml programs, instead
of ad hoc Makefile rules. One side effect of this is to enable warnings
in all the C code used by OCaml programs.
-fno-strict-overflow is used throughout the build to avoid dubious GCC
optimizations.
Multiple cleanups to support GCC 5.
OCaml OUnit2 is needed to run some OCaml tests.
Creating a statically linked libguestfs.a should work again.
The src/api-support subdirectory and its scripts are no longer used.
Instead we store in the generator/actions.ml when the API was added to
libguestfs.
Internationalization
The translation service has changed from Transifex to Zanata.
Many more translations are available now, for both library and tools
messages and documentation.
Internals
In all OCaml tools, there are now common error, warning, info
functions, and common way to set and get the --quiet, -x (trace) and -v
(verbose) flags, and colour highlighting used consistently.
COMPILE_REGEXP macros are used to simplify PCRE constructors and
destructors.
In the generator, Pointer arguments have finally been implemented.
Internal identifiers no longer use double and triple underscores (eg.
guestfs___program_name). These identifiers are invalid for C99 and C++
programs, although compilers would accept them.
The daemon no longer parses guestfs_* options from /proc/cmdline.
Instead it only takes ordinary command line options. The appliance init
script turns /proc/cmdline into daemon command line options.
The tests can now run the daemon as a "captive process", allowing it to
be run directly on the host. The main advantage of this is we can run
valgrind directly on the daemon during testing.
Bugs fixed
https://bugzilla.redhat.com/1239053
virt-v2v error reporting when grub.conf cannot be parsed by Augeas
https://bugzilla.redhat.com/1238053
v2v:Duplicate disk target set when convert guest with cdrom attached
https://bugzilla.redhat.com/1237869
Virtio drivers are not installed for windows 2008 guests by virt-v2v
https://bugzilla.redhat.com/1234351
virt-v2v Support for Fedora virtio-win drivers
https://bugzilla.redhat.com/1232192
Virt-v2v gives an error on a blank disk: part_get_parttype: unknown
signature, of the output: BYT;
https://bugzilla.redhat.com/1229385
virt-p2v in kernel command line mode should power off the machine
after conversion
https://bugzilla.redhat.com/1229340
virt-p2v no GUI mode appends \n to the final command line parameter
https://bugzilla.redhat.com/1229305
virt-sysprep at cleanup deletes /var/spool/at/.SEQ which results in
failing at
https://bugzilla.redhat.com/1226794
"Doing conversion……" still shows after cancel the conversion from
virt-p2v client
https://bugzilla.redhat.com/1215042
Memory leak in virNetSocketNewConnectUNIX
https://bugzilla.redhat.com/1213324
virt-v2v: warning: unknown guest operating system: windows windows
6.3 when converting win8,win8.1,win2012,win2012R2 to rhev
https://bugzilla.redhat.com/1213247
virt tools should print the same format of version string
https://bugzilla.redhat.com/1212808
RFE: virt-builder --touch
https://bugzilla.redhat.com/1212807
virt-builder --selinux-relabel flag fails on cross-architecture
builds
https://bugzilla.redhat.com/1212680
RFE: virt-inspector xpath query should output a neat format of the
query element
https://bugzilla.redhat.com/1212152
virt-builder firstboot-command fails: File name too long
https://bugzilla.redhat.com/1211996
virt-inspector gives incorrect arch (ppc64) for ppc64le guest
https://bugzilla.redhat.com/1203817
RFE: virt-customize --move and --copy
https://bugzilla.redhat.com/1201526
index-parser can't parse systemd mount files properly
https://bugzilla.redhat.com/1196101
virt-builder --upload option doesn't work to a FAT partition
https://bugzilla.redhat.com/1196100
virt-builder -x option on its own does not enable tracing
https://bugzilla.redhat.com/1195204
`virt-builder` should create $HOME/.cache directory if it already
doesn't exist
https://bugzilla.redhat.com/1193237
Virt-builder fingerprint is required even when no check desired
https://bugzilla.redhat.com/1189284
virt-resize should preserve GPT partition UUIDs, else EFI guests
become unbootable
https://bugzilla.redhat.com/1188866
Performance regression in virt-builder when uncompressing image
https://bugzilla.redhat.com/1186800
virt-v2v should support gzip format ova as input
https://bugzilla.redhat.com/1185561
virt-sparsify should ignore read-only LVs
https://bugzilla.redhat.com/1182463
"mknod-b", "mknod-c", and "mkfifo" do not strip non-permissions bits
from "mode"
https://bugzilla.redhat.com/1176493
virt-v2v ignores sound device when convert xen guest to local kvm
https://bugzilla.redhat.com/1175676
Typo error in 'help ping-daemon'
https://bugzilla.redhat.com/1175196
"parse-environment" and "parse-environment-list" fail to parse
"LIBGUESTFS_TRACE = 0"
https://bugzilla.redhat.com/1175035
"is-blockdev"/"is-blockdev-opts" fail to detect "/dev/sda"
https://bugzilla.redhat.com/1174280
RFE: Allow v2v conversion of Oracle Linux 5.8 VMware VM
https://bugzilla.redhat.com/1174200
New virt-v2v failure: CURL: Error opening file: NSS: client
certificate not found (nickname not specified): Invalid argument
https://bugzilla.redhat.com/1174123
Graphics password disappear after conversion of virt-v2v
https://bugzilla.redhat.com/1174073
The listen address for vnc is changed after conversion by virt-v2v
https://bugzilla.redhat.com/1171666
inspection thinks EFI partition is a separate operating system
https://bugzilla.redhat.com/1171130
virt-v2v conversion of RHEL 3 guest fails with: All of your loopback
devices are in use
https://bugzilla.redhat.com/1170685
Conversion of RHEL 4 guest fails: rpm -ql 1:kernel-utils-2.4-23.el4:
virt-v2v: error: libguestfs error: command_lines:
https://bugzilla.redhat.com/1170073
virt-v2v picks debug kernels over non-debug kernels when versions are
equal
https://bugzilla.redhat.com/1169045
virt-sparsify: libguestfs error: qemu-img info: 'virtual-size' is not
representable as a 64 bit integer
https://bugzilla.redhat.com/1169015
virt-resize --expand fails on ubuntu-14.04.img image (regression)
https://bugzilla.redhat.com/1168144
warning: fstrim: fstrim: /sysroot/: FITRIM ioctl failed: Operation
not supported (ignored) when convert win2003 guest from xen server
https://bugzilla.redhat.com/1167921
p2v: No Network Connection dialog
https://bugzilla.redhat.com/1167774
virt-p2v fails with error:"nbd.c:nbd_receive_negotiate():L501: read
failed"
https://bugzilla.redhat.com/1167623
Remove "If reporting bugs, run virt-v2v with debugging enabled .."
message when running virt-p2v
https://bugzilla.redhat.com/1167601
"Conversion was successful" pop out even virt-p2v fails
https://bugzilla.redhat.com/1167302
virt-v2v: warning: ova hard disk has no parent controller when
convert from a ova file
https://bugzilla.redhat.com/1166618
virt-resize should give out the detail warning info to let customers
know what's going wrong
https://bugzilla.redhat.com/1165975
File "/boot/grub2/device.map" showing is not right after converting a
rhel7 guest from esx server
https://bugzilla.redhat.com/1165785
mount-loop command fails: mount failed: Unknown error -1
https://bugzilla.redhat.com/1165569
Disable "cancel conversion" button after virt-p2v conversion finished
https://bugzilla.redhat.com/1165564
Provide Reboot/Shutdown button after virt-p2v
https://bugzilla.redhat.com/1164853
Booting in qemu found no volume groups and failed checking the
filesystems
https://bugzilla.redhat.com/1164732
The description of 'help append' is not accurately, it add the kernel
options to libguestfs appliance not the guest kernel
https://bugzilla.redhat.com/1164697
typo errors in man pages
https://bugzilla.redhat.com/1164619
Inspect-get-icon failed on RHEL7 guest
https://bugzilla.redhat.com/1162966
xfs should also give a warning out to let customer know the
limitation
https://bugzilla.redhat.com/1161575
Failed to import guest with "rtl8139" nic to openstack server after
converted by v2v
https://bugzilla.redhat.com/1159651
virt-sysprep firstboot script is not deleted if it reboot a RHEL 7
guest
https://bugzilla.redhat.com/1159258
esx win2008 32 bit guest fail to load after conversion because the
firmware isn't ACPI compatible
https://bugzilla.redhat.com/1159016
libvirt backend does not set RBD password
https://bugzilla.redhat.com/1158526
Use password file instead of process interaction
https://bugzilla.redhat.com/1157679
virt-p2v-make-disk should add firmwares
https://bugzilla.redhat.com/1156449
libguestfs FTBFS on f21 ppc64le
https://bugzilla.redhat.com/1156301
virt-inspector support adding a remote disk, but in its man page -a
URI / --add URI is missing
https://bugzilla.redhat.com/1155121
Virt-v2v will fail when using relative path for -i ova
https://bugzilla.redhat.com/1153844
Redundancy whitespace at the end of directory name when use <TAB> to
complete the directory name in guestfish with a xfs filesystem in
guest
https://bugzilla.redhat.com/1153589
virt-v2v will hang when converting esx guest before disk copy phase
https://bugzilla.redhat.com/1152998
virt-v2v / qemu-img fails on ova image
https://bugzilla.redhat.com/1151910
virt-ls should remove '/' in the output when specify the directory
name as /etc/
https://bugzilla.redhat.com/1151900
Should also add a field for directory files when run virt-ls with
--csv option
https://bugzilla.redhat.com/1151033
virt-v2v conversions from VMware vCenter server run slowly
https://bugzilla.redhat.com/1146832
virt-v2v fail to convert guest with disk type volume
https://bugzilla.redhat.com/1146007
Input/output error during conversion of esx guest.
https://bugzilla.redhat.com/1135585
[RFE] virt-builder should support copying in a directory/list of
files
https://bugzilla.redhat.com/1089566
[abrt] livecd-tools: kickstart.py:276:apply:IOError: [Errno 2] No
such file or directory:
'/run/media/jones/2tp001data/createlive/temp/imgcreate-_dX8Us/install_root/etc/rpm/macros.imgcreate'
https://bugzilla.redhat.com/1079625
virt-sparsify fails if a btrfs filesystem contains readonly snapshots
https://bugzilla.redhat.com/1075164
RFE: allow passing in a pre-opened libvirt connection from python
https://bugzilla.redhat.com/912499
Security context on image file gets reset
https://bugzilla.redhat.com/889082
[RFE] virt-v2v should check whether guest with same name exist on
target first then transfer the disk
https://bugzilla.redhat.com/855059
RFE: virt-p2v: display more information about network devices such as
topology, bonding, etc.
https://bugzilla.redhat.com/823758
p2v client should have largest number restrictions for CPU and Memory
settings
https://bugzilla.redhat.com/709327
hivex cannot read registry hives from ReactOS
https://bugzilla.redhat.com/709326
virt-inspector cannot detect ReactOS
https://bugzilla.redhat.com/119673
installation via NFS doesn't seem to work
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-builder quickly builds VMs from scratch
http://libguestfs.org/virt-builder.1.html
9 years, 4 months
[libvirt] [PATCH 0/5] Additional SCSI generated device address checks
by John Ferlan
https://bugzilla.redhat.com/show_bug.cgi?id=1210587
These patches will resolve a couple issues with generation of the
<address type='drive' .../> for a SCSI <disk> and <hostdev>.
The <disk> generation algorithm 'assumes' that when presented with
<target dev='sda'.../> that it can use controller=0 and unit=0 since
sda would conceivably be the first device; however, a <hostdev> could
attempt to assign itself to that address and it doesn't have a target
device name, so it bypasses the virDomainDiskDefDstDuplicates checks
that would normally 'catch' two <disk>'s attempting to use the same name.
Likewise, if a <hostdev> occupies an <address> and we attempt to hotplug
a <disk> without providing an address, the address generation could
attempt to place the disk on the already existing host device.
John Ferlan (5):
conf: Enforce SCSI hostdev address type
conf: Add 'bus' and 'target' to SCSI address conflict checks
conf: Add SCSI hostdev check for disk drive address already in use
conf: Refactor virDomainDiskDefParseXML to pass vmdef
conf: Check for hostdev conflicts when assign default disk address
docs/formatdomain.html.in | 4 +-
src/conf/domain_conf.c | 115 ++++++++++++++++++++++++++++++++--------------
src/conf/domain_conf.h | 3 +-
src/qemu/qemu_command.c | 4 +-
src/vmx/vmx.c | 22 +++++----
src/vmx/vmx.h | 3 +-
6 files changed, 101 insertions(+), 50 deletions(-)
--
2.1.0
9 years, 4 months
[libvirt] [PATCH 00/13] Improve virsh block job handling
by Peter Krempa
This series refactors the block job command code so that it is handled by
separate functions rather than one mega-method. Additionally this series then
fixes the routine for waiting for a block job.
As it's perhaps obvious from the patches the API design for the block job APIs
is rather unfortunate for users.
This series contains a few patches that already were submitted and partially
reviewed previously.
Peter Krempa (13):
virsh: blockjob: Extract block job info code into a separate function
virsh: cmdBlockJob: Switch to declarative flag interlocking
virsh: blockjob: Split out vshBlockJobSetSpeed from blockJobImpl
virsh: block job: separate abort from blockJobImpl
virsh: Split out block pull implementation from blockJobImpl
virsh: Kill blockJobImpl by moving the final impl into cmdBlockCommit
virsh: Refactor argument checking in cmdBlockCommit
virsh: Refactor argument handling in cmdBlockCopy
virsh: Refactor argument handling in cmdBlockPull
qemu: Update state of block job to READY only if it actually is ready
virsh: Refactor block job waiting in cmdBlockPull
virsh: Refactor block job waiting in cmdBlockCommit
virsh: Refactor block job waiting in cmdBlockCopy
src/qemu/qemu_driver.c | 10 +-
src/qemu/qemu_monitor.h | 1 +
src/qemu/qemu_monitor_json.c | 7 +
tools/virsh-domain.c | 962 ++++++++++++++++++++++++-------------------
4 files changed, 551 insertions(+), 429 deletions(-)
--
2.4.5
9 years, 4 months
[libvirt] [libvirt-glib PATCHv5 1/7] gobject: Simplify gvir_connection_list*() implementations
by Zeeshan Ali (Khattak)
Make use of virConnectListAll* functions to avoid making 4 calls and
hence avoid race conditions and complicated code.
---
libvirt-gobject/libvirt-gobject-connection.c | 203 ++++-----------------------
1 file changed, 28 insertions(+), 175 deletions(-)
diff --git a/libvirt-gobject/libvirt-gobject-connection.c b/libvirt-gobject/libvirt-gobject-connection.c
index cf073a5..e088427 100644
--- a/libvirt-gobject/libvirt-gobject-connection.c
+++ b/libvirt-gobject/libvirt-gobject-connection.c
@@ -680,48 +680,6 @@ void gvir_connection_close(GVirConnection *conn)
g_signal_emit(conn, signals[VIR_CONNECTION_CLOSED], 0);
}
-typedef gint (* CountFunction) (virConnectPtr vconn);
-typedef gint (* ListFunction) (virConnectPtr vconn, gchar **lst, gint max);
-
-static gchar ** fetch_list(virConnectPtr vconn,
- const char *name,
- CountFunction count_func,
- ListFunction list_func,
- GCancellable *cancellable,
- gint *length,
- GError **err)
-{
- gchar **lst = NULL;
- gint n = 0;
-
- if ((n = count_func(vconn)) < 0) {
- gvir_set_error(err, GVIR_CONNECTION_ERROR,
- 0,
- _("Unable to count %s"), name);
- goto error;
- }
-
- if (n) {
- if (g_cancellable_set_error_if_cancelled(cancellable, err))
- goto error;
-
- lst = g_new0(gchar *, n);
- if ((n = list_func(vconn, lst, n)) < 0) {
- gvir_set_error(err, GVIR_CONNECTION_ERROR,
- 0,
- _("Unable to list %s %d"), name, n);
- goto error;
- }
- }
-
- *length = n;
- return lst;
-
-error:
- g_free(lst);
- return NULL;
-}
-
/**
* gvir_connection_fetch_domains:
* @conn: a #GVirConnection
@@ -733,14 +691,11 @@ gboolean gvir_connection_fetch_domains(GVirConnection *conn,
{
GVirConnectionPrivate *priv;
GHashTable *doms;
- gchar **inactive = NULL;
- gint ninactive = 0;
- gint *active = NULL;
- gint nactive = 0;
+ virDomainPtr *domains = NULL;
+ gint ndomains = 0;
gboolean ret = FALSE;
gint i;
virConnectPtr vconn = NULL;
- GError *lerr = NULL;
g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE);
g_return_val_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable),
@@ -761,81 +716,28 @@ gboolean gvir_connection_fetch_domains(GVirConnection *conn,
virConnectRef(vconn);
g_mutex_unlock(priv->lock);
- if (g_cancellable_set_error_if_cancelled(cancellable, err))
- goto cleanup;
-
- if ((nactive = virConnectNumOfDomains(vconn)) < 0) {
- gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
- 0,
- _("Unable to count domains"));
+ ndomains = virConnectListAllDomains(vconn, &domains, 0);
+ if (ndomains < 0) {
+ gvir_set_error(err, GVIR_CONNECTION_ERROR,
+ 0,
+ _("Failed to fetch list of domains"));
goto cleanup;
}
- if (nactive) {
- if (g_cancellable_set_error_if_cancelled(cancellable, err))
- goto cleanup;
-
- active = g_new(gint, nactive);
- if ((nactive = virConnectListDomains(vconn, active, nactive)) < 0) {
- gvir_set_error_literal(err, GVIR_CONNECTION_ERROR,
- 0,
- _("Unable to list domains"));
- goto cleanup;
- }
- }
if (g_cancellable_set_error_if_cancelled(cancellable, err))
goto cleanup;
- inactive = fetch_list(vconn,
- "Domains",
- virConnectNumOfDefinedDomains,
- virConnectListDefinedDomains,
- cancellable,
- &ninactive,
- &lerr);
- if (lerr) {
- g_propagate_error(err, lerr);
- lerr = NULL;
- goto cleanup;
- }
-
doms = g_hash_table_new_full(g_str_hash,
g_str_equal,
NULL,
g_object_unref);
- for (i = 0 ; i < nactive ; i++) {
- if (g_cancellable_set_error_if_cancelled(cancellable, err))
- goto cleanup;
-
- virDomainPtr vdom = virDomainLookupByID(vconn, active[i]);
+ for (i = 0 ; i < ndomains; i++) {
GVirDomain *dom;
- if (!vdom)
- continue;
dom = GVIR_DOMAIN(g_object_new(GVIR_TYPE_DOMAIN,
- "handle", vdom,
+ "handle", domains[i],
NULL));
- virDomainFree(vdom);
-
- g_hash_table_insert(doms,
- (gpointer)gvir_domain_get_uuid(dom),
- dom);
- }
-
- for (i = 0 ; i < ninactive ; i++) {
- if (g_cancellable_set_error_if_cancelled(cancellable, err))
- goto cleanup;
-
- virDomainPtr vdom = virDomainLookupByName(vconn, inactive[i]);
- GVirDomain *dom;
- if (!vdom)
- continue;
-
- dom = GVIR_DOMAIN(g_object_new(GVIR_TYPE_DOMAIN,
- "handle", vdom,
- NULL));
- virDomainFree(vdom);
g_hash_table_insert(doms,
(gpointer)gvir_domain_get_uuid(dom),
@@ -852,10 +754,11 @@ gboolean gvir_connection_fetch_domains(GVirConnection *conn,
ret = TRUE;
cleanup:
- g_free(active);
- for (i = 0 ; i < ninactive ; i++)
- g_free(inactive[i]);
- g_free(inactive);
+ if (ndomains > 0) {
+ for (i = 0 ; i < ndomains; i++)
+ virDomainFree(domains[i]);
+ free(domains);
+ }
return ret;
}
@@ -870,14 +773,11 @@ gboolean gvir_connection_fetch_storage_pools(GVirConnection *conn,
{
GVirConnectionPrivate *priv;
GHashTable *pools;
- gchar **inactive = NULL;
- gint ninactive = 0;
- gchar **active = NULL;
- gint nactive = 0;
+ virStoragePoolPtr *vpools = NULL;
+ gint npools = 0;
gboolean ret = FALSE;
gint i;
virConnectPtr vconn = NULL;
- GError *lerr = NULL;
g_return_val_if_fail(GVIR_IS_CONNECTION(conn), FALSE);
g_return_val_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable),
@@ -901,77 +801,31 @@ gboolean gvir_connection_fetch_storage_pools(GVirConnection *conn,
if (g_cancellable_set_error_if_cancelled(cancellable, err))
goto cleanup;
- active = fetch_list(vconn,
- "Storage Pools",
- virConnectNumOfStoragePools,
- virConnectListStoragePools,
- cancellable,
- &nactive,
- &lerr);
- if (lerr) {
- g_propagate_error(err, lerr);
- lerr = NULL;
+ npools = virConnectListAllStoragePools(vconn, &vpools, 0);
+ if (npools < 0) {
+ gvir_set_error(err, GVIR_CONNECTION_ERROR,
+ 0,
+ _("Failed to fetch list of pools"));
goto cleanup;
}
if (g_cancellable_set_error_if_cancelled(cancellable, err))
goto cleanup;
- inactive = fetch_list(vconn,
- "Storage Pools",
- virConnectNumOfDefinedStoragePools,
- virConnectListDefinedStoragePools,
- cancellable,
- &ninactive,
- &lerr);
- if (lerr) {
- g_propagate_error(err, lerr);
- lerr = NULL;
- goto cleanup;
- }
-
pools = g_hash_table_new_full(g_str_hash,
g_str_equal,
NULL,
g_object_unref);
- for (i = 0 ; i < nactive ; i++) {
- if (g_cancellable_set_error_if_cancelled(cancellable, err))
- goto cleanup;
-
- virStoragePoolPtr vpool;
+ for (i = 0 ; i < npools; i++) {
GVirStoragePool *pool;
- vpool = virStoragePoolLookupByName(vconn, active[i]);
- if (!vpool)
- continue;
-
- pool = GVIR_STORAGE_POOL(g_object_new(GVIR_TYPE_STORAGE_POOL,
- "handle", vpool,
- NULL));
- virStoragePoolFree(vpool);
-
- g_hash_table_insert(pools,
- (gpointer)gvir_storage_pool_get_uuid(pool),
- pool);
- }
-
- for (i = 0 ; i < ninactive ; i++) {
if (g_cancellable_set_error_if_cancelled(cancellable, err))
goto cleanup;
- virStoragePoolPtr vpool;
- GVirStoragePool *pool;
-
- vpool = virStoragePoolLookupByName(vconn, inactive[i]);
- if (!vpool)
- continue;
-
pool = GVIR_STORAGE_POOL(g_object_new(GVIR_TYPE_STORAGE_POOL,
- "handle", vpool,
+ "handle", vpools[i],
NULL));
- virStoragePoolFree(vpool);
-
g_hash_table_insert(pools,
(gpointer)gvir_storage_pool_get_uuid(pool),
pool);
@@ -987,12 +841,11 @@ gboolean gvir_connection_fetch_storage_pools(GVirConnection *conn,
ret = TRUE;
cleanup:
- for (i = 0 ; i < nactive ; i++)
- g_free(active[i]);
- g_free(active);
- for (i = 0 ; i < ninactive ; i++)
- g_free(inactive[i]);
- g_free(inactive);
+ if (npools > 0) {
+ for (i = 0 ; i < npools; i++)
+ virStoragePoolFree(vpools[i]);
+ free(vpools);
+ }
return ret;
}
--
2.4.3
9 years, 4 months
[libvirt] [PATCHv2] nodedev: add RDMA and tx-udp_tnl-segmentation NIC capabilities
by Moshe Levi
Adding functionality to libvirt that will allow
it query the interface for the availability of RDMA and
tx-udp_tnl-segmentation Offloading NIC capabilities
Here is an example of the feature XML definition:
<device>
<name>net_eth4_90_e2_ba_5e_a5_45</name>
<path>/sys/devices/pci0000:00/0000:00:03.0/0000:08:00.1/net/eth4</path>
<parent>pci_0000_08_00_1</parent>
<capability type='net'>
<interface>eth4</interface>
<address>90:e2:ba:5e:a5:45</address>
<link speed='10000' state='up'/>
<feature name='rx'/>
<feature name='tx'/>
<feature name='sg'/>
<feature name='tso'/>
<feature name='gso'/>
<feature name='gro'/>
<feature name='rxvlan'/>
<feature name='txvlan'/>
<feature name='rxhash'/>
<feature name='rdma'/>
<feature name='txudptnl'/>
<capability type='80203'/>
</capability>
</device>
---
configure.ac | 2 +-
docs/formatnode.html.in | 2 +
src/conf/device_conf.c | 4 +-
src/conf/device_conf.h | 2 +
src/util/virnetdev.c | 141 +++++++++++++++++++--
src/util/virnetdev.h | 1 +
tests/nodedevschemadata/net_00_13_02_b9_f9_d3.xml | 2 +
tests/nodedevschemadata/net_00_15_58_2f_e9_55.xml | 2 +
8 files changed, 144 insertions(+), 12 deletions(-)
diff --git a/configure.ac b/configure.ac
index a7f38e8..70b3ef3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -390,7 +390,7 @@ AC_CHECK_TYPE([struct ifreq],
]])
AC_CHECK_DECLS([ETH_FLAG_TXVLAN, ETH_FLAG_NTUPLE, ETH_FLAG_RXHASH, ETH_FLAG_LRO,
- ETHTOOL_GGSO, ETHTOOL_GGRO, ETHTOOL_GFLAGS],
+ ETHTOOL_GGSO, ETHTOOL_GGRO, ETHTOOL_GFLAGS, ETHTOOL_GFEATURES],
[], [], [[#include <linux/ethtool.h>
]])
diff --git a/docs/formatnode.html.in b/docs/formatnode.html.in
index 3ff1bef..ed00af5 100644
--- a/docs/formatnode.html.in
+++ b/docs/formatnode.html.in
@@ -199,6 +199,8 @@
<dt><code>txvlan</code></dt><dd>tx-vlan-offload</dd>
<dt><code>ntuple</code></dt><dd>ntuple-filters</dd>
<dt><code>rxhash</code></dt><dd>receive-hashing</dd>
+ <dt><code>rdma</code></dt><dd>remote-direct-memory-access</dd>
+ <dt><code>txudptnl</code></dt><dd>tx-udp-tunnel-segmentation</dd>
</dl>
</dd>
<dt><code>capability</code></dt>
diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c
index 98808e2..e7b7957 100644
--- a/src/conf/device_conf.c
+++ b/src/conf/device_conf.c
@@ -51,7 +51,9 @@ VIR_ENUM_IMPL(virNetDevFeature,
"rxvlan",
"txvlan",
"ntuple",
- "rxhash")
+ "rxhash",
+ "rdma",
+ "txudptnl")
int virDevicePCIAddressIsValid(virDevicePCIAddressPtr addr)
{
diff --git a/src/conf/device_conf.h b/src/conf/device_conf.h
index 7ea90f6..40a2b3d 100644
--- a/src/conf/device_conf.h
+++ b/src/conf/device_conf.h
@@ -74,6 +74,8 @@ typedef enum {
VIR_NET_DEV_FEAT_TXVLAN,
VIR_NET_DEV_FEAT_NTUPLE,
VIR_NET_DEV_FEAT_RXHASH,
+ VIR_NET_DEV_FEAT_RDMA,
+ VIR_NET_DEV_FEAT_TXUDPTNL,
VIR_NET_DEV_FEAT_LAST
} virNetDevFeature;
diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
index e4fcd81..0dcb42d 100644
--- a/src/util/virnetdev.c
+++ b/src/util/virnetdev.c
@@ -87,6 +87,14 @@ VIR_LOG_INIT("util.netdev");
# define VIR_IFF_ALLMULTI 0
#endif
+#define RESOURCE_FILE_LEN 4096
+#define TX_UDP_TNL 25
+#define GFEATURES_SIZE 2
+#define FEATURE_WORD(blocks, index, field) ((blocks)[(index) / 32U].field)
+#define FEATURE_FIELD_FLAG(index) (1U << (index) % 32U)
+#define FEATURE_BIT_IS_SET(blocks, index, field) \
+ (FEATURE_WORD(blocks, index, field) & FEATURE_FIELD_FLAG(index))
+
typedef enum {
VIR_MCAST_TYPE_INDEX_TOKEN,
VIR_MCAST_TYPE_NAME_TOKEN,
@@ -1868,7 +1876,6 @@ virNetDevReplaceMacAddress(const char *linkdev,
goto cleanup;
ret = 0;
-
cleanup:
VIR_FREE(path);
return ret;
@@ -2858,9 +2865,9 @@ static int virNetDevGetMulticastTable(const char *ifname,
}
ret = 0;
+
cleanup:
virNetDevMcastListClear(&mcast);
-
return ret;
}
@@ -2943,11 +2950,76 @@ int virNetDevGetRxFilter(const char *ifname,
return ret;
}
+
+/**
+ * virNetDevRDMAFeature
+ * This function checks for the availability of RDMA feature
+ * and add it to bitmap
+ *
+ * @ifname: name of the interface
+ * @out: add RDMA feature if exist to bitmap
+ *
+ * Returns 0 on success, -1 on failure.
+ */
+static int
+virNetDevRDMAFeature(const char *ifname,
+ virBitmapPtr *out)
+{
+ char *eth_devpath = NULL;
+ char *ib_devpath = NULL;
+ char *eth_res_buf = NULL;
+ char *ib_res_buf = NULL;
+ DIR *dirp = NULL;
+ struct dirent *dp;
+ int ret = -1;
+
+ if (!(dirp = opendir(SYSFS_INFINIBAND_DIR))) {
+ virReportSystemError(errno,
+ _("Failed to opendir path '%s'"),
+ SYSFS_INFINIBAND_DIR);
+ goto cleanup;
+ }
+
+ if (virAsprintf(ð_devpath, SYSFS_NET_DIR "%s/device/resource", ifname) < 0)
+ goto cleanup;
+ if (!virFileExists(eth_devpath))
+ goto cleanup;
+ if (virFileReadAll(eth_devpath, RESOURCE_FILE_LEN, ð_res_buf) < 0)
+ goto cleanup;
+
+ while (virDirRead(dirp, &dp, SYSFS_INFINIBAND_DIR) > 0) {
+ if (dp->d_name[0] == '.')
+ continue;
+ if (virAsprintf(&ib_devpath, SYSFS_INFINIBAND_DIR "%s/device/resource", dp->d_name) < 0) {
+ VIR_FREE(ib_devpath);
+ continue;
+ }
+ if (virFileReadAll(ib_devpath, RESOURCE_FILE_LEN, &ib_res_buf) < 0) {
+ VIR_FREE(ib_res_buf);
+ continue;
+ }
+ if (STREQ(eth_res_buf, ib_res_buf)) {
+ ignore_value(virBitmapSetBit(*out, VIR_NET_DEV_FEAT_RDMA));
+ break;
+ }
+ VIR_FREE(ib_res_buf);
+ }
+ ret = 0;
+
+ cleanup:
+ closedir(dirp);
+ VIR_FREE(eth_devpath);
+ VIR_FREE(ib_devpath);
+ VIR_FREE(eth_res_buf);
+ VIR_FREE(ib_res_buf);
+ return ret;
+}
+
#if defined(SIOCETHTOOL) && defined(HAVE_STRUCT_IFREQ)
/**
- * virNetDevFeatureAvailable
- * This function checks for the availability of a network device feature
+ * virNetDevSendEthtoolIoctl
+ * This function sends ethtool ioctl request
*
* @ifname: name of the interface
* @cmd: reference to an ethtool command structure
@@ -2955,7 +3027,7 @@ int virNetDevGetRxFilter(const char *ifname,
* Returns 0 on success, -1 on failure.
*/
static int
-virNetDevFeatureAvailable(const char *ifname, struct ethtool_value *cmd)
+virNetDevSendEthtoolIoctl(const char *ifname, void *cmd)
{
int ret = -1;
int sock = -1;
@@ -2969,9 +3041,9 @@ virNetDevFeatureAvailable(const char *ifname, struct ethtool_value *cmd)
memset(&ifr, 0, sizeof(ifr));
strcpy(ifr.ifr_name, ifname);
- ifr.ifr_data = (void*) cmd;
-
- if (ioctl(sock, SIOCETHTOOL, &ifr) != 0) {
+ ifr.ifr_data = cmd;
+ ret = ioctl(sock, SIOCETHTOOL, &ifr);
+ if (ret != 0) {
switch (errno) {
case EPERM:
VIR_DEBUG("ethtool ioctl: permission denied");
@@ -2988,11 +3060,51 @@ virNetDevFeatureAvailable(const char *ifname, struct ethtool_value *cmd)
}
}
- ret = cmd->data > 0 ? 1: 0;
cleanup:
if (sock)
VIR_FORCE_CLOSE(sock);
+ return ret;
+}
+
+/**
+* virNetDevFeatureAvailable
+* This function checks for the availability of a network device feature
+*
+* @ifname: name of the interface
+* @cmd: reference to an ethtool command structure
+*
+* Returns 0 if not found, 1 on success, and -1 on failure.
+*/
+static int
+virNetDevFeatureAvailable(const char *ifname, struct ethtool_value *cmd)
+{
+ int ret = -1;
+
+ cmd = (void*)cmd;
+ if (!virNetDevSendEthtoolIoctl(ifname, cmd))
+ ret = cmd->data > 0 ? 1: 0;
+ return ret;
+}
+
+
+/**
+ * virNetDevGFeatureAvailable
+ * This function checks for the availability of a network device gfeature
+ *
+ * @ifname: name of the interface
+ * @cmd: reference to a gfeatures ethtool command structure
+ *
+ * Returns 0 if not found, 1 on success, and -1 on failure.
+ */
+static int
+virNetDevGFeatureAvailable(const char *ifname, struct ethtool_gfeatures *cmd)
+{
+ int ret = -1;
+
+ cmd = (void*)cmd;
+ if (!virNetDevSendEthtoolIoctl(ifname, cmd))
+ ret = FEATURE_BIT_IS_SET(cmd->features, TX_UDP_TNL, active);
return ret;
}
@@ -3013,7 +3125,7 @@ virNetDevGetFeatures(const char *ifname,
{
size_t i = -1;
struct ethtool_value cmd = { 0 };
-
+ struct ethtool_gfeatures g_cmd = { 0 };
struct elem{
const int cmd;
const virNetDevFeature feat;
@@ -3069,6 +3181,15 @@ virNetDevGetFeatures(const char *ifname,
}
# endif
+# if HAVE_DECL_ETHTOOL_GFEATURES
+ g_cmd.cmd = ETHTOOL_GFEATURES;
+ g_cmd.size = GFEATURES_SIZE;
+ if (virNetDevGFeatureAvailable(ifname, &g_cmd))
+ ignore_value(virBitmapSetBit(*out, VIR_NET_DEV_FEAT_TXUDPTNL));
+# endif
+
+ if (virNetDevRDMAFeature(ifname, out))
+ return -1;
return 0;
}
#else
diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h
index 190b70e..fff881c 100644
--- a/src/util/virnetdev.h
+++ b/src/util/virnetdev.h
@@ -210,6 +210,7 @@ int virNetDevGetRcvAllMulti(const char *ifname, bool *receive)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
# define SYSFS_NET_DIR "/sys/class/net/"
+# define SYSFS_INFINIBAND_DIR "/sys/class/infiniband/"
int virNetDevSysfsFile(char **pf_sysfs_device_link,
const char *ifname,
const char *file)
diff --git a/tests/nodedevschemadata/net_00_13_02_b9_f9_d3.xml b/tests/nodedevschemadata/net_00_13_02_b9_f9_d3.xml
index 2a34fed..d4c96e8 100644
--- a/tests/nodedevschemadata/net_00_13_02_b9_f9_d3.xml
+++ b/tests/nodedevschemadata/net_00_13_02_b9_f9_d3.xml
@@ -13,6 +13,8 @@
<feature name='rxvlan'/>
<feature name='txvlan'/>
<feature name='rxhash'/>
+ <feature name='rdma'/>
+ <feature name='txudptnl'/>
<capability type='80211'/>
</capability>
</device>
diff --git a/tests/nodedevschemadata/net_00_15_58_2f_e9_55.xml b/tests/nodedevschemadata/net_00_15_58_2f_e9_55.xml
index 81d398c..71bf90e 100644
--- a/tests/nodedevschemadata/net_00_15_58_2f_e9_55.xml
+++ b/tests/nodedevschemadata/net_00_15_58_2f_e9_55.xml
@@ -13,6 +13,8 @@
<feature name='rxvlan'/>
<feature name='txvlan'/>
<feature name='rxhash'/>
+ <feature name='rdma'/>
+ <feature name='txudptnl'/>
<capability type='80203'/>
</capability>
</device>
--
1.7.1
9 years, 4 months
[libvirt] [PATCH v2] network: add an option to make dns public
by Cédric Bosdonnat
In some use cases we don't want the virtual network's DNS to only
listen to the vnet interface. Adding a publiclyAccessible attribute
to the dns element in the configuration allows the DNS to listen to
all interfaces.
It simply disables the bind-dynamic option of dnsmasq for the network.
---
This patch is v2 for this one:
https://www.redhat.com/archives/libvir-list/2015-June/msg00018.html
Diff to v1:
* Use bind-interface if public DNS is requested
* Add more tests
* Write out the public value in the format function
* Fixed the rng
* Renamed the attribute to public: shouldn't mislead users
I tested this patch with several configurations of running networks.
The only thing I noted though is that the user may need to adapt the system
dnsmasq to avoid address:port conflicts... but hey, when one uses such a
hacky feature of the libvirt network, he needs to take care of the rest ;)
docs/formatnetwork.html.in | 9 +++++++
docs/schemas/network.rng | 5 ++++
src/conf/network_conf.c | 28 ++++++++++++++++++++--
src/conf/network_conf.h | 1 +
src/network/bridge_driver.c | 3 ++-
.../nat-network-dns-not-public.conf | 15 ++++++++++++
.../nat-network-dns-not-public.xml | 15 ++++++++++++
.../nat-network-dns-public.conf | 15 ++++++++++++
.../networkxml2confdata/nat-network-dns-public.xml | 15 ++++++++++++
tests/networkxml2xmlin/nat-network-dns-public.xml | 9 +++++++
tests/networkxml2xmlout/nat-network-dns-public.xml | 11 +++++++++
tests/networkxml2xmltest.c | 1 +
12 files changed, 124 insertions(+), 3 deletions(-)
create mode 100644 tests/networkxml2confdata/nat-network-dns-not-public.conf
create mode 100644 tests/networkxml2confdata/nat-network-dns-not-public.xml
create mode 100644 tests/networkxml2confdata/nat-network-dns-public.conf
create mode 100644 tests/networkxml2confdata/nat-network-dns-public.xml
create mode 100644 tests/networkxml2xmlin/nat-network-dns-public.xml
create mode 100644 tests/networkxml2xmlout/nat-network-dns-public.xml
diff --git a/docs/formatnetwork.html.in b/docs/formatnetwork.html.in
index 6abed8f..0141d93 100644
--- a/docs/formatnetwork.html.in
+++ b/docs/formatnetwork.html.in
@@ -851,6 +851,15 @@
DNS server.
</p>
+ <p>
+ The dns element
+ can have an optional <code>public</code> attribute
+ <span class="since">Since 1.2.17</span>. If <code>public</code>
+ is "yes", then the DNS server will handle requests for all interfaces.
+ If <code>public</code> is not set or "no", the DNS server will
+ only handle requests for the interface of the virtual network.
+ </p>
+
Currently supported sub-elements of <code><dns></code> are:
<dl>
<dt><code>forwarder</code></dt>
diff --git a/docs/schemas/network.rng b/docs/schemas/network.rng
index 4edb6eb..f70e3dc 100644
--- a/docs/schemas/network.rng
+++ b/docs/schemas/network.rng
@@ -249,6 +249,11 @@
<ref name="virYesNo"/>
</attribute>
</optional>
+ <optional>
+ <attribute name="public">
+ <ref name="virYesNo"/>
+ </attribute>
+ </optional>
<interleave>
<zeroOrMore>
<element name="forwarder">
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 72006e9..e90c004 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -1332,9 +1332,14 @@ virNetworkDNSDefParseXML(const char *networkName,
size_t i;
int ret = -1;
xmlNodePtr save = ctxt->node;
+ char *public = NULL;
ctxt->node = node;
+ public = virXPathString("string(./@public)", ctxt);
+ if (public)
+ def->public = virTristateBoolTypeFromString(public);
+
forwardPlainNames = virXPathString("string(./@forwardPlainNames)", ctxt);
if (forwardPlainNames) {
def->forwardPlainNames = virTristateBoolTypeFromString(forwardPlainNames);
@@ -1433,6 +1438,7 @@ virNetworkDNSDefParseXML(const char *networkName,
ret = 0;
cleanup:
+ VIR_FREE(public);
VIR_FREE(forwardPlainNames);
VIR_FREE(fwdNodes);
VIR_FREE(hostNodes);
@@ -2416,7 +2422,7 @@ virNetworkDNSDefFormat(virBufferPtr buf,
size_t i, j;
if (!(def->forwardPlainNames || def->nfwds || def->nhosts ||
- def->nsrvs || def->ntxts))
+ def->nsrvs || def->ntxts || def->public))
return 0;
virBufferAddLit(buf, "<dns");
@@ -2431,7 +2437,25 @@ virNetworkDNSDefFormat(virBufferPtr buf,
return -1;
}
virBufferAsprintf(buf, " forwardPlainNames='%s'", fwd);
- if (!(def->nfwds || def->nhosts || def->nsrvs || def->ntxts)) {
+ if (!(def->nfwds || def->nhosts || def->nsrvs || def->ntxts ||
+ def->public)) {
+ virBufferAddLit(buf, "/>\n");
+ return 0;
+ }
+ }
+
+ if (def->public) {
+ const char *public = virTristateBoolTypeToString(def->public);
+
+ if (!public) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Unknown public type %d in network"),
+ def->public);
+ return -1;
+ }
+ virBufferAsprintf(buf, " public='%s'", public);
+ if (!(def->nfwds || def->nhosts || def->nsrvs || def->ntxts ||
+ def->forwardPlainNames)) {
virBufferAddLit(buf, "/>\n");
return 0;
}
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index 1cd5100..ae239b8 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -136,6 +136,7 @@ struct _virNetworkDNSDef {
virNetworkDNSSrvDefPtr srvs;
size_t nfwds;
char **forwarders;
+ int public; /* enum virTristateBool */
};
typedef struct _virNetworkIpDef virNetworkIpDef;
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 3d6721b..8b11b51 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -991,7 +991,8 @@ networkDnsmasqConfContents(virNetworkObjPtr network,
/* dnsmasq will *always* listen on localhost unless told otherwise */
virBufferAddLit(&configbuf, "except-interface=lo\n");
- if (dnsmasqCapsGet(caps, DNSMASQ_CAPS_BIND_DYNAMIC)) {
+ if (dnsmasqCapsGet(caps, DNSMASQ_CAPS_BIND_DYNAMIC) &&
+ network->def->dns.public != VIR_TRISTATE_BOOL_YES) {
/* using --bind-dynamic with only --interface (no
* --listen-address) prevents dnsmasq from responding to dns
* queries that arrive on some interface other than our bridge
diff --git a/tests/networkxml2confdata/nat-network-dns-not-public.conf b/tests/networkxml2confdata/nat-network-dns-not-public.conf
new file mode 100644
index 0000000..021316f
--- /dev/null
+++ b/tests/networkxml2confdata/nat-network-dns-not-public.conf
@@ -0,0 +1,15 @@
+##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
+##OVERWRITTEN AND LOST. Changes to this configuration should be made using:
+## virsh net-edit default
+## or other application using the libvirt API.
+##
+## dnsmasq conf file created by libvirt
+strict-order
+domain=example.com
+expand-hosts
+domain-needed
+local=//
+except-interface=lo
+bind-dynamic
+interface=virbr0
+addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
diff --git a/tests/networkxml2confdata/nat-network-dns-not-public.xml b/tests/networkxml2confdata/nat-network-dns-not-public.xml
new file mode 100644
index 0000000..cc78f34
--- /dev/null
+++ b/tests/networkxml2confdata/nat-network-dns-not-public.xml
@@ -0,0 +1,15 @@
+<network>
+ <name>default</name>
+ <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9c</uuid>
+ <forward dev='eth0' mode='nat'/>
+ <bridge name='virbr0' stp='on' delay='0'/>
+ <domain name="example.com"/>
+ <dns forwardPlainNames='no' public='no'>
+ <host ip='192.168.122.1'>
+ <hostname>host</hostname>
+ <hostname>gateway</hostname>
+ </host>
+ </dns>
+ <ip address='192.168.122.1' netmask='255.255.255.0'>
+ </ip>
+</network>
diff --git a/tests/networkxml2confdata/nat-network-dns-public.conf b/tests/networkxml2confdata/nat-network-dns-public.conf
new file mode 100644
index 0000000..05cbf43
--- /dev/null
+++ b/tests/networkxml2confdata/nat-network-dns-public.conf
@@ -0,0 +1,15 @@
+##WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
+##OVERWRITTEN AND LOST. Changes to this configuration should be made using:
+## virsh net-edit default
+## or other application using the libvirt API.
+##
+## dnsmasq conf file created by libvirt
+strict-order
+domain=example.com
+expand-hosts
+domain-needed
+local=//
+except-interface=lo
+bind-interfaces
+interface=virbr0
+addn-hosts=/var/lib/libvirt/dnsmasq/default.addnhosts
diff --git a/tests/networkxml2confdata/nat-network-dns-public.xml b/tests/networkxml2confdata/nat-network-dns-public.xml
new file mode 100644
index 0000000..9c59c7b
--- /dev/null
+++ b/tests/networkxml2confdata/nat-network-dns-public.xml
@@ -0,0 +1,15 @@
+<network>
+ <name>default</name>
+ <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9c</uuid>
+ <forward dev='eth0' mode='nat'/>
+ <bridge name='virbr0' stp='on' delay='0'/>
+ <domain name="example.com"/>
+ <dns forwardPlainNames='no' public='yes'>
+ <host ip='192.168.122.1'>
+ <hostname>host</hostname>
+ <hostname>gateway</hostname>
+ </host>
+ </dns>
+ <ip address='192.168.122.1' netmask='255.255.255.0'>
+ </ip>
+</network>
diff --git a/tests/networkxml2xmlin/nat-network-dns-public.xml b/tests/networkxml2xmlin/nat-network-dns-public.xml
new file mode 100644
index 0000000..0765a83
--- /dev/null
+++ b/tests/networkxml2xmlin/nat-network-dns-public.xml
@@ -0,0 +1,9 @@
+<network>
+ <name>default</name>
+ <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9c</uuid>
+ <forward dev='eth0' mode='nat'/>
+ <bridge name='virbr0' stp='on' delay='0' />
+ <dns public='yes'/>
+ <ip address='192.168.122.1' netmask='255.255.255.0'>
+ </ip>
+</network>
diff --git a/tests/networkxml2xmlout/nat-network-dns-public.xml b/tests/networkxml2xmlout/nat-network-dns-public.xml
new file mode 100644
index 0000000..66caacd
--- /dev/null
+++ b/tests/networkxml2xmlout/nat-network-dns-public.xml
@@ -0,0 +1,11 @@
+<network>
+ <name>default</name>
+ <uuid>81ff0d90-c91e-6742-64da-4a736edb9a9c</uuid>
+ <forward dev='eth0' mode='nat'>
+ <interface dev='eth0'/>
+ </forward>
+ <bridge name='virbr0' stp='on' delay='0'/>
+ <dns public='yes'/>
+ <ip address='192.168.122.1' netmask='255.255.255.0'>
+ </ip>
+</network>
diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c
index 290336e..ba565bc 100644
--- a/tests/networkxml2xmltest.c
+++ b/tests/networkxml2xmltest.c
@@ -97,6 +97,7 @@ mymain(void)
DO_TEST("nat-network-dns-srv-record-minimal");
DO_TEST("nat-network-dns-hosts");
DO_TEST("nat-network-dns-forward-plain");
+ DO_TEST("nat-network-dns-public");
DO_TEST("nat-network-dns-forwarders");
DO_TEST("nat-network-forward-nat-address");
DO_TEST("8021Qbh-net");
--
2.1.4
9 years, 4 months
[libvirt] [PATCH v6 0/5] nodeinfo: Add support for subcores
by Andrea Bolognani
Changes from v5 to v6:
* updated to work on top of
[PATCH v2 00/10] nodeinfo: Various cleanups
I'm only sending patch 1/5 to the list, because all the
other commits haven't changed since v5 and because
this way there's no need to perform moderation due to
the message size.
For the same reason, I've heavily edited the following
summary by cutting out everything that belonged to a
test case.
Cheers.
Andrea Bolognani (3):
tests: Add subcores-default nodeinfo test
tests: Add subcores-partial nodeinfo test
tests: Add subcores-invalid nodeinfo test
Shivaprasad G Bhat (2):
nodeinfo: Fix output on PPC64 KVM hosts
tests: Prepare for subcore tests
src/libvirt_private.syms | 1 +
src/nodeinfo.c | 144 ++++++++++++++++++++-
src/nodeinfo.h | 1 +
tests/Makefile.am | 6 +
[...]
tests/nodeinfomock.c | 35 +++++
tests/nodeinfotest.c | 5 +-
1348 files changed, 2122 insertions(+), 6 deletions(-)
[...]
create mode 100644 tests/nodeinfomock.c
--
2.4.3
9 years, 4 months
[libvirt] [PATCH 00/10] nodeinfo: Various cleanups
by Andrea Bolognani
Note: this series is to be applied on top of the
[PATCH 00/03] nodeinfo: Various fixes
series I've posted at the same time.
A bunch of improvements and cleanups that make the nodeinfo
code a bit nicer, more streamlined and less redundant, hopefully
not just to my eyes.
Andrea Bolognani (10):
nodeinfo: Introduce linuxGetCPUGlobalPath()
nodeinfo: Introduce linuxGetCPUOnlinePath()
nodeinfo: Rename linuxParseCPUmax() to linuxParseCPUCount()
nodeinfo: Add old kernel compatibility to nodeGetPresentCPUBitmap()
nodeinfo: Add out parameter to nodeGetPresentCPUBitmap()
nodeinfo: Rename nodeGetCPUBitmap() to nodeGetOnlineCPUBitmap()
nodeinfo: Phase out cpu_set_t usage
nodeinfo: Use nodeGetOnlineCPUBitmap() when parsing node
nodeinfo: Use a bitmap to keep track of node CPUs
nodeinfo: Calculate present and online CPUs only once
src/libvirt_private.syms | 2 +-
src/nodeinfo.c | 211 +++++++++++++++++++++++++++++------------------
src/nodeinfo.h | 6 +-
src/util/vircgroup.c | 4 +-
4 files changed, 139 insertions(+), 84 deletions(-)
--
2.4.3
9 years, 4 months
[libvirt] [PATCH 0/3] nodeinfo: Various fixes
by Andrea Bolognani
This series fixes a bunch of issues currently affecting nodeinfo
and related tests.
Andrea Bolognani (3):
tests: Restore links in deconfigured-cpus nodeinfo test
nodeinfo: Add nodeGetPresentCPUBitmap() to libvirt_private.syms
nodeinfo: Fix nodeGetCPUBitmap()'s fallback code path
src/libvirt_private.syms | 1 +
src/nodeinfo.c | 8 ++++-
.../cpu/cpu128/topology/core_id | 2 +-
.../cpu/cpu16/topology/core_id | 2 +-
.../cpu/cpu24/topology/core_id | 2 +-
.../cpu/cpu48/topology/core_id | 2 +-
.../cpu/cpu72/topology/core_id | 2 +-
.../linux-deconfigured-cpus/node/node0/cpu0 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu1 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu10 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu100 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu101 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu102 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu103 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu11 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu12 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu13 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu14 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu144 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu145 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu146 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu147 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu148 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu149 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu15 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu150 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu151 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu152 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu153 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu154 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu155 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu156 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu157 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu158 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu159 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu16 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu17 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu18 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu19 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu2 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu20 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu21 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu22 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu23 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu24 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu25 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu26 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu27 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu28 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu29 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu3 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu30 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu31 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu32 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu33 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu34 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu35 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu36 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu37 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu38 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu39 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu4 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu5 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu56 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu57 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu58 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu59 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu6 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu60 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu61 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu62 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu63 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu64 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu65 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu66 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu67 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu68 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu69 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu7 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu70 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu71 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu8 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu80 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu81 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu82 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu83 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu84 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu85 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu86 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu87 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu88 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu89 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu9 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu90 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu91 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu92 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu93 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu94 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu95 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu96 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu97 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu98 | 1 +
.../linux-deconfigured-cpus/node/node0/cpu99 | 1 +
.../linux-deconfigured-cpus/node/node0/meminfo | 36 ++++++++++----------
.../linux-deconfigured-cpus/node/node1/cpu40 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu41 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu42 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu43 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu44 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu45 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu46 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu47 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu48 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu49 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu50 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu51 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu52 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu53 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu54 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu55 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu72 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu73 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu74 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu75 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu76 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu77 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu78 | 1 +
.../linux-deconfigured-cpus/node/node1/cpu79 | 1 +
.../linux-deconfigured-cpus/node/node1/meminfo | 36 ++++++++++----------
.../linux-deconfigured-cpus/node/node16/cpu104 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu105 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu106 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu107 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu108 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu109 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu110 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu111 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu112 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu113 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu114 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu115 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu116 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu117 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu118 | 1 +
.../linux-deconfigured-cpus/node/node16/cpu119 | 1 +
.../linux-deconfigured-cpus/node/node16/meminfo | 36 ++++++++++----------
.../linux-deconfigured-cpus/node/node17/cpu120 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu121 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu122 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu123 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu124 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu125 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu126 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu127 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu128 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu129 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu130 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu131 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu132 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu133 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu134 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu135 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu136 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu137 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu138 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu139 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu140 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu141 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu142 | 1 +
.../linux-deconfigured-cpus/node/node17/cpu143 | 1 +
.../linux-deconfigured-cpus/node/node17/meminfo | 38 +++++++++++-----------
171 files changed, 246 insertions(+), 79 deletions(-)
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu0
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu1
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu10
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu100
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu101
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu102
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu103
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu11
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu12
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu13
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu14
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu144
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu145
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu146
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu147
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu148
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu149
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu15
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu150
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu151
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu152
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu153
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu154
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu155
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu156
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu157
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu158
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu159
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu16
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu17
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu18
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu19
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu2
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu20
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu21
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu22
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu23
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu24
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu25
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu26
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu27
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu28
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu29
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu3
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu30
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu31
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu32
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu33
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu34
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu35
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu36
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu37
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu38
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu39
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu4
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu5
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu56
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu57
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu58
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu59
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu6
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu60
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu61
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu62
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu63
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu64
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu65
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu66
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu67
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu68
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu69
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu7
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu70
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu71
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu8
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu80
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu81
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu82
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu83
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu84
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu85
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu86
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu87
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu88
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu89
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu9
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu90
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu91
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu92
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu93
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu94
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu95
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu96
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu97
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu98
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node0/cpu99
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu40
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu41
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu42
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu43
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu44
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu45
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu46
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu47
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu48
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu49
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu50
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu51
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu52
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu53
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu54
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu55
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu72
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu73
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu74
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu75
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu76
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu77
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu78
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node1/cpu79
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu104
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu105
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu106
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu107
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu108
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu109
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu110
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu111
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu112
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu113
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu114
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu115
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu116
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu117
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu118
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node16/cpu119
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu120
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu121
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu122
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu123
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu124
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu125
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu126
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu127
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu128
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu129
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu130
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu131
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu132
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu133
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu134
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu135
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu136
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu137
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu138
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu139
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu140
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu141
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu142
create mode 120000 tests/nodeinfodata/linux-deconfigured-cpus/node/node17/cpu143
--
2.4.3
9 years, 4 months