[libvirt] [PATCH 08/27] network: unconditionally merge port profiles

Daniel P. Berrangé berrange at redhat.com
Mon Dec 24 14:58:56 UTC 2018


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.

Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
---
 src/network/bridge_driver.c | 54 +++++++++++++++----------------------
 1 file changed, 21 insertions(+), 33 deletions(-)

diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 822da7c6ac..8cb108ea46 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -4528,6 +4528,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:
@@ -4546,6 +4558,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;
@@ -4598,17 +4619,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 &&
@@ -4638,17 +4648,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) {
@@ -4687,17 +4686,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 &&
-- 
2.19.2




More information about the libvir-list mailing list