[libvirt] [ 5/5] qemu domain allow to set ip address, peer address and route

Vasiliy Tolstov v.tolstov at selfip.ru
Mon Apr 4 21:00:06 UTC 2016


Signed-off-by: Vasiliy Tolstov <v.tolstov at selfip.ru>
---
 src/qemu/qemu_interface.c | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/src/qemu/qemu_interface.c b/src/qemu/qemu_interface.c
index 13a513152876..5729325fadb9 100644
--- a/src/qemu/qemu_interface.c
+++ b/src/qemu/qemu_interface.c
@@ -474,6 +474,45 @@ qemuInterfaceEthernetConnect(virDomainDefPtr def,
     if (virNetDevSetMAC(net->ifname, &tapmac) < 0)
         goto cleanup;
 
+    for (j = 0; j < net->nips; j++) {
+        virDomainNetIpDefPtr ip = net->ips[j];
+        unsigned int prefix = (ip->prefix > 0) ? ip->prefix :
+            VIR_SOCKET_ADDR_DEFAULT_PREFIX;
+        char *ipStr = virSocketAddrFormat(&ip->address);
+
+        VIR_DEBUG("Adding IP address '%s/%u' to '%s'",
+                  ipStr, ip->prefix, net->ifname);
+
+        if (virNetDevSetIPAddress(net->ifname, &ip->address, &ip->peer, prefix) < 0) {
+            virReportError(VIR_ERR_SYSTEM_ERROR,
+                           _("Failed to set IP address '%s' on %s"),
+                           ipStr, net->ifname);
+            VIR_FREE(ipStr);
+            goto cleanup;
+        }
+        VIR_FREE(ipStr);
+    }
+
+    if (net->linkstate == VIR_DOMAIN_NET_INTERFACE_LINK_STATE_UP ||
+        net->linkstate == VIR_DOMAIN_NET_INTERFACE_LINK_STATE_DEFAULT) {
+        if (virNetDevSetOnline(net->ifname, true) < 0)
+            goto cleanup;
+
+        /* Set the routes */
+        for (j = 0; j < net->nroutes; j++) {
+            virNetworkRouteDefPtr route = net->routes[j];
+
+            if (virNetDevAddRoute(net->ifname,
+                                  virNetworkRouteDefGetAddress(route),
+                                  virNetworkRouteDefGetPrefix(route),
+                                  virNetworkRouteDefGetGateway(route),
+                                  virNetworkRouteDefGetMetric(route)) < 0) {
+                goto cleanup;
+            }
+        }
+    }
+
+
     if (net->script &&
         qemuExecuteEthernetScript(net->ifname, net->script) < 0)
         goto cleanup;
-- 
2.7.3




More information about the libvir-list mailing list