]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
WIP: qemu-slirp: update to follow current spec
authorMarc-André Lureau <marcandre.lureau@redhat.com>
Tue, 25 Feb 2020 09:55:13 +0000 (10:55 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 24 Mar 2020 14:57:33 +0000 (15:57 +0100)
The WIP specification is hosted on slirp wiki at this point:
https://gitlab.freedesktop.org/slirp/libslirp/-/wikis/Slirp-Helper

We would need more feedback from various parties (including libvirt,
podman, and other developpers) before declaring a frozen version.

So for now, follow it, and feedback welcome!

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/qemu/qemu_slirp.c

index 94ceb766422a4754485ee5becc3313bf3b47f7bd..09c1247892d2d625b6ccf6dcf6dfb3a190954eee 100644 (file)
@@ -285,35 +285,21 @@ qemuSlirpStart(qemuSlirpPtr slirp,
         const virNetDevIPAddr *ip = net->guestIP.ips[i];
         g_autofree char *addr = NULL;
         const char *opt = "";
+        unsigned prefix = ip->prefix;
 
         if (!(addr = virSocketAddrFormat(&ip->address)))
             return -1;
 
-        if (VIR_SOCKET_ADDR_IS_FAMILY(&ip->address, AF_INET))
+        if (VIR_SOCKET_ADDR_IS_FAMILY(&ip->address, AF_INET)) {
             opt = "--net";
-        if (VIR_SOCKET_ADDR_IS_FAMILY(&ip->address, AF_INET6))
-            opt = "--prefix-ipv6";
-
-        virCommandAddArgFormat(cmd, "%s=%s", opt, addr);
-
-        if (ip->prefix) {
-            if (VIR_SOCKET_ADDR_IS_FAMILY(&ip->address, AF_INET)) {
-                virSocketAddr netmask;
-                g_autofree char *netmaskStr = NULL;
-
-                if (virSocketAddrPrefixToNetmask(ip->prefix, &netmask, AF_INET) < 0) {
-                    virReportError(VIR_ERR_INTERNAL_ERROR,
-                                   _("Failed to translate prefix %d to netmask"),
-                                   ip->prefix);
-                    return -1;
-                }
-                if (!(netmaskStr = virSocketAddrFormat(&netmask)))
-                    return -1;
-                virCommandAddArgFormat(cmd, "--mask=%s", netmaskStr);
-            }
-            if (VIR_SOCKET_ADDR_IS_FAMILY(&ip->address, AF_INET6))
-                virCommandAddArgFormat(cmd, "--prefix-length-ipv6=%u", ip->prefix);
+            prefix = prefix ?: 24;
+        }
+        if (VIR_SOCKET_ADDR_IS_FAMILY(&ip->address, AF_INET6)) {
+            opt = "--net6";
+            prefix = prefix ?: 64;
         }
+
+        virCommandAddArgFormat(cmd, "%s=%s/%u", opt, addr, prefix);
     }
 
     if (qemuSlirpHasFeature(slirp, QEMU_SLIRP_FEATURE_DBUS_ADDRESS)) {