int
-virDomainActualNetDefValidate(const virDomainNetDef *net G_GNUC_UNUSED)
+virDomainActualNetDefValidate(const virDomainNetDef *net)
{
/* Unlike virDomainNetDefValidate(), which is a static function
* called internally to this file, virDomainActualNetDefValidate()
* is allowed for a type of interface), but *not*
* hypervisor-specific things.
*/
+ char macstr[VIR_MAC_STRING_BUFLEN];
+ virDomainNetType actualType = virDomainNetGetActualType(net);
+ const virNetDevVPortProfile *vport = virDomainNetGetActualVirtPortProfile(net);
+ const virNetDevBandwidth *bandwidth = virDomainNetGetActualBandwidth(net);
- return 0;
+ virMacAddrFormat(&net->mac, macstr);
+ if (virDomainNetGetActualVlan(net)) {
+ /* vlan configuration via libvirt is only supported for PCI
+ * Passthrough SR-IOV devices (hostdev or macvtap passthru
+ * mode) and openvswitch bridges. Otherwise log an error and
+ * fail
+ */
+ if (!(actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV ||
+ (actualType == VIR_DOMAIN_NET_TYPE_DIRECT &&
+ virDomainNetGetActualDirectMode(net) == VIR_NETDEV_MACVLAN_MODE_PASSTHRU) ||
+ (actualType == VIR_DOMAIN_NET_TYPE_BRIDGE &&
+ vport && vport->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH))) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("interface %s - vlan tag not supported for this connection type"),
+ macstr);
+ return -1;
+ }
+ }
+
+ /* bandwidth configuration via libvirt is not supported for
+ * hostdev network devices
+ */
+ if (bandwidth && actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("interface %s - bandwidth settings are not supported "
+ "for hostdev interfaces"),
+ macstr);
+ return -1;
+ }
+
+ return 0;
}
if (virNetDevVPortProfileCheckComplete(port->virtPortProfile, true) < 0)
return -1;
- /* make sure that everything now specified for the device is
- * actually supported on this type of network. NB: network,
- * netdev, and iface->data.network.actual may all be NULL.
- */
- VIR_DEBUG("Sanity check port config");
-
- if (port->vlan.nTags) {
- /* vlan configuration via libvirt is only supported for PCI
- * Passthrough SR-IOV devices (hostdev or macvtap passthru
- * mode) and openvswitch bridges. Otherwise log an error and
- * fail
- */
- if (!(port->plugtype == VIR_NETWORK_PORT_PLUG_TYPE_HOSTDEV_PCI ||
- (port->plugtype == VIR_NETWORK_PORT_PLUG_TYPE_DIRECT &&
- port->plug.direct.mode == VIR_NETDEV_MACVLAN_MODE_PASSTHRU) ||
- (port->plugtype == VIR_NETWORK_PORT_PLUG_TYPE_BRIDGE &&
- port->virtPortProfile &&
- port->virtPortProfile->virtPortType == VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH))) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("an interface connecting to network '%s' "
- "is requesting a vlan tag, but that is not "
- "supported for this type of network"),
- netdef->name);
- return -1;
- }
- }
-
- /* bandwidth configuration via libvirt is not supported for
- * hostdev network devices
- */
- if (port->bandwidth && port->plugtype == VIR_NETWORK_PORT_PLUG_TYPE_HOSTDEV_PCI) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
- _("bandwidth settings are not supported "
- "for hostdev interfaces"));
- return -1;
- }
-
netdef->connections++;
if (dev)
dev->connections++;