[Libvirt-cim] [PATCH] Consolidate redundant code in for generating XML for net devices

Richard Maciel rmaciel at linux.vnet.ibm.com
Fri Apr 17 17:32:59 UTC 2009


+1

Kaitlin Rupert wrote:
> # HG changeset patch
> # User Kaitlin Rupert <karupert at us.ibm.com>
> # Date 1239906021 25200
> # Node ID abf66df18db6275e312f8024ddadfd6a2b252bb1
> # Parent  261a49710d0cb13c83e28f460583079db473d04f
> Consolidate redundant code in for generating XML for net devices
> 
> Most of the interface specific functions have the same code, so this can all
> be moved into the common function.
> 
> Signed-off-by: Kaitlin Rupert <karupert at us.ibm.com>
> 
> diff -r 261a49710d0c -r abf66df18db6 libxkutil/xmlgen.c
> --- a/libxkutil/xmlgen.c	Thu Apr 16 11:14:10 2009 -0700
> +++ b/libxkutil/xmlgen.c	Thu Apr 16 11:20:21 2009 -0700
> @@ -153,84 +153,45 @@
>          return msg;
>  }
> 
> -static const char *bridge_net_to_xml(xmlNodePtr root, struct net_device *dev)
> +static const char *set_net_source(xmlNodePtr nic, 
> +                                  struct net_device *dev,
> +                                  const char *src_type)
> +{
> +        xmlNodePtr tmp;
> +
> +        if (dev->source != NULL) {
> +                tmp = xmlNewChild(nic, NULL, BAD_CAST "source", NULL);
> +                if (tmp == NULL)
> +                        return XML_ERROR;
> +                xmlNewProp(tmp, BAD_CAST src_type, BAD_CAST dev->source);
> +        }
> +
> +        return NULL;
> +}
> +
> +
> +static const char *bridge_net_to_xml(xmlNodePtr nic, struct net_device *dev)
>  {
>          const char *script = "vif-bridge";
> -        xmlNodePtr nic;
>          xmlNodePtr tmp;
> -
> -        nic = xmlNewChild(root, NULL, BAD_CAST "interface", NULL);
> -        if (nic == NULL)
> -                return XML_ERROR;
> -        xmlNewProp(nic, BAD_CAST "type", BAD_CAST dev->type);
> -
> -        tmp = xmlNewChild(nic, NULL, BAD_CAST "mac", NULL);
> -        if (tmp == NULL)
> -                return XML_ERROR;
> -        xmlNewProp(tmp, BAD_CAST "address", BAD_CAST dev->mac);
> +        const char *msg = NULL;
> 
>          tmp = xmlNewChild(nic, NULL, BAD_CAST "script", NULL);
>          if (tmp == NULL)
>                  return XML_ERROR;
>          xmlNewProp(tmp, BAD_CAST "path", BAD_CAST script);
> 
> -        if (dev->source != NULL) {
> -                tmp = xmlNewChild(nic, NULL, BAD_CAST "source", NULL);
> -                if (tmp == NULL)
> -                        return XML_ERROR;
> -                xmlNewProp(tmp, BAD_CAST "bridge", BAD_CAST dev->source);
> -        }
> +        msg = set_net_source(nic, dev, "bridge");
> 
> -        return NULL;
> -}
> -
> -static const char *network_net_to_xml(xmlNodePtr root, struct net_device *dev)
> -{
> -        xmlNodePtr nic;
> -        xmlNodePtr tmp;
> -
> -        nic = xmlNewChild(root, NULL, BAD_CAST "interface", NULL);
> -        if (nic == NULL)
> -                return XML_ERROR;
> -        xmlNewProp(nic, BAD_CAST "type", BAD_CAST dev->type);
> -
> -        tmp = xmlNewChild(nic, NULL, BAD_CAST "mac", NULL);
> -        if (tmp == NULL)
> -                return XML_ERROR;
> -        xmlNewProp(tmp, BAD_CAST "address", BAD_CAST dev->mac);
> -
> -        if (dev->source != NULL) {
> -                tmp = xmlNewChild(nic, NULL, BAD_CAST "source", NULL);
> -                if (tmp == NULL)
> -                        return XML_ERROR;
> -                xmlNewProp(tmp, BAD_CAST "network", BAD_CAST dev->source);
> -        }
> -
> -        return NULL;
> -}
> -
> -static const char *user_net_to_xml(xmlNodePtr root, struct net_device *dev)
> -{
> -        xmlNodePtr nic;
> -        xmlNodePtr tmp;
> -
> -        nic = xmlNewChild(root, NULL, BAD_CAST "interface", NULL);
> -        if (nic == NULL)
> -                return XML_ERROR;
> -        xmlNewProp(nic, BAD_CAST "type", BAD_CAST dev->type);
> -
> -        tmp = xmlNewChild(nic, NULL, BAD_CAST "mac", NULL);
> -        if (tmp == NULL)
> -                return XML_ERROR;
> -        xmlNewProp(tmp, BAD_CAST "address", BAD_CAST dev->mac);
> -
> -        return NULL;
> +        return msg;
>  }
> 
>  static const char *net_xml(xmlNodePtr root, struct domain *dominfo)
>  {
>          int i;
>          const char *msg = NULL;
> +        xmlNodePtr nic;
> +        xmlNodePtr tmp;
> 
>          for (i = 0; (i < dominfo->dev_net_ct) && (msg == NULL); i++) {
>                  struct virt_device *dev = &dominfo->dev_net[i];
> @@ -239,12 +200,22 @@
> 
>                  struct net_device *net = &dev->dev.net;
> 
> +                nic = xmlNewChild(root, NULL, BAD_CAST "interface", NULL);
> +                if (nic == NULL)
> +                        return XML_ERROR;
> +                xmlNewProp(nic, BAD_CAST "type", BAD_CAST net->type);
> +
> +                tmp = xmlNewChild(nic, NULL, BAD_CAST "mac", NULL);
> +                if (tmp == NULL)
> +                        return XML_ERROR;
> +                xmlNewProp(tmp, BAD_CAST "address", BAD_CAST net->mac);
> +
>                  if (STREQ(dev->dev.net.type, "network"))
> -                        msg = network_net_to_xml(root, net);
> +                        msg = set_net_source(nic, net, "network");
>                  else if (STREQ(dev->dev.net.type, "bridge"))
>                          msg = bridge_net_to_xml(root, net);
>                  else if (STREQ(dev->dev.net.type, "user"))
> -                        msg = user_net_to_xml(root, net);
> +                        continue;
>                  else
>                          msg = "Unknown interface type";
>          }
> 
> _______________________________________________
> Libvirt-cim mailing list
> Libvirt-cim at redhat.com
> https://www.redhat.com/mailman/listinfo/libvirt-cim


-- 
Richard Maciel, MSc
IBM Linux Technology Center
rmaciel at linux.vnet.ibm.com




More information about the Libvirt-cim mailing list