[libvirt] [PATCH] Add stubs for virDBusCreateReply{,V}
by Ján Tomko
Fix the build without dbus.
---
Pushed as a build breaker fix.
src/util/virdbus.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/src/util/virdbus.c b/src/util/virdbus.c
index e7b5a39..cacd604 100644
--- a/src/util/virdbus.c
+++ b/src/util/virdbus.c
@@ -1672,6 +1672,23 @@ int virDBusCreateMethodV(DBusMessage **call ATTRIBUTE_UNUSED,
return -1;
}
+int virDBusCreateReplyV(DBusMessage **reply ATTRIBUTE_UNUSED,
+ const char *types ATTRIBUTE_UNUSED,
+ va_list args ATTRIBUTE_UNUSED)
+{
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("DBus support not compiled into this binary"));
+ return -1;
+}
+
+int virDBusCreateReply(DBusMessage **reply ATTRIBUTE_UNUSED,
+ const char *types ATTRIBUTE_UNUSED, ...)
+{
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ "%s", _("DBus support not compiled into this binary"));
+ return -1;
+}
+
int virDBusCall(DBusConnection *conn ATTRIBUTE_UNUSED,
DBusMessage *call ATTRIBUTE_UNUSED,
DBusMessage **reply ATTRIBUTE_UNUSED,
--
1.8.3.2
10 years, 8 months
[libvirt] [PATCH] Fix build on mingw32
by Ján Tomko
tests/viriscsitest.c:27:12: error: 'EXIT_AM_SKIP' undeclared
(first use in this function)
---
Pushed as a build breaker fix.
tests/viriscsitest.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tests/viriscsitest.c b/tests/viriscsitest.c
index 65de954..ebe830a 100644
--- a/tests/viriscsitest.c
+++ b/tests/viriscsitest.c
@@ -20,6 +20,8 @@
#include <config.h>
+#include "testutils.h"
+
#ifdef WIN32
int
main(void)
@@ -29,7 +31,6 @@ main(void)
#else
# define __VIR_COMMAND_PRIV_H_ALLOW__
-# include "testutils.h"
# include "vircommandpriv.h"
# include "viriscsi.h"
--
1.8.3.2
10 years, 8 months
[libvirt] mac address question of a vm
by yue
hi,all
if a vm had mac before, now i delete the mac in its xml then start it, how libvirt get its mac? new one or find the old one, how to find?
where is the place that stores the mac? and where is the code that get the mac and how set it for vm?
thanks
10 years, 8 months
[libvirt] [PATCH] cgroup: Fix start VMs coincidently failed
by Wangyufei (James)
>From 0163328efa67da1d63e504c86e323db5affa378f Mon Sep 17 00:00:00 2001
From: Wang Yufei <james.wangyufei(a)huawei.com>
Date: Thu, 20 Mar 2014 07:14:01 +0000
Subject: [PATCH] cgroup: Fix start VMs coincidently failed
When I start multi VMs coincidently and any of the cgroup directories
named machine doesn't exist. There's a chance that VM start failed because
of creating directory failed:
Unable to initialize /machine cgroup: File exists
When the errno returned by mkdir in virCgroupMakeGroup is EEXIST,
we should pass it through and continue to start the VM.
Signed-off-by: Wang Yufei <james.wangyufei(a)huawei.com>
---
src/util/vircgroup.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
index c5925b1..a10d6f6 100644
--- a/src/util/vircgroup.c
+++ b/src/util/vircgroup.c
@@ -924,6 +924,10 @@ virCgroupMakeGroup(virCgroupPtr parent,
if (!virFileExists(path)) {
if (!create ||
mkdir(path, 0755) < 0) {
+ if (errno == EEXIST) {
+ VIR_FREE(path);
+ continue;
+ }
/* With a kernel that doesn't support multi-level directory
* for blkio controller, libvirt will fail and disable all
* other controllers even though they are available. So
--
1.7.12.4
10 years, 8 months
[libvirt] [PATCH v4] Add helper program to create custom leases
by Nehal J Wani
Introduce helper program to catch events from dnsmasq and maintain a custom
lease file per network. It supports dhcpv4 and dhcpv6. The file is saved as
"<interface-name>.status".
Each lease contains the following info:
<expiry-time (epoch time)> <mac> <iaid> <ip-address> <hostname> <clientid>
Example of custom leases file content:
[
{
"iaid": "1221229",
"ip-address": "2001:db8:ca2:2:1::95",
"mac-address": "52:54:00:12:a2:6d",
"hostname": "Fedora20",
"client-id": "00:04:1a:c1:d9:6b:5a:0a:e2:bc:f8:4b:1e:37:2e:38:22:55",
"expiry-time": 1393244216
},
{
"ip-address": "192.168.150.208",
"mac-address": "52:54:00:11:56:b3",
"hostname": "Wani-PC",
"client-id": "01:52:54:00:11:56:b3",
"expiry-time": 1393244248
}
]
src/Makefile.am:
* Add options to compile the helper program
src/network/bridge_driver.c:
* Introduce networkDnsmasqLeaseFileNameCustom()
* Invoke helper program along with dnsmasq
* Delete the .status file when corresponding n/w is destroyed.
src/network/leaseshelper.c
* Helper program to create the custom lease file
---
v4:
* Addition of pidfile and a corresponding lock for it
* Make correction for dnsmasq < 2.52 (Only IPv4)
* Move helper file from src/util to src/network
* Increase limit on max size of leases file
v3:
* Improved file handling, removed redundant copying, introduced --help and --version
* Refer: https://www.redhat.com/archives/libvir-list/2014-February/msg01431.html
v2:
* Changed format to JSON
* Refer: https://www.redhat.com/archives/libvir-list/2014-January/msg01234.html
v1:
* Refer: https://www.redhat.com/archives/libvir-list/2014-January/msg00626.html
src/Makefile.am | 21 +++
src/network/bridge_driver.c | 19 +++
src/network/leaseshelper.c | 328 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 368 insertions(+), 0 deletions(-)
create mode 100644 src/network/leaseshelper.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 2eb7840..d3bcd66 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -849,6 +849,9 @@ STORAGE_HELPER_DISK_SOURCES = \
UTIL_IO_HELPER_SOURCES = \
util/iohelper.c
+NETWORK_LEASES_HELPER_SOURCES = \
+ network/leaseshelper.c
+
# Network filters
NWFILTER_DRIVER_SOURCES = \
nwfilter/nwfilter_driver.h nwfilter/nwfilter_driver.c \
@@ -2450,6 +2453,24 @@ libvirt_iohelper_CFLAGS = \
$(AM_CFLAGS) \
$(PIE_CFLAGS) \
$(NULL)
+
+if WITH_NETWORK
+libexec_PROGRAMS += libvirt_leaseshelper
+libvirt_leaseshelper_SOURCES = $(NETWORK_LEASES_HELPER_SOURCES)
+libvirt_leaseshelper_LDADD = \
+ libvirt_util.la \
+ ../gnulib/lib/libgnu.la
+if WITH_DTRACE_PROBES
+libvirt_leaseshelper_LDADD += libvirt_probes.lo
+endif WITH_DTRACE_PROBES
+
+libvirt_leaseshelper_CFLAGS = \
+ $(PIE_CFLAGS) \
+ $(NULL)
+else ! WITH_NETWORK
+EXTRA_DIST += $(NETWORK_LEASES_HELPER_SOURCES)
+endif ! WITH_NETWORK
+
endif WITH_LIBVIRTD
if WITH_STORAGE_DISK
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 181541e..4d0ca4d 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -208,6 +208,16 @@ networkDnsmasqLeaseFileNameFunc networkDnsmasqLeaseFileName =
networkDnsmasqLeaseFileNameDefault;
static char *
+networkDnsmasqLeaseFileNameCustom(const char *bridge)
+{
+ char *leasefile;
+
+ ignore_value(virAsprintf(&leasefile, "%s/%s.status",
+ driverState->dnsmasqStateDir, bridge));
+ return leasefile;
+}
+
+static char *
networkDnsmasqConfigFileName(const char *netname)
{
char *conffile;
@@ -243,6 +253,7 @@ networkRemoveInactive(virNetworkDriverStatePtr driver,
virNetworkObjPtr net)
{
char *leasefile = NULL;
+ char *customleasefile = NULL;
char *radvdconfigfile = NULL;
char *configfile = NULL;
char *radvdpidbase = NULL;
@@ -261,6 +272,9 @@ networkRemoveInactive(virNetworkDriverStatePtr driver,
if (!(leasefile = networkDnsmasqLeaseFileName(def->name)))
goto cleanup;
+ if (!(customleasefile = networkDnsmasqLeaseFileNameCustom(def->bridge)))
+ goto cleanup;
+
if (!(radvdconfigfile = networkRadvdConfigFileName(def->name)))
goto cleanup;
@@ -277,6 +291,7 @@ networkRemoveInactive(virNetworkDriverStatePtr driver,
/* dnsmasq */
dnsmasqDelete(dctx);
unlink(leasefile);
+ unlink(customleasefile);
unlink(configfile);
/* radvd */
@@ -1120,6 +1135,10 @@ networkBuildDhcpDaemonCommandLine(virNetworkObjPtr network,
cmd = virCommandNew(dnsmasqCapsGetBinaryPath(caps));
virCommandAddArgFormat(cmd, "--conf-file=%s", configfile);
+
+ /* This helper is used to create custom leases file for libvirt */
+ virCommandAddArgFormat(cmd, "--dhcp-script=%s", LIBEXECDIR "/libvirt_leaseshelper");
+
*cmdout = cmd;
ret = 0;
cleanup:
diff --git a/src/network/leaseshelper.c b/src/network/leaseshelper.c
new file mode 100644
index 0000000..d5aa121
--- /dev/null
+++ b/src/network/leaseshelper.c
@@ -0,0 +1,328 @@
+/*
+ * leasehelper.c: Helper program to create custom leases file
+ *
+ * Copyright (C) 2014 Red Hat, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ * Author: Nehal J Wani <nehaljw.kkd1(a)gmail.com>
+ *
+ * For IPv6 support, use dnsmasq >= 2.67
+ */
+
+#include <config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+#include "virutil.h"
+#include "virthread.h"
+#include "virfile.h"
+#include "virpidfile.h"
+#include "virbuffer.h"
+#include "virstring.h"
+#include "virerror.h"
+#include "viralloc.h"
+#include "virjson.h"
+#include "configmake.h"
+
+#define VIR_FROM_THIS VIR_FROM_NETWORK
+
+/**
+ * VIR_NETWORK_DHCP_LEASE_FILE_SIZE_MAX:
+ *
+ * Macro providing the upper limit on the size of leases file
+ */
+#define VIR_NETWORK_DHCP_LEASE_FILE_SIZE_MAX (32 * 1024 * 1024)
+
+static const char *program_name;
+
+/* Display version information. */
+static void
+helperVersion(const char *argv0)
+{
+ printf("%s (%s) %s\n", argv0, PACKAGE_NAME, PACKAGE_VERSION);
+}
+
+ATTRIBUTE_NORETURN static void
+usage(int status)
+{
+ if (status) {
+ fprintf(stderr, _("%s: try --help for more details\n"), program_name);
+ } else {
+ printf(_("Usage: %s ACTION MAC|CLIENTID IP HOSTNAME\n"
+ " or: %s ACTION MAC|CLIENTID IP\n"),
+ program_name, program_name);
+ }
+ exit(status);
+}
+
+static int
+customLeaseRewriteFile(int fd, void *opaque)
+{
+ char **data = opaque;
+
+ if (safewrite(fd, *data, strlen(*data)) < 0)
+ return -1;
+
+ return 0;
+}
+
+int
+main(int argc, char **argv)
+{
+ char *exptime = NULL;
+ char *pid_file = NULL;
+ char *lease_entries = NULL;
+ char *custom_lease_file = NULL;
+ const char *ip = NULL;
+ const char *mac = NULL;
+ const char *action = NULL;
+ const char *iaid = virGetEnvAllowSUID("DNSMASQ_IAID");
+ const char *clientid = virGetEnvAllowSUID("DNSMASQ_CLIENT_ID");
+ const char *interface = virGetEnvAllowSUID("DNSMASQ_INTERFACE");
+ const char *exptime_tmp = virGetEnvAllowSUID("DNSMASQ_LEASE_EXPIRES");
+ const char *hostname = virGetEnvAllowSUID("DNSMASQ_SUPPLIED_HOSTNAME");
+ const char *leases_str = NULL;
+ long long expirytime = 0;
+ size_t i = 0;
+ int size = 0;
+ int pid_file_fd = -1;
+ int rv = EXIT_FAILURE;
+ int custom_lease_file_len = 0;
+ bool add = false;
+ bool delete = false;
+ virJSONValuePtr lease_new = NULL;
+ virJSONValuePtr lease_tmp = NULL;
+ virJSONValuePtr leases_array = NULL;
+ virJSONValuePtr leases_array_new = NULL;
+
+ virSetErrorFunc(NULL, NULL);
+ virSetErrorLogPriorityFunc(NULL);
+
+ program_name = argv[0];
+
+ if (setlocale(LC_ALL, "") == NULL ||
+ bindtextdomain(PACKAGE, LOCALEDIR) == NULL ||
+ textdomain(PACKAGE) == NULL) {
+ fprintf(stderr, _("%s: initialization failed\n"), program_name);
+ exit(EXIT_FAILURE);
+ }
+
+ if (virThreadInitialize() < 0 ||
+ virErrorInitialize() < 0) {
+ fprintf(stderr, _("%s: initialization failed\n"), program_name);
+ exit(EXIT_FAILURE);
+ }
+
+ /* Doesn't hurt to check */
+ if (argc > 1) {
+ if(STREQ(argv[1], "--help"))
+ usage(EXIT_SUCCESS);
+
+ if (STREQ(argv[1], "--version")) {
+ helperVersion(argv[0]);
+ exit(EXIT_SUCCESS);
+ }
+ }
+
+ if (argc != 4 && argc != 5) {
+ /* Refer man page of dnsmasq --dhcp-script for more details */
+ usage(EXIT_FAILURE);
+ }
+
+ /* Make sure dnsmasq knows the interface. The interface name is not known
+ * when dnsmasq (re)starts and throws 'del' events for expired leases.
+ * So, if any old lease has expired, it will be automatically removed the
+ * next time this program is invoked */
+ if (!interface)
+ goto cleanup;
+
+ ip = argv[3];
+ mac = argv[2];
+ action = argv[1];
+
+ /* In case hostname is known, it is the 5th argument */
+ if (argc == 5)
+ hostname = argv[4];
+
+ if (VIR_STRDUP(exptime, exptime_tmp) < 0)
+ goto cleanup;
+
+ /* Removed extraneous trailing space in DNSMASQ_LEASE_EXPIRES (dnsmasq < 2.52) */
+ if (exptime[strlen(exptime) - 1] == ' ')
+ exptime[strlen(exptime) - 1] = '\0';
+
+ /* Check if it is an IPv6 lease */
+ if (virGetEnvAllowSUID("DNSMASQ_IAID")) {
+ mac = virGetEnvAllowSUID("DNSMASQ_MAC");
+ clientid=argv[2];
+ }
+
+ if (virAsprintf(&custom_lease_file, "%s/%s.status", LOCALSTATEDIR
+ "/lib/libvirt/dnsmasq/", interface) < 0)
+ goto cleanup;
+
+ if (VIR_STRDUP(pid_file, LOCALSTATEDIR "/run/leaseshelper.pid") < 0)
+ goto cleanup;
+
+ /* Try to claim the pidfile, exiting if we can't */
+ if ((pid_file_fd = virPidFileAcquirePath(pid_file, true, getpid())) < 0)
+ goto cleanup;
+
+ /* Since interfaces can be hot plugged, we need to make sure that the
+ * corresponding custom lease file exists. If not, 'touch' it */
+ if (virFileTouch(custom_lease_file, 0644) < 0)
+ goto cleanup;
+
+ /* Read entire contents */
+ if ((custom_lease_file_len = virFileReadAll(custom_lease_file,
+ VIR_NETWORK_DHCP_LEASE_FILE_SIZE_MAX,
+ &lease_entries)) < 0) {
+ goto cleanup;
+ }
+
+ if (STREQ(action, "add") || STREQ(action, "old") || STREQ(action, "del")) {
+ if (mac || STREQ(action, "del")) {
+ /* Delete the corresponding lease */
+ delete = true;
+ if (STREQ(action, "add") || STREQ(action, "old")) {
+ add = true;
+ /* Create new lease */
+ if (!(lease_new = virJSONValueNewObject())) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("failed to create json"));
+ goto cleanup;
+ }
+
+ if (virStrToLong_ll(exptime, NULL, 10, &expirytime) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Unable to convert lease expiry time to long long: %s"),
+ exptime);
+ goto cleanup;
+ }
+
+ if ((iaid && virJSONValueObjectAppendString(lease_new, "iaid",
+ iaid) < 0) ||
+ (ip && virJSONValueObjectAppendString(lease_new, "ip-address",
+ ip) < 0) ||
+ (mac && virJSONValueObjectAppendString(lease_new, "mac-address",
+ mac) < 0) ||
+ (hostname && virJSONValueObjectAppendString(lease_new, "hostname",
+ hostname) < 0) ||
+ (clientid && virJSONValueObjectAppendString(lease_new, "client-id",
+ clientid) < 0) ||
+ (expirytime && virJSONValueObjectAppendNumberLong(lease_new, "expiry-time",
+ expirytime) < 0)) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("failed to create json"));
+ goto cleanup;
+ }
+ }
+ }
+ } else {
+ fprintf(stderr, _("Unsupported action: %s\n"), action);
+ exit(EXIT_FAILURE);
+ }
+
+ /* Check for previous leases */
+ if (custom_lease_file_len) {
+ if (!(leases_array = virJSONValueFromString(lease_entries))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("invalid json in file: %s"), custom_lease_file);
+ goto cleanup;
+ }
+
+ if ((size = virJSONValueArraySize(leases_array)) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("couldn't fetch array of leases"));
+ goto cleanup;
+ }
+ }
+
+ if (!(leases_array_new = virJSONValueNewArray())) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("failed to create json"));
+ goto cleanup;
+ }
+
+ for (i = 0; i < size; i++) {
+ const char *ip_tmp = NULL;
+ long long exptime_tmp = -1;
+
+ if (!(lease_tmp = virJSONValueArrayGet(leases_array, i))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("failed to parse json"));
+ goto cleanup;
+ }
+
+ if (!(ip_tmp = virJSONValueObjectGetString(lease_tmp, "ip-address")) ||
+ (virJSONValueObjectGetNumberLong(lease_tmp, "expiry-time", &exptime_tmp) < 0)) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("failed to parse json"));
+ goto cleanup;
+ }
+
+ /* Check whether lease has expired or not */
+ if (exptime_tmp < (long long) time(NULL))
+ continue;
+
+ /* Check whether lease has to be included or not */
+ if (delete && STREQ(ip_tmp, ip))
+ continue;
+
+ /* Add old lease to new array */
+ if (virJSONValueArrayAppend(leases_array_new, lease_tmp) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("failed to create json"));
+ goto cleanup;
+ }
+ }
+
+ if (add) {
+ if (virJSONValueArrayAppend(leases_array_new, lease_new) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("failed to create json"));
+ goto cleanup;
+ }
+ }
+
+ if (!(leases_str = virJSONValueToString(leases_array_new, true))) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("empty json array"));
+ goto cleanup;
+ }
+
+ /* Write to file */
+ if (virFileRewrite(custom_lease_file, 0644,
+ customLeaseRewriteFile, &leases_str) < 0)
+ goto cleanup;
+
+ rv = EXIT_SUCCESS;
+
+cleanup:
+ if (pid_file_fd != -1)
+ virPidFileReleasePath(pid_file, pid_file_fd);
+
+ VIR_FREE(pid_file);
+ VIR_FREE(exptime_tmp);
+ VIR_FREE(custom_lease_file);
+ virJSONValueFree(lease_new);
+ virJSONValueFree(leases_array);
+ virJSONValueFree(leases_array_new);
+
+ return rv;
+}
--
1.7.1
10 years, 8 months
[libvirt] [PATCH 0/6] Misc improvements and fixes to dbus APIs
by Daniel P. Berrange
This series is a bunch of fixes & improvements to the dbus
APIs needed for the forthcoming new firewall APIs.
Daniel P. Berrange (6):
Refactor dbus helper methods for method calls
Add DBus helper methods for creating reply messages
Remove bogus unref in virDBusMessageRead
Remove bogus call to dbus_set_error_from_message
Introduce alternate way to encode/decode arrays in DBus messages
Allow caller to handle DBus error messages
src/libvirt_private.syms | 5 +
src/util/virdbus.c | 426 ++++++++++++++++++++++++++++++++++++++++-------
src/util/virdbus.h | 27 +++
src/util/virdbuspriv.h | 1 -
src/util/virsystemd.c | 2 +
tests/virdbustest.c | 93 +++++++++++
tests/virsystemdmock.c | 13 +-
7 files changed, 499 insertions(+), 68 deletions(-)
--
1.8.5.3
10 years, 8 months
[libvirt] [PATCH] virlog: Modify virLogParseDefaultPriority's comment of return value
by Wangrui (K)
virLogParseDefaultPriority's successful return value is the same as
virLogSetDefaultPriority's successful return value. So it should be 0
rather than the parsed log level.
Signed-off-by: Zhou Yimin <zhouyimin(a)huawei.com>
---
src/util/virlog.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/util/virlog.c b/src/util/virlog.c
index 68af0f3..3d4edb8 100644
--- a/src/util/virlog.c
+++ b/src/util/virlog.c
@@ -1638,7 +1638,7 @@ virLogGetNbOutputs(void)
* 3: WARNING
* 4: ERROR
*
- * Returns the parsed log level or -1 on error.
+ * Returns 0 if successful, -1 in case of error.
*/
int
virLogParseDefaultPriority(const char *priority)
--
1.7.12.4
10 years, 8 months
[libvirt] Memory allocation/usage in libvirt 0.5.0 API
by Vikas Kokare
We are trying to understand the memory allocation and usage for a KVM guest
using the libvirt java API version 0.5.0. A certain memoryStats(int) on the
Domain class allows you to fetch MemoryStatistic values.
Each of this statistic has a tag and a value. In our case, the values
returned were
[tag: 6 val:8388608
, tag:7 val:8466792
]
What are these tag values(6 and 7) representative of? Do they mean memory
allocated and memory used. If yes, how can we confirm that?
-Vikas
10 years, 8 months
[libvirt] [PATCH] Fix typo in configure.ac
by Ján Tomko
s/profram/program/
---
Pushed as trivial.
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index 85d0dbe..73efffa 100644
--- a/configure.ac
+++ b/configure.ac
@@ -433,7 +433,7 @@ AC_DEFINE_UNQUOTED([DNSMASQ],["$DNSMASQ"],
AC_DEFINE_UNQUOTED([RADVD],["$RADVD"],
[Location or name of the radvd program])
AC_DEFINE_UNQUOTED([TC],["$TC"],
- [Location or name of the tc profram (see iproute2)])
+ [Location or name of the tc program (see iproute2)])
AC_DEFINE_UNQUOTED([OVSVSCTL],["$OVSVSCTL"],
[Location or name of the ovs-vsctl program])
--
1.8.3.2
10 years, 8 months