]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
network: unconditionally merge port profiles
authorDaniel P. Berrangé <berrange@redhat.com>
Mon, 3 Sep 2018 16:33:22 +0000 (17:33 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Wed, 17 Apr 2019 13:12:56 +0000 (14:12 +0100)
All but one of the network types supports port profiles. Rather than
duplicating the code to merge profiles 3 times, do it once and then
later report an error if used from the wrong place.

Reviewed-by: Laine Stump <laine@laine.org>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
src/network/bridge_driver.c

index f824b8b4f3c9973b6fdf7aaf3011006fe27897bf..b49558b0214b2b42f3720db27be15b055ca36162 100644 (file)
@@ -4469,6 +4469,18 @@ networkAllocateActualDevice(virNetworkPtr net,
        iface->data.network.actual->trustGuestRxFilters
           = netdef->trustGuestRxFilters;
 
+    /* merge virtualports from interface, network, and portgroup to
+     * arrive at actual virtualport to use
+     */
+    if (virNetDevVPortProfileMerge3(&iface->data.network.actual->virtPortProfile,
+                                    iface->virtPortProfile,
+                                    netdef->virtPortProfile,
+                                    portgroup
+                                    ? portgroup->virtPortProfile : NULL) < 0) {
+        goto error;
+    }
+    virtport = iface->data.network.actual->virtPortProfile;
+
     switch ((virNetworkForwardType) netdef->forward.type) {
     case VIR_NETWORK_FORWARD_NONE:
     case VIR_NETWORK_FORWARD_NAT:
@@ -4491,6 +4503,15 @@ networkAllocateActualDevice(virNetworkPtr net,
         iface->data.network.actual->data.bridge.macTableManager
            = netdef->macTableManager;
 
+        if (virtport) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("<virtualport type='%s'> not supported for network "
+                             "'%s' which uses IP forwarding"),
+                           virNetDevVPortTypeToString(virtport->virtPortType),
+                           netdef->name);
+            goto error;
+        }
+
         if (networkPlugBandwidth(obj, iface) < 0)
             goto error;
         break;
@@ -4543,17 +4564,6 @@ networkAllocateActualDevice(virNetworkPtr net,
         iface->data.network.actual->data.hostdev.def.source.subsys.u.pci.backend
             = backend;
 
-        /* merge virtualports from interface, network, and portgroup to
-         * arrive at actual virtualport to use
-         */
-        if (virNetDevVPortProfileMerge3(&iface->data.network.actual->virtPortProfile,
-                                        iface->virtPortProfile,
-                                        netdef->virtPortProfile,
-                                        portgroup
-                                        ? portgroup->virtPortProfile : NULL) < 0) {
-            goto error;
-        }
-        virtport = iface->data.network.actual->virtPortProfile;
         if (virtport) {
             /* make sure type is supported for hostdev connections */
             if (virtport->virtPortType != VIR_NETDEV_VPORT_PROFILE_8021QBG &&
@@ -4583,17 +4593,6 @@ networkAllocateActualDevice(virNetworkPtr net,
             iface->data.network.actual->data.bridge.macTableManager
                = netdef->macTableManager;
 
-            /* merge virtualports from interface, network, and portgroup to
-             * arrive at actual virtualport to use
-             */
-            if (virNetDevVPortProfileMerge3(&iface->data.network.actual->virtPortProfile,
-                                            iface->virtPortProfile,
-                                            netdef->virtPortProfile,
-                                            portgroup
-                                            ? portgroup->virtPortProfile : NULL) < 0) {
-                goto error;
-            }
-            virtport = iface->data.network.actual->virtPortProfile;
             if (virtport) {
                 /* only type='openvswitch' is allowed for bridges */
                 if (virtport->virtPortType != VIR_NETDEV_VPORT_PROFILE_OPENVSWITCH) {
@@ -4632,17 +4631,6 @@ networkAllocateActualDevice(virNetworkPtr net,
         iface->data.network.actual->data.direct.mode =
             virNetDevMacVLanModeTypeFromString(virNetworkForwardTypeToString(netdef->forward.type));
 
-        /* merge virtualports from interface, network, and portgroup to
-         * arrive at actual virtualport to use
-         */
-        if (virNetDevVPortProfileMerge3(&iface->data.network.actual->virtPortProfile,
-                                        iface->virtPortProfile,
-                                        netdef->virtPortProfile,
-                                        portgroup
-                                        ? portgroup->virtPortProfile : NULL) < 0) {
-            goto error;
-        }
-        virtport = iface->data.network.actual->virtPortProfile;
         if (virtport) {
             /* make sure type is supported for macvtap connections */
             if (virtport->virtPortType != VIR_NETDEV_VPORT_PROFILE_8021QBG &&