On Mon, Jan 28, 2013 at 03:27:01PM +0800, Li Zhang wrote: > Hi all, > > I am trying to executing qmp command getfd according to qmp-commands.hx. > > { "execute": "getfd", "arguments": { "fdname": "fd1" } } > > Every time, it returns the error. > > { > "error": { > "class": "GenericError", > "desc": "No file descriptor supplied via SCM_RIGHTS" > } > } > > This error is related with SCM_RIGHTS. > I don't know about SCM at all. > > Can anyone give some hints about this?
The "getfd" command allows the client to pass a file descriptor to QEMU and give it a name. Later that file descriptor can be used by QEMU. The QMP client must send '{ "execute": "getfd", "arguments": { "fdname": "fd1" } }' together with SCM_RIGHTS CMSG. You are getting the error because you sent the "getfd" command but forgot to include a file descriptor using SCM_RIGHTS. SCM_RIGHTS is a feature of UNIX domain sockets. It allows one process to pass a file descriptor to another process through the UNIX domain socket. See "man 7 unix" and "man 3 cmsg" for details. Look at monitor.c:qmp_getfd() to understand how this works. The QEMU code to receive a passed file descriptor is in qemu-char.c:unix_process_msgfd(). Stefan