[PATCH 2/2] ch: Enable NAT Network mode support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Praveen K Paladugu <praveenkpaladugu@xxxxxxxxx>

From: Praveen K Paladugu <prapal@xxxxxxxxxxxxxxxxxxx>

enable VIR_DOMAIN_NET_TYPE_NETWORK network support for ch guests.
Tested with following config:

  <interface type='network'>
      <source network="default" bridge='virbr0'/>
      <model type='virtio'/>
      <driver queues="1"/>
  </interface>

Signed-off-by: Praveen K Paladugu <praveenkpaladugu@xxxxxxxxx>
Signed-off-by: Praveen K Paladugu <prapal@xxxxxxxxxxxxxxxxxxx>
---
 src/ch/ch_interface.c | 57 +++++++++++++++++++++++++++++++------------
 1 file changed, 42 insertions(+), 15 deletions(-)

diff --git a/src/ch/ch_interface.c b/src/ch/ch_interface.c
index c7af6a35fa..07bdd71560 100644
--- a/src/ch/ch_interface.c
+++ b/src/ch/ch_interface.c
@@ -28,7 +28,7 @@
 #include "ch_interface.h"
 #include "virjson.h"
 #include "virlog.h"
-
+#include "datatypes.h"
 
 #define VIR_FROM_THIS VIR_FROM_CH
 
@@ -39,8 +39,9 @@ VIR_LOG_INIT("ch.ch_interface");
  * @driver: pointer to ch driver object
  * @vm: pointer to domain definition
  * @net: pointer to a guest net
- * @nicindexes: returned array of FDs of guest interfaces
- * @nnicindexes: returned number of guest interfaces
+ * @tapfds: returned array of tap FDs
+ * @nicindexes: returned array list of network interface indexes
+ * @nnicindexes: returned number of network interfaces
  *
  *
  * Returns 0 on success, -1 on error.
@@ -49,10 +50,24 @@ int
 virCHConnetNetworkInterfaces(virCHDriver *driver,
                              virDomainDef *vm,
                              virDomainNetDef *net,
-                             int *tapfds, int **nicindexes, size_t *nnicindexes)
+                             int *tapfds,
+                             int **nicindexes, size_t *nnicindexes)
 {
     virDomainNetType actualType = virDomainNetGetActualType(net);
+    g_autoptr(virCHDriverConfig) cfg = virCHDriverGetConfig(driver);
+    g_autoptr(virConnect) conn = NULL;
+
 
+    /* If appropriate, grab a physical device from the configured
+     * network's pool of devices, or resolve bridge device name
+     * to the one defined in the network definition.
+     */
+    if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
+        if (!(conn = virGetConnectNetwork()))
+            return -1;
+        if (virDomainNetAllocateActualDevice(conn, vm, net) < 0)
+            return -1;
+    }
 
     switch (actualType) {
     case VIR_DOMAIN_NET_TYPE_ETHERNET:
@@ -63,20 +78,19 @@ virCHConnetNetworkInterfaces(virCHDriver *driver,
                                               net->driver.virtio.queues) < 0)
             return -1;
 
-        G_GNUC_FALLTHROUGH;
+        break;
     case VIR_DOMAIN_NET_TYPE_NETWORK:
+        if (virDomainInterfaceBridgeConnect(vm, net,
+                                            tapfds,
+                                            net->driver.virtio.queues,
+                                            driver->privileged,
+                                            driver->ebtables,
+                                            false,
+                                            NULL) < 0)
+            return -1;
+        break;
     case VIR_DOMAIN_NET_TYPE_BRIDGE:
     case VIR_DOMAIN_NET_TYPE_DIRECT:
-        if (nicindexes && nnicindexes && net->ifname) {
-            int nicindex = 0;
-
-            if (virNetDevGetIndex(net->ifname, &nicindex) < 0)
-                return -1;
-
-            VIR_APPEND_ELEMENT(*nicindexes, *nnicindexes, nicindex);
-        }
-
-        break;
     case VIR_DOMAIN_NET_TYPE_USER:
     case VIR_DOMAIN_NET_TYPE_SERVER:
     case VIR_DOMAIN_NET_TYPE_CLIENT:
@@ -94,6 +108,19 @@ virCHConnetNetworkInterfaces(virCHDriver *driver,
                        _("Unsupported Network type %1$d"), actualType);
         return -1;
     }
+    if ( actualType == VIR_DOMAIN_NET_TYPE_ETHERNET ||
+         actualType == VIR_DOMAIN_NET_TYPE_NETWORK ||
+         actualType == VIR_DOMAIN_NET_TYPE_BRIDGE ||
+         actualType == VIR_DOMAIN_NET_TYPE_DIRECT ) {
+            if (nicindexes && nnicindexes && net->ifname) {
+                int nicindex = 0;
+
+                if (virNetDevGetIndex(net->ifname, &nicindex) < 0)
+                    return -1;
+
+                VIR_APPEND_ELEMENT(*nicindexes, *nnicindexes, nicindex);
+            }
+    }
 
     return 0;
 }
-- 
2.44.0



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux