Just as each physical device used by a network has a connections
counter, now each network has a connections counter which is
incremented once for each guest interface that connects using this
network.
The count is output in the live network XML, like this:
<network connections=20>
...
</network>
It is read-only, and for informational purposes only - it isn't used
internally anywhere by libvirt.
---
src/conf/network_conf.c | 6 +++++-
src/conf/network_conf.h | 1 +
src/network/bridge_driver.c | 10 ++++++++++
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index bdd5794..88dad9e 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -1464,7 +1464,11 @@ char *virNetworkDefFormat(const virNetworkDefPtr def, unsigned int
flags)
char uuidstr[VIR_UUID_STRING_BUFLEN];
int ii;
- virBufferAddLit(&buf, "<network>\n");
+ virBufferAddLit(&buf, "<network");
+ if (!(flags & VIR_NETWORK_XML_INACTIVE) && (def->connections > 0))
{
+ virBufferAsprintf(&buf, " connections='%d'",
def->connections);
+ }
+ virBufferAddLit(&buf, ">\n");
virBufferEscapeString(&buf, " <name>%s</name>\n",
def->name);
uuid = def->uuid;
diff --git a/src/conf/network_conf.h b/src/conf/network_conf.h
index f65cb0e..73c6fa5 100644
--- a/src/conf/network_conf.h
+++ b/src/conf/network_conf.h
@@ -155,6 +155,7 @@ typedef virNetworkDef *virNetworkDefPtr;
struct _virNetworkDef {
unsigned char uuid[VIR_UUID_BUFLEN];
char *name;
+ int connections; /* # of guest interfaces connected to this network */
char *bridge; /* Name of bridge device */
char *domain;
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 3bc3c29..d5275f4 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -3005,6 +3005,10 @@ networkAllocateActualDevice(virDomainNetDefPtr iface)
VIR_DEBUG("Using physical device %s, %d connections",
dev->dev, dev->connections);
}
+
+ netdef->connections++;
+ VIR_DEBUG("Using network %s, %d connections",
+ netdef->name, netdef->connections);
ret = 0;
error:
for (ii = 0; ii < num_virt_fns; ii++)
@@ -3114,6 +3118,9 @@ networkNotifyActualDevice(virDomainNetDefPtr iface)
}
cleanup:
+ netdef->connections++;
+ VIR_DEBUG("Using network %s, %d connections",
+ netdef->name, netdef->connections);
ret = 0;
error:
if (network)
@@ -3199,6 +3206,9 @@ networkReleaseActualDevice(virDomainNetDefPtr iface)
}
cleanup:
+ netdef->connections--;
+ VIR_DEBUG("Releasing network %s, %d connections",
+ netdef->name, netdef->connections);
ret = 0;
error:
if (network)
--
1.7.11.2