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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list