提交 300bcdb6 编写于 作者: L Laine Stump

network: add connections counter to networks

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.
上级 4fee4e05
......@@ -15,8 +15,14 @@
<p>
The root element required for all virtual networks is
named <code>network</code> and has no attributes.
The network XML format is available <span class="since">since 0.3.0</span>
named <code>network</code> and has no configurable attributes
(although <span class="since">since 0.10.0</span> there is one
optional read-only attribute - when examining the live
configuration of a network, the
attribute <code>connections</code>, if present, specifies the
number of guest interfaces currently connected via this
network). The network XML format is
available <span class="since">since 0.3.0</span>
</p>
<h3><a name="elementsMetadata">General metadata</a></h3>
......@@ -233,12 +239,22 @@
&lt;/forward&gt;
...
</pre>
Additionally, <span class="since">since 0.9.10</span>, libvirt
allows a shorthand for specifying all virtual interfaces
associated with a single physical function, by using
the <code>&lt;pf&gt;</code> subelement to call out the
corresponding physical interface associated with multiple
virtual interfaces:
<p>
<span class="since">since 0.10.0</span>,
<code>&lt;interface&gt;</code> also has an optional read-only
attribute - when examining the live configuration of a
network, the attribute <code>connections</code>, if present,
specifies the number of guest interfaces currently connected
via this physical interface.
</p>
<p>
Additionally, <span class="since">since 0.9.10</span>, libvirt
allows a shorthand for specifying all virtual interfaces
associated with a single physical function, by using
the <code>&lt;pf&gt;</code> subelement to call out the
corresponding physical interface associated with multiple
virtual interfaces:
</p>
<pre>
...
&lt;forward mode='passthrough'&gt;
......
......@@ -12,6 +12,11 @@
<define name="network">
<element name="network">
<optional>
<attribute name="connections">
<data type="unsignedInt"/>
</attribute>
</optional>
<interleave>
<!-- The name of the network, used to refer to it through the API
......@@ -91,6 +96,11 @@
<attribute name='dev'>
<ref name='deviceName'/>
</attribute>
<optional>
<attribute name="connections">
<data type="unsignedInt"/>
</attribute>
</optional>
</element>
</zeroOrMore>
<optional>
......
......@@ -1463,7 +1463,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;
......
......@@ -156,6 +156,7 @@ struct _virNetworkDef {
unsigned char uuid[VIR_UUID_BUFLEN];
bool uuid_specified;
char *name;
int connections; /* # of guest interfaces connected to this network */
char *bridge; /* Name of bridge device */
char *domain;
......
......@@ -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;
cleanup:
for (ii = 0; ii < num_virt_fns; ii++)
......@@ -3117,6 +3121,9 @@ networkNotifyActualDevice(virDomainNetDefPtr iface)
}
success:
netdef->connections++;
VIR_DEBUG("Using network %s, %d connections",
netdef->name, netdef->connections);
ret = 0;
cleanup:
if (network)
......@@ -3205,6 +3212,9 @@ networkReleaseActualDevice(virDomainNetDefPtr iface)
}
success:
netdef->connections--;
VIR_DEBUG("Releasing network %s, %d connections",
netdef->name, netdef->connections);
ret = 0;
cleanup:
if (network)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册