]> xenbits.xensource.com Git - libvirt.git/commitdiff
libxl: limit support for specifying an interface script
authorJim Fehlig <jfehlig@suse.com>
Tue, 10 Jun 2014 20:53:55 +0000 (14:53 -0600)
committerJim Fehlig <jfehlig@suse.com>
Thu, 19 Jun 2014 21:33:36 +0000 (15:33 -0600)
Generally, <interface> ... <script> is only supported for
type='ethernet'.  Due to the long and pervasive use of

  <interface type='bridge'>
    ...
    <script path='foo'/>
  </interface>

in Xen domain configuration, it was agreed to allow the use
of <script> with type='bridge' for backwards compatibility.  See
the following discussion thread

http://www.redhat.com/archives/libvir-list/2013-April/msg00755.html

This patch limits the use of <script> to interface types ethernet
and bridge, raising an unsupported config error if <script> is
specified for all other interface types.

While at it, use VIR_ERR_CONFIG_UNSUPPORTED instead of
VIR_ERR_INTERNAL_ERROR when reporting unsupported interface types.

src/libxl/libxl_conf.c

index 5b0e4189edaa6be400f3fe5a16926b5cf52f5f0d..fdbb522c17ce66d22715c3beb2c85e40578ca88b 100644 (file)
@@ -882,6 +882,14 @@ libxlMakeNic(virDomainDefPtr def,
      * x_nics[i].mtu = 1492;
      */
 
+    if (l_nic->script && !(actual_type == VIR_DOMAIN_NET_TYPE_BRIDGE ||
+                           actual_type == VIR_DOMAIN_NET_TYPE_ETHERNET)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                       _("specifying a script is only supported with "
+                         "interface types bridge and ethernet"));
+        return -1;
+    }
+
     libxl_device_nic_init(x_nic);
 
     virMacAddrGetRaw(&l_nic->mac, x_nic->mac);
@@ -955,8 +963,8 @@ libxlMakeNic(virDomainDefPtr def,
         case VIR_DOMAIN_NET_TYPE_DIRECT:
         case VIR_DOMAIN_NET_TYPE_HOSTDEV:
         case VIR_DOMAIN_NET_TYPE_LAST:
-            virReportError(VIR_ERR_INTERNAL_ERROR,
-                    _("libxenlight does not support network device type %s"),
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                    _("unsupported interface type %s"),
                     virDomainNetTypeToString(l_nic->type));
             return -1;
     }