qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 06/17] migration-local: add send_pipefd()


From: Lei Li
Subject: Re: [Qemu-devel] [PATCH 06/17] migration-local: add send_pipefd()
Date: Mon, 02 Dec 2013 17:13:40 +0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/17.0 Thunderbird/17.0

On 11/29/2013 07:14 PM, Daniel P. Berrange wrote:
On Fri, Nov 29, 2013 at 06:06:13PM +0800, Lei Li wrote:
This patch adds send_pipefd() to pass the pipe file descriptor
to destination process.

Signed-off-by: Lei Li <address@hidden>
---
  migration-local.c |   46 ++++++++++++++++++++++++++++++++++++++++++++++
  1 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/migration-local.c b/migration-local.c
index 929ed60..f479530 100644
--- a/migration-local.c
+++ b/migration-local.c
@@ -167,3 +167,49 @@ fail:
      g_free(s);
      return NULL;
  }
+
+
+/*
+ * Pass a pipe file descriptor to another process.
+ *
+ * Return negative value If pipefd < 0. Return 0 on
+ * success.
+ *
+ */
+static int send_pipefd(int sockfd, int pipefd)
+{
+    struct msghdr msg;
+    struct iovec iov[1];
+    ssize_t ret;
+    char req[1] = { 0x01 };
+
+    union {
+      struct cmsghdr cm;
+      char control[CMSG_SPACE(sizeof(int))];
+    } control_un;
+    struct cmsghdr *cmptr;
+
+    msg.msg_control = control_un.control;
+    msg.msg_controllen = sizeof(control_un.control);
+
+    cmptr = CMSG_FIRSTHDR(&msg);
+    cmptr->cmsg_len = CMSG_LEN(sizeof(int));
+    cmptr->cmsg_level = SOL_SOCKET;
+    cmptr->cmsg_type = SCM_RIGHTS;
+    *((int *) CMSG_DATA(cmptr)) = pipefd;
+
+    msg.msg_name = NULL;
+    msg.msg_namelen = 0;
+
+    iov[0].iov_base = req;
+    iov[0].iov_len = sizeof(req);
+    msg.msg_iov = iov;
+    msg.msg_iovlen = 1;
+
+    ret = sendmsg(sockfd, &msg, 0);
+    if (ret <= 0) {
+        DPRINTF("sendmsg error: %s\n", strerror(errno));
+    }
+
+    return ret;
+}
There are already two copies of this function in QEMU, not to mention
several copies of code for receving FDs.

Rather than adding yet more copies of this functionality it would be
much better to add 2 methods to util/qemu-sockets.{c,h} for sending
and receiving file descriptors and update all existing code to use
them.

Hi Daniel,

Make sense, sounds like a good plan to me.

Just take a quick look, seems there are some differences between
them, I will have a try in a separate thread after back from my
vacation next week.

Thanks for your suggestion.


Daniel


--
Lei




reply via email to

[Prev in Thread] Current Thread [Next in Thread]