[libvirt] [PATCH 0/8] storage: separate storage volume creation from building
by Peter Krempa
This series splits the internal storage volume metadata creation from actual
volume building and adds support for deletion of guster volumes.
Peter Krempa (8):
storage: fs: Fix comment for virStorageBackendFileSystemDelete
storage: Support deletion of volumes on gluster pools
storage: lvm: Avoid forward decl of virStorageBackendLogicalDeleteVol
storage: lvm: Separate creating of the volume from building
storage: disk: Separate creating of the volume from building
storage: RBD: Separate creating of the volume from building
storage: Sheepdog: Separate creating of the volume from building
storage: Improve error message when a storage backend is missing
src/storage/storage_backend.c | 3 +-
src/storage/storage_backend_disk.c | 44 ++++++++----
src/storage/storage_backend_fs.c | 6 +-
src/storage/storage_backend_gluster.c | 64 +++++++++++++++++
src/storage/storage_backend_logical.c | 127 ++++++++++++++++++---------------
src/storage/storage_backend_rbd.c | 41 +++++++++--
src/storage/storage_backend_sheepdog.c | 29 +++++++-
7 files changed, 226 insertions(+), 88 deletions(-)
--
1.8.5.2
10 years, 9 months
[libvirt] [PATCH 00/11] libxl: add job support
by Jim Fehlig
This patch series adds job support to the libxl driver, using techiques from
the qemu driver. One benefit is no longer blocking get operations during
long running modify operations. E.g. with these patches 'vish dominfo dom'
will work while 'virsh save dom ...' is in progress.
The first patch adds the job support machinery, followed by several patches
that make use of it. I initially had all but the first in a single
"use-job-support" patch, but hope breaking it out eases review.
Jim Fehlig (11):
libxl: Add job support to libxl driver
libxl: use job functions in libxlVmStart
libxl: use job functions in libxlDomainSetMemoryFlags
libxl: use job functions in libxlDomain{Suspend,Resume}
libxl: use job functions in libxlDomainDestroyFlags
libxl: use job functions in domain save operations
libxl: use job functions in libxlDomainCoreDump
libxl: use job functions in vcpu set and pin functions
libxl: use job functions in device attach and detach functions
libxl: use job functions in libxlDomainSetAutostart
libxl: use job functions in libxlDomainSetSchedulerParametersFlags
src/libxl/libxl_domain.c | 128 ++++++++++++++++++
src/libxl/libxl_domain.h | 37 +++++
src/libxl/libxl_driver.c | 346 +++++++++++++++++++++++++++++++----------------
3 files changed, 395 insertions(+), 116 deletions(-)
--
1.8.1.4
10 years, 9 months
[libvirt] [python PATCH] examples: demonstrate network events
by Eric Blake
Commit 6ea5be0 added network event callback support, so we might
as well demonstrate that it works by updating our example.
* examples/event-test.py: Add network event, fix typos.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
examples/event-test.py | 70 ++++++++++++++++++++++++++++++++++++--------------
1 file changed, 51 insertions(+), 19 deletions(-)
diff --git a/examples/event-test.py b/examples/event-test.py
index 1402c04..101dbc0 100644
--- a/examples/event-test.py
+++ b/examples/event-test.py
@@ -2,6 +2,6 @@
#
#
#
-#################################################################################
-# Start off by implementing a general purpose event loop for anyones use
-#################################################################################
+##############################################################################
+# Start off by implementing a general purpose event loop for anyone's use
+##############################################################################
import sys
import getopt
@@ -158,7 +158,7 @@ class virEventLoopPure:
# This is the heart of the event loop, performing one single
# iteration. It asks when the next timeout is due, and then
- # calcuates the maximum amount of time it is able to sleep
+ # calculates the maximum amount of time it is able to sleep
# for in poll() pending file handle events.
#
# It then goes into the poll() sleep.
@@ -167,9 +167,9 @@ class virEventLoopPure:
# events which need to be dispatched to registered callbacks
# It may also be time to fire some periodic timers.
#
- # Due to the coarse granularity of schedular timeslices, if
+ # Due to the coarse granularity of scheduler timeslices, if
# we ask for a sleep of 500ms in order to satisfy a timer, we
- # may return up to 1 schedular timeslice early. So even though
+ # may return up to 1 scheduler timeslice early. So even though
# our sleep timeout was reached, the registered timer may not
# technically be at its expiry point. This leads to us going
# back around the loop with a crazy 5ms sleep. So when checking
@@ -227,7 +227,7 @@ class virEventLoopPure:
self.runningPoll = False
- # Actually the event loop forever
+ # Actually run the event loop forever
def run_loop(self):
self.quit = False
while not self.quit:
@@ -429,8 +429,8 @@ def virEventLoopNativeStart():
##########################################################################
# Everything that now follows is a simple demo of domain lifecycle events
##########################################################################
-def eventToString(event):
- eventStrings = ( "Defined",
+def domEventToString(event):
+ domEventStrings = ( "Defined",
"Undefined",
"Started",
"Suspended",
@@ -438,11 +438,12 @@ def eventToString(event):
"Stopped",
"Shutdown",
"PMSuspended",
- "Crashed" )
- return eventStrings[event]
+ "Crashed",
+ )
+ return domEventStrings[event]
-def detailToString(event, detail):
- eventStrings = (
+def domDetailToString(event, detail):
+ domEventStrings = (
( "Added", "Updated" ),
( "Removed", ),
( "Booted", "Migrated", "Restored", "Snapshot", "Wakeup" ),
@@ -451,19 +452,19 @@ def detailToString(event, detail):
( "Shutdown", "Destroyed", "Crashed", "Migrated", "Saved", "Failed", "Snapshot"),
( "Finished", ),
( "Memory", "Disk" ),
- ( "Panicked", )
+ ( "Panicked", ),
)
- return eventStrings[event][detail]
+ return domEventStrings[event][detail]
def myDomainEventCallback1 (conn, dom, event, detail, opaque):
print("myDomainEventCallback1 EVENT: Domain %s(%s) %s %s" % (dom.name(), dom.ID(),
- eventToString(event),
- detailToString(event, detail)))
+ domEventToString(event),
+ domDetailToString(event, detail)))
def myDomainEventCallback2 (conn, dom, event, detail, opaque):
print("myDomainEventCallback2 EVENT: Domain %s(%s) %s %s" % (dom.name(), dom.ID(),
- eventToString(event),
- detailToString(event, detail)))
+ domEventToString(event),
+ domDetailToString(event, detail)))
def myDomainEventRebootCallback(conn, dom, opaque):
print("myDomainEventRebootCallback: Domain %s(%s)" % (dom.name(), dom.ID()))
@@ -501,6 +502,35 @@ def myDomainEventDeviceRemovedCallback(conn, dom, dev, opaque):
print("myDomainEventDeviceRemovedCallback: Domain %s(%s) device removed: %s" % (
dom.name(), dom.ID(), dev))
+##########################################################################
+# Network events
+##########################################################################
+def netEventToString(event):
+ netEventStrings = ( "Defined",
+ "Undefined",
+ "Started",
+ "Stopped",
+ )
+ return netEventStrings[event]
+
+def netDetailToString(event, detail):
+ netEventStrings = (
+ ( "Added", ),
+ ( "Removed", ),
+ ( "Started", ),
+ ( "Stopped", ),
+ )
+ return netEventStrings[event][detail]
+
+def myNetworkEventLifecycleCallback(conn, net, event, detail, opaque):
+ print("myNetworkEventLifecycleCallback: Network %s %s %s" % (net.name(),
+ netEventToString(event),
+ netDetailToString(event, detail)))
+
+##########################################################################
+# Set up and run the program
+##########################################################################
+
run = True
def myConnectionCloseCallback(conn, reason, opaque):
@@ -577,6 +607,8 @@ def main():
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK, myDomainEventPMSuspendDiskCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED, myDomainEventDeviceRemovedCallback, None)
+ vc.networkEventRegisterAny(None, libvirt.VIR_NETWORK_EVENT_ID_LIFECYCLE, myNetworkEventLifecycleCallback, None)
+
vc.setKeepAlive(5, 3)
# The rest of your app would go here normally, but for sake
--
1.8.5.3
10 years, 9 months
[libvirt] Make systemd work with LXC user namespaces
by Richard Weinberger
These two patches fix the issue that control groups are unusable if
user namespaces are enabled.
We have to chown() the control group to the correct user.
As the container mounts the control group and only the controller
is allowed to chown() the mount point we need a new barrier to synchronize
them after the container has setup the control groups.
Thanks,
//richard
[PATCH 1/2] lxc: Add another barrier
[PATCH 2/2] lxc: Add virCgroupSetOwner()
10 years, 9 months
[libvirt] [PATCH] qemu: Implement a stub cpuArchDriver.baseline() handler for aarch64
by Oleg Strikov
Openstack Nova calls virConnectBaselineCPU() during initialization
of the instance to get a full list of CPU features.
This patch adds a stub to aarch64-specific code to handle
this request (no actual work is done). That's enough to have
this stub with limited functionality because qemu/kvm backend
supports only 'host-passthrough' cpu mode on aarch64.
Signed-off-by: Oleg Strikov <oleg.strikov(a)canonical.com>
---
src/cpu/cpu_aarch64.c | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/src/cpu/cpu_aarch64.c b/src/cpu/cpu_aarch64.c
index f674bff..3c3e749 100644
--- a/src/cpu/cpu_aarch64.c
+++ b/src/cpu/cpu_aarch64.c
@@ -85,6 +85,29 @@ AArch64GuestData(virCPUDefPtr host ATTRIBUTE_UNUSED,
return VIR_CPU_COMPARE_IDENTICAL;
}
+static virCPUDefPtr
+AArch64Baseline(virCPUDefPtr *cpus,
+ unsigned int ncpus ATTRIBUTE_UNUSED,
+ const char **models ATTRIBUTE_UNUSED,
+ unsigned int nmodels ATTRIBUTE_UNUSED,
+ unsigned int flags)
+{
+ virCPUDefPtr cpu = NULL;
+
+ virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES, NULL);
+
+ if (VIR_ALLOC(cpu) < 0 ||
+ VIR_STRDUP(cpu->model, cpus[0]->model) < 0) {
+ virCPUDefFree(cpu);
+ return NULL;
+ }
+
+ cpu->type = VIR_CPU_TYPE_GUEST;
+ cpu->match = VIR_CPU_MATCH_EXACT;
+
+ return cpu;
+}
+
struct cpuArchDriver cpuDriverAARCH64 = {
.name = "aarch64",
.arch = archs,
@@ -95,7 +118,7 @@ struct cpuArchDriver cpuDriverAARCH64 = {
.free = AArch64DataFree,
.nodeData = AArch64NodeData,
.guestData = AArch64GuestData,
- .baseline = NULL,
+ .baseline = AArch64Baseline,
.update = AArch64Update,
.hasFeature = NULL,
};
--
1.7.9.5
10 years, 9 months
[libvirt] CPU models and feature probing (was Re: [Qemu-devel] [PATCH qom-cpu 00/16 v10] target-i386: convert CPU) features into properties
by Eduardo Habkost
(CCing libvir-list again, as this is continuing a discussion about a
subject that interests libvirt developers, from another thread.)
On Thu, Feb 06, 2014 at 04:51:17PM +0100, Andreas Färber wrote:
> Am 06.02.2014 16:19, schrieb Igor Mammedov:
> > On Wed, 5 Feb 2014 17:52:16 +0100
> > Igor Mammedov <imammedo(a)redhat.com> wrote:
> >
> >> On Wed, 05 Feb 2014 17:14:27 +0100
> >> Andreas Färber <afaerber(a)suse.de> wrote:
> >>
> >>> Am 05.02.2014 15:40, schrieb Igor Mammedov:
> >>>> On Sun, 15 Dec 2013 23:50:47 +0100
> >>>> Andreas Färber <afaerber(a)suse.de> wrote:
> >>>>
> >>>>> Am 27.11.2013 23:28, schrieb Igor Mammedov:
> >>>>>> Igor Mammedov (16):
> >>>>>> target-i386: cleanup 'foo' feature handling'
> >>>>>> target-i386: cleanup 'foo=val' feature handling
> >>>>>
> >>>>> Thanks, I've queued these on qom-cpu-next:
> >>>>> https://github.com/afaerber/qemu-cpu/commits/qom-cpu-next
> >>>>>
> >>>>>> target-i386: cpu: convert 'level' to static property
> >>>>>> target-i386: cpu: convert 'xlevel' to static property
> >>>>>> target-i386: cpu: convert 'family' to static property
> >>>>>> target-i386: cpu: convert 'model' to static property
> >>>>>> target-i386: cpu: convert 'stepping' to static property
> >>>>>> target-i386: cpu: convert 'vendor' to static property
> >>>>>> target-i386: cpu: convert 'model-id' to static property
> >>>>>> target-i386: cpu: convert 'tsc-frequency' to static property
> >>>>>
> >>>>> But I still don't see the utility of this conversion after all the
> >>>>> discussions we've had... :(
> >>>> It seems there is movement to make DEVICE self describing for purpose
> >>>> of QAPI schema introspection, where static properties would be used
> >>>> (dynamic ones are not suitable for this purpose)
> >>>
> >>> Do you have a pointer to such a discussion? Sounds like I was not
> >>> involved and Anthony probably not either...
> >> Not at the moment, CCing people who might know more about the topic.
> >>
> >> But just thinking about creating QAPI schema for devices, it's not really
> >> possible to generate one using dynamic properties (unless one resorts to
> >> creating every supported device instance), while arrays of static properties
> >> are there for every device and simplistically speaking just need conversion
> >> to schema format.
> >
> > There is one more reason to use static properties for external user-settable
> > properties when it comes to device, i.e. to get list of properties user could
> > use command:
> > #qemu -device x86_64-cpu,?
> > x86_64-cpu.pmu=boolean
> > x86_64-cpu.hv-spinlocks=int
> > x86_64-cpu.hv-relaxed=boolean
> > x86_64-cpu.hv-vapic=boolean
> > x86_64-cpu.check=boolean
> > x86_64-cpu.enforce=boolean
> >
> > which now yields only partial properties user is interested in, above
> > mentioned conversion patches make previously not available properties
> > visible to user via typical interface, perhaps eventually we could
> > drop list_cpu() interface in favor of -device foo-cpu,? command.
>
> We already brought that up specifically for decision on a KVM call and
> Anthony's clear statement was that the expected way for management tools
> to discover properties was to instantiate the object and run qom-list on it.
As far as I remember, this was decided as the recommended way to list
the feature _default values_ (e.g. discover which features are going to
be enabled on each CPU model). Is this really the recommended way to
discover which properties can be set on device_add, too? We are not
going to have any other instrospection mechanism that won't require
objects to be created?
>
> It is a known issue, both for info qtree and -device, that they do not
> list all properties. But I don't want to repeat this discussion over and
> over again: Paolo's patches for static properties were rejected by
> Anthony, therefore I could not queue them on qom-next back then and
> therefore I had to code my properties for the X86CPU (which was not yet
> a device back then) the new QOM way, and now you're trying to override
> Anthony's decision in forcing me to accept patches that Anthony had
> vetoed against!
>
> If you or libvirt need all properties for -device, then send a patch. No
> one did for two years, so apparently no one cared.
>
> Static properties are considered a valid, convenient way to define
> properties for a device but not the sole one for a device or object.
> Using info qtree or -device as justification for implementation
> decisions is backwards and wrong since those are considered legacy.
So, let me ask again, explicitly: we are not going to ever have a
QMP-based interface that will allow all available device_add options to
be queried without instantiating an object first? This really surprises
me.
(That's not a question just for Andreas. I would like to hear from
Paolo, Anthony, and others.)
>
> And specifically for libvirt Eduardo pushed into a release properties
> that could be used to inspect CPUIDs. If that's not being used by
> libvirt, as Eduardo seems to imply now, why did we put work in that in
> the first place?
It is not being used by libvirt because the current interface is
unusable without running QEMU once for each CPU model. With the CPU
model subclasses, we will be able to make it possible to create/destroy
CPUs of different models in a single QEMU instance, and then libvirt
will be able to use it.
>
> If there's no relation between a CPU model named, e.g., "Haswell" and
> the one on an Intel Haswell chip any more, then we should give them
> artificial names like "qemu64"; I strongly believe that Haswell
> definition in code should match that of the specs/hardware and if TCG
> can't emulate something that's one thing (subtractive: no AVX) and if
> KVM wants to speed up things that's another (additive: kvmvapic,
> in-kernel IRQ/PIT). What I am arguing against is watering the meaning of
> our definitions from "this is this model" to "this is handy". In
> particular, if we use the post_initialize hook like I suggested then
> -global is still able to override it and Eduardo's properties should
> correctly report them to libvirt.
"Haswell" is named this way not only because it looks like Haswell, but
also because it has useful features you are going to find only on
Haswell, and you (probably) are not going to be able to run it on hosts
older than Haswell. That's the main real-world application of CPU
models: making sure the VMs can run on a specific subset of hosts. So,
if you choose "Haswell", you are telling the management stack "I know
this is going to run only on Haswell and newer CPUs".
That's why x2apic is being proposed as an exception: it can be enabled
on any host, because it doesn't depend on host-side support. That's why
I propose we enable it on CPU models that don't have x2apic in the real
world.
(BTW, what is the relation between this subject and static properties? I
was expecting this to be discussed in the other existing thread about
x2apic)
>
> > Taking in account Paolo's cleanup of legacy properties in static properties,
> > it might make them more suitable for moving concept to Object level.
> > (As far as I remember, Anthony objected to it due to existence of legacy
> > properties).
>
> That'll be for Anthony to answer, but static properties at Object level
> would still not expose child<> and especially not link<> properties to
> the user.
>
> Andreas
>
> --
> SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
> GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer; HRB 16746 AG Nürnberg
--
Eduardo
10 years, 9 months
[libvirt] [PATCH] Rename 'index' in virCapabilitiesGetCpusForNode
by Ján Tomko
This shadows the index function on some systems (RHEL-6.4, FreeBSD 9):
../../src/conf/capabilities.c: In function 'virCapabilitiesGetCpusForNode':
../../src/conf/capabilities.c:1005: warning: declaration of'index'
shadows a global declaration [-Wshadow]
/usr/include/strings.h:57: warning: shadowed declaration is here [-Wshadow]
---
src/conf/capabilities.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
Pushed as a build-breaker.
diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
index 78f65cb..c1c4ab8 100644
--- a/src/conf/capabilities.c
+++ b/src/conf/capabilities.c
@@ -1002,11 +1002,11 @@ virCapabilitiesGetCpusForNode(virCapsPtr caps,
{
virCapsHostNUMACellPtr cell = NULL;
size_t cpu;
- size_t index;
+ size_t i;
/* The numa node numbers can be non-contiguous. Ex: 0,1,16,17. */
- for (index = 0; index < caps->host.nnumaCell; index++) {
- if (caps->host.numaCell[index]->num == node) {
- cell = caps->host.numaCell[index];
+ for (i = 0; i < caps->host.nnumaCell; i++) {
+ if (caps->host.numaCell[i]->num == node) {
+ cell = caps->host.numaCell[i];
break;
}
}
--
1.8.3.2
10 years, 9 months
[libvirt] [PATCH python] examples: event-test: Add network event support
by Cole Robinson
Just an example of network lifecycle events
---
examples/event-test.py | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/examples/event-test.py b/examples/event-test.py
index 1402c04..fb750c7 100644
--- a/examples/event-test.py
+++ b/examples/event-test.py
@@ -500,6 +500,14 @@ def myDomainEventPMSuspendDiskCallback(conn, dom, reason, opaque):
def myDomainEventDeviceRemovedCallback(conn, dom, dev, opaque):
print("myDomainEventDeviceRemovedCallback: Domain %s(%s) device removed: %s" % (
dom.name(), dom.ID(), dev))
+def myNetworkEventLifecycleCallback(conn, net, event, detail, opaque):
+ event_to_string = {
+ 0: "Defined",
+ 1: "Undefined",
+ 2: "Started",
+ 3: "Stopped",
+ }
+ print("myNetworkEventLifecycleCallback: Network %s: %s detail=%s" % (net.name(), event_to_string.get(event, "event=%s" % event), detail))
run = True
@@ -577,6 +585,8 @@ def main():
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK, myDomainEventPMSuspendDiskCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED, myDomainEventDeviceRemovedCallback, None)
+ vc.networkEventRegisterAny(None, libvirt.VIR_NETWORK_EVENT_ID_LIFECYCLE, myNetworkEventLifecycleCallback, None)
+
vc.setKeepAlive(5, 3)
# The rest of your app would go here normally, but for sake
--
1.8.5.3
10 years, 9 months
[libvirt] [PATCH] examples: event-test: Add network event support
by Cole Robinson
Just an example of network lifecycle events
---
examples/event-test.py | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/examples/event-test.py b/examples/event-test.py
index 1402c04..fb750c7 100644
--- a/examples/event-test.py
+++ b/examples/event-test.py
@@ -500,6 +500,14 @@ def myDomainEventPMSuspendDiskCallback(conn, dom, reason, opaque):
def myDomainEventDeviceRemovedCallback(conn, dom, dev, opaque):
print("myDomainEventDeviceRemovedCallback: Domain %s(%s) device removed: %s" % (
dom.name(), dom.ID(), dev))
+def myNetworkEventLifecycleCallback(conn, net, event, detail, opaque):
+ event_to_string = {
+ 0: "Defined",
+ 1: "Undefined",
+ 2: "Started",
+ 3: "Stopped",
+ }
+ print("myNetworkEventLifecycleCallback: Network %s: %s detail=%s" % (net.name(), event_to_string.get(event, "event=%s" % event), detail))
run = True
@@ -577,6 +585,8 @@ def main():
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_PMSUSPEND_DISK, myDomainEventPMSuspendDiskCallback, None)
vc.domainEventRegisterAny(None, libvirt.VIR_DOMAIN_EVENT_ID_DEVICE_REMOVED, myDomainEventDeviceRemovedCallback, None)
+ vc.networkEventRegisterAny(None, libvirt.VIR_NETWORK_EVENT_ID_LIFECYCLE, myNetworkEventLifecycleCallback, None)
+
vc.setKeepAlive(5, 3)
# The rest of your app would go here normally, but for sake
--
1.8.5.3
10 years, 9 months
[libvirt] [PATCH v7 0/2] bhyve: add a basic driver
by Roman Bogorodskiy
Changes from v6:
- Fix typo: s/LIBIVRT_DRIVER_RESULT_BHYVE/LIBVIRT_DRIVER_RESULT_BHYVE/
- Report domain state in 'dominfo'
- Add a patch which implements ACL support
Now both 'make check' and 'make syntax-check' pass.
Changes from v5:
- Obtain version using uname(3)
- Cleanup driver global objects in StateCleanup instead
of ConnectClose
Changes from v4:
- Set acpi and apic flags based on domain definition
- Add more detailed description about -H and -P flags
of bhyve to justify theirs usage
Roman Bogorodskiy (2):
bhyve: add a basic driver
bhyve: add ACL support
configure.ac | 7 +
daemon/libvirtd.c | 9 +
include/libvirt/virterror.h | 1 +
m4/virt-driver-bhyve.m4 | 57 ++++
po/POTFILES.in | 3 +
src/Makefile.am | 31 +++
src/bhyve/bhyve_command.c | 290 +++++++++++++++++++++
src/bhyve/bhyve_command.h | 41 +++
src/bhyve/bhyve_driver.c | 620 ++++++++++++++++++++++++++++++++++++++++++++
src/bhyve/bhyve_driver.h | 28 ++
src/bhyve/bhyve_process.c | 216 +++++++++++++++
src/bhyve/bhyve_process.h | 36 +++
src/bhyve/bhyve_utils.h | 48 ++++
src/conf/domain_conf.c | 3 +-
src/conf/domain_conf.h | 1 +
src/driver.h | 1 +
src/libvirt.c | 3 +
src/util/virerror.c | 1 +
18 files changed, 1395 insertions(+), 1 deletion(-)
create mode 100644 m4/virt-driver-bhyve.m4
create mode 100644 src/bhyve/bhyve_command.c
create mode 100644 src/bhyve/bhyve_command.h
create mode 100644 src/bhyve/bhyve_driver.c
create mode 100644 src/bhyve/bhyve_driver.h
create mode 100644 src/bhyve/bhyve_process.c
create mode 100644 src/bhyve/bhyve_process.h
create mode 100644 src/bhyve/bhyve_utils.h
--
1.8.4.3
10 years, 9 months