[libvirt] [PATCH v4 0/2] libxl: implement some chuncks of the NUMA interface
by Dario Faggioli
Hi and sorry for being so late at this. :-(
This is the leftover of my NUMA series for the libxl driver. Basically, all the
patches have been checked in but the one actually building the <topology>
capability, which is patch 2/2 of this series. I think I addressed all
Daniel's comments about VIR_*ALLOC* and error handling.
Patch 1/2 is a bugfix to how the range of available NUMA nodes was being
handled in a previous patch (more in the changelog).
---
Dario Faggioli (2):
libxl: fix node ranges in libxlNodeGetCellsFreeMemory()
libxl: implement NUMA capabilities reporting
src/libxl/libxl_conf.c | 140 ++++++++++++++++++++++++++++++++++++++++++++++
src/libxl/libxl_driver.c | 14 ++---
2 files changed, 146 insertions(+), 8 deletions(-)
--
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)
11 years, 3 months
[libvirt] Xen Developers Summit 2013, CfP (24-25 October, Edinburgh)
by Dario Faggioli
== Call for Proposals ==
We are pleased to announce that the Call for Proposals (CFP) for the
first Xen Project Developer Summit is now open! The event is being held
in Edinburgh, UK from October 24-25.
All submissions need to be submitted by 11:55pm (BST) on August 30th.
The Xen Project Developer Summit will feature content for developers,
integrators and power users of the Xen Project. We are looking for
presentations related to development, such as development proposals,
updates on feature development, project updates, etc. We are also
looking for insight into best practices in deploying Xen at scale, case
studies by Xen users and other topics that large scale users of Xen care
about.
== Submit a Speaking Proposal ==
by visiting this URL:
http://events.linuxfoundation.org//events/xen-project-developer-summit/pr...
== Proposals ==
The program committee will be looking for presentations and workshops
related to working with the Xen Project. Topics related to Xen
Development include development proposals, updates on feature
development, project updates, discussions and proposals on the
architectural evolution of Xen, best practices of Xen development,
studies and benchmarks of system characteristics such as
performance/scalability/security/ease of use/power consumption, lessons
learned, interfacing with other open source projects, making Xen easier
to consume by distros, etc.
We are also interested in proposals that provide insight into best
practices in deploying Xen, case studies by Xen users and other topics
that large users and integrators of Xen care about. This includes
everything from deploying Xen or its sister projects at scale, best
practices for working with Xen, case studies by users of Xen, Xen
benchmarks, tips and tricks in securing Xen based clouds, topics related
to managing Xen based environments, open source projects that are
related to Xen and deliver benefits to Xen users, 3rd party Xen
integrations, etc. As a Xen user, a proposal that catches the developers
attention, is your chance to spark a debate that will influence what is
developed by the Xen Project.
In short, if it’s relevant to Xen development, integration and usage we
are interested in what you might have to say.
== Timeline and Deadlines ==
You can submit a proposal at any time for Xen Project Developer Summit.
Please keep in mind that the deadline is August 30, 2013.
== Presentation Types ==
Presentations should be for 25 or 50 minutes. Chose the length of your
submission based on the content that you have. Note that we have been
overwhelmed with talk proposals in the past and have thus asked speakers
to modify talks to fit into a shorter slot.
== Travel Sponsorships ==
Not sure if you can afford the airfare and lodging to attend the summit?
Please don’t let that stop you from submitting your best proposal. We
may be making a number of travel sponsorships available for speakers who
have useful information to share with the Xen Project community.
Regards,
Dario
--
<<This happens because I choose it to happen!>> (Raistlin Majere)
-----------------------------------------------------------------
Dario Faggioli, Ph.D, http://about.me/dario.faggioli
Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK)
11 years, 3 months
[libvirt] [PATCH] libxl: remove unnecessary curly braces
by Jim Fehlig
As per HACKING, remove some unneeded curly braces in the
libxl driver.
---
Noticed the unneeded braces while reviewing Chunyan's hostdev
passthrough series. Not sure if this qualifies as trivial
enough to just push, but best for a quick review anyhow to
ensure I didn't botch something.
src/libxl/libxl_conf.c | 24 ++++++++----------------
src/libxl/libxl_driver.c | 27 ++++++++++++---------------
2 files changed, 20 insertions(+), 31 deletions(-)
diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c
index 827dfdd..4362e62 100644
--- a/src/libxl/libxl_conf.c
+++ b/src/libxl/libxl_conf.c
@@ -244,12 +244,10 @@ libxlMakeCapabilitiesInternal(virArch hostarch,
}
/* Search for existing matching (model,hvm) tuple */
- for (i = 0; i < nr_guest_archs; i++) {
+ for (i = 0; i < nr_guest_archs; i++)
if ((guest_archs[i].arch == arch) &&
- guest_archs[i].hvm == hvm) {
+ guest_archs[i].hvm == hvm)
break;
- }
- }
/* Too many arch flavours - highly unlikely ! */
if (i >= ARRAY_CARDINALITY(guest_archs))
@@ -690,10 +688,9 @@ libxlMakeDiskList(virDomainDefPtr def, libxl_domain_config *d_config)
if (VIR_ALLOC_N(x_disks, ndisks) < 0)
return -1;
- for (i = 0; i < ndisks; i++) {
+ for (i = 0; i < ndisks; i++)
if (libxlMakeDisk(l_disks[i], &x_disks[i]) < 0)
goto error;
- }
d_config->disks = x_disks;
d_config->num_disks = ndisks;
@@ -760,10 +757,9 @@ libxlMakeNicList(virDomainDefPtr def, libxl_domain_config *d_config)
if (VIR_ALLOC_N(x_nics, nnics) < 0)
return -1;
- for (i = 0; i < nnics; i++) {
+ for (i = 0; i < nnics; i++)
if (libxlMakeNic(l_nics[i], &x_nics[i]))
goto error;
- }
d_config->nics = x_nics;
d_config->num_nics = nnics;
@@ -916,21 +912,17 @@ libxlBuildDomainConfig(libxlDriverPrivatePtr driver,
if (libxlMakeDomCreateInfo(driver, def, &d_config->c_info) < 0)
return -1;
- if (libxlMakeDomBuildInfo(vm, d_config) < 0) {
+ if (libxlMakeDomBuildInfo(vm, d_config) < 0)
return -1;
- }
- if (libxlMakeDiskList(def, d_config) < 0) {
+ if (libxlMakeDiskList(def, d_config) < 0)
return -1;
- }
- if (libxlMakeNicList(def, d_config) < 0) {
+ if (libxlMakeNicList(def, d_config) < 0)
return -1;
- }
- if (libxlMakeVfbList(driver, def, d_config) < 0) {
+ if (libxlMakeVfbList(driver, def, d_config) < 0)
return -1;
- }
d_config->on_reboot = def->onReboot;
d_config->on_poweroff = def->onPoweroff;
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 9dc7261..dc8b6ba 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -301,13 +301,13 @@ libxlTimeoutRegisterEventHook(void *priv,
gettimeofday(&now, NULL);
timersub(&abs_t, &now, &res);
/* Ensure timeout is not overflowed */
- if (timercmp(&res, &zero, <)) {
+ if (timercmp(&res, &zero, <))
timeout = 0;
- } else if (res.tv_sec > INT_MAX / 1000) {
+ else if (res.tv_sec > INT_MAX / 1000)
timeout = INT_MAX;
- } else {
+ else
timeout = res.tv_sec * 1000 + (res.tv_usec + 999) / 1000;
- }
+
info->id = virEventAddTimeout(timeout, libxlTimerCallback,
info, libxlEventHookInfoFree);
if (info->id < 0) {
@@ -888,10 +888,9 @@ libxlDomainSetVcpuAffinities(libxlDriverPrivatePtr driver, virDomainObjPtr vm)
cpumask = (uint8_t*) def->cputune.vcpupin[vcpu]->cpumask;
- for (i = 0; i < VIR_DOMAIN_CPUMASK_LEN; ++i) {
+ for (i = 0; i < VIR_DOMAIN_CPUMASK_LEN; ++i)
if (cpumask[i])
VIR_USE_CPU(cpumap, i);
- }
map.size = cpumaplen;
map.map = cpumap;
@@ -1006,10 +1005,10 @@ libxlVmStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
virDomainObjAssignDef(vm, def, true, NULL);
def = NULL;
- if (unlink(managed_save_path) < 0) {
+ if (unlink(managed_save_path) < 0)
VIR_WARN("Failed to remove the managed state %s",
managed_save_path);
- }
+
vm->hasManagedSave = false;
}
VIR_FREE(managed_save_path);
@@ -4171,12 +4170,12 @@ libxlNodeGetCellsFreeMemory(virConnectPtr conn,
if (lastCell >= nr_nodes)
lastCell = nr_nodes - 1;
- for (numCells = 0, n = startCell; n <= lastCell; n++) {
+ for (numCells = 0, n = startCell; n <= lastCell; n++)
if (numa_info[n].size == LIBXL_NUMAINFO_INVALID_ENTRY)
freeMems[numCells++] = 0;
else
freeMems[numCells++] = numa_info[n].free;
- }
+
ret = numCells;
cleanup:
@@ -4447,11 +4446,10 @@ libxlDomainGetSchedulerParametersFlags(virDomainPtr dom,
VIR_TYPED_PARAM_UINT, sc_info.weight) < 0)
goto cleanup;
- if (*nparams > 1) {
+ if (*nparams > 1)
if (virTypedParameterAssign(¶ms[0], VIR_DOMAIN_SCHEDULER_CAP,
VIR_TYPED_PARAM_UINT, sc_info.cap) < 0)
goto cleanup;
- }
if (*nparams > XEN_SCHED_CREDIT_NPARAM)
*nparams = XEN_SCHED_CREDIT_NPARAM;
@@ -4530,11 +4528,10 @@ libxlDomainSetSchedulerParametersFlags(virDomainPtr dom,
for (i = 0; i < nparams; ++i) {
virTypedParameterPtr param = ¶ms[i];
- if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_WEIGHT)) {
+ if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_WEIGHT))
sc_info.weight = params[i].value.ui;
- } else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_CAP)) {
+ else if (STREQ(param->field, VIR_DOMAIN_SCHEDULER_CAP))
sc_info.cap = params[i].value.ui;
- }
}
if (libxl_domain_sched_params_set(priv->ctx, dom->id, &sc_info) != 0) {
--
1.8.1.4
11 years, 3 months
[libvirt] [PATCH] examples: support crash events in event-test.py
by Giuseppe Scrivano
commit 14e7e0ae8db9843aea80245a3d9e6cf5f2ef720d adds the support for
crash events.
Solves: https://bugzilla.redhat.com/show_bug.cgi?id=994317
Signed-off-by: Giuseppe Scrivano <gscrivan(a)redhat.com>
---
examples/domain-events/events-python/event-test.py | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/examples/domain-events/events-python/event-test.py b/examples/domain-events/events-python/event-test.py
index b7c10d1..84f5259 100644
--- a/examples/domain-events/events-python/event-test.py
+++ b/examples/domain-events/events-python/event-test.py
@@ -437,7 +437,8 @@ def eventToString(event):
"Resumed",
"Stopped",
"Shutdown",
- "PMSuspended" )
+ "PMSuspended",
+ "Crashed" )
return eventStrings[event]
def detailToString(event, detail):
@@ -449,7 +450,8 @@ def detailToString(event, detail):
( "Unpaused", "Migrated", "Snapshot" ),
( "Shutdown", "Destroyed", "Crashed", "Migrated", "Saved", "Failed", "Snapshot"),
( "Finished", ),
- ( "Memory", "Disk" )
+ ( "Memory", "Disk" ),
+ ( "Panicked", )
)
return eventStrings[event][detail]
--
1.8.3.1
11 years, 3 months
[libvirt] [PATCH] virtio-rng: Remove double space in error message
by Peter Krempa
---
Pushed under the trivial rule.
src/qemu/qemu_command.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index b811e1d..8b628d6 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -5909,7 +5909,7 @@ qemuBuildRNGBackendArgs(virCommandPtr cmd,
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_RNG_RANDOM)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("this qemu doesn't support the rng-random "
- " backend"));
+ "backend"));
goto cleanup;
}
--
1.8.3.2
11 years, 3 months
[libvirt] Using magic ELF notes to export info about QEMU monitor commands
by Daniel P. Berrange
On another mailing list some folks were discussing how to determine
what list of QEMU monitor commands a particular libvirt was written
to be able to use. Rich Jones mentioned a thing they are doing
in libguestfs using magic ELF notes:
> My only suggestion is that we could put the strings into a separate
> ELF section to make them easy to pull out of the binary.
>
> One of our libguestfs contributors did this for the libguestfs daemon
> so that it's possible now to examine the daemon and find out what
> binaries it runs/requires. He did it using the following macro:
>
> #define __external_command __attribute__((__section__(".guestfsd_ext_cmds")))
> #define GUESTFSD_EXT_CMD(___ext_cmd_var, ___ext_cmd_str) static const char ___ext_cmd_var[] __external_command = #___ext_cmd_str
>
> OpenSUSE's spec file has a section to read out the commands and
> produce dependencies. It uses objcopy to read out the commands from
> the binary:
>
> objcopy -j .guestfsd_ext_cmds -O binary $RPM_BUILD_ROOT/usr/sbin/guestfsd /dev/stdout | tr '\0' '\n' | sort -u
To which I replied
> Oooh, that's an interesting approach. It will tell you too much,
> in so much that it wouldn't be possible to see that a number of
> commands are supported by libvirt, but won't be used with specific
> QEMU version. But just having an automated way to extract this
> full list would still be pretty useful info. Since, we'd be able
> to automatically detect additions between releases.
>
> So I guess we could take our current code:
>
> virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("query-block",
> NULL);
>
> and change it to
>
> QEMU_JSON_CMD(QUERY_BLOCK, "query-block");
>
> ...
> virJSONValuePtr cmd = qemuMonitorJSONMakeCommand(QEMU_JSON_CMD_QUERY_BLOCK,
> NULL);
>
> with QEMU_JSON_CMD being a macro you use in global context to
> define a string constant + the elf section.
----- End forwarded message -----
In fact it would be preferable if you could just do it inline
> virJSONValuePtr cmd = qemuMonitorJSONMakeCommand(QEMU_JSON_CMD("query-block"),
> NULL);
>
instead of having the macro call separate, but it isn't clear that you
can define ELF sections from inline code like that.
Anyway, I'm not planning to implement this, but I wanted to mention
this idea in case if motivates anyone else here to have a go at writing
this feature idea....
Regards,
Daniel;
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
11 years, 3 months
[libvirt] [PATCH] Address missed feedback from review of virt-login-shell
by Daniel P. Berrange
From: "Daniel P. Berrange" <berrange(a)redhat.com>
Address a number of code, style and docs issues identified
in review of virt-login-shell after it was merged.
Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
---
tools/Makefile.am | 1 -
tools/virt-login-shell.c | 58 ++++++++++++++++++++++++++++++----------------
tools/virt-login-shell.pod | 30 ++++++++++++++++++------
3 files changed, 61 insertions(+), 28 deletions(-)
diff --git a/tools/Makefile.am b/tools/Makefile.am
index 00c582a..d48883c 100644
--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -134,7 +134,6 @@ virt_host_validate_CFLAGS = \
$(NULL)
virt_login_shell_SOURCES = \
- virt-login-shell.conf \
virt-login-shell.c
virt_login_shell_LDFLAGS = $(COVERAGE_LDFLAGS)
diff --git a/tools/virt-login-shell.c b/tools/virt-login-shell.c
index b27e44f..1157cd0 100644
--- a/tools/virt-login-shell.c
+++ b/tools/virt-login-shell.c
@@ -41,11 +41,11 @@
#include "vircommand.h"
#define VIR_FROM_THIS VIR_FROM_NONE
-static ssize_t nfdlist = 0;
-static int *fdlist = NULL;
+static ssize_t nfdlist;
+static int *fdlist;
static const char *conf_file = SYSCONFDIR "/libvirt/virt-login-shell.conf";
-static void virLoginShellFini(virConnectPtr conn, virDomainPtr dom)
+static void virLoginShellFini(virConnectPtr conn, virDomainPtr dom)
{
size_t i;
@@ -105,7 +105,7 @@ static int virLoginShellAllowedUser(virConfPtr conf,
}
}
}
- virReportSystemError(EPERM, _("%s not listed as an allowed_users in %s"), name, conf_file);
+ virReportSystemError(EPERM, _("%s not matched against 'allowed_users' in %s"), name, conf_file);
cleanup:
VIR_FREE(gname);
return ret;
@@ -121,7 +121,7 @@ static char **virLoginShellGetShellArgv(virConfPtr conf)
if (!p)
return virStringSplit("/bin/sh -l", " ", 3);
- if (p && p->type == VIR_CONF_LIST) {
+ if (p->type == VIR_CONF_LIST) {
size_t len;
virConfValuePtr pp;
@@ -139,7 +139,6 @@ static char **virLoginShellGetShellArgv(virConfPtr conf)
if (VIR_STRDUP(shargv[i], pp->str) < 0)
goto error;
}
- shargv[len] = NULL;
}
return shargv;
error:
@@ -155,16 +154,27 @@ static char *progname;
static void
usage(void)
{
- fprintf(stdout, _("\n"
- "%s is a privileged program that allows non root users \n"
- "specified in %s to join a Linux container \n"
- "with a matching user name and launch a shell. \n"
- "\n%s [options]\n\n"
- " options:\n"
- " -h | --help this help:\n\n"), progname, conf_file, progname);
+ fprintf(stdout,
+ _("\n"
+ "Usage:\n"
+ " %s [options]\n\n"
+ "Options:\n"
+ " -h | --help Display program help:\n"
+ " -V | --version Display program version:\n"
+ "\n"
+ "libvirt login shell\n"),
+ progname);
return;
}
+/* Display version information. */
+static void
+show_version(void)
+{
+ printf("%s (%s) %s\n", progname, PACKAGE_NAME, PACKAGE_VERSION);
+}
+
+
int
main(int argc, char **argv)
{
@@ -190,6 +200,7 @@ main(int argc, char **argv)
struct option opt[] = {
{"help", no_argument, NULL, 'h'},
+ {"version", optional_argument, NULL, 'V'},
{NULL, 0, NULL, 0}
};
if (virInitialize() < 0) {
@@ -214,20 +225,25 @@ main(int argc, char **argv)
return ret;
}
- /* The only option we support is help
- */
- while ((arg = getopt_long(argc, argv, "h", opt, &longindex)) != -1) {
+ while ((arg = getopt_long(argc, argv, "hV", opt, &longindex)) != -1) {
switch (arg) {
case 'h':
usage();
exit(EXIT_SUCCESS);
- break;
+
+ case 'V':
+ show_version();
+ exit(EXIT_SUCCESS);
+
+ case '?':
+ default:
+ usage();
+ exit(EXIT_FAILURE);
}
}
if (argc > optind) {
virReportSystemError(EINVAL, _("%s takes no options"), progname);
- errno = EINVAL;
goto cleanup;
}
@@ -268,7 +284,9 @@ main(int argc, char **argv)
virErrorPtr last_error;
last_error = virGetLastError();
if (last_error->code != VIR_ERR_OPERATION_INVALID) {
- virReportSystemError(last_error->code,_("Can't create %s container: %s"), name, virGetLastErrorMessage());
+ virReportSystemError(last_error->code,
+ _("Can't create %s container: %s"),
+ name, last_error->message);
goto cleanup;
}
}
@@ -327,7 +345,7 @@ main(int argc, char **argv)
}
if (execv(shargv[0], (char *const*) shargv) < 0) {
virReportSystemError(errno, _("Unable exec shell %s"), shargv[0]);
- return -errno;
+ return EXIT_FAILURE;
}
}
return virProcessWait(ccpid, &status2);
diff --git a/tools/virt-login-shell.pod b/tools/virt-login-shell.pod
index 0cd35cf..e27d500 100644
--- a/tools/virt-login-shell.pod
+++ b/tools/virt-login-shell.pod
@@ -8,26 +8,42 @@ B<virt-login-shell>
=head1 DESCRIPTION
-The B<virt-login-shell> program is setuid shell that is used to join
-an LXC container that matches the users name. If the container is not
-running virt-login-shell will attempt to start the container.
+The B<virt-login-shell> program is a setuid shell that is used to join
+an LXC container that matches the user's name. If the container is not
+running, virt-login-shell will attempt to start the container.
virt-sandbox-shell is not allowed to be run by root. Normal users will get
-added to a container that matches their username, if it exists. And they are
+added to a container that matches their username, if it exists, and they are
configured in /etc/libvirt/virt-login-shell.conf.
The basic structure of most virt-login-shell usage is:
virt-login-shell
+=head1 OPTIONS
+
+=over
+
+=item B<-h, --help>
+
+Display command line help usage then exit.
+
+=item B<-V, --version>
+
+Display version information then exit.
+
+=back
+
=head1 CONFIG
By default, virt-login-shell will execute the /bin/sh program for the user.
-You can modify this behaviour by defining the shell variable in /etc/libvirt/virt-login-shell.conf.
+You can modify this behaviour by defining the shell variable in
+/etc/libvirt/virt-login-shell.conf.
eg. shell = [ "/bin/ksh", "--login"]
-By default no users are allowed to user virt-login-shell, if you want to allow
-certain users to use virt-login-shell, you need to modify the allowed_users variable in /etc/libvirt/virt-login-shell.conf.
+By default no users are allowed to use virt-login-shell, if you want to allow
+certain users to use virt-login-shell, you need to modify the allowed_users
+variable in /etc/libvirt/virt-login-shell.conf.
eg. allowed_users = [ "tom", "dick", "harry" ]
--
1.8.3.1
11 years, 3 months
[libvirt] [PATCH 0/5] Introduce API to query IP addresses for given domain
by nehaljwani
This feature has been requested for a very long time. Since qemu guest
agent gives us reliable results, now the wait is over.
The RFC was first proposed by Michal Privoznik:
http://www.mail-archive.com/libvir-list@redhat.com/msg51857.html
A patch was submitted, using structs:
http://www.mail-archive.com/libvir-list@redhat.com/msg57141.html
Another patch was submitted, using XML:
http://www.mail-archive.com/libvir-list@redhat.com/msg57829.html
Neither of the patches were accepted, probably due to lack of extensibility
and usability. Hence, we thought of using virTypedParameters for reporting
list of interfaces along with their MAC address and IP addresses. The RFC
can be found here:
http://www.mail-archive.com/libvir-list@redhat.com/msg79793.html
The idea of extensibility was rejected and rendered out of scope of
libvirt. Hence, we were back to structs.
This API is called virDomainInterfacesAddresses which returns a dynamically
allocated array of virDomainInterface struct. The great disadvantage is
once this gets released, it's written in stone and we cannot change
or add an item into it.
The API supports two methods:
* Return information (list of all associated interfaces with MAC address
and IP addresses) of all of the domain interfaces by default (if
no interface name is provided)
* Return information for the specified interface (if an interface name
is provided)
The API queries qemu guest agent to obtain ip addresses and MAC address
of each interface the given domain is associated with. In the future,
support for more flags will be added to support for DHCP and snooping methods
nehaljwani (5):
domifaddr: Implement the public API
domifaddr: Implement the remote protocol
domifaddr: Implement the API for qemu
domifaddr: Add virsh support
domifaddr: Expose python binding
daemon/remote.c | 123 ++++++++++++++++++++++++++++++++
examples/python/Makefile.am | 2 +-
examples/python/README | 1 +
examples/python/domipaddrs.py | 50 ++++++++++++++
include/libvirt/libvirt.h.in | 32 +++++++++
python/generator.py | 1 +
python/libvirt-override-api.xml | 8 ++-
python/libvirt-override.c | 117 +++++++++++++++++++++++++++++++
src/driver.h | 7 ++
src/libvirt.c | 99 ++++++++++++++++++++++++++
src/libvirt_public.syms | 5 ++
src/qemu/qemu_agent.c | 150 ++++++++++++++++++++++++++++++++++++++++
src/qemu/qemu_agent.h | 4 ++
src/qemu/qemu_driver.c | 57 +++++++++++++++
src/remote/remote_driver.c | 93 +++++++++++++++++++++++++
src/remote/remote_protocol.x | 32 ++++++++-
src/remote_protocol-structs | 24 +++++++
tools/virsh-domain-monitor.c | 103 +++++++++++++++++++++++++++
tools/virsh.pod | 10 +++
19 files changed, 914 insertions(+), 4 deletions(-)
create mode 100755 examples/python/domipaddrs.py
--
1.7.11.7
11 years, 3 months