[libvirt] [PATCH 8/9] Introduce virNetDevVsockSetGuestCid

Ján Tomko jtomko at redhat.com
Mon May 21 15:37:18 UTC 2018


A wrapper function for setting the guest cid via ioctl.

Signed-off-by: Ján Tomko <jtomko at redhat.com>
---
 configure.ac             |  8 ++++++++
 src/libvirt_private.syms |  1 +
 src/util/virnetdev.c     | 30 ++++++++++++++++++++++++++++++
 src/util/virnetdev.h     |  4 ++++
 4 files changed, 43 insertions(+)

diff --git a/configure.ac b/configure.ac
index cc005ea9e8..b869a17afe 100644
--- a/configure.ac
+++ b/configure.ac
@@ -641,6 +641,14 @@ if test "$with_linux" = "yes"; then
                    [[#include <linux/devlink.h>]])
 fi
 
+dnl
+dnl check for VHOST_VSOCK_SET_GUEST_CID
+dnl
+if test "$with_linux" = "yes"; then
+    AC_CHECK_DECLS([VHOST_VSOCK_SET_GUEST_CID], [], [],
+                   [[#include <linux/vhost.h>]])
+fi
+
 dnl Allow perl/python overrides
 AC_PATH_PROGS([PYTHON], [python3 python2 python])
 if test -z "$PYTHON"; then
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index b4c86b60cc..204ac3806a 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2287,6 +2287,7 @@ virNetDevSetRcvMulti;
 virNetDevSetupControl;
 virNetDevSysfsFile;
 virNetDevValidateConfig;
+virNetDevVsockSetGuestCid;
 
 
 # util/virnetdevbandwidth.h
diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
index b250af9e2c..6ac2080821 100644
--- a/src/util/virnetdev.c
+++ b/src/util/virnetdev.c
@@ -50,6 +50,10 @@
 # undef HAVE_STRUCT_IFREQ
 #endif
 
+#if HAVE_DECL_VHOST_VSOCK_SET_GUEST_CID
+# include <linux/vhost.h>
+#endif
+
 #if defined(SIOCETHTOOL) && defined(HAVE_STRUCT_IFREQ)
 # include <linux/types.h>
 # include <linux/ethtool.h>
@@ -3605,3 +3609,29 @@ virNetDevRunEthernetScript(const char *ifname, const char *script)
     virCommandFree(cmd);
     return ret;
 }
+
+#if HAVE_DECL_VHOST_VSOCK_SET_GUEST_CID
+int
+virNetDevVsockSetGuestCid(int fd,
+                          unsigned int guest_cid)
+{
+    uint64_t val = guest_cid;
+
+    if (ioctl(fd, VHOST_VSOCK_SET_GUEST_CID, &val) < 0) {
+        virReportSystemError(errno, "%s",
+                             _("failed to set guest cid"));
+        return -1;
+    }
+
+    return 0;
+}
+#else
+int
+virNetDevVsockSetGuestCid(int fd ATTRIBUTE_UNUSED,
+                          unsigned int guest_cid ATTRIBUTE_UNUSED)
+{
+    virReportSystemError(ENOSYS, "%s",
+                         _("vsock is not supported"));
+    return -1;
+}
+#endif
diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h
index 71eaf45e30..836603b65d 100644
--- a/src/util/virnetdev.h
+++ b/src/util/virnetdev.h
@@ -313,4 +313,8 @@ int virNetDevSysfsFile(char **pf_sysfs_device_link,
 
 int virNetDevRunEthernetScript(const char *ifname, const char *script)
     ATTRIBUTE_NOINLINE;
+
+int
+virNetDevVsockSetGuestCid(int fd,
+                          unsigned int guest_cid);
 #endif /* __VIR_NETDEV_H__ */
-- 
2.16.1




More information about the libvir-list mailing list