[libvirt] [PATCH 08/14] Store the interface vlan number in the domain state

Daniel P. Berrange berrange at redhat.com
Mon Jul 20 16:26:54 UTC 2009


On Mon, Jul 20, 2009 at 12:51:18PM +0100, Mark McLoughlin wrote:
> Currently, an interface's vlan number corresponds to its index in
> the table of network interfaces. That is no longer true when we
> allow devices to be removed.
> 
> To fix this, we store the vlan number in the domain's state XML
> so that it survives libvirtd restarts.
> 
> * src/domain_conf.h: add vlan number to virDomainNetDef
> 
> * src/domain_conf.c: store it in XML as <state vlan='N'/>, defaulting
>   to -1 if this is state saved by a previous version of libvirt
> 
> * src/qemu_conf.c: assign vlan numbers before starting qemu

Am I right in thinking we only need to preserve this info so that
we can figure out the next free VLAN number for hot-plug ?


> ---
>  src/domain_conf.c |   12 ++++++++++++
>  src/domain_conf.h |    1 +
>  src/qemu_conf.c   |    7 +++++--
>  3 files changed, 18 insertions(+), 2 deletions(-)
> 
> diff --git a/src/domain_conf.c b/src/domain_conf.c
> index 2b4fe90..cce863c 100644
> --- a/src/domain_conf.c
> +++ b/src/domain_conf.c
> @@ -954,6 +954,7 @@ virDomainNetDefParseXML(virConnectPtr conn,
>      char *internal = NULL;
>      char *nic_name = NULL;
>      char *hostnet_name = NULL;
> +    char *vlan = NULL;
>  
>      if (VIR_ALLOC(def) < 0) {
>          virReportOOMError(conn);
> @@ -1023,6 +1024,7 @@ virDomainNetDefParseXML(virConnectPtr conn,
>                         xmlStrEqual(cur->name, BAD_CAST "state")) {
>                  nic_name = virXMLPropString(cur, "nic");
>                  hostnet_name = virXMLPropString(cur, "hostnet");
> +                vlan = virXMLPropString(cur, "vlan");
>              }
>          }
>          cur = cur->next;
> @@ -1038,6 +1040,13 @@ virDomainNetDefParseXML(virConnectPtr conn,
>      def->hostnet_name = hostnet_name;
>      nic_name = hostnet_name = NULL;
>  
> +    def->vlan = -1;
> +    if (vlan && virStrToLong_i(vlan, NULL, 10, &def->vlan) < 0) {
> +        virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
> +                             _("Cannot parse <state> 'vlan' attribute"));
> +        goto error;
> +    }

I'm wondering if we shouldn't just add a virXMLPropInt() method
which would mean we wouldn't have to keep doing the virStrToLong
stuff throughout the XML parsing code.

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list