[libvirt] [PATCH] nodedev: Fix missing network devices
by John Ferlan
Commit id '8708ca01c' added a check to determine whether the NIC had
Switchdev capabilities; however, in doing so inadvertently would cause
network devices without a PCI device to not be added to the node device
database. Thus, network devices having a "computer" as a parent, such
as "net_lo*", "net_virbr*", "net_tun*", "net_vnet*", etc. were not added.
Alter the check to not even check for Switchdev bits if no PCI device found.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
Found this gem while running the Avocado test suite while doing some
other work. It's only 3.8.0 that'll have the missing devices.
src/util/virnetdev.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
index 5060d051dc..41ef65d882 100644
--- a/src/util/virnetdev.c
+++ b/src/util/virnetdev.c
@@ -3236,6 +3236,14 @@ virNetDevSwitchdevFeature(const char *ifname,
if (is_vf == 1 && virNetDevGetPhysicalFunction(ifname, &pfname) < 0)
goto cleanup;
+ pci_device_ptr = pfname ? virNetDevGetPCIDevice(pfname) :
+ virNetDevGetPCIDevice(ifname);
+ /* No PCI device, then no feature bit to check/add */
+ if (pci_device_ptr == NULL) {
+ ret = 0;
+ goto cleanup;
+ }
+
if (!(nl_msg = nlmsg_alloc_simple(family_id,
NLM_F_REQUEST | NLM_F_ACK))) {
virReportOOMError();
@@ -3248,11 +3256,6 @@ virNetDevSwitchdevFeature(const char *ifname,
gmsgh->cmd = DEVLINK_CMD_ESWITCH_GET;
gmsgh->version = DEVLINK_GENL_VERSION;
- pci_device_ptr = pfname ? virNetDevGetPCIDevice(pfname) :
- virNetDevGetPCIDevice(ifname);
- if (pci_device_ptr == NULL)
- goto cleanup;
-
pci_name = virPCIDeviceGetName(pci_device_ptr);
if (nla_put(nl_msg, DEVLINK_ATTR_BUS_NAME, strlen("pci")+1, "pci") < 0 ||
--
2.13.6
7 years, 1 month
[libvirt] [PATCH 0/4] virDomainInterfaceStats: Accept MAC address too
by Michal Privoznik
*** BLURB HERE ***
Michal Privoznik (4):
virsh: Document limitation of domifstat
virDomainInterfaceStats: Accept MAC address too
virsh: Deal with multiple matching devices in domif-getlink
virDomainNetFind: Report error if no device found
include/libvirt/libvirt-domain.h | 2 +-
src/conf/domain_conf.c | 18 ++++++++++--------
src/driver-hypervisor.h | 2 +-
src/libvirt-domain.c | 15 ++++++++-------
src/libxl/libxl_driver.c | 9 +++------
src/lxc/lxc_driver.c | 9 +++------
src/openvz/openvz_driver.c | 9 +++------
src/qemu/qemu_driver.c | 27 +++++++--------------------
src/remote/remote_protocol.x | 2 +-
src/remote_protocol-structs | 2 +-
src/test/test_driver.c | 12 +++++-------
src/vz/vz_driver.c | 4 ++--
src/vz/vz_sdk.c | 9 +++++++--
src/xen/xen_driver.c | 8 ++++++--
tools/virsh-domain-monitor.c | 5 ++++-
tools/virsh.pod | 5 ++++-
16 files changed, 66 insertions(+), 72 deletions(-)
--
2.13.6
7 years, 1 month
[libvirt] dynamic DRAM base for ArmVirtQemu
by Laszlo Ersek
Hi Ard, Leif,
the current physical memory map of the "virt" machine type doesn't leave
much room for ECAM / MMCONFIG, which limits the number of PCI Express
root ports and downstream ports (each port takes a separate bus number,
and each bus number eats up a chunk of the ECAM area). Also, each port
can only accommodate a single PCI Express device. In practice this
limits the number of (hot-pluggable) PCIe devices to approx. 16, which
is deemed by some "not scaleable enough". (For devices that only need to
be cold-plugged, they can be placed directly on the root complex, as
integrated devices, possibly grouping them into multifunction devices
even; so those don't need bus numbers.)
In order to grow the MMCONFIG area (and for some other reasons
possibly), the phys memmap of "virt" should be shuffled around a bit.
This affects the "system" DRAM too.
One idea is to keep the current system DRAM base at 1GB, but limit its
size to 1GB. And, if there's more DRAM, use another, disjoint address
range for that, above 4GB. This would be easy to support for ArmVirtQemu
(basically nothing new would be necessary), as the high area would be
handled transparently by "ArmVirtPkg/HighMemDxe". However, this appears
to present complications for QEMU. (I don't exactly know what
complications -- I would be very happy to hear them, in detail.)
Another idea is to move *the* system DRAM base to a different guest-phys
address. (Likely using a different version of the "virt" machine type,
or even a different machine type entirely.) This would not be compatible
with current ArmVirtQemu, which hard-codes the system DRAM base in
several, quite brittle / sensitive, locations. (More on this later --
that's going to be the larger part of my email anyway.) In order to
handle the new base in ArmVirtQemu, two approaches are possible: change
the hard-coded address(es), or cope with the address dynamically.
Changing the hard-coded addresses is easy for edk2 contributors (just
add a new build flag like -D DRAM_BASE_AT_XXX_GB, and dependent on it,
set a number of fixed-at-build PCDs to new values). For RHEL downstream,
this is not an un-attractive option, as we are free to break
compatibility at this time. For upstream users and other distros
however, it likely wouldn't be convenient, because "old" ArmVirtQemu
firmware wouldn't boot on the "new" machine type, and vice versa.
(If we can agree that the above "boundary" in firmwares and machine
types is widely tolerable, then we need not discuss the rest of this
email.)
Finally, coping with "any" system DRAM base address in ArmVirtQemu is
both the most flexible for users, and the most difficult to implement.
When QEMU launches the guest, the base of the system DRAM (which equals
the location of the DTB too) is exposed in the x0 register. The
challenge is to make everything in the earliest phases of ArmVirtQemu to
adapt to this value dynamically, and to propagate the value to further
parts of the firmware.
I've been looking into this for a few days now and would like to pick
your minds on what I've found.
(
As a side note, I know (superficially) of Ard's ArmVirtXen and
ArmVirtQemuKernel work. If I understand correctly, Ard has turned some
of the PCDs I'm about to discuss into "patchable" ones, from
"fixed-at-build". The difference in storage is that these constants
are now placed in the final firmware image such that they are
externally patchable, just before "deployment".
Because the ArmVirtXen and ArmVirtQemuKernel firmware binaries are
loaded into DRAM immediately, this self-patching -- based on the
initial value of x0 -- is feasible, in the earliest part of the
firmware. (I'm not saying "easy" -- to the contrary; but it's
feasible.)
However, ArmVirtQemu is launched from pflash; its SEC and PEI phases
execute-in-place from pflash (until MemoryInitPeim installs the
permanent PEI RAM, and the PEI_CORE relocates the HOB list, itself,
and the PEIMs into DRAM). Therefore the SEC and PEI phases of
ArmVirtQemu cannot be patched like this, i.e., through patchable PCDs.
(Unless, of course, the patching is implemented in QEMU itself -- but
I don't think that's probable).
)
Now, exactly because SEC and PEI execute in place from pflash, their
execution (= instruction fetches) are not affected by different initial
x0 values. However, the following are affected:
- the initial stack,
- the base address of the initial DTB,
- the location of the permanent PEI RAM.
In ArmVirtQemu, these are represented by the following PCDs (all
fixed-at-build currently):
- PcdCPUCoresStackBase
- PcdDeviceTreeInitialBaseAddress
- PcdSystemMemoryBase
I've attempted to audit each of these PCDs.
(I should note in advance that I focused on their use *only* in the
ArmVirtQemu firmware platform, and only on AARCH64. I ignored ARM32, and
ArmVirtXen and ArmVirtQemuKernel. We obviously must not regress those
other arches / platforms by messing with these PCDs, but this is only a
"feasibility study" for now.)
(1) PcdCPUCoresStackBase
The PCD's current value is, from "ArmVirtPkg/ArmVirtQemu.dsc":
> [PcdsFixedAtBuild.common]
> gArmPlatformTokenSpaceGuid.PcdCPUCoresStackBase|0x4007c000
That is, 496KB above the start of the DRAM (which is at 1GB currently).
This leaves enough room for the initial DTB (placed at the start of
DRAM).
The PCD is used widely by the SECURITY_CORE (=SEC) module of
ArmVirtQemu, namely:
ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
The PCD is used by no other module.
* The stack is set up in
ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S
under the label ASM_PFX(MainEntryPoint). This is where the initial value
of x0 should be considered first, replacing the use of
"PcdCPUCoresStackBase" with something like
x0 + 0x7c000
(I don't grok aarch64 assembly, so any help with the implementation
would be greatly appreciated (if this approach is feasible at all).)
* Once we're done with the assembly magic, we enter the CEntryPoint()
function, and the following tree of calls occurs:
CEntryPoint() [ArmPlatformPkg/PrePeiCore/PrePeiCore.c]
PrimaryMain() [ArmPlatformPkg/PrePeiCore/MainUniCore.c]
CreatePpiList() [ArmPlatformPkg/PrePeiCore/PrePeiCore.c]
PeiCoreEntryPoint()
* The CEntryPoint() function *currently* takes two parameters from the
assembly entry logic,
> VOID
> CEntryPoint (
> IN UINTN MpId,
> IN EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint
> )
The PeiCoreEntryPoint parameter is the function pointer that is going to
be invoked at the bottom of the call tree, displayed above. The assembly
code in "PrePeiCoreEntryPoint.S" fetches the value from the flash image.
(I'm spelling this out just to clarify the last line in the call tree.)
- The parameter list of the CEntryPoint() function should be extended
with
IN UINT64 MemoryBase,
IN UINT64 StackBase
- the assembly code should pass the initial value of x0 in "MemoryBase",
- and the stack base (i.e., (x0 + 0x7c000)) in "StackBase".
* Then, the PrimaryMain() function is invoked:
> VOID
> EFIAPI
> PrimaryMain (
> IN EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint
> )
This function does the following:
(1a) it creates a PPI list *in DRAM*, at PcdCPUCoresStackBase, by
calling CreatePpiList(),
(1b) right above the PPI list, it marks the DRAM area to be used as
temporary SEC/PEI stack/heap,
(1c) it enters the PEI_CORE, by calling PeiCoreEntryPoint(), passing it
the above-calculated locations, *and* the PPI list also constructed
above.
Now, PrimaryMain()'s parameter list should also be extended with
IN UINT64 MemoryBase,
IN UINT64 StackBase
and the "StackBase" parameter should replace "PcdCPUCoresStackBase" in
the (1a) and (1b) calculations.
In addition, this is where we have the opportunity (and obligation) to
propagate the "MemoryBase" value to *all* of the PEI phase.
The way SEC propagates *custom* information to PEI is via the PPI list
parameter of PeiCoreEntryPoint(). Unlike CEntryPoint() and
PrimaryMain(), PeiCoreEntryPoint() has a standardized function
prototype:
MdePkg/Include/Pi/PiPeiCis.h
> typedef
> VOID
> (EFIAPI *EFI_PEI_CORE_ENTRY_POINT)(
> IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData,
> IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList
> );
(See also the comment block on the typedef! It's super informative.)
The "SecCoreData" pointer passes the information that we calculated in
(1b). And the "PpiList" pointer passes the PPI list from (1a).
* Therefore, if we have to modify the CreatePpiList() function too:
> VOID
> CreatePpiList (
> OUT UINTN *PpiListSize,
> OUT EFI_PEI_PPI_DESCRIPTOR **PpiList
> )
This function currently concatenates two *constant* (in-flash) PPI
lists. One comes from the variable
gCommonPpiTable [ArmPlatformPkg/PrePeiCore/PrePeiCore.c]
and the other is returned by the function
ArmPlatformGetPlatformPpiList() [ArmVirtPkg/Library/ArmVirtPlatformLib/Virt.c]
The concatenated list is placed into DRAM, at "PcdCPUCoresStackBase".
The point here is that both *input* PPI lists are *constant*, they come
from pflash, and don't have the "MemoryBase" information. Therefore,
- the parameter list of CreatePpiList() should be extended with
IN UINT64 MemoryBase,
IN UINT64 StackBase
- CreatePpiList() should store the concatenated list at "StackBase", not
"PcdCPUCoresStackBase",
- and CreatePpiList() should append *two more* PPI descriptors (with
separate, custom GUIDs, to be defined by us), where the first's
"EFI_PEI_PPI_DESCRIPTOR.Ppi" (of type pointer-to-void) would point
*directly* at "MemoryBase", for advertizing the memory base; and the
second would point to the same, but advertize the initial DTB base
address. (We'd have two distinct PPIs for completeness.)
Then interested PEIMs could locate these PPIs by GUID in the PEI phase,
and learn about the "MemoryBase" / initial DTB base address values.
* Now, clearly, this is quite a few changes to the
ArmPlatformPkg/PrePeiCore
module, which is likely used as the SEC phase of a bunch of other ARM
platforms. Should we copy "ArmPlatformPkg/PrePeiCore" under ArmVirtPkg
for this kind of customization?
(2) PcdDeviceTreeInitialBaseAddress
(
Before discussing this PCD, I have to digress a bit. Namely, the
ArmPlatformLib class, defined in
ArmPlatformPkg/Include/Library/ArmPlatformLib.h
is unfortunately a very confusing lib class. It is a dumping ground
for random "platform" functions. The catch is that some of these
functions are meant to be invoked from SEC, exclusively, while some
other functions are meant to be invoked from PEI, exclusively.
The end result is that, if a given ArmPlatformLib instance implements
a *PEI-only* function with various PCD, PPI, and GUID dependencies,
then the exact same, *bogus*, dependencies will show up in the build
report file for the SECURITY_CORE module as well. Simply because the
SEC module links against the same library instance, for the sake of
the SEC-only functions. Never mind that the SEC module never *calls*
those PEI-only functions that incur said dependencies.
This makes dependency analysis, based on the build report file, very
cumbersome.
The ArmPlatformLib class should be split into SEC-only and PEI-only
lib classes.
)
"PcdDeviceTreeInitialBaseAddress" is currently set in
"ArmVirtPkg/ArmVirtQemu.dsc" as follows:
> [PcdsFixedAtBuild.common]
> # initial location of the device tree blob passed by QEMU -- base of DRAM
> gArmVirtTokenSpaceGuid.PcdDeviceTreeInitialBaseAddress|0x40000000
"PcdDeviceTreeInitialBaseAddress" is used in three library instances:
(2a) ArmVirtPkg/Library/ArmVirtPlatformLib/ArmVirtPlatformLib.inf
ArmVirtPkg/Library/ArmVirtPlatformLib/Virt.c
(2b) ArmVirtPkg/Library/FdtPL011SerialPortLib/EarlyFdtPL011SerialPortLib.inf
ArmVirtPkg/Library/FdtPL011SerialPortLib/EarlyFdtPL011SerialPortLib.c
(2c) ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.inf
ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.c
(2a) "ArmVirtPlatformLib.inf" is built into SEC, discussed above:
ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
and also into the following two PEIMs:
ArmPlatformPkg/PlatformPei/PlatformPeim.inf
ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf
The function in ArmVirtPlatformLib that fetches
"PcdDeviceTreeInitialBaseAddress", namely
ArmPlatformInitializeSystemMemory(), is *only* called from the entry
point function of MemoryInitPeim, InitializeMemory().
(See my gripe above about the ArmPlatformLib class -- SEC's apparent
dependency on this PCD is bogus!)
I.e., we have the following call tree:
InitializeMemory() [ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.c]
ArmPlatformInitializeSystemMemory() [ArmVirtPkg/Library/ArmVirtPlatformLib/Virt.c]
PcdGet64 (PcdDeviceTreeInitialBaseAddress)
Consequently, given that the only reference to
"PcdDeviceTreeInitialBaseAddress" is made from within PEI, we can
replace the PcdGet64() call with a PeiServicesLocatePpi() call, and grab
the initial device tree base address from our custom PPI.
(2b) "EarlyFdtPL011SerialPortLib.inf" is a SerialPortLib instance that
parses the UART base address from the initial DTB on every
SerialPortWrite() call:
SerialPortWrite() [ArmVirtPkg/Library/FdtPL011SerialPortLib/EarlyFdtPL011SerialPortLib.c]
SerialPortGetBaseAddress() [ArmVirtPkg/Library/FdtPL011SerialPortLib/EarlyFdtPL011SerialPortLib.c]
PcdGet64 (PcdDeviceTreeInitialBaseAddress)
PL011UartWrite() [ArmPlatformPkg/Drivers/PL011Uart/PL011Uart.c]
The library instance is linked into:
- SEC: ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
- PEI_CORE: MdeModulePkg/Core/Pei/PeiMain.inf
- and all 6 PEIMs included by ArmVirtQemu:
ArmPkg/Drivers/CpuPei/CpuPei.inf
ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf
ArmPlatformPkg/PlatformPei/PlatformPeim.inf
MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf
MdeModulePkg/Universal/PCD/Pei/Pcd.inf
MdeModulePkg/Universal/Variable/Pei/VariablePei.inf
It is not used by other modules.
If we replaced the "PcdDeviceTreeInitialBaseAddress" access in
SerialPortGetBaseAddress() with a PeiServicesLocatePpi() call, then the
PEI_CORE and PEIM modules would remain functional. (See again the
comment block on EFI_PEI_CORE_ENTRY_POINT in
"MdePkg/Include/Pi/PiPeiCis.h" -- the PEI_CORE itself is allowed to use
the PPIs originally exported by SEC.)
However, SEC couldn't use a library instance like this -- there's no way
to search for a PPI in SEC. In other words, the SerialPortLib class is
unsuitable for such use in SEC. I don't know how to solve this, other
than by hard-coding the UART base address with a fixed-at-build PCD, in
a custom SerialPortLib instance. :/
(2c) The "PlatformPeiLib.inf" instance used with ArmVirtQemu copies the
initial DTB into its final (page-allocated) place, in the PlatformPeim()
function:
InitializePlatformPeim() [ArmPlatformPkg/PlatformPei/PlatformPeim.c]
PlatformPeim() [ArmVirtPkg/Library/PlatformPeiLib/PlatformPeiLib.c]
PcdGet64 (PcdDeviceTreeInitialBaseAddress)
We can again replace the PcdGet64() with a PeiServicesLocatePpi() call.
(No other module uses this PlatformPeiLib instance.)
(3) PcdSystemMemoryBase
Comes currently from "ArmVirtPkg/ArmVirtQemu.dsc":
> [PcdsFixedAtBuild.common]
> # System Memory Base -- fixed at 0x4000_0000
> gArmTokenSpaceGuid.PcdSystemMemoryBase|0x40000000
Based on the build report file, the following modules depend on this
PCD, directly, or via library instances:
- SEC: ArmPlatformPkg/PrePeiCore/PrePeiCoreUniCore.inf
- PEIM: ArmPlatformPkg/PlatformPei/PlatformPeim.inf
- PEIM: ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf
The last two (i.e., the PEIMs) can use PeiServicesLocatePpi() in place
of "PcdSystemMemoryBase".
The first module (SEC) seems to inherit the dependency on
"PcdSystemMemoryBase" via ArmVirtPlatformLib. In ArmVirtPlatformLib, we
consume the PCD in two spots:
(3a) in the ArmPlatformInitializeSystemMemory() function. Referring back
to my notes in (2a), this function is never called from SEC, so we can
use PeiServicesLocatePpi(), for grabbing the DRAM base.
(3b) The ArmPlatformGetVirtualMemoryMap() function is the other
consumer. This function appears to be called on the following path, as
part of
ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.inf
*only*:
InitializeMemory() [ArmPlatformPkg/MemoryInitPei/MemoryInitPeim.c]
MemoryPeim() [ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c]
InitMmu() [ArmVirtPkg/Library/ArmVirtMemoryInitPeiLib/ArmVirtMemoryInitPeiLib.c]
ArmPlatformGetVirtualMemoryMap() [ArmVirtPkg/Library/ArmVirtPlatformLib/VirtMem.c]
PcdGet64 (PcdSystemMemoryBase)
Because this PCD consumption site is again never reached in SEC, we can
replace it with PeiServicesLocatePpi().
Summary:
- The end goal is to clear out all appearances of PcdCPUCoresStackBase,
PcdDeviceTreeInitialBaseAddress, and PcdSystemMemoryBase from the
ArmVirtQemu build report file. The first PCD should be replaced by a
plain calculation in SEC, from x0, and the other two should be
replaced by custom PPIs that SEC produces (passing them to the
PEI_CORE).
- I'd need help with the assembly code in SEC
("ArmPlatformPkg/PrePeiCore/AArch64/PrePeiCoreEntryPoint.S").
- The changes are intrusive enough -- for ArmPlatformPkg, and for the
ArmVirtXen and ArmVirtQemuKernel platforms under ArmVirtPkg -- to
justify deep-copying a number of modules, specifically for
ArmVirtQemu.
- In ArmVirtQemu, SEC would lose serial output, unless we hard-coded the
PL011 UART base address. Neither the DebugLib nor the SerialPortLib
APIs can take auxiliary data as function parameters, and in SEC, we
have *none* of: writeable global variables, HOBs, *searchable* PPIs,
dynamic PCDs. The only way to pass information is via the stack, and
the DebugLib and SerialPortLib APIs are unsuited for that.
Thoughts?
Thanks
Laszlo
7 years, 1 month
[libvirt] [PATCH 00/23] Fix host-model if the chosen CPU model has more features in QEMU compared to our cpu_map.xml
by Jiri Denemark
When decoding CPUID data to virCPUDef we need to be careful about using
a CPU model which cannot be directly used on the current host. Normally,
libvirt would notice the features which prevent the model from being
usable and it would disable them in the computed virCPUDef, but this
won't work in case the definition of the CPU model in QEMU contains more
features than what we have in cpu_map.xml. We need to count with the
usability blockers we got from QEMU and explicitly disable all of them
to make the computed virCPUDef usable.
https://bugzilla.redhat.com/show_bug.cgi?id=1464832
Jiri Denemark (23):
util: Introduce virStringListCopy
conf: Add usability blockers to virDomainCapsCPUModel
qemu: Store CPU usability blockers in caps cache
qemu: Parse unavailable features for CPU models
cpu: Use virDomainCapsCPUModelsPtr in cpu driver APIs
cpu: Drop unused parameter from cpuDecode
cpu: Return model from virCPUModelIsAllowed
cpu_x86: Move x86FeatureFind* to avoid forward prototypes
cpu_x86: Disable blockers from unusable CPU models
cputest: Replace json bool with enum
cputest: Avoid calling json_reformat in cpu-parse.sh
cputest: Print correct feature in virCPUUpdateLive test
cputest: Test CPU usability blockers
cputest: Separate QEMUCaps creation from cpuTestCPUIDJson
build: Export virCPUModelIsAllowed private API
cputest: Use CPU models from QEMU when available
cputest: Add query-cpu-definitions reply for Core-i5-2540M
cputest: Add CPUID data for Intel(R) Xeon(R) CPU E7-4830
cputest: Add query-cpu-definitions reply for Xeon-E7-4830
cputest: Update Xeon-E3-1245 data
cputest: Add query-cpu-definitions reply for Xeon-E3-1245
cputest: Update Core-i7-2600 data
cputest: Make a crippled version of Core-i7-2600
src/conf/domain_capabilities.c | 30 +-
src/conf/domain_capabilities.h | 7 +-
src/cpu/cpu.c | 95 +-
src/cpu/cpu.h | 31 +-
src/cpu/cpu_arm.c | 3 +-
src/cpu/cpu_ppc64.c | 14 +-
src/cpu/cpu_x86.c | 108 +-
src/libvirt_private.syms | 1 +
src/libxl/libxl_capabilities.c | 2 +-
src/libxl/libxl_driver.c | 2 +-
src/qemu/qemu_capabilities.c | 123 +--
src/qemu/qemu_capabilities.h | 6 +-
src/qemu/qemu_capspriv.h | 5 +
src/qemu/qemu_driver.c | 2 +-
src/qemu/qemu_monitor.c | 2 +
src/qemu/qemu_monitor.h | 1 +
src/qemu/qemu_monitor_json.c | 26 +-
src/qemu/qemu_process.c | 9 +-
src/test/test_driver.c | 2 +-
src/util/virstring.c | 37 +
src/util/virstring.h | 3 +
tests/cputest.c | 324 ++++--
tests/cputestdata/cpu-cpuid.py | 26 +-
tests/cputestdata/cpu-gather.sh | 1 +
tests/cputestdata/cpu-parse.sh | 2 +-
tests/cputestdata/cpu-reformat.py | 9 +
tests/cputestdata/x86_64-cpuid-Core-i5-2540M.json | 362 +++++++
.../x86_64-cpuid-Core-i7-2600-disabled.xml | 1 -
.../x86_64-cpuid-Core-i7-2600-enabled.xml | 1 +
.../cputestdata/x86_64-cpuid-Core-i7-2600-json.xml | 1 +
...x86_64-cpuid-Core-i7-2600-xsaveopt-disabled.xml | 6 +
.../x86_64-cpuid-Core-i7-2600-xsaveopt-enabled.xml | 8 +
.../x86_64-cpuid-Core-i7-2600-xsaveopt-guest.xml | 25 +
.../x86_64-cpuid-Core-i7-2600-xsaveopt-host.xml | 25 +
.../x86_64-cpuid-Core-i7-2600-xsaveopt-json.xml | 11 +
.../x86_64-cpuid-Core-i7-2600-xsaveopt.json | 615 +++++++++++
.../x86_64-cpuid-Core-i7-2600-xsaveopt.xml | 33 +
tests/cputestdata/x86_64-cpuid-Core-i7-2600.json | 496 ++++++++-
tests/cputestdata/x86_64-cpuid-Core-i7-2600.xml | 6 +-
.../x86_64-cpuid-Xeon-E3-1245-disabled.xml | 1 -
.../x86_64-cpuid-Xeon-E3-1245-enabled.xml | 2 +-
.../cputestdata/x86_64-cpuid-Xeon-E3-1245-json.xml | 1 +
tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.json | 712 +++++++++----
tests/cputestdata/x86_64-cpuid-Xeon-E3-1245.xml | 7 +-
.../x86_64-cpuid-Xeon-E7-4830-disabled.xml | 5 +
.../x86_64-cpuid-Xeon-E7-4830-enabled.xml | 8 +
.../x86_64-cpuid-Xeon-E7-4830-guest.xml | 28 +
.../cputestdata/x86_64-cpuid-Xeon-E7-4830-host.xml | 29 +
.../cputestdata/x86_64-cpuid-Xeon-E7-4830-json.xml | 14 +
tests/cputestdata/x86_64-cpuid-Xeon-E7-4830.json | 657 ++++++++++++
tests/cputestdata/x86_64-cpuid-Xeon-E7-4830.xml | 30 +
tests/domaincapstest.c | 6 +-
tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml | 1102 ++++++++++++++++++--
tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml | 236 ++++-
tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml | 154 ++-
tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 154 ++-
56 files changed, 4927 insertions(+), 680 deletions(-)
create mode 100755 tests/cputestdata/cpu-reformat.py
create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600-xsaveopt-disabled.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600-xsaveopt-enabled.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600-xsaveopt-guest.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600-xsaveopt-host.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600-xsaveopt-json.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600-xsaveopt.json
create mode 100644 tests/cputestdata/x86_64-cpuid-Core-i7-2600-xsaveopt.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4830-disabled.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4830-enabled.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4830-guest.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4830-host.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4830-json.xml
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4830.json
create mode 100644 tests/cputestdata/x86_64-cpuid-Xeon-E7-4830.xml
--
2.14.2
7 years, 1 month
[libvirt] [PATCH] Use https:// links for most sites
by Daniel P. Berrange
This adds a rule to require https links for the libvirt, qemu
and kvm websites.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
cfg.mk | 20 +++++++++
configure.ac | 2 +-
daemon/libvirtd.conf | 2 +-
daemon/libvirtd.init.in | 4 +-
daemon/libvirtd.pod | 6 +--
daemon/libvirtd.service.in | 2 +-
daemon/virt-guest-shutdown.target | 2 +-
docs/404.html.in | 2 +-
docs/aclpolkit.html.in | 2 +-
docs/api_extension.html.in | 2 +-
docs/apps.html.in | 2 +-
docs/bindings.html.in | 10 ++---
docs/csharp.html.in | 6 +--
docs/devguide.html.in | 14 +++---
docs/devhelp/html.xsl | 4 +-
docs/docs.html.in | 4 +-
docs/downloads.html.in | 92 +++++++++++++++++++--------------------
docs/drvlxc.html.in | 2 +-
docs/drvqemu.html.in | 8 ++--
docs/formatdomain.html.in | 2 +-
docs/hacking.html.in | 2 +-
docs/internals/eventloop.html.in | 4 +-
docs/java.html.in | 12 ++---
docs/news-2005.html.in | 2 +-
docs/news-2006.html.in | 2 +-
docs/news-2007.html.in | 4 +-
docs/news-2008.html.in | 2 +-
docs/news-2009.html.in | 2 +-
docs/news-2010.html.in | 2 +-
docs/news-2011.html.in | 2 +-
docs/news-2012.html.in | 2 +-
docs/news-2013.html.in | 2 +-
docs/news-2014.html.in | 2 +-
docs/news-2015.html.in | 2 +-
docs/news-2016.html.in | 2 +-
docs/news-html.xsl | 2 +-
docs/php.html.in | 6 +--
docs/securityprocess.html.in | 2 +-
docs/testapi.html.in | 4 +-
docs/testsuites.html.in | 4 +-
docs/testtck.html.in | 2 +-
docs/virshcmdref.html.in | 24 +++++-----
docs/windows.html.in | 2 +-
src/access/genpolkit.pl | 2 +-
src/libvirt.c | 6 +--
src/locking/virtlockd.pod | 6 +--
src/locking/virtlockd.service.in | 2 +-
src/logging/virtlogd.pod | 6 +--
src/logging/virtlogd.service.in | 2 +-
src/qemu/qemu_command.c | 2 +-
src/util/virstoragefile.c | 2 +-
tests/virconfdata/libvirtd.conf | 2 +-
tests/virconfdata/libvirtd.out | 2 +-
tools/libvirt-guests.init.in | 4 +-
tools/libvirt-guests.service.in | 2 +-
tools/virsh.c | 2 +-
tools/virsh.pod | 40 ++++++++---------
tools/virt-admin.c | 2 +-
tools/virt-admin.pod | 8 ++--
tools/virt-host-validate.pod | 4 +-
tools/virt-login-shell.pod | 6 +--
tools/virt-pki-validate.in | 10 ++---
tools/virt-pki-validate.pod | 6 +--
tools/virt-sanlock-cleanup.pod | 6 +--
tools/virt-xml-validate.pod | 6 +--
tools/wireshark/README.md | 2 +-
66 files changed, 214 insertions(+), 194 deletions(-)
diff --git a/cfg.mk b/cfg.mk
index 0f4065b98a..e0e52a0786 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -1020,6 +1020,26 @@ sc_prohibit_obj_free_apis_in_virsh:
halt='avoid using virDomain(Snapshot)Free in virsh, use virsh-prefixed wrappers instead' \
$(_sc_search_regexp)
+https_sites = www.libvirt.org
+https_sites += libvirt.org
+https_sites += security.libvirt.org
+https_sites += qemu.org
+https_sites += www.qemu.org
+https_sites += wiki.qemu.org
+https_sites += linux-kvm.org
+https_sites += www.linux-kvm.org
+
+https_re= ($(subst $(space),|,$(https_sites)))
+
+foo:
+ echo "$(https_re)"
+
+sc_prohibit_http_urls:
+ @prohibit='http://$(https_re)' \
+ exclude="/schemas/" \
+ halt='Links must use https:// protocol' \
+ $(_sc_search_regexp)
+
# We don't use this feature of maint.mk.
prev_version_file = /dev/null
diff --git a/configure.ac b/configure.ac
index 4f420cf8d9..ebe3318e07 100644
--- a/configure.ac
+++ b/configure.ac
@@ -16,7 +16,7 @@ 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], [3.9.0], [libvir-list(a)redhat.com], [], [http://libvirt.org])
+AC_INIT([libvirt], [3.9.0], [libvir-list(a)redhat.com], [], [https://libvirt.org])
AC_CONFIG_SRCDIR([src/libvirt.c])
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
diff --git a/daemon/libvirtd.conf b/daemon/libvirtd.conf
index 8a1b3a92db..8e0c0d96d2 100644
--- a/daemon/libvirtd.conf
+++ b/daemon/libvirtd.conf
@@ -1,6 +1,6 @@
# Master libvirt daemon configuration file
#
-# For further information consult http://libvirt.org/format.html
+# For further information consult https://libvirt.org/format.html
#
# NOTE: the tests/daemon-conf regression test script requires
# that each "PARAMETER = VALUE" line in this file have the parameter
diff --git a/daemon/libvirtd.init.in b/daemon/libvirtd.init.in
index 164732905d..d81dca6f2e 100644
--- a/daemon/libvirtd.init.in
+++ b/daemon/libvirtd.init.in
@@ -14,7 +14,7 @@
# Short-Description: daemon for libvirt virtualization API
# Description: This is a daemon for managing guest instances
# and libvirt virtual networks
-# See http://libvirt.org
+# See https://libvirt.org
### END INIT INFO
# the following is chkconfig init header
@@ -24,7 +24,7 @@
# chkconfig: 345 97 03
# description: This is a daemon for managing guest instances \
# and libvirt virtual networks \
-# See http://libvirt.org
+# See https://libvirt.org
#
# processname: libvirtd
# pidfile: @localstatedir(a)/run/libvirtd.pid
diff --git a/daemon/libvirtd.pod b/daemon/libvirtd.pod
index 8d3fbd13d2..4721e0f4ec 100644
--- a/daemon/libvirtd.pod
+++ b/daemon/libvirtd.pod
@@ -166,7 +166,7 @@ Please report all bugs you discover. This should be done via either:
=item a) the mailing list
-L<http://libvirt.org/contact.html>
+L<https://libvirt.org/contact.html>
=item or,
@@ -174,7 +174,7 @@ B<>
=item b) the bug tracker
-L<http://libvirt.org/bugs.html>
+L<https://libvirt.org/bugs.html>
=item Alternatively, you may report bugs to your software distributor / vendor.
@@ -199,6 +199,6 @@ PURPOSE
=head1 SEE ALSO
L<virsh(1)>, L<virt-install(1)>, L<virt-xml-validate(1)>, L<virt-top(1)>,
-L<virt-df(1)>, L<http://www.libvirt.org/>
+L<virt-df(1)>, L<https://www.libvirt.org/>
=cut
diff --git a/daemon/libvirtd.service.in b/daemon/libvirtd.service.in
index fbaf02f3bf..c189f5e653 100644
--- a/daemon/libvirtd.service.in
+++ b/daemon/libvirtd.service.in
@@ -15,7 +15,7 @@ After=apparmor.service
After=local-fs.target
After=remote-fs.target
Documentation=man:libvirtd(8)
-Documentation=http://libvirt.org
+Documentation=https://libvirt.org
[Service]
Type=notify
diff --git a/daemon/virt-guest-shutdown.target b/daemon/virt-guest-shutdown.target
index bf876527b5..25d4aaa267 100644
--- a/daemon/virt-guest-shutdown.target
+++ b/daemon/virt-guest-shutdown.target
@@ -1,3 +1,3 @@
[Unit]
Description=Libvirt guests shutdown
-Documentation=http://libvirt.org
+Documentation=https://libvirt.org
diff --git a/docs/404.html.in b/docs/404.html.in
index bdffff601b..0ac76f125a 100644
--- a/docs/404.html.in
+++ b/docs/404.html.in
@@ -9,7 +9,7 @@
page you were looking for. You might want to try
</p>
<ul>
- <li>going back to the <a href="http://libvirt.org/">home page</a> to find
+ <li>going back to the <a href="https://libvirt.org/">home page</a> to find
a collection of links to interesting pages on this site</li>
<li>using the search box at the top right corner of the screen to
locate the content on this site or mailing list archives</li>
diff --git a/docs/aclpolkit.html.in b/docs/aclpolkit.html.in
index 05e3b88150..0e3c8e971f 100644
--- a/docs/aclpolkit.html.in
+++ b/docs/aclpolkit.html.in
@@ -354,7 +354,7 @@ polkit.addRule(function(action, subject) {
<p>
See
- <a href="http://libvirt.org/git/?p=libvirt.git;a=tree;f=examples/polkit;hb=HEAD">source code</a>
+ <a href="https://libvirt.org/git/?p=libvirt.git;a=tree;f=examples/polkit;hb=HEAD">source code</a>
for a more complex example.
</p>
diff --git a/docs/api_extension.html.in b/docs/api_extension.html.in
index 3b37e7bec6..9beec07602 100644
--- a/docs/api_extension.html.in
+++ b/docs/api_extension.html.in
@@ -44,7 +44,7 @@
</p>
<p>
- <a href="http://libvirt.org/downloads.html">http://libvirt.org/downloads.html</a>
+ <a href="https://libvirt.org/downloads.html">https://libvirt.org/downloads.html</a>
</p>
<p>
diff --git a/docs/apps.html.in b/docs/apps.html.in
index df473636ea..60edeb3af4 100644
--- a/docs/apps.html.in
+++ b/docs/apps.html.in
@@ -327,7 +327,7 @@
Allows using simple ruby objects to manipulate
hypervisors, guests, storage, network etc. It is
based on top of
- the <a href="http://libvirt.org/ruby">native ruby bindings</a>.
+ the <a href="https://libvirt.org/ruby">native ruby bindings</a>.
</dd>
</dl>
diff --git a/docs/bindings.html.in b/docs/bindings.html.in
index 203934b6aa..733c89bc20 100644
--- a/docs/bindings.html.in
+++ b/docs/bindings.html.in
@@ -24,7 +24,7 @@
</li>
<li>
<strong>OCaml</strong>: Richard Jones develops
- <a href="http://libvirt.org/ocaml/">OCaml bindings</a>.
+ <a href="https://libvirt.org/ocaml/">OCaml bindings</a>.
</li>
<li>
<strong>Perl</strong>: Daniel Berrange develops
@@ -33,7 +33,7 @@
<li>
<p>
<strong>PHP</strong>: Radek Hladik started developing
- <a href="http://libvirt.org/php">PHP bindings</a> in 2010.
+ <a href="https://libvirt.org/php">PHP bindings</a> in 2010.
</p>
<p>
In February 2011 the binding development has been moved to the libvirt.org website as
@@ -43,13 +43,13 @@
The project is now maintained by Michal Novotny and it's heavily based
on Radek's version. For more information, including
information on posting patches to libvirt-php, please refer
- to the <a href="http://libvirt.org/php">PHP bindings</a> site.
+ to the <a href="https://libvirt.org/php">PHP bindings</a> site.
</p>
</li>
<li>
<p>
<strong>Python</strong>: Libvirt's python bindings are split to a
- separate <a href="http://libvirt.org/git/?p=libvirt-python.git">package</a>
+ separate <a href="https://libvirt.org/git/?p=libvirt-python.git">package</a>
since version 1.2.0, older versions came with direct support for the
Python language.
</p>
@@ -70,7 +70,7 @@
</li>
<li>
<strong>Ruby</strong>: Chris Lalancette develops
- <a href="http://libvirt.org/ruby/">Ruby bindings</a>.
+ <a href="https://libvirt.org/ruby/">Ruby bindings</a>.
</li>
</ul>
diff --git a/docs/csharp.html.in b/docs/csharp.html.in
index 2f85fd2b7b..fcca255072 100644
--- a/docs/csharp.html.in
+++ b/docs/csharp.html.in
@@ -38,7 +38,7 @@
<ul>
<li><a href="ftp://libvirt.org/libvirt/csharp/">libvirt.org FTP server</a></li>
- <li><a href="http://libvirt.org/sources/csharp/">libvirt.org HTTP server</a></li>
+ <li><a href="https://libvirt.org/sources/csharp/">libvirt.org HTTP server</a></li>
</ul>
-->
@@ -46,7 +46,7 @@
<p>
The C# bindings source code is maintained in a <a
href="http://git-scm.com/">git</a> repository available on
- <a href="http://libvirt.org/git/">libvirt.org</a>:
+ <a href="https://libvirt.org/git/">libvirt.org</a>:
</p>
<pre>
@@ -58,7 +58,7 @@ git clone git://libvirt.org/libvirt-csharp.git
</p>
<pre>
-<a href="http://libvirt.org/git/?p=libvirt-csharp.git;a=summary">http://libvirt.org/git/?p=libvirt-csharp.git;a=summary</a>
+<a href="https://libvirt.org/git/?p=libvirt-csharp.git;a=summary">https://libvirt.org/git/?p=libvirt-csharp.git;a=summary</a>
</pre>
<h2><a id="usage">Usage</a></h2>
diff --git a/docs/devguide.html.in b/docs/devguide.html.in
index b949f04a16..f460f1dd58 100644
--- a/docs/devguide.html.in
+++ b/docs/devguide.html.in
@@ -12,10 +12,10 @@
</p>
<ul>
- <li><a href="http://libvirt.org/docs/libvirt-appdev-guide/en-US/html/">Application Development Guide (C language) HTML</a></li>
- <li><a href="http://libvirt.org/docs/libvirt-appdev-guide/en-US/pdf/">Application Development Guide (C language) PDF</a></li>
- <li><a href="http://libvirt.org/docs/libvirt-appdev-guide-python/en-US/html/">Application Development Guide (Python language) HTML</a></li>
- <li><a href="http://libvirt.org/docs/libvirt-appdev-guide-python/en-US/pdf/">Application Development Guide (Python language) PDF</a></li>
+ <li><a href="https://libvirt.org/docs/libvirt-appdev-guide/en-US/html/">Application Development Guide (C language) HTML</a></li>
+ <li><a href="https://libvirt.org/docs/libvirt-appdev-guide/en-US/pdf/">Application Development Guide (C language) PDF</a></li>
+ <li><a href="https://libvirt.org/docs/libvirt-appdev-guide-python/en-US/html/">Application Development Guide (Python language) HTML</a></li>
+ <li><a href="https://libvirt.org/docs/libvirt-appdev-guide-python/en-US/pdf/">Application Development Guide (Python language) PDF</a></li>
</ul>
<h2>Contributing content</h2>
@@ -29,13 +29,13 @@
<pre>
# C language
-$ git clone <a href="http://libvirt.org/git/?p=libvirt-appdev-guide.git">git://libvirt.org/libvirt-appdev-guide.git</a>
+$ git clone <a href="https://libvirt.org/git/?p=libvirt-appdev-guide.git">git://libvirt.org/libvirt-appdev-guide.git</a>
# Python language
-$ git clone <a href="http://libvirt.org/git/?p=libvirt-appdev-guide-python.git">git://libvirt.org/libvirt-appdev-guide-python.git</a>
+$ git clone <a href="https://libvirt.org/git/?p=libvirt-appdev-guide-python.git">git://libvirt.org/libvirt-appdev-guide-python.git</a>
# Publican Style/Theme
-$ git clone <a href="http://libvirt.org/git/?p=libvirt-publican.git">git://libvirt.org/libvirt-publican.git</a>
+$ git clone <a href="https://libvirt.org/git/?p=libvirt-publican.git">git://libvirt.org/libvirt-publican.git</a>
</pre>
</body>
diff --git a/docs/devhelp/html.xsl b/docs/devhelp/html.xsl
index 5e063f3172..eb10e362bf 100644
--- a/docs/devhelp/html.xsl
+++ b/docs/devhelp/html.xsl
@@ -566,8 +566,8 @@ initially for the <a href="http://www.cl.cam.ac.uk/Research/SRG/netos/xen/index.
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="http://libvirt.org/search.php">the online search
-engine</a> hosted on <a href="http://libvirt.org/">libvirt.org</a>
+<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>
diff --git a/docs/docs.html.in b/docs/docs.html.in
index f23809840c..931da85424 100644
--- a/docs/docs.html.in
+++ b/docs/docs.html.in
@@ -59,11 +59,11 @@
<a href="csharp.html">c#</a>,
<a href="https://godoc.org/github.com/libvirt/libvirt-go">go</a>,
<a href="java.html">java</a>,
- <a href="http://libvirt.org/ocaml/">ocaml</a>.
+ <a href="https://libvirt.org/ocaml/">ocaml</a>.
<a href="http://search.cpan.org/dist/Sys-Virt/">perl</a>,
<a href="python.html">python</a>,
<a href="php.html">php</a>,
- <a href="http://libvirt.org/ruby/">ruby</a></dd>
+ <a href="https://libvirt.org/ruby/">ruby</a></dd>
<dt><a href="format.html">XML schemas</a></dt>
diff --git a/docs/downloads.html.in b/docs/downloads.html.in
index 94869c35c5..640b514803 100644
--- a/docs/downloads.html.in
+++ b/docs/downloads.html.in
@@ -28,11 +28,11 @@
<td>libvirt</td>
<td>
<a href="ftp://libvirt.org/libvirt/">ftp</a>
- <a href="http://libvirt.org/sources/">http</a>
+ <a href="https://libvirt.org/sources/">http</a>
<a href="https://libvirt.org/sources/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt">gitlab</a>
@@ -50,11 +50,11 @@
<td>C#</td>
<td>
<a href="ftp://libvirt.org/libvirt/csharp/">ftp</a>
- <a href="http://libvirt.org/sources/csharp/">http</a>
+ <a href="https://libvirt.org/sources/csharp/">http</a>
<a href="https://libvirt.org/sources/csharp/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-csharp.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-csharp.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-csharp">gitlab</a>
@@ -66,11 +66,11 @@
<td>Go</td>
<td>
<a href="ftp://libvirt.org/libvirt/go/">ftp</a>
- <a href="http://libvirt.org/sources/go/">http</a>
+ <a href="https://libvirt.org/sources/go/">http</a>
<a href="https://libvirt.org/sources/go/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-go.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-go.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-go">gitlab</a>
@@ -84,11 +84,11 @@
<td>Java</td>
<td>
<a href="ftp://libvirt.org/libvirt/java/">ftp</a>
- <a href="http://libvirt.org/sources/java/">http</a>
+ <a href="https://libvirt.org/sources/java/">http</a>
<a href="https://libvirt.org/sources/java/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-java.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-java.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-java">gitlab</a>
@@ -100,11 +100,11 @@
<td>OCaml</td>
<td>
<a href="ftp://libvirt.org/libvirt/ocaml/">ftp</a>
- <a href="http://libvirt.org/sources/ocaml/">http</a>
+ <a href="https://libvirt.org/sources/ocaml/">http</a>
<a href="https://libvirt.org/sources/ocaml/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-ocaml.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-ocaml.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-ocaml">gitlab</a>
@@ -118,7 +118,7 @@
<a href="http://search.cpan.org/dist/Sys-Virt/">cpan</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-perl.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-perl.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-perl">gitlab</a>
@@ -126,18 +126,18 @@
</td>
<td>
<a href="http://search.cpan.org/dist/Sys-Virt/">api ref</a>
- <a href="http://libvirt.org/git/?p=libvirt-perl.git;a=blob;f=Changes;hb=HEAD">changes</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="ftp://libvirt.org/libvirt/php/">ftp</a>
- <a href="http://libvirt.org/sources/php/">http</a>
+ <a href="https://libvirt.org/sources/php/">http</a>
<a href="https://libvirt.org/sources/php/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-php.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-php.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-php">gitlab</a>
@@ -149,12 +149,12 @@
<td>Python</td>
<td>
<a href="ftp://libvirt.org/libvirt/python/">ftp</a>
- <a href="http://libvirt.org/sources/python/">http</a>
+ <a href="https://libvirt.org/sources/python/">http</a>
<a href="https://libvirt.org/sources/python/">https</a>
<a href="https://pypi.python.org/pypi/libvirt-python">pypi</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-python.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-python.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-python">gitlab</a>
@@ -166,11 +166,11 @@
<td>Ruby</td>
<td>
<a href="ftp://libvirt.org/libvirt/ruby/">ftp</a>
- <a href="http://libvirt.org/sources/ruby/">http</a>
+ <a href="https://libvirt.org/sources/ruby/">http</a>
<a href="https://libvirt.org/sources/ruby/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=ruby-libvirt.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=ruby-libvirt.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/ruby-libvirt">gitlab</a>
@@ -182,11 +182,11 @@
<td>Rust</td>
<td>
<a href="ftp://libvirt.org/libvirt/rust/">ftp</a>
- <a href="http://libvirt.org/sources/rust/">http</a>
+ <a href="https://libvirt.org/sources/rust/">http</a>
<a href="https://libvirt.org/sources/rust/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-rust.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-rust.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-rust">gitlab</a>
@@ -201,11 +201,11 @@
<td>GLib / GConfig / GObject</td>
<td>
<a href="ftp://libvirt.org/libvirt/glib/">ftp</a>
- <a href="http://libvirt.org/sources/glib/">http</a>
+ <a href="https://libvirt.org/sources/glib/">http</a>
<a href="https://libvirt.org/sources/glib/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-glib.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-glib.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-glib">gitlab</a>
@@ -217,11 +217,11 @@
<td>Go XML</td>
<td>
<a href="ftp://libvirt.org/libvirt/go/">ftp</a>
- <a href="http://libvirt.org/sources/go/">http</a>
+ <a href="https://libvirt.org/sources/go/">http</a>
<a href="https://libvirt.org/sources/go/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-go-xml.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-go-xml.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-go-xml">gitlab</a>
@@ -235,11 +235,11 @@
<td>Console Proxy</td>
<td>
<a href="ftp://libvirt.org/libvirt/consoleproxy/">ftp</a>
- <a href="http://libvirt.org/sources/consoleproxy/">http</a>
+ <a href="https://libvirt.org/sources/consoleproxy/">http</a>
<a href="https://libvirt.org/sources/consoleproxy/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-console-proxy.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-console-proxy.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-console-proxy">gitlab</a>
@@ -251,11 +251,11 @@
<td>CIM provider</td>
<td>
<a href="ftp://libvirt.org/libvirt/CIM/">ftp</a>
- <a href="http://libvirt.org/sources/CIM/">http</a>
+ <a href="https://libvirt.org/sources/CIM/">http</a>
<a href="https://libvirt.org/sources/CIM/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-cim.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-cim.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-cim">gitlab</a>
@@ -267,11 +267,11 @@
<td>CIM utils</td>
<td>
<a href="ftp://libvirt.org/libvirt/CIM/">ftp</a>
- <a href="http://libvirt.org/sources/CIM/">http</a>
+ <a href="https://libvirt.org/sources/CIM/">http</a>
<a href="https://libvirt.org/sources/CIM/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libcmpiutil.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libcmpiutil.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libcmpiutil">gitlab</a>
@@ -283,11 +283,11 @@
<td>SNMP</td>
<td>
<a href="ftp://libvirt.org/libvirt/snmp/">ftp</a>
- <a href="http://libvirt.org/sources/snmp/">http</a>
+ <a href="https://libvirt.org/sources/snmp/">http</a>
<a href="https://libvirt.org/sources/snmp/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-snmp.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-snmp.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-snmp">gitlab</a>
@@ -299,11 +299,11 @@
<td>Application Sandbox</td>
<td>
<a href="ftp://libvirt.org/libvirt/sandbox/">ftp</a>
- <a href="http://libvirt.org/sources/sandbox/">http</a>
+ <a href="https://libvirt.org/sources/sandbox/">http</a>
<a href="https://libvirt.org/sources/sandbox/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-sandbox.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-sandbox.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-sandbox">gitlab</a>
@@ -318,11 +318,11 @@
<td>TCK</td>
<td>
<a href="ftp://libvirt.org/libvirt/tck/">ftp</a>
- <a href="http://libvirt.org/sources/tck/">http</a>
+ <a href="https://libvirt.org/sources/tck/">http</a>
<a href="https://libvirt.org/sources/tck/">https</a>
</td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-tck.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-tck.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-tck">gitlab</a>
@@ -334,7 +334,7 @@
<td>Test API</td>
<td></td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-test-API.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-test-API.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-test-API">gitlab</a>
@@ -346,7 +346,7 @@
<td>Jenkins Config</td>
<td></td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-jenkins-ci.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-jenkins-ci.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-jenkins-ci">gitlab</a>
@@ -358,7 +358,7 @@
<td>CIM Test</td>
<td></td>
<td>
- <a href="http://libvirt.org/git/?p=cimtest.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=cimtest.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/cimtest">gitlab</a>
@@ -373,7 +373,7 @@
<td>Publican Brand</td>
<td></td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-publican.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-publican.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-publican">gitlab</a>
@@ -385,7 +385,7 @@
<td>App Development Guide</td>
<td></td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-appdev-guide.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-appdev-guide.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-appdev-guide">gitlab</a>
@@ -397,7 +397,7 @@
<td>App Development Guide Python</td>
<td></td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-appdev-guide-python.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-appdev-guide-python.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-appdev-guide-python">gitlab</a>
@@ -409,7 +409,7 @@
<td>virsh Command Reference</td>
<td></td>
<td>
- <a href="http://libvirt.org/git/?p=libvirt-virshcmdref.git;a=summary">libvirt</a>
+ <a href="https://libvirt.org/git/?p=libvirt-virshcmdref.git;a=summary">libvirt</a>
</td>
<td>
<a href="https://gitlab.com/libvirt/libvirt-virshcmdref">gitlab</a>
@@ -431,7 +431,7 @@
<ul>
<li><a href="ftp://libvirt.org/libvirt/">libvirt.org FTP server</a></li>
- <li><a href="http://libvirt.org/sources/">libvirt.org HTTP 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>
@@ -447,7 +447,7 @@
<ul>
<li><a href="ftp://libvirt.org/libvirt/libvirt-git-snapshot.tar.xz">libvirt.org FTP server</a></li>
- <li><a href="http://libvirt.org/sources/libvirt-git-snapshot.tar.xz">libvirt.org HTTP server</a></li>
+ <li><a href="https://libvirt.org/sources/libvirt-git-snapshot.tar.xz">libvirt.org HTTP server</a></li>
</ul>
<h2><a id="schedule">Primary release schedule</a></h2>
@@ -529,7 +529,7 @@
<p>
All modules maintained by the libvirt project have their primary
- source available in the <a href="http://libvirt.org/git/">project GIT server</a>.
+ source available in the <a href="https://libvirt.org/git/">project GIT server</a>.
Each module can be cloned anonymously using:
</p>
diff --git a/docs/drvlxc.html.in b/docs/drvlxc.html.in
index 58a336ed30..94c6b82cfd 100644
--- a/docs/drvlxc.html.in
+++ b/docs/drvlxc.html.in
@@ -601,7 +601,7 @@ rather than creating new network namespace for the container. In this case privn
ignored.
</p>
<pre>
-<domain type='lxc' xmlns:lxc='http://libvirt.org/schemas/domain/lxc/1.0'>
+<domain type='lxc' xmlns:lxc='https://libvirt.org/schemas/domain/lxc/1.0'>
...
<lxc:namespace>
<lxc:sharenet type='netns' value='red'/>
diff --git a/docs/drvqemu.html.in b/docs/drvqemu.html.in
index a775f29792..e2a0797cfb 100644
--- a/docs/drvqemu.html.in
+++ b/docs/drvqemu.html.in
@@ -15,11 +15,11 @@
<ul>
<li>
- The <a href="http://www.linux-kvm.org/">KVM</a> Linux
+ The <a href="https://www.linux-kvm.org/">KVM</a> Linux
hypervisor
</li>
<li>
- The <a href="http://wiki.qemu.org/Index.html">QEMU</a> emulator
+ The <a href="https://wiki.qemu.org/Index.html">QEMU</a> emulator
</li>
</ul>
@@ -546,7 +546,7 @@ $ virsh domxml-to-native qemu-argv demo.xml
(<span class="since">Since 0.8.3</span>). In order to use the
XML additions, 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/qemu/1.0</code>;
+ pulls in <code>https://libvirt.org/schemas/domain/qemu/1.0</code>;
typically, the namespace is given the name
of <code>qemu</code>. With the namespace in place, it is then
possible to add an element <code><qemu:commandline></code>
@@ -566,7 +566,7 @@ $ virsh domxml-to-native qemu-argv demo.xml
and optional <code>value</code>.</dd>
</dl>
<p>Example:</p><pre>
-<domain type='qemu' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
+<domain type='qemu' xmlns:qemu='https://libvirt.org/schemas/domain/qemu/1.0'>
<name>QEmu-fedora-i686</name>
<memory>219200</memory>
<os>
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index c0e3c22213..b93ace7cba 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -5224,7 +5224,7 @@ qemu-kvm -net nic,model=? /dev/null
<dd>
The optional <code>queues</code> attribute controls the number
of queues to be used for either
- <a href="http://www.linux-kvm.org/page/Multiqueue"> Multiqueue
+ <a href="https://www.linux-kvm.org/page/Multiqueue"> Multiqueue
virtio-net</a> or <a href="#elementVhostuser">vhost-user</a> network
interfaces. Use of multiple packet processing queues requires the
interface having the <code><model type='virtio'/></code>
diff --git a/docs/hacking.html.in b/docs/hacking.html.in
index c33a27c232..6cadfb8343 100644
--- a/docs/hacking.html.in
+++ b/docs/hacking.html.in
@@ -17,7 +17,7 @@
<p>Official upstream repository is kept in git
(<code>git://libvirt.org/libvirt.git</code>) and is browsable
along with other libvirt-related repositories
- (e.g. libvirt-python) <a href="http://libvirt.org/git/">online</a>.</p>
+ (e.g. libvirt-python) <a href="https://libvirt.org/git/">online</a>.</p>
</li>
<li>
diff --git a/docs/internals/eventloop.html.in b/docs/internals/eventloop.html.in
index 2d99f59471..3e62d5ca53 100644
--- a/docs/internals/eventloop.html.in
+++ b/docs/internals/eventloop.html.in
@@ -29,7 +29,7 @@
not waiting for direct user input and have no graphical
interface. Such as Libvirt.</p>
- <img alt="event loop" src="http://libvirt.org/git/?p=libvirt-media.git;a=blob_plain;f=png/event_loop..."/>
+ <img alt="event loop" src="https://libvirt.org/git/?p=libvirt-media.git;a=blob_plain;f=png/event_loo..."/>
<p>In Libvirt this approach is used in combination with
<code>poll(2)</code> as all the communication with its
@@ -70,7 +70,7 @@
acceptable for Libvirt. Therefore we have came up with the
following solution.</p>
- <img alt="event loop" src="http://libvirt.org/git/?p=libvirt-media.git;a=blob_plain;f=png/event_loop..."/>
+ <img alt="event loop" src="https://libvirt.org/git/?p=libvirt-media.git;a=blob_plain;f=png/event_loo..."/>
<p>The event loop does only necessary minimum and hand over
message processing to another thread. In fact, there can be
diff --git a/docs/java.html.in b/docs/java.html.in
index 06cf7034f6..333583427c 100644
--- a/docs/java.html.in
+++ b/docs/java.html.in
@@ -16,17 +16,17 @@
<ul>
<li><a href="ftp://libvirt.org/libvirt/java/">libvirt.org FTP server</a></li>
-<li><a href="http://libvirt.org/sources/java/">libvirt.org HTTP server</a></li>
+<li><a href="https://libvirt.org/sources/java/">libvirt.org HTTP server</a></li>
</ul>
<h3>Maven</h3>
-<p>A maven repository is located at <a href="http://www.libvirt.org/maven2/">http://www.libvirt.org/maven2/</a>
+<p>A maven repository is located at <a href="https://libvirt.org/maven2/">https://libvirt.org/maven2/</a>
which you can use to include this in your maven projects.</p>
<h2>GIT source repository</h2>
<p> The Java bindings code source is now maintained in a <a
href="http://git-scm.com/">git</a> repository available on
-<a href="http://libvirt.org/git/">libvirt.org</a>:
+<a href="https://libvirt.org/git/">libvirt.org</a>:
</p>
<pre>
git clone git://libvirt.org/libvirt-java.git
@@ -36,7 +36,7 @@ It can also be browsed at
</p>
<pre>
-<a href="http://libvirt.org/git/?p=libvirt-java.git;a=summary">http://libvirt.org/git/?p=libvirt-java.git;a=summary</a>
+<a href="https://libvirt.org/git/?p=libvirt-java.git;a=summary">https://libvirt.org/git/?p=libvirt-java.git;a=summary</a>
</pre>
<p></p>
@@ -120,7 +120,7 @@ lower case, for example the C functions:</p>
<code>virDomain.setMaxMemory(long memory)</code>
</p>
<p> There is of course some functions where the mapping is less direct
-and using extra classes to map complex arguments. The <a href="http://libvirt.org/sources/java/javadoc">Javadoc</a> is available online or as
+and using extra classes to map complex arguments. The <a href="https://libvirt.org/sources/java/javadoc">Javadoc</a> is available online or as
part of a separate libvirt-java-javadoc package.</p>
<p>So let's look at a simple example inspired from the
<code>test.java</code> test found in <code>src</code> in the source tree:</p>
@@ -164,7 +164,7 @@ from the C API, the only points to notice are:</p>
<pre><repositories>
<repository>
<id>libvirt-org</id>
- <url>http://libvirt.org/maven2</url>
+ <url>https://libvirt.org/maven2</url>
</repository>
</repositories></pre>
diff --git a/docs/news-2005.html.in b/docs/news-2005.html.in
index 44d8c4cc47..8d6dc150d3 100644
--- a/docs/news-2005.html.in
+++ b/docs/news-2005.html.in
@@ -11,7 +11,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-2006.html.in b/docs/news-2006.html.in
index 6556d4fed0..7463d7bad3 100644
--- a/docs/news-2006.html.in
+++ b/docs/news-2006.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-2007.html.in b/docs/news-2007.html.in
index c12449abf4..14099936fd 100644
--- a/docs/news-2007.html.in
+++ b/docs/news-2007.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
@@ -257,7 +257,7 @@
<ul>
<li>Features:<br/>
Secure Remote support (Richard Jones).
- See <a href="http://libvirt.org/remote.html">the remote page</a> of the documentation<br/>
+ See <a href="https://libvirt.org/remote.html">the remote page</a> of the documentation<br/>
</li>
<li>Documentation:<br/>
diff --git a/docs/news-2008.html.in b/docs/news-2008.html.in
index aefbf3873f..28f3b98d82 100644
--- a/docs/news-2008.html.in
+++ b/docs/news-2008.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-2009.html.in b/docs/news-2009.html.in
index 0824b0bbef..9c0df7a82f 100644
--- a/docs/news-2009.html.in
+++ b/docs/news-2009.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-2010.html.in b/docs/news-2010.html.in
index 013ebaf56e..8d9ee1dea4 100644
--- a/docs/news-2010.html.in
+++ b/docs/news-2010.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-2011.html.in b/docs/news-2011.html.in
index cea716556d..f59bb196cd 100644
--- a/docs/news-2011.html.in
+++ b/docs/news-2011.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-2012.html.in b/docs/news-2012.html.in
index e419a2ef05..ede85c41c7 100644
--- a/docs/news-2012.html.in
+++ b/docs/news-2012.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-2013.html.in b/docs/news-2013.html.in
index 50c200ebd3..6cc3bca2ff 100644
--- a/docs/news-2013.html.in
+++ b/docs/news-2013.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-2014.html.in b/docs/news-2014.html.in
index 8dfca90120..91a4f2f26f 100644
--- a/docs/news-2014.html.in
+++ b/docs/news-2014.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-2015.html.in b/docs/news-2015.html.in
index cd3b638a90..bb71af1c46 100644
--- a/docs/news-2015.html.in
+++ b/docs/news-2015.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-2016.html.in b/docs/news-2016.html.in
index 3b804fc1a9..a7be451a2e 100644
--- a/docs/news-2016.html.in
+++ b/docs/news-2016.html.in
@@ -12,7 +12,7 @@
<p>It is also possible to just use
the <a href="downloads.html">GIT version or snapshot</a>,
contact the mailing list and check
- the <a href="http://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
+ the <a href="https://libvirt.org/git/?p=libvirt.git;a=log">GIT log</a>
to gauge progress.
</p>
diff --git a/docs/news-html.xsl b/docs/news-html.xsl
index 5baabc695a..4d40798028 100644
--- a/docs/news-html.xsl
+++ b/docs/news-html.xsl
@@ -25,7 +25,7 @@
<p>This is the list of official releases for libvirt, along with an
overview of the changes introduced by each of them.</p>
<p>For a more fine-grained view, use the
- <a href="http://libvirt.org/git/?p=libvirt.git;a=log">git log</a>.
+ <a href="https://libvirt.org/git/?p=libvirt.git;a=log">git log</a>.
</p>
<xsl:apply-templates select="release"/>
<p>Older libvirt releases didn't have proper release notes,
diff --git a/docs/php.html.in b/docs/php.html.in
index b2a372d484..2939b4bd17 100644
--- a/docs/php.html.in
+++ b/docs/php.html.in
@@ -11,7 +11,7 @@
<h2>Getting the source</h2>
<p> The PHP bindings code source is now maintained in a <a
href="http://git-scm.com/">git</a> repository available on
-<a href="http://libvirt.org/git/">libvirt.org</a>:
+<a href="https://libvirt.org/git/">libvirt.org</a>:
</p>
<pre>
git clone git://libvirt.org/libvirt-php.git
@@ -20,13 +20,13 @@ git clone git://libvirt.org/libvirt-php.git
It can also be browsed at
</p>
<pre>
-<a href="http://libvirt.org/git/?p=libvirt-php.git;a=summary">http://libvirt.org/git/?p=libvirt-php.git;a=summary</a>
+<a href="https://libvirt.org/git/?p=libvirt-php.git;a=summary">https://libvirt.org/git/?p=libvirt-php.git;a=summary</a>
</pre>
<p></p>
<h2>Project pages</h2>
<p>Since February 2011 the project has its own pages hosted at libvirt.org. For more information on the project
- please refer to <a href="http://libvirt.org/php">http://libvirt.org/php</a>.
+ please refer to <a href="https://libvirt.org/php">https://libvirt.org/php</a>.
</p>
diff --git a/docs/securityprocess.html.in b/docs/securityprocess.html.in
index 1cf51b005c..2bab07bf39 100644
--- a/docs/securityprocess.html.in
+++ b/docs/securityprocess.html.in
@@ -107,7 +107,7 @@
<p>
When an embargo expires, security issues will be announced on both
- the libvirt development and announcement <a href="http://libvirt.org/contact.html#email">mailing lists</a>.
+ the libvirt development and announcement <a href="https://libvirt.org/contact.html#email">mailing lists</a>.
</p>
</body>
</html>
diff --git a/docs/testapi.html.in b/docs/testapi.html.in
index 79ecd73ee0..dd0552c8fd 100644
--- a/docs/testapi.html.in
+++ b/docs/testapi.html.in
@@ -23,12 +23,12 @@
or more test case to define a given test scenario.</p>
<p>For more details you can look at:</p>
<ul>
- <li> A <a href="http://libvirt.org/sources/libvirt-test-API/Libvirt-test-API.pdf">documentation PDF</a>
+ <li> A <a href="https://libvirt.org/sources/libvirt-test-API/Libvirt-test-API.pdf">documentation PDF</a>
file describing the test suite and how to write test cases
and test scenarios.</li>
</ul>
<p> Libvirt-test-API is maintained using
- <a href="http://libvirt.org/git/?p=libvirt-test-API.git">a GIT
+ <a href="https://libvirt.org/git/?p=libvirt-test-API.git">a GIT
repository</a>, and comment, patches and reviews are carried
on the <a href="contact.html">libvir-list</a> development list.</p>
</body>
diff --git a/docs/testsuites.html.in b/docs/testsuites.html.in
index eeb0e8e199..0bf4e38544 100644
--- a/docs/testsuites.html.in
+++ b/docs/testsuites.html.in
@@ -23,7 +23,7 @@
<a href="ftp://libvirt.org/libvirt/tck/">download</a>, as a
<a href="http://rpmfind.net/linux/rpm2html/search.php?query=libvirt-tck">package</a>
in Fedora distributions, but best is probably to get
- the <a href="http://libvirt.org/git/?p=libvirt-tck.git">version
+ the <a href="https://libvirt.org/git/?p=libvirt-tck.git">version
from GIT</a>.
</li>
<li>the <a href="testapi.html">libvirt-test-API</a> is also a functional
@@ -32,7 +32,7 @@
of libvirt. It is available separately as a
<a href="ftp://libvirt.org/libvirt/libvirt-test-API/">download</a>,
or directly get
- the <a href="http://libvirt.org/git/?p=libvirt-test-API.git">version
+ the <a href="https://libvirt.org/git/?p=libvirt-test-API.git">version
from GIT</a>.
</li>
</ul>
diff --git a/docs/testtck.html.in b/docs/testtck.html.in
index 458dcb3a0a..021b56e665 100644
--- a/docs/testtck.html.in
+++ b/docs/testtck.html.in
@@ -33,7 +33,7 @@
Fedora Feature.</li>
</ul>
<p> Libvirt-TCK is maintained using
- <a href="http://libvirt.org/git/?p=libvirt-tck.git">a GIT
+ <a href="https://libvirt.org/git/?p=libvirt-tck.git">a GIT
repository</a>, and comment, patches and reviews are carried
on the <a href="contact.html">libvir-list</a> development list.</p>
</body>
diff --git a/docs/virshcmdref.html.in b/docs/virshcmdref.html.in
index 1ca689a3d7..731d809f3c 100644
--- a/docs/virshcmdref.html.in
+++ b/docs/virshcmdref.html.in
@@ -30,10 +30,10 @@
<ul>
<li>
- <a href="http://libvirt.org/sources/virshcmdref/html/">Standard HTML format, multiple pages</a>
+ <a href="https://libvirt.org/sources/virshcmdref/html/">Standard HTML format, multiple pages</a>
</li>
<li>
- <a href="http://libvirt.org/sources/virshcmdref/html-single/">HTML format, one long page</a>
+ <a href="https://libvirt.org/sources/virshcmdref/html-single/">HTML format, one long page</a>
</li>
</ul>
@@ -46,21 +46,21 @@
<ul>
<li>
Standard HTML format, multiple pages
- (<a href="http://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-ht...">.tar.gz</a>)
- (<a href="http://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-ht...">.tar.bz2</a>)
- (<a href="http://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-ht...">.zip</a>)
+ (<a href="https://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-h...">.tar.gz</a>)
+ (<a href="https://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-h...">.tar.bz2</a>)
+ (<a href="https://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-h...">.zip</a>)
</li>
<li>
HTML format, one long page
- (<a href="http://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-ht...">.tar.gz</a>)
- (<a href="http://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-ht...">.tar.bz2</a>)
- (<a href="http://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-ht...">.zip</a>)
+ (<a href="https://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-h...">.tar.gz</a>)
+ (<a href="https://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-h...">.tar.bz2</a>)
+ (<a href="https://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1-h...">.zip</a>)
</li>
<li>
- <a href="http://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1.pdf">PDF format</a>
+ <a href="https://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1.pdf">PDF format</a>
</li>
<li>
- <a href="http://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1.epub">ePub format</a>
+ <a href="https://libvirt.org/sources/virshcmdref/Virsh_Command_Reference-0.8.7-1.epub">ePub format</a>
</li>
</ul>
@@ -68,7 +68,7 @@
<p>
The DocBook source is maintained in a <a
href="http://git-scm.com/">git</a> repository available on
- <a href="http://libvirt.org/git/">libvirt.org</a>:
+ <a href="https://libvirt.org/git/">libvirt.org</a>:
</p>
<pre>
@@ -80,7 +80,7 @@ git clone git://libvirt.org/libvirt-virshcmdref.git
</p>
<pre>
-<a href="http://libvirt.org/git/?p=libvirt-virshcmdref.git">http://libvirt.org/git/?p=libvirt-virshcmdref.git</a>
+<a href="https://libvirt.org/git/?p=libvirt-virshcmdref.git">https://libvirt.org/git/?p=libvirt-virshcmdref.git</a>
</pre>
</body>
diff --git a/docs/windows.html.in b/docs/windows.html.in
index 16c1aee615..df60940750 100644
--- a/docs/windows.html.in
+++ b/docs/windows.html.in
@@ -79,7 +79,7 @@
online here:<br />
</p>
- <a href="http://libvirt.org/drvesx.html">http://libvirt.org/drvesx.html</a>
+ <a href="https://libvirt.org/drvesx.html">https://libvirt.org/drvesx.html</a>
<h2><a id="tlscerts">TLS Certificates</a></h2>
diff --git a/src/access/genpolkit.pl b/src/access/genpolkit.pl
index 6258fd3a1e..968cb8c55c 100755
--- a/src/access/genpolkit.pl
+++ b/src/access/genpolkit.pl
@@ -81,7 +81,7 @@ print <<EOF;
"http://www.freedesktop.org/software/polkit/policyconfig-1.dtd">
<policyconfig>
<vendor>Libvirt Project</vendor>
- <vendor_url>http://libvirt.org</vendor_url>
+ <vendor_url>https://libvirt.org</vendor_url>
EOF
foreach my $object (sort { $a cmp $b } keys %perms) {
diff --git a/src/libvirt.c b/src/libvirt.c
index 6d66fa43ef..536d56f0a5 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -1151,7 +1151,7 @@ virConnectOpenInternal(const char *name,
* if not already running. This can be prevented by setting the
* environment variable LIBVIRT_AUTOSTART=0
*
- * URIs are documented at http://libvirt.org/uri.html
+ * URIs are documented at httsp://libvirt.org/uri.html
*
* virConnectClose should be used to release the resources after the connection
* is no longer needed.
@@ -1190,7 +1190,7 @@ virConnectOpen(const char *name)
* See virConnectOpen for notes about environment variables which can
* have an effect on opening drivers and freeing the connection resources
*
- * URIs are documented at http://libvirt.org/uri.html
+ * URIs are documented at https://libvirt.org/uri.html
*
* Returns a pointer to the hypervisor connection or NULL in case of error
*/
@@ -1228,7 +1228,7 @@ virConnectOpenReadOnly(const char *name)
* See virConnectOpen for notes about environment variables which can
* have an effect on opening drivers and freeing the connection resources
*
- * URIs are documented at http://libvirt.org/uri.html
+ * URIs are documented at https://libvirt.org/uri.html
*
* Returns a pointer to the hypervisor connection or NULL in case of error
*/
diff --git a/src/locking/virtlockd.pod b/src/locking/virtlockd.pod
index 355d97404d..de0eb8ac18 100644
--- a/src/locking/virtlockd.pod
+++ b/src/locking/virtlockd.pod
@@ -128,7 +128,7 @@ Please report all bugs you discover. This should be done via either:
=item a) the mailing list
-L<http://libvirt.org/contact.html>
+L<https://libvirt.org/contact.html>
=item or,
@@ -136,7 +136,7 @@ B<>
=item b) the bug tracker
-L<http://libvirt.org/bugs.html>
+L<https://libvirt.org/bugs.html>
=item Alternatively, you may report bugs to your software distributor / vendor.
@@ -160,6 +160,6 @@ PURPOSE
=head1 SEE ALSO
-L<libvirtd(8)>, L<http://www.libvirt.org/>
+L<libvirtd(8)>, L<https://libvirt.org/>
=cut
diff --git a/src/locking/virtlockd.service.in b/src/locking/virtlockd.service.in
index c369591267..928bf63fb2 100644
--- a/src/locking/virtlockd.service.in
+++ b/src/locking/virtlockd.service.in
@@ -3,7 +3,7 @@ Description=Virtual machine lock manager
Requires=virtlockd.socket
Before=libvirtd.service
Documentation=man:virtlockd(8)
-Documentation=http://libvirt.org
+Documentation=https://libvirt.org
[Service]
EnvironmentFile=-/etc/sysconfig/virtlockd
diff --git a/src/logging/virtlogd.pod b/src/logging/virtlogd.pod
index 9e7212cfbe..5e44f84a85 100644
--- a/src/logging/virtlogd.pod
+++ b/src/logging/virtlogd.pod
@@ -128,7 +128,7 @@ Please report all bugs you discover. This should be done via either:
=item a) the mailing list
-L<http://libvirt.org/contact.html>
+L<https://libvirt.org/contact.html>
=item or,
@@ -136,7 +136,7 @@ B<>
=item b) the bug tracker
-L<http://libvirt.org/bugs.html>
+L<https://libvirt.org/bugs.html>
=item Alternatively, you may report bugs to your software distributor / vendor.
@@ -160,6 +160,6 @@ PURPOSE
=head1 SEE ALSO
-L<libvirtd(8)>, L<http://www.libvirt.org/>
+L<libvirtd(8)>, L<https://libvirt.org/>
=cut
diff --git a/src/logging/virtlogd.service.in b/src/logging/virtlogd.service.in
index 8b67317cb1..ec7712bb9a 100644
--- a/src/logging/virtlogd.service.in
+++ b/src/logging/virtlogd.service.in
@@ -3,7 +3,7 @@ Description=Virtual machine log manager
Requires=virtlogd.socket
Before=libvirtd.service
Documentation=man:virtlogd(8)
-Documentation=http://libvirt.org
+Documentation=https://libvirt.org
[Service]
EnvironmentFile=-/etc/sysconfig/virtlogd
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 9c8bde49a8..46f0bdd18c 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -3809,7 +3809,7 @@ qemuBuildNicDevStr(virDomainDefPtr def,
*/
virBufferAddLit(&buf, ",mq=on");
} else {
- /* As advised at http://www.linux-kvm.org/page/Multiqueue
+ /* As advised at https://www.linux-kvm.org/page/Multiqueue
* we should add vectors=2*N+2 where N is the vhostfdSize
*/
virBufferAsprintf(&buf, ",mq=on,vectors=%zu", 2 * vhostfdSize + 2);
diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c
index dd44949403..de76719384 100644
--- a/src/util/virstoragefile.c
+++ b/src/util/virstoragefile.c
@@ -369,7 +369,7 @@ static struct FileTypeInfo const fileTypeInfo[] = {
qcow2GetFeatures
},
[VIR_STORAGE_FILE_QED] = {
- /* http://wiki.qemu.org/Features/QED */
+ /* https://wiki.qemu.org/Features/QED */
0, "QED", NULL,
LV_LITTLE_ENDIAN, -2, 0, {0},
QED_HDR_IMAGE_SIZE, 8, 1, NULL, qedGetBackingStore, NULL
diff --git a/tests/virconfdata/libvirtd.conf b/tests/virconfdata/libvirtd.conf
index 5029c4c2e7..ee57593109 100644
--- a/tests/virconfdata/libvirtd.conf
+++ b/tests/virconfdata/libvirtd.conf
@@ -1,6 +1,6 @@
# Master libvirt daemon configuration file
#
-# For further information consult http://libvirt.org/format.html
+# For further information consult https://libvirt.org/format.html
#################################################################
diff --git a/tests/virconfdata/libvirtd.out b/tests/virconfdata/libvirtd.out
index 4d7ed47a90..e0b6f0a606 100644
--- a/tests/virconfdata/libvirtd.out
+++ b/tests/virconfdata/libvirtd.out
@@ -1,6 +1,6 @@
# Master libvirt daemon configuration file
#
-# For further information consult http://libvirt.org/format.html
+# For further information consult https://libvirt.org/format.html
#################################################################
#
# Network connectivitiy controls
diff --git a/tools/libvirt-guests.init.in b/tools/libvirt-guests.init.in
index 7709df3b96..495d4c7d1d 100644
--- a/tools/libvirt-guests.init.in
+++ b/tools/libvirt-guests.init.in
@@ -14,7 +14,7 @@
# Short-Description: suspend/resume libvirt guests on shutdown/boot
# Description: This is a script for suspending active libvirt guests
# on shutdown and resuming them on next boot
-# See http://libvirt.org
+# See https://libvirt.org
### END INIT INFO
# the following is chkconfig init header
@@ -24,7 +24,7 @@
# chkconfig: 345 99 01
# description: This is a script for suspending active libvirt guests \
# on shutdown and resuming them on next boot \
-# See http://libvirt.org
+# See https://libvirt.org
#
exec @libexecdir(a)/libvirt-guests.sh "$@"
diff --git a/tools/libvirt-guests.service.in b/tools/libvirt-guests.service.in
index 64a4c1129b..491ca62138 100644
--- a/tools/libvirt-guests.service.in
+++ b/tools/libvirt-guests.service.in
@@ -7,7 +7,7 @@ After=time-sync.target
After=libvirtd.service
After=virt-guest-shutdown.target
Documentation=man:libvirtd(8)
-Documentation=http://libvirt.org
+Documentation=https://libvirt.org
[Service]
EnvironmentFile=-/etc/sysconfig/libvirt-guests
diff --git a/tools/virsh.c b/tools/virsh.c
index 527c1a4181..d1789f03ad 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -511,7 +511,7 @@ virshShowVersion(vshControl *ctl ATTRIBUTE_UNUSED)
{
/* FIXME - list a copyright blurb, as in GNU programs? */
vshPrint(ctl, _("Virsh command line tool of libvirt %s\n"), VERSION);
- vshPrint(ctl, _("See web site at %s\n\n"), "http://libvirt.org/");
+ vshPrint(ctl, _("See web site at %s\n\n"), "https://libvirt.org/");
vshPrint(ctl, "%s", _("Compiled with support for:\n"));
vshPrint(ctl, "%s", _(" Hypervisors:"));
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 00d93781ac..4a2bf87023 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -249,7 +249,7 @@ Will print the current directory.
is automatically run with the I<URI> parameter requested by the C<-c>
option on the command line. The I<URI> parameter specifies how to
connect to the hypervisor. The documentation page at
-L<http://libvirt.org/uri.html> list the values supported, but the most
+L<https://libvirt.org/uri.html> list the values supported, but the most
common are:
=over 4
@@ -275,7 +275,7 @@ connect to a local linux container
To find the currently used URI, check the I<uri> command documented below.
For remote access see the documentation page at
-L<http://libvirt.org/uri.html> on how to make URIs.
+L<https://libvirt.org/uri.html> on how to make URIs.
The I<--readonly> option allows for read-only connection
=item B<uri>
@@ -350,7 +350,7 @@ we are currently connected to. This includes a section on the host
capabilities in terms of CPU and features, and a set of description
for each kind of guest which can be virtualized. For a more complete
description see:
- L<http://libvirt.org/formatcaps.html>
+ L<https://libvirt.org/formatcaps.html>
The XML also show the NUMA topology information if available.
=item B<domcapabilities> [I<virttype>] [I<emulatorbin>]
@@ -590,7 +590,7 @@ contain either host or guest CPU definition. The host CPU definition is the
<cpu> element and its contents as printed by B<capabilities> command. The
guest CPU definition is the <cpu> element and its contents from domain XML
definition. For more information on guest CPU definition see:
-L<http://libvirt.org/formatdomain.html#elementsCPU>. If I<--error> is
+L<https://libvirt.org/formatdomain.html#elementsCPU>. If I<--error> is
specified, the command will return an error when the given CPU is
incompatible with host CPU and a message providing more details about the
incompatibility will be printed out.
@@ -808,7 +808,7 @@ inbound or outbound bandwidth. I<average,peak,burst,floor> is the same as
in command I<attach-interface>. Values for I<average>, I<peak> and I<floor>
are expressed in kilobytes per second, while I<burst> is expressed in kilobytes
in a single burst at I<peak> speed as described in the Network XML
-documentation at L<http://libvirt.org/formatnetwork.html#elementQoS>.
+documentation at L<https://libvirt.org/formatnetwork.html#elementQoS>.
To clear inbound or outbound settings, use I<--inbound> or I<--outbound>
respectfully with average value of zero.
@@ -1892,7 +1892,7 @@ order to comply with local firewall policies.
=back
-See L<http://libvirt.org/migration.html#uris> for more details on
+See L<https://libvirt.org/migration.html#uris> for more details on
migration URIs.
Optional I<graphicsuri> overrides connection parameters used for automatically
@@ -2889,7 +2889,7 @@ is not available the processes will provide an exit code of 1.
The following commands manipulate devices associated to domains.
The I<domain> can be specified as a short integer, a name or a full UUID.
To better understand the values allowed as options for the command
-reading the documentation at L<http://libvirt.org/formatdomain.html> on the
+reading the documentation at L<https://libvirt.org/formatdomain.html> on the
format of the device sections to get the most accurate set of accepted values.
=over 4
@@ -2900,7 +2900,7 @@ format of the device sections to get the most accurate set of accepted values.
Attach a device to the domain, using a device definition in an XML
file using a device definition element such as <disk> or <interface>
as the top-level element. See the documentation at
-L<http://libvirt.org/formatdomain.html#elementsDevices> to learn about
+L<https://libvirt.org/formatdomain.html#elementsDevices> to learn about
libvirt XML format for a device. If I<--config> is specified the
command alters the persistent domain configuration with the device
attach taking effect the next time libvirt starts the domain.
@@ -3044,7 +3044,7 @@ specified. The other two I<peak> and I<burst> are optional, so
are expressed in kilobytes per second, while I<burst> is expressed in
kilobytes in a single burst at I<peak> speed as described in the
Network XML documentation at
-L<http://libvirt.org/formatnetwork.html#elementQoS>.
+L<https://libvirt.org/formatnetwork.html#elementQoS>.
B<--managed> is usable only for I<hostdev> type and tells libvirt
that the interface should be managed, which means detached and reattached
@@ -3143,7 +3143,7 @@ Update the characteristics of a device associated with I<domain>,
based on the device definition in an XML I<file>. The I<--force> option
can be used to force device update, e.g., to eject a CD-ROM even if it is
locked/mounted in the domain. See the documentation at
-L<http://libvirt.org/formatdomain.html#elementsDevices> to learn about
+L<https://libvirt.org/formatdomain.html#elementsDevices> to learn about
libvirt XML format for a device.
If I<--live> is specified, affect a running domain.
@@ -3209,7 +3209,7 @@ the host's hard disk controller where the guest's disk images live could
cause the host system to lock up or reboot).
For more information on node device definition see:
-L<http://libvirt.org/formatnode.html>.
+L<https://libvirt.org/formatnode.html>.
Passthrough devices cannot be simultaneously used by the host and its
guest domains, nor by multiple active guests at once. If the
@@ -3312,7 +3312,7 @@ before the event.
The following commands manipulate networks. Libvirt has the capability to
define virtual networks which can then be used by domains and linked to
actual network devices. For more detailed information about this feature
-see the documentation at L<http://libvirt.org/formatnetwork.html> . Many
+see the documentation at L<https://libvirt.org/formatnetwork.html> . Many
of the commands for virtual networks are similar to the ones used for domains,
but the way to name a virtual network is either by its name or UUID.
@@ -3327,7 +3327,7 @@ The I<--disable> option disable autostarting.
Create a transient (temporary) virtual network from an
XML I<file> and instantiate (start) the network.
-See the documentation at L<http://libvirt.org/formatnetwork.html>
+See the documentation at L<https://libvirt.org/formatnetwork.html>
to get a description of the XML network format used by libvirt.
=item B<net-define> I<file>
@@ -3600,7 +3600,7 @@ capability to manage various storage solutions, including files, raw
partitions, and domain-specific formats, used to provide the storage
volumes visible as devices within virtual machines. For more detailed
information about this feature, see the documentation at
-L<http://libvirt.org/formatstorage.html> . Many of the commands for
+L<https://libvirt.org/formatstorage.html> . Many of the commands for
pools are similar to the ones used for domains.
=over 4
@@ -4171,7 +4171,7 @@ The following commands manipulate "secrets" (e.g. passwords, passphrases and
encryption keys). Libvirt can store secrets independently from their use, and
other objects (e.g. volumes or domains) can refer to the secrets for encryption
or possibly other uses. Secrets are identified using a UUID. See
-L<http://libvirt.org/formatsecret.html> for documentation of the XML format
+L<https://libvirt.org/formatsecret.html> for documentation of the XML format
used to represent properties of secrets.
=over 4
@@ -4237,7 +4237,7 @@ disk, memory, and device state of a domain at a point-of-time, and save it
for future use. They have many uses, from saving a "clean" copy of an OS
image to saving a domain's state before a potentially destructive operation.
Snapshots are identified with a unique name. See
-L<http://libvirt.org/formatsnapshot.html> for documentation of the XML format
+L<https://libvirt.org/formatsnapshot.html> for documentation of the XML format
used to represent properties of snapshots.
=over 4
@@ -4778,15 +4778,15 @@ Messages at level ERROR
=back
For further information about debugging options consult
-L<http://libvirt.org/logging.html>
+L<https://libvirt.org/logging.html>
=back
=head1 BUGS
Report any bugs discovered to the libvirt community via the mailing
-list L<http://libvirt.org/contact.html> or bug tracker
-L<http://libvirt.org/bugs.html>.
+list L<https://libvirt.org/contact.html> or bug tracker
+L<https://libvirt.org/bugs.html>.
Alternatively report bugs to your software distributor / vendor.
=head1 AUTHORS
@@ -4812,6 +4812,6 @@ PURPOSE
=head1 SEE ALSO
L<virt-install(1)>, L<virt-xml-validate(1)>, L<virt-top(1)>, L<virt-df(1)>,
-L<http://www.libvirt.org/>
+L<https://libvirt.org/>
=cut
diff --git a/tools/virt-admin.c b/tools/virt-admin.c
index 6157ed2d7c..6b3426ef6f 100644
--- a/tools/virt-admin.c
+++ b/tools/virt-admin.c
@@ -1231,7 +1231,7 @@ vshAdmShowVersion(vshControl *ctl ATTRIBUTE_UNUSED)
{
/* FIXME - list a copyright blurb, as in GNU programs? */
vshPrint(ctl, _("Virt-admin command line tool of libvirt %s\n"), VERSION);
- vshPrint(ctl, _("See web site at %s\n\n"), "http://libvirt.org/");
+ vshPrint(ctl, _("See web site at %s\n\n"), "https://libvirt.org/");
vshPrint(ctl, "%s", _("Compiled with support for:"));
#ifdef WITH_LIBVIRTD
diff --git a/tools/virt-admin.pod b/tools/virt-admin.pod
index ef140824cb..3ddbbff934 100644
--- a/tools/virt-admin.pod
+++ b/tools/virt-admin.pod
@@ -456,15 +456,15 @@ Messages at level ERROR or above
=back
For further information about debugging options consult
-L<http://libvirt.org/logging.html>
+L<https://libvirt.org/logging.html>
=back
=head1 BUGS
Report any bugs discovered to the libvirt community via the mailing
-list L<http://libvirt.org/contact.html> or bug tracker
-L<http://libvirt.org/bugs.html>.
+list L<https://libvirt.org/contact.html> or bug tracker
+L<https://libvirt.org/bugs.html>.
Alternatively report bugs to your software distributor / vendor.
=head1 AUTHORS
@@ -488,6 +488,6 @@ PURPOSE
=head1 SEE ALSO
L<virsh(1)>, L<virt-xml-validate(1)>, L<virt-host-validate(1)>,
-L<http://www.libvirt.org/>
+L<https://libvirt.org/>
=cut
diff --git a/tools/virt-host-validate.pod b/tools/virt-host-validate.pod
index 9101141752..121bb7ed7a 100644
--- a/tools/virt-host-validate.pod
+++ b/tools/virt-host-validate.pod
@@ -46,8 +46,8 @@ Daniel P. Berrange
=head1 BUGS
Report any bugs discovered to the libvirt community via the
-mailing list L<http://libvirt.org/contact.html> or bug tracker
-L<http://libvirt.org/bugs.html>.
+mailing list L<https://libvirt.org/contact.html> or bug tracker
+L<https://libvirt.org/bugs.html>.
Alternatively report bugs to your software distributor / vendor.
=head1 COPYRIGHT
diff --git a/tools/virt-login-shell.pod b/tools/virt-login-shell.pod
index 9d61115417..1aaa1cfc7c 100644
--- a/tools/virt-login-shell.pod
+++ b/tools/virt-login-shell.pod
@@ -83,8 +83,8 @@ shell; for example, if libvirtd is not running.
=head1 BUGS
Report any bugs discovered to the libvirt community via the mailing
-list L<http://libvirt.org/contact.html> or bug tracker
-L<http://libvirt.org/bugs.html>.
+list L<https://libvirt.org/contact.html> or bug tracker
+L<https://libvirt.org/bugs.html>.
Alternatively report bugs to your software distributor / vendor.
=head1 AUTHORS
@@ -107,6 +107,6 @@ PURPOSE
=head1 SEE ALSO
-L<virsh(1)>, L<http://www.libvirt.org/>
+L<virsh(1)>, L<https://libvirt.org/>
=cut
diff --git a/tools/virt-pki-validate.in b/tools/virt-pki-validate.in
index 92df9ed379..206637abf0 100755
--- a/tools/virt-pki-validate.in
+++ b/tools/virt-pki-validate.in
@@ -2,7 +2,7 @@
#
# This shell script checks the TLS certificates and options needed
# for the secure client/server support of libvirt as documented at
-# http://libvirt.org/remote.html#Remote_certificates
+# https://libvirt.org/remote.html#Remote_certificates
#
# Copyright (C) 2009-2013 Red Hat, Inc.
#
@@ -166,7 +166,7 @@ if [ ! -f "$CA/cacert.pem" ]
then
echo the CA certificate $CA/cacert.pem is missing while it
echo should be installed on both client and servers
- echo "see http://libvirt.org/remote.html#Remote_TLS_CA"
+ echo "see https://libvirt.org/remote.html#Remote_TLS_CA"
echo on how to install it
exit 1
fi
@@ -186,7 +186,7 @@ if [ "$ORG" = "" ]
then
echo the CA certificate $CA/cacert.pem does not define the organization
echo it should probably regenerated
- echo "see http://libvirt.org/remote.html#Remote_TLS_CA"
+ echo "see https://libvirt.org/remote.html#Remote_TLS_CA"
echo on how to regenerate it
exit 1
fi
@@ -234,7 +234,7 @@ then
else
echo Did not find "$LIBVIRT/clientcert.pem" client certificate
echo The machine cannot act as a client
- echo "see http://libvirt.org/remote.html#Remote_TLS_client_certificates"
+ echo "see https://libvirt.org/remote.html#Remote_TLS_client_certificates"
echo on how to regenerate it
CLIENT=0
fi
@@ -287,7 +287,7 @@ then
else
echo Did not find $LIBVIRT/servercert.pem server certificate
echo The machine cannot act as a server
- echo "see http://libvirt.org/remote.html#Remote_TLS_server_certificates"
+ echo "see https://libvirt.org/remote.html#Remote_TLS_server_certificates"
echo on how to regenerate it
SERVER=0
fi
diff --git a/tools/virt-pki-validate.pod b/tools/virt-pki-validate.pod
index 5f04318f04..5d44973fdc 100644
--- a/tools/virt-pki-validate.pod
+++ b/tools/virt-pki-validate.pod
@@ -39,8 +39,8 @@ Richard Jones
=head1 BUGS
Report any bugs discovered to the libvirt community via the
-mailing list L<http://libvirt.org/contact.html> or bug tracker
-L<http://libvirt.org/bugs.html>.
+mailing list L<https://libvirt.org/contact.html> or bug tracker
+L<https://libvirt.org/bugs.html>.
Alternatively report bugs to your software distributor / vendor.
=head1 COPYRIGHT
@@ -56,6 +56,6 @@ PURPOSE
=head1 SEE ALSO
-L<virsh(1)>, online PKI setup instructions L<http://libvirt.org/remote.html>
+L<virsh(1)>, online PKI setup instructions L<https://libvirt.org/remote.html>
=cut
diff --git a/tools/virt-sanlock-cleanup.pod b/tools/virt-sanlock-cleanup.pod
index f80a2818da..41012566a1 100644
--- a/tools/virt-sanlock-cleanup.pod
+++ b/tools/virt-sanlock-cleanup.pod
@@ -27,8 +27,8 @@ Daniel Berrange
=head1 BUGS
Report any bugs discovered to the libvirt community via the
-mailing list L<http://libvirt.org/contact.html> or bug tracker
-L<http://libvirt.org/bugs.html>.
+mailing list L<https://libvirt.org/contact.html> or bug tracker
+L<https://libvirt.org/bugs.html>.
Alternatively report bugs to your software distributor / vendor.
=head1 COPYRIGHT
@@ -44,6 +44,6 @@ PURPOSE
=head1 SEE ALSO
-L<virsh(1)>, online instructions L<http://libvirt.org/locking.html>
+L<virsh(1)>, online instructions L<https://libvirt.org/locking.html>
=cut
diff --git a/tools/virt-xml-validate.pod b/tools/virt-xml-validate.pod
index 0a5b7db6e6..f8e67503fd 100644
--- a/tools/virt-xml-validate.pod
+++ b/tools/virt-xml-validate.pod
@@ -88,8 +88,8 @@ Daniel P.Berrange
=head1 BUGS
Report any bugs discovered to the libvirt community via the
-mailing list L<http://libvirt.org/contact.html> or bug tracker
-L<http://libvirt.org/bugs.html>.
+mailing list L<https://libvirt.org/contact.html> or bug tracker
+L<https://libvirt.org/bugs.html>.
Alternatively report bugs to your software distributor / vendor.
=head1 COPYRIGHT
@@ -106,6 +106,6 @@ PURPOSE
=head1 SEE ALSO
-L<virsh(1)>, online XML format descriptions L<http://libvirt.org/format.html>
+L<virsh(1)>, online XML format descriptions L<https://libvirt.org/format.html>
=cut
diff --git a/tools/wireshark/README.md b/tools/wireshark/README.md
index 9f4c9b6876..b7f40d0954 100644
--- a/tools/wireshark/README.md
+++ b/tools/wireshark/README.md
@@ -9,7 +9,7 @@ specification.
See also:
- http://www.google-melange.com/gsoc/project/google/gsoc2013/kawamuray/7001
-- http://wiki.qemu.org/Features/LibvirtWiresharkDissector
+- https://wiki.qemu.org/Features/LibvirtWiresharkDissector
Installation
=============
--
2.13.5
7 years, 1 month
[libvirt] [PATCH] Remove obsolete TODO file
by Daniel P. Berrange
We stopped autogenerating a TODO file from RFE bugs a long time
ago.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
TODO | 22 ----------------------
1 file changed, 22 deletions(-)
delete mode 100644 TODO
diff --git a/TODO b/TODO
deleted file mode 100644
index 6843a17b35..0000000000
--- a/TODO
+++ /dev/null
@@ -1,22 +0,0 @@
- libvirt TODO list
- =================
-
-The TODO list changes frequently, so is maintained online
-in the libvirt bugzilla
-
- http://bugzilla.redhat.com/
-
-Search against
-
- Product: Virtualization Tools
- Component: libvirt
- Subject: RFE
-
-Or browse dependent bugs under
-
- https://bugzilla.redhat.com/show_bug.cgi?id=libvirtTodo
-
-Summarized reports automatically generated from bugzilla
-and provided online at
-
- http://libvirt.org/todo.html
--
2.13.5
7 years, 1 month
[libvirt] [PATCH v2] interfaces: Convert virInterfaceObjList to virObjectRWLockable
by John Ferlan
Rather than a forward linked list, let's use the ObjectRWLockable object
in order to manage the data.
Requires numerous changes from List to Object management similar to
many other drivers/vir*obj.c modules
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
v1: https://www.redhat.com/archives/libvir-list/2017-October/msg00387.html
Difference to v1 - separate out each of the virHashForEach callback helpers
and *Data structures.
src/conf/virinterfaceobj.c | 341 ++++++++++++++++++++++++++++++---------------
src/libvirt_private.syms | 1 -
src/test/test_driver.c | 6 +-
3 files changed, 229 insertions(+), 119 deletions(-)
diff --git a/src/conf/virinterfaceobj.c b/src/conf/virinterfaceobj.c
index e993b929d7..4bd371bb1e 100644
--- a/src/conf/virinterfaceobj.c
+++ b/src/conf/virinterfaceobj.c
@@ -25,6 +25,7 @@
#include "viralloc.h"
#include "virerror.h"
#include "virinterfaceobj.h"
+#include "virhash.h"
#include "virlog.h"
#include "virstring.h"
@@ -40,14 +41,19 @@ struct _virInterfaceObj {
};
struct _virInterfaceObjList {
- size_t count;
- virInterfaceObjPtr *objs;
+ virObjectRWLockable parent;
+
+ /* name string -> virInterfaceObj mapping
+ * for O(1), lockless lookup-by-name */
+ virHashTable *objsName;
};
/* virInterfaceObj manipulation */
static virClassPtr virInterfaceObjClass;
+static virClassPtr virInterfaceObjListClass;
static void virInterfaceObjDispose(void *obj);
+static void virInterfaceObjListDispose(void *obj);
static int
virInterfaceObjOnceInit(void)
@@ -58,6 +64,12 @@ virInterfaceObjOnceInit(void)
virInterfaceObjDispose)))
return -1;
+ if (!(virInterfaceObjListClass = virClassNew(virClassForObjectRWLockable(),
+ "virInterfaceObjList",
+ sizeof(virInterfaceObjList),
+ virInterfaceObjListDispose)))
+ return -1;
+
return 0;
}
@@ -130,119 +142,189 @@ virInterfaceObjListNew(void)
{
virInterfaceObjListPtr interfaces;
- if (VIR_ALLOC(interfaces) < 0)
+ if (virInterfaceObjInitialize() < 0)
return NULL;
+
+ if (!(interfaces = virObjectRWLockableNew(virInterfaceObjListClass)))
+ return NULL;
+
+ if (!(interfaces->objsName = virHashCreate(10, virObjectFreeHashData))) {
+ virObjectUnref(interfaces);
+ return NULL;
+ }
+
return interfaces;
}
+struct _virInterfaceObjForEachData {
+ bool wantActive;
+ const char *matchStr;
+ bool error;
+ int nElems;
+ int maxElems;
+ char **const elems;
+};
+
+static int
+virInterfaceObjListFindByMACStringCb(void *payload,
+ const void *name ATTRIBUTE_UNUSED,
+ void *opaque)
+{
+ virInterfaceObjPtr obj = payload;
+ struct _virInterfaceObjForEachData *data = opaque;
+
+ if (data->error)
+ return 0;
+
+ if (data->nElems == data->maxElems)
+ return 0;
+
+ virObjectLock(obj);
+
+ if (STRCASEEQ(obj->def->mac, data->matchStr)) {
+ if (VIR_STRDUP(data->elems[data->nElems], data->matchStr) < 0) {
+ data->error = true;
+ goto cleanup;
+ }
+ data->nElems++;
+ }
+
+ cleanup:
+ virObjectUnlock(obj);
+ return 0;
+}
+
+
int
virInterfaceObjListFindByMACString(virInterfaceObjListPtr interfaces,
const char *mac,
char **const matches,
int maxmatches)
{
- size_t i;
- int matchct = 0;
+ struct _virInterfaceObjForEachData data = { .matchStr = mac,
+ .error = false,
+ .nElems = 0,
+ .maxElems = maxmatches,
+ .elems = matches };
- for (i = 0; i < interfaces->count; i++) {
- virInterfaceObjPtr obj = interfaces->objs[i];
- virInterfaceDefPtr def;
+ virObjectRWLockRead(interfaces);
+ virHashForEach(interfaces->objsName, virInterfaceObjListFindByMACStringCb,
+ &data);
+ virObjectRWUnlock(interfaces);
- virObjectLock(obj);
- def = obj->def;
- if (STRCASEEQ(def->mac, mac)) {
- if (matchct < maxmatches) {
- if (VIR_STRDUP(matches[matchct], def->name) < 0) {
- virObjectUnlock(obj);
- goto error;
- }
- matchct++;
- }
- }
- virObjectUnlock(obj);
- }
- return matchct;
+ if (data.error)
+ goto error;
+
+ return data.nElems;
error:
- while (--matchct >= 0)
- VIR_FREE(matches[matchct]);
+ while (--data.nElems >= 0)
+ VIR_FREE(data.elems[data.nElems]);
return -1;
}
+static virInterfaceObjPtr
+virInterfaceObjListFindByNameLocked(virInterfaceObjListPtr interfaces,
+ const char *name)
+{
+ return virObjectRef(virHashLookup(interfaces->objsName, name));
+}
+
+
virInterfaceObjPtr
virInterfaceObjListFindByName(virInterfaceObjListPtr interfaces,
const char *name)
{
- size_t i;
-
- for (i = 0; i < interfaces->count; i++) {
- virInterfaceObjPtr obj = interfaces->objs[i];
- virInterfaceDefPtr def;
-
+ virInterfaceObjPtr obj;
+ virObjectRWLockRead(interfaces);
+ obj = virInterfaceObjListFindByNameLocked(interfaces, name);
+ virObjectRWUnlock(interfaces);
+ if (obj)
virObjectLock(obj);
- def = obj->def;
- if (STREQ(def->name, name))
- return virObjectRef(obj);
- virObjectUnlock(obj);
- }
- return NULL;
+ return obj;
}
void
-virInterfaceObjListFree(virInterfaceObjListPtr interfaces)
+virInterfaceObjListDispose(void *obj)
+{
+ virInterfaceObjListPtr interfaces = obj;
+
+ virHashFree(interfaces->objsName);
+}
+
+
+struct _virInterfaceObjListCloneData {
+ bool error;
+ virInterfaceObjListPtr dest;
+};
+
+static int
+virInterfaceObjListCloneCb(void *payload,
+ const void *name ATTRIBUTE_UNUSED,
+ void *opaque)
{
- size_t i;
+ virInterfaceObjPtr srcObj = payload;
+ struct _virInterfaceObjListCloneData *data = opaque;
+ char *xml = NULL;
+ virInterfaceDefPtr backup = NULL;
+ virInterfaceObjPtr obj;
+
+ if (data->error)
+ return 0;
+
+ virObjectLock(srcObj);
+
+ if (!(xml = virInterfaceDefFormat(srcObj->def)))
+ goto error;
+
+ if (!(backup = virInterfaceDefParseString(xml)))
+ goto error;
+ VIR_FREE(xml);
- for (i = 0; i < interfaces->count; i++)
- virObjectUnref(interfaces->objs[i]);
- VIR_FREE(interfaces->objs);
- VIR_FREE(interfaces);
+ if (!(obj = virInterfaceObjListAssignDef(data->dest, backup)))
+ goto error;
+ virInterfaceObjEndAPI(&obj);
+
+ virObjectUnlock(srcObj);
+ return 0;
+
+ error:
+ data->error = true;
+ VIR_FREE(xml);
+ virInterfaceDefFree(backup);
+ virObjectUnlock(srcObj);
+ return 0;
}
virInterfaceObjListPtr
virInterfaceObjListClone(virInterfaceObjListPtr interfaces)
{
- size_t i;
- unsigned int cnt;
- virInterfaceObjListPtr dest;
+ struct _virInterfaceObjListCloneData data = { .error = false,
+ .dest = NULL };
if (!interfaces)
return NULL;
- if (!(dest = virInterfaceObjListNew()))
+ if (!(data.dest = virInterfaceObjListNew()))
return NULL;
- cnt = interfaces->count;
- for (i = 0; i < cnt; i++) {
- virInterfaceObjPtr srcobj = interfaces->objs[i];
- virInterfaceDefPtr backup;
- virInterfaceObjPtr obj;
- char *xml = virInterfaceDefFormat(srcobj->def);
+ virObjectRWLockRead(interfaces);
+ virHashForEach(interfaces->objsName, virInterfaceObjListCloneCb, &data);
+ virObjectRWUnlock(interfaces);
- if (!xml)
- goto error;
+ if (data.error)
+ goto error;
- if (!(backup = virInterfaceDefParseString(xml))) {
- VIR_FREE(xml);
- goto error;
- }
-
- VIR_FREE(xml);
- if (!(obj = virInterfaceObjListAssignDef(dest, backup)))
- goto error;
- virInterfaceObjEndAPI(&obj);
- }
-
- return dest;
+ return data.dest;
error:
- virInterfaceObjListFree(dest);
+ virObjectUnref(data.dest);
return NULL;
}
@@ -253,9 +335,11 @@ virInterfaceObjListAssignDef(virInterfaceObjListPtr interfaces,
{
virInterfaceObjPtr obj;
- if ((obj = virInterfaceObjListFindByName(interfaces, def->name))) {
+ virObjectRWLockWrite(interfaces);
+ if ((obj = virInterfaceObjListFindByNameLocked(interfaces, def->name))) {
virInterfaceDefFree(obj->def);
obj->def = def;
+ virObjectRWUnlock(interfaces);
return obj;
}
@@ -263,13 +347,19 @@ virInterfaceObjListAssignDef(virInterfaceObjListPtr interfaces,
if (!(obj = virInterfaceObjNew()))
return NULL;
- if (VIR_APPEND_ELEMENT_COPY(interfaces->objs,
- interfaces->count, obj) < 0) {
- virInterfaceObjEndAPI(&obj);
- return NULL;
- }
+ if (virHashAddEntry(interfaces->objsName, def->name, obj) < 0)
+ goto error;
+ virObjectRef(obj);
+
obj->def = def;
- return virObjectRef(obj);
+ virObjectRWUnlock(interfaces);
+
+ return obj;
+
+ error:
+ virInterfaceObjEndAPI(&obj);
+ virObjectRWUnlock(interfaces);
+ return NULL;
}
@@ -277,20 +367,48 @@ void
virInterfaceObjListRemove(virInterfaceObjListPtr interfaces,
virInterfaceObjPtr obj)
{
- size_t i;
-
+ virObjectRef(obj);
+ virObjectUnlock(obj);
+ virObjectRWLockWrite(interfaces);
+ virObjectLock(obj);
+ virHashRemoveEntry(interfaces->objsName, obj->def->name);
virObjectUnlock(obj);
- for (i = 0; i < interfaces->count; i++) {
- virObjectLock(interfaces->objs[i]);
- if (interfaces->objs[i] == obj) {
- virObjectUnlock(interfaces->objs[i]);
- virObjectUnref(interfaces->objs[i]);
-
- VIR_DELETE_ELEMENT(interfaces->objs, i, interfaces->count);
- break;
+ virObjectUnref(obj);
+ virObjectRWUnlock(interfaces);
+}
+
+
+static int
+virInterfaceObjListForEachCb(void *payload,
+ const void *name ATTRIBUTE_UNUSED,
+ void *opaque)
+{
+ virInterfaceObjPtr obj = payload;
+ struct _virInterfaceObjForEachData *data = opaque;
+
+ if (data->error)
+ return 0;
+
+ if (data->maxElems >= 0 && data->nElems == data->maxElems)
+ return 0;
+
+ virObjectLock(obj);
+
+ if (data->wantActive != virInterfaceObjIsActive(obj))
+ goto cleanup;
+
+ if (data->elems) {
+ if (VIR_STRDUP(data->elems[data->nElems], obj->def->name) < 0) {
+ data->error = true;
+ goto cleanup;
}
- virObjectUnlock(interfaces->objs[i]);
}
+
+ data->nElems++;
+
+ cleanup:
+ virObjectUnlock(obj);
+ return 0;
}
@@ -298,18 +416,17 @@ int
virInterfaceObjListNumOfInterfaces(virInterfaceObjListPtr interfaces,
bool wantActive)
{
- size_t i;
- int ninterfaces = 0;
+ struct _virInterfaceObjForEachData data = { .wantActive = wantActive,
+ .error = false,
+ .nElems = 0,
+ .maxElems = -1,
+ .elems = NULL };
- for (i = 0; (i < interfaces->count); i++) {
- virInterfaceObjPtr obj = interfaces->objs[i];
- virObjectLock(obj);
- if (wantActive == virInterfaceObjIsActive(obj))
- ninterfaces++;
- virObjectUnlock(obj);
- }
+ virObjectRWLockRead(interfaces);
+ virHashForEach(interfaces->objsName, virInterfaceObjListForEachCb, &data);
+ virObjectRWUnlock(interfaces);
- return ninterfaces;
+ return data.nElems;
}
@@ -319,30 +436,24 @@ virInterfaceObjListGetNames(virInterfaceObjListPtr interfaces,
char **const names,
int maxnames)
{
- int nnames = 0;
- size_t i;
+ struct _virInterfaceObjForEachData data = { .wantActive = wantActive,
+ .error = false,
+ .nElems = 0,
+ .maxElems = maxnames,
+ .elems = names };
- for (i = 0; i < interfaces->count && nnames < maxnames; i++) {
- virInterfaceObjPtr obj = interfaces->objs[i];
- virInterfaceDefPtr def;
+ virObjectRWLockRead(interfaces);
+ virHashForEach(interfaces->objsName, virInterfaceObjListForEachCb, &data);
+ virObjectRWUnlock(interfaces);
- virObjectLock(obj);
- def = obj->def;
- if (wantActive == virInterfaceObjIsActive(obj)) {
- if (VIR_STRDUP(names[nnames], def->name) < 0) {
- virObjectUnlock(obj);
- goto failure;
- }
- nnames++;
- }
- virObjectUnlock(obj);
- }
+ if (data.error)
+ goto error;
- return nnames;
+ return data.nElems;
- failure:
- while (--nnames >= 0)
- VIR_FREE(names[nnames]);
+ error:
+ while (--data.nElems >= 0)
+ VIR_FREE(data.elems[data.nElems]);
return -1;
}
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 26c5ddb405..9133199895 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -932,7 +932,6 @@ virInterfaceObjListAssignDef;
virInterfaceObjListClone;
virInterfaceObjListFindByMACString;
virInterfaceObjListFindByName;
-virInterfaceObjListFree;
virInterfaceObjListGetNames;
virInterfaceObjListNew;
virInterfaceObjListNumOfInterfaces;
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 1c48347994..14bba7494c 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -154,7 +154,7 @@ testDriverFree(testDriverPtr driver)
virObjectUnref(driver->domains);
virNodeDeviceObjListFree(driver->devs);
virObjectUnref(driver->networks);
- virInterfaceObjListFree(driver->ifaces);
+ virObjectUnref(driver->ifaces);
virStoragePoolObjListFree(&driver->pools);
virObjectUnref(driver->eventState);
virMutexUnlock(&driver->lock);
@@ -3880,7 +3880,7 @@ testInterfaceChangeCommit(virConnectPtr conn,
goto cleanup;
}
- virInterfaceObjListFree(privconn->backupIfaces);
+ virObjectUnref(privconn->backupIfaces);
privconn->transaction_running = false;
ret = 0;
@@ -3910,7 +3910,7 @@ testInterfaceChangeRollback(virConnectPtr conn,
goto cleanup;
}
- virInterfaceObjListFree(privconn->ifaces);
+ virObjectUnref(privconn->ifaces);
privconn->ifaces = privconn->backupIfaces;
privconn->backupIfaces = NULL;
--
2.13.6
7 years, 1 month
[libvirt] [PATCH] interfaces: Convert virInterfaceObjList to virObjectRWLockable
by John Ferlan
Rather than a forward linked list, let's use the ObjectRWLockable object
in order to manage the data.
Requires numerous changes from List to Object management similar to
many other drivers/vir*obj.c modules
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
For some reason I thought I had already done this, but guess I hadn't,
so figured I may as well. Uses the RWLockable too.
Passed the avocado test suite too.
src/conf/virinterfaceobj.c | 341 ++++++++++++++++++++++++++++++---------------
src/libvirt_private.syms | 1 -
src/test/test_driver.c | 6 +-
3 files changed, 229 insertions(+), 119 deletions(-)
diff --git a/src/conf/virinterfaceobj.c b/src/conf/virinterfaceobj.c
index e993b929d7..4bd371bb1e 100644
--- a/src/conf/virinterfaceobj.c
+++ b/src/conf/virinterfaceobj.c
@@ -25,6 +25,7 @@
#include "viralloc.h"
#include "virerror.h"
#include "virinterfaceobj.h"
+#include "virhash.h"
#include "virlog.h"
#include "virstring.h"
@@ -40,14 +41,19 @@ struct _virInterfaceObj {
};
struct _virInterfaceObjList {
- size_t count;
- virInterfaceObjPtr *objs;
+ virObjectRWLockable parent;
+
+ /* name string -> virInterfaceObj mapping
+ * for O(1), lockless lookup-by-name */
+ virHashTable *objsName;
};
/* virInterfaceObj manipulation */
static virClassPtr virInterfaceObjClass;
+static virClassPtr virInterfaceObjListClass;
static void virInterfaceObjDispose(void *obj);
+static void virInterfaceObjListDispose(void *obj);
static int
virInterfaceObjOnceInit(void)
@@ -58,6 +64,12 @@ virInterfaceObjOnceInit(void)
virInterfaceObjDispose)))
return -1;
+ if (!(virInterfaceObjListClass = virClassNew(virClassForObjectRWLockable(),
+ "virInterfaceObjList",
+ sizeof(virInterfaceObjList),
+ virInterfaceObjListDispose)))
+ return -1;
+
return 0;
}
@@ -130,119 +142,189 @@ virInterfaceObjListNew(void)
{
virInterfaceObjListPtr interfaces;
- if (VIR_ALLOC(interfaces) < 0)
+ if (virInterfaceObjInitialize() < 0)
return NULL;
+
+ if (!(interfaces = virObjectRWLockableNew(virInterfaceObjListClass)))
+ return NULL;
+
+ if (!(interfaces->objsName = virHashCreate(10, virObjectFreeHashData))) {
+ virObjectUnref(interfaces);
+ return NULL;
+ }
+
return interfaces;
}
+struct _virInterfaceObjForEachData {
+ bool wantActive;
+ const char *matchStr;
+ bool error;
+ int nElems;
+ int maxElems;
+ char **const elems;
+};
+
+static int
+virInterfaceObjListFindByMACStringCb(void *payload,
+ const void *name ATTRIBUTE_UNUSED,
+ void *opaque)
+{
+ virInterfaceObjPtr obj = payload;
+ struct _virInterfaceObjForEachData *data = opaque;
+
+ if (data->error)
+ return 0;
+
+ if (data->nElems == data->maxElems)
+ return 0;
+
+ virObjectLock(obj);
+
+ if (STRCASEEQ(obj->def->mac, data->matchStr)) {
+ if (VIR_STRDUP(data->elems[data->nElems], data->matchStr) < 0) {
+ data->error = true;
+ goto cleanup;
+ }
+ data->nElems++;
+ }
+
+ cleanup:
+ virObjectUnlock(obj);
+ return 0;
+}
+
+
int
virInterfaceObjListFindByMACString(virInterfaceObjListPtr interfaces,
const char *mac,
char **const matches,
int maxmatches)
{
- size_t i;
- int matchct = 0;
+ struct _virInterfaceObjForEachData data = { .matchStr = mac,
+ .error = false,
+ .nElems = 0,
+ .maxElems = maxmatches,
+ .elems = matches };
- for (i = 0; i < interfaces->count; i++) {
- virInterfaceObjPtr obj = interfaces->objs[i];
- virInterfaceDefPtr def;
+ virObjectRWLockRead(interfaces);
+ virHashForEach(interfaces->objsName, virInterfaceObjListFindByMACStringCb,
+ &data);
+ virObjectRWUnlock(interfaces);
- virObjectLock(obj);
- def = obj->def;
- if (STRCASEEQ(def->mac, mac)) {
- if (matchct < maxmatches) {
- if (VIR_STRDUP(matches[matchct], def->name) < 0) {
- virObjectUnlock(obj);
- goto error;
- }
- matchct++;
- }
- }
- virObjectUnlock(obj);
- }
- return matchct;
+ if (data.error)
+ goto error;
+
+ return data.nElems;
error:
- while (--matchct >= 0)
- VIR_FREE(matches[matchct]);
+ while (--data.nElems >= 0)
+ VIR_FREE(data.elems[data.nElems]);
return -1;
}
+static virInterfaceObjPtr
+virInterfaceObjListFindByNameLocked(virInterfaceObjListPtr interfaces,
+ const char *name)
+{
+ return virObjectRef(virHashLookup(interfaces->objsName, name));
+}
+
+
virInterfaceObjPtr
virInterfaceObjListFindByName(virInterfaceObjListPtr interfaces,
const char *name)
{
- size_t i;
-
- for (i = 0; i < interfaces->count; i++) {
- virInterfaceObjPtr obj = interfaces->objs[i];
- virInterfaceDefPtr def;
-
+ virInterfaceObjPtr obj;
+ virObjectRWLockRead(interfaces);
+ obj = virInterfaceObjListFindByNameLocked(interfaces, name);
+ virObjectRWUnlock(interfaces);
+ if (obj)
virObjectLock(obj);
- def = obj->def;
- if (STREQ(def->name, name))
- return virObjectRef(obj);
- virObjectUnlock(obj);
- }
- return NULL;
+ return obj;
}
void
-virInterfaceObjListFree(virInterfaceObjListPtr interfaces)
+virInterfaceObjListDispose(void *obj)
+{
+ virInterfaceObjListPtr interfaces = obj;
+
+ virHashFree(interfaces->objsName);
+}
+
+
+struct _virInterfaceObjListCloneData {
+ bool error;
+ virInterfaceObjListPtr dest;
+};
+
+static int
+virInterfaceObjListCloneCb(void *payload,
+ const void *name ATTRIBUTE_UNUSED,
+ void *opaque)
{
- size_t i;
+ virInterfaceObjPtr srcObj = payload;
+ struct _virInterfaceObjListCloneData *data = opaque;
+ char *xml = NULL;
+ virInterfaceDefPtr backup = NULL;
+ virInterfaceObjPtr obj;
+
+ if (data->error)
+ return 0;
+
+ virObjectLock(srcObj);
+
+ if (!(xml = virInterfaceDefFormat(srcObj->def)))
+ goto error;
+
+ if (!(backup = virInterfaceDefParseString(xml)))
+ goto error;
+ VIR_FREE(xml);
- for (i = 0; i < interfaces->count; i++)
- virObjectUnref(interfaces->objs[i]);
- VIR_FREE(interfaces->objs);
- VIR_FREE(interfaces);
+ if (!(obj = virInterfaceObjListAssignDef(data->dest, backup)))
+ goto error;
+ virInterfaceObjEndAPI(&obj);
+
+ virObjectUnlock(srcObj);
+ return 0;
+
+ error:
+ data->error = true;
+ VIR_FREE(xml);
+ virInterfaceDefFree(backup);
+ virObjectUnlock(srcObj);
+ return 0;
}
virInterfaceObjListPtr
virInterfaceObjListClone(virInterfaceObjListPtr interfaces)
{
- size_t i;
- unsigned int cnt;
- virInterfaceObjListPtr dest;
+ struct _virInterfaceObjListCloneData data = { .error = false,
+ .dest = NULL };
if (!interfaces)
return NULL;
- if (!(dest = virInterfaceObjListNew()))
+ if (!(data.dest = virInterfaceObjListNew()))
return NULL;
- cnt = interfaces->count;
- for (i = 0; i < cnt; i++) {
- virInterfaceObjPtr srcobj = interfaces->objs[i];
- virInterfaceDefPtr backup;
- virInterfaceObjPtr obj;
- char *xml = virInterfaceDefFormat(srcobj->def);
+ virObjectRWLockRead(interfaces);
+ virHashForEach(interfaces->objsName, virInterfaceObjListCloneCb, &data);
+ virObjectRWUnlock(interfaces);
- if (!xml)
- goto error;
+ if (data.error)
+ goto error;
- if (!(backup = virInterfaceDefParseString(xml))) {
- VIR_FREE(xml);
- goto error;
- }
-
- VIR_FREE(xml);
- if (!(obj = virInterfaceObjListAssignDef(dest, backup)))
- goto error;
- virInterfaceObjEndAPI(&obj);
- }
-
- return dest;
+ return data.dest;
error:
- virInterfaceObjListFree(dest);
+ virObjectUnref(data.dest);
return NULL;
}
@@ -253,9 +335,11 @@ virInterfaceObjListAssignDef(virInterfaceObjListPtr interfaces,
{
virInterfaceObjPtr obj;
- if ((obj = virInterfaceObjListFindByName(interfaces, def->name))) {
+ virObjectRWLockWrite(interfaces);
+ if ((obj = virInterfaceObjListFindByNameLocked(interfaces, def->name))) {
virInterfaceDefFree(obj->def);
obj->def = def;
+ virObjectRWUnlock(interfaces);
return obj;
}
@@ -263,13 +347,19 @@ virInterfaceObjListAssignDef(virInterfaceObjListPtr interfaces,
if (!(obj = virInterfaceObjNew()))
return NULL;
- if (VIR_APPEND_ELEMENT_COPY(interfaces->objs,
- interfaces->count, obj) < 0) {
- virInterfaceObjEndAPI(&obj);
- return NULL;
- }
+ if (virHashAddEntry(interfaces->objsName, def->name, obj) < 0)
+ goto error;
+ virObjectRef(obj);
+
obj->def = def;
- return virObjectRef(obj);
+ virObjectRWUnlock(interfaces);
+
+ return obj;
+
+ error:
+ virInterfaceObjEndAPI(&obj);
+ virObjectRWUnlock(interfaces);
+ return NULL;
}
@@ -277,20 +367,48 @@ void
virInterfaceObjListRemove(virInterfaceObjListPtr interfaces,
virInterfaceObjPtr obj)
{
- size_t i;
-
+ virObjectRef(obj);
+ virObjectUnlock(obj);
+ virObjectRWLockWrite(interfaces);
+ virObjectLock(obj);
+ virHashRemoveEntry(interfaces->objsName, obj->def->name);
virObjectUnlock(obj);
- for (i = 0; i < interfaces->count; i++) {
- virObjectLock(interfaces->objs[i]);
- if (interfaces->objs[i] == obj) {
- virObjectUnlock(interfaces->objs[i]);
- virObjectUnref(interfaces->objs[i]);
-
- VIR_DELETE_ELEMENT(interfaces->objs, i, interfaces->count);
- break;
+ virObjectUnref(obj);
+ virObjectRWUnlock(interfaces);
+}
+
+
+static int
+virInterfaceObjListForEachCb(void *payload,
+ const void *name ATTRIBUTE_UNUSED,
+ void *opaque)
+{
+ virInterfaceObjPtr obj = payload;
+ struct _virInterfaceObjForEachData *data = opaque;
+
+ if (data->error)
+ return 0;
+
+ if (data->maxElems >= 0 && data->nElems == data->maxElems)
+ return 0;
+
+ virObjectLock(obj);
+
+ if (data->wantActive != virInterfaceObjIsActive(obj))
+ goto cleanup;
+
+ if (data->elems) {
+ if (VIR_STRDUP(data->elems[data->nElems], obj->def->name) < 0) {
+ data->error = true;
+ goto cleanup;
}
- virObjectUnlock(interfaces->objs[i]);
}
+
+ data->nElems++;
+
+ cleanup:
+ virObjectUnlock(obj);
+ return 0;
}
@@ -298,18 +416,17 @@ int
virInterfaceObjListNumOfInterfaces(virInterfaceObjListPtr interfaces,
bool wantActive)
{
- size_t i;
- int ninterfaces = 0;
+ struct _virInterfaceObjForEachData data = { .wantActive = wantActive,
+ .error = false,
+ .nElems = 0,
+ .maxElems = -1,
+ .elems = NULL };
- for (i = 0; (i < interfaces->count); i++) {
- virInterfaceObjPtr obj = interfaces->objs[i];
- virObjectLock(obj);
- if (wantActive == virInterfaceObjIsActive(obj))
- ninterfaces++;
- virObjectUnlock(obj);
- }
+ virObjectRWLockRead(interfaces);
+ virHashForEach(interfaces->objsName, virInterfaceObjListForEachCb, &data);
+ virObjectRWUnlock(interfaces);
- return ninterfaces;
+ return data.nElems;
}
@@ -319,30 +436,24 @@ virInterfaceObjListGetNames(virInterfaceObjListPtr interfaces,
char **const names,
int maxnames)
{
- int nnames = 0;
- size_t i;
+ struct _virInterfaceObjForEachData data = { .wantActive = wantActive,
+ .error = false,
+ .nElems = 0,
+ .maxElems = maxnames,
+ .elems = names };
- for (i = 0; i < interfaces->count && nnames < maxnames; i++) {
- virInterfaceObjPtr obj = interfaces->objs[i];
- virInterfaceDefPtr def;
+ virObjectRWLockRead(interfaces);
+ virHashForEach(interfaces->objsName, virInterfaceObjListForEachCb, &data);
+ virObjectRWUnlock(interfaces);
- virObjectLock(obj);
- def = obj->def;
- if (wantActive == virInterfaceObjIsActive(obj)) {
- if (VIR_STRDUP(names[nnames], def->name) < 0) {
- virObjectUnlock(obj);
- goto failure;
- }
- nnames++;
- }
- virObjectUnlock(obj);
- }
+ if (data.error)
+ goto error;
- return nnames;
+ return data.nElems;
- failure:
- while (--nnames >= 0)
- VIR_FREE(names[nnames]);
+ error:
+ while (--data.nElems >= 0)
+ VIR_FREE(data.elems[data.nElems]);
return -1;
}
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 9243c55910..ec2edd27e8 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -932,7 +932,6 @@ virInterfaceObjListAssignDef;
virInterfaceObjListClone;
virInterfaceObjListFindByMACString;
virInterfaceObjListFindByName;
-virInterfaceObjListFree;
virInterfaceObjListGetNames;
virInterfaceObjListNew;
virInterfaceObjListNumOfInterfaces;
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 1c48347994..14bba7494c 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -154,7 +154,7 @@ testDriverFree(testDriverPtr driver)
virObjectUnref(driver->domains);
virNodeDeviceObjListFree(driver->devs);
virObjectUnref(driver->networks);
- virInterfaceObjListFree(driver->ifaces);
+ virObjectUnref(driver->ifaces);
virStoragePoolObjListFree(&driver->pools);
virObjectUnref(driver->eventState);
virMutexUnlock(&driver->lock);
@@ -3880,7 +3880,7 @@ testInterfaceChangeCommit(virConnectPtr conn,
goto cleanup;
}
- virInterfaceObjListFree(privconn->backupIfaces);
+ virObjectUnref(privconn->backupIfaces);
privconn->transaction_running = false;
ret = 0;
@@ -3910,7 +3910,7 @@ testInterfaceChangeRollback(virConnectPtr conn,
goto cleanup;
}
- virInterfaceObjListFree(privconn->ifaces);
+ virObjectUnref(privconn->ifaces);
privconn->ifaces = privconn->backupIfaces;
privconn->backupIfaces = NULL;
--
2.13.6
7 years, 1 month
[libvirt] [PATCH 0/2] Tie up some loose ends w/ network common object
by John Ferlan
Patches speak for themselves. Use RWObjectLockable and a common callback
helper to peruse the lists for NumOfNetworks, GetNames, and Export.
John Ferlan (2):
network: Convert virNetworkObjList to use RWObjectLockable
network: Introduce virNetworkObjListForEachCb
src/conf/virnetworkobj.c | 199 ++++++++++++++++++++---------------------------
1 file changed, 85 insertions(+), 114 deletions(-)
--
2.13.6
7 years, 1 month