[libvirt] [PATCH] domain: include portgroup in interface status xml
Michal Privoznik
mprivozn at redhat.com
Wed Feb 11 13:10:26 UTC 2015
On 11.02.2015 02:51, Laine Stump wrote:
> Prior to commit 7d5bf484747 (first appearing in libvirt 1.2.2), the
> status XML of a domain's interface was missing a lot of important
> information; mainly it just output the config of the interface, plus
> the name of the tap device and qemu device alias. Commit 7d5bf484747
> changed the status XML to include many important bits of information
> that were required to make network "hook" scripts useful - bandwidth
> information, vlan tag, the name of the bridge (or physical device in
> the case of macvtap) that the tap/macvtap device was attached to - the
> commit log for 7d5bf484747 has a very detailed explanation of the
> change. For quick reference - in the example given there, prior to the
> change, status XML looked like figure [C]:
>
> <interface type='network'>
> <source network='testnet' portgroup='admin'/>
> <target dev='macvtap0'/>
> <alias name='net0'/>
> <address type='pci' domain='0x0000' bus='0x00'
> slot='0x03' function='0x0'/>
> </interface>
>
> and after the change, it looked like figure [E]:
>
> <interface type='direct'>
> <source dev='p4p1_0' mode='bridge'/>
> <bandwidth>
> <inbound average='1000' peak='5000' burst='1024'/>
> <outbound average='128' peak='256' burst='256'/>
> </bandwidth>
> <target dev='macvtap0'/>
> <alias name='net0'/>
> <address type='pci' domain='0x0000' bus='0x00'
> slot='0x03' function='0x0'/>
> </interface>
>
> You'll notice that bandwidth info, physdev, and macvtap mode have been
> added, but the network and portgroup names are now missing - I didn't
> think that this information was of any use once the needed
> bandwidth/vlan/etc config had been pulled from the network/portgroup.
>
> I was wrong.
>
> A few months after that change a user on IRC asked what happened to
> portgroup in the status XML and described how he used it (more or less
> as a tag to decide what external information to use in a hook script
> that was run at startup/migration time - see
> http://wiki.libvirt.org/page/OVS_and_PVLANS ). At that time I planned
> to make a patch to re-add portgroup, but life intervened as that was
> just prior to a transatlantic move involving several weeks of
> "vacation". During this time I somehow forgot to make the patch, and
> also mistakenly remembered that I *had* made it.
>
> Subsequent to this, as a part of mprivozn's work to add support for
> network-specific hooks, I did re-add the output of the network name in
> status XML, but once again completely forgot about portgroup. This was
> in commit a3609121 (first appearing in libvirt 1.2.11). This made the
> status XML from the above example look like this:
>
> <interface type='direct'>
> <source network='testnet' dev='p4p1_0' mode='bridge'/>
> <bandwidth>
> <inbound average='1000' peak='5000' burst='1024'/>
> <outbound average='128' peak='256' burst='256'/>
> </bandwidth>
> <target dev='macvtap0'/>
> <alias name='net0'/>
> <address type='pci' domain='0x0000' bus='0x00'
> slot='0x03' function='0x0'/>
> </interface>
>
> *This* patch just adds the portgroup back to the status XML, so the
> same example interface will look like this:
>
> <interface type='direct'>
> <source network='testnet' portgroup='admin'
> dev='p4p1_0' mode='bridge'/>
> <bandwidth>
> <inbound average='1000' peak='5000' burst='1024'/>
> <outbound average='128' peak='256' burst='256'/>
> </bandwidth>
> <target dev='macvtap0'/>
> <alias name='net0'/>
> <address type='pci' domain='0x0000' bus='0x00'
> slot='0x03' function='0x0'/>
> </interface>
>
> The result is that the status XML now contains all information about
> how the interface is setup (bandwidth, physical device, tap device,
> etc), in addition to pointers to its origin (the network and
> portgroup).
> ---
> I had previously asked about this topic here:
>
> https://www.redhat.com/archives/libvir-list/2014-June/msg00416.html
>
> but then forgot to follow up on it...
>
> src/conf/domain_conf.c | 18 +++++++++++-------
> 1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
> index 8600eff..d870bb6 100644
> --- a/src/conf/domain_conf.c
> +++ b/src/conf/domain_conf.c
> @@ -17591,14 +17591,18 @@ virDomainActualNetDefContentsFormat(virBufferPtr buf,
> if (def->type == VIR_DOMAIN_NET_TYPE_NETWORK && !inSubelement) {
> /* When we're putting our output into the <actual>
> * subelement rather than the main <interface>, the
> - * network name isn't included in the <source> because the
> - * main interface element's <source> has the same info
> - * already. If we've been called to output directly into
> - * the main element's <source> though (the case here -
> - * "!inSubElement"), we *do* need to output the network
> - * name, because the caller won't have done it).
> + * network name and portgroup don't need to be included in
> + * the <source> here because the main interface element's
> + * <source> has the same info already. If we've been
> + * called to output directly into the main element's
> + * <source> though (the case here - "!inSubElement"), we
> + * *do* need to output network/portgroup, because the
> + * caller won't have done it).
> */
> - virBufferEscapeString(buf, " network='%s'", def->data.network.name);
> + virBufferEscapeString(buf, " network='%s'",
> + def->data.network.name);
> + virBufferEscapeString(buf, " portgroup='%s'",
> + def->data.network.portgroup);
> }
> if (actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
> actualType == VIR_DOMAIN_NET_TYPE_NETWORK) {
>
ACK
Michal
More information about the libvir-list
mailing list