All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wei Xu <wexu@redhat.com>
To: Eric Blake <eblake@redhat.com>, qemu-devel@nongnu.org
Cc: "Daniel P. Berrange" <berrange@redhat.com>,
	Michal Privoznik <mprivozn@redhat.com>,
	armbru@redhat.com, amit.shah@redhat.com,
	silbe@linux.vnet.ibm.com, Aaron Conole <aconole@redhat.com>,
	fbl@redhat.com, Jason Wang <jasowang@redhat.com>,
	coreyb@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [RFC Patch 1/3] chardev: add new socket fd parameter for unix socket
Date: Thu, 23 Jun 2016 00:46:46 +0800	[thread overview]
Message-ID: <576AC0F6.3080804@redhat.com> (raw)
In-Reply-To: <576AB14D.7050304@redhat.com>

On 2016年06月22日 23:39, Eric Blake wrote:
> On 06/22/2016 09:25 AM, Wei Xu wrote:
>> There have been comments on this patch, but i forgot adding this patch to
>> the list, just forward it again.
>>
>> When manage VMs via libvirt, qemu ofter runs with limited permission,
>> thus qemu can't create a file/socket, this patch is to  add a new
>> parameter 'sockfd' to accept fd opened and passed in from libvirt.
>>
>> Signed-off-by: Wei Xu <wexu@redhat.com>
>> ---
>>   qapi-schema.json | 3 ++-
>>   qemu-char.c      | 3 +++
>>   2 files changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/qapi-schema.json b/qapi-schema.json
>> index 8483bdf..e9f0268 100644
>> --- a/qapi-schema.json
>> +++ b/qapi-schema.json
>> @@ -2921,7 +2921,8 @@
>>   ##
>>   { 'struct': 'UnixSocketAddress',
>>     'data': {
>> -    'path': 'str' } }
>> +    'path': 'str',
>> +    'sockfd': 'int32' } }
>
> Missing documentation.
>
> This makes the new 'sockfd' parameter mandatory, but SocketAddress is an
> input type.  This is not backwards compatible.  At best, you'd want to
> make it optional, but I'm not even convinced you want to add it, since
> we already can use the magic /dev/fdset/nnn in 'path' to pass an
> arbitrary fd if the underlying code uses qemu_open().
>
Thanks for commenting it again, i was going to forward it to the list 
and ask some questions.:)

Actually i'm going to try the magic way as you suggested, just a few 
questions about that.

Command line change should be like this according to my understanding.

Current command line:
-chardev socket,id=char0,path=/var/run/openvswitch/vhost-user1,server

New command line:
qemu-kvm -add-fd fd=3,set=2,opaque="/var/run/openvswitch/vhost-user1"
-chardev socket,id=char0,path=/dev/fdset/3,server


Q1. The 'sockfd' is not used anymore, but looks the 'path' parameter is 
still mandatory AFAIK, because it's a unix domain socket, which is 
different with a network tcp/udp socket, it works like a pipe file for 
local communication only, and the 'path' parameter is a must-have 
condition before a real connect could be established, it needs a bind() 
operation to a specific path before either connect() or listen(), this 
is caused by libvirt only takes the responsibility to creates a socket 
and pass the 'fd' in only, there is nothing more about the bind(), thus 
i think qemu will have to bind() it by itself, i'm thinking maybe 
'opaque' can be used for this case.

Q2. Do you know how can i test it? i'm going to fork a process first and 
create a socket like libvirt, then exec qemu and pass it in, just 
wondering how can i map it to '/dev/fdset/' directory after created the 
socket?

Q3.
-------------------------------------------------------------------
Daniel's comment before:
'Path' refers to a UNIX domain socket path, so the code won't be using
qemu_open() - it'll be using the sockets APIs to open/create a UNIX
socket. I don't think qemu_open() would even work with a socket FD,
since it'll be trying to set various modes on the FD via fcntl() that
don't work with sockets AFAIK
-------------------------------------------------------------------
Seems what i should call is qemu_socket() to fill in qemu_open(), i 
should check if it's started as '/dev/fdset' like in qemu_open(), and 
just pick the 'fd' up, is this enough? should i check the modes?

Thanks,
Wei

  reply	other threads:[~2016-06-22 16:46 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1464712247-11655-2-git-send-email-wexu@redhat.com>
2016-06-22 15:25 ` [Qemu-devel] [RFC Patch 1/3] chardev: add new socket fd parameter for unix socket Wei Xu
2016-06-22 15:39   ` Eric Blake
2016-06-22 16:46     ` Wei Xu [this message]
2016-06-27 15:47       ` Wei Xu
2016-06-28  6:48       ` Michael S. Tsirkin
2016-06-28  7:37         ` Wei Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=576AC0F6.3080804@redhat.com \
    --to=wexu@redhat.com \
    --cc=aconole@redhat.com \
    --cc=amit.shah@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=coreyb@linux.vnet.ibm.com \
    --cc=eblake@redhat.com \
    --cc=fbl@redhat.com \
    --cc=jasowang@redhat.com \
    --cc=mprivozn@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=silbe@linux.vnet.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.