[Libguestfs] [PATCH nbdkit] protocol: Implement NBD_OPT_GO.

Nir Soffer nsoffer at redhat.com
Sat Aug 4 21:11:04 UTC 2018


On Sat, Aug 4, 2018 at 10:58 PM Nir Soffer <nsoffer at redhat.com> wrote:

> On Sat, Aug 4, 2018 at 4:04 PM Richard W.M. Jones <rjones at redhat.com>
> wrote:
>
>> This is only lightly tested (against just qemu NBD client), and the
>> code might be structured a little better as the
>> _negotiate_handshake_newstyle_options function has now grown to be
>> huge.  Anyway works for me.
>>
>
> Works for my python nbd client:
>
> $ rm -f /tmp/nbd.sock && src/nbdkit -f
> plugins/file/.libs/nbdkit-file-plugin.so file=test.raw -e export -U
> /tmp/nbd.sock
>
> $ python -c "import logging; logging.basicConfig(level=logging.DEBUG);
> from ovirt_imageio_common import nbd; c = nbd.Client('/tmp/nbd.sock',
> 'export'); c.write(1024**2, 'it works'); print c.read(1024**2, 8)"
> INFO:nbd:Connecting to '/tmp/nbd.sock' 'export'
> DEBUG:nbd:Received server flags: 3
> DEBUG:nbd:Sending client flags: 1:
> DEBUG:nbd:Sending option: 'IHAVEOPT\x00\x00\x00\x07\x00\x00\x00\x0c' data:
> bytearray(b'\x00\x00\x00\x06export\x00\x00')
> DEBUG:nbd:Received reply [magic=3e889045565a9 option=7 type=3 len=12]
> DEBUG:nbd:Received export info [size=1073741824 flags=109]
> DEBUG:nbd:Received reply [magic=3e889045565a9 option=7 type=1 len=0]
> INFO:nbd:Ready for transmission
> it works
>

But we have a bug - server configure to allow access to "export",
but allow access to the default empty "" export.

$ python -c "import logging; logging.basicConfig(level=logging.DEBUG); from
ovirt_imageio_common import nbd; c = nbd.Client('/tmp/nbd.sock', '')"
INFO:nbd:Connecting to '/tmp/nbd.sock' ''
DEBUG:nbd:Received server flags: 3
DEBUG:nbd:Sending client flags: 1:
DEBUG:nbd:Sending option: 'IHAVEOPT\x00\x00\x00\x07\x00\x00\x00\x06' data:
bytearray(b'\x00\x00\x00\x00\x00\x00')
DEBUG:nbd:Received reply [magic=3e889045565a9 option=7 type=3 len=12]
DEBUG:nbd:Received export info [size=6442450944 flags=109]
DEBUG:nbd:Received reply [magic=3e889045565a9 option=7 type=1 len=0]
INFO:nbd:Ready for transmission

Same with qemu-nbd:

$ qemu-nbd -k /tmp/nbd.sock -t -f raw test.raw --export-name export
--cache=none --aio=native --discard=unmap --detect-zeroes=unmap

$ python -c "import logging; logging.basicConfig(level=logging.DEBUG); from
ovirt_imageio_common import nbd; c = nbd.Client('/tmp/nbd.sock', '')"
INFO:nbd:Connecting to '/tmp/nbd.sock' ''
DEBUG:nbd:Received server flags: 3
DEBUG:nbd:Sending client flags: 1:
DEBUG:nbd:Sending option: 'IHAVEOPT\x00\x00\x00\x07\x00\x00\x00\x06' data:
bytearray(b'\x00\x00\x00\x00\x00\x00')
DEBUG:nbd:Received reply [magic=3e889045565a9 option=7 type=80000006 len=21]
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "ovirt_imageio_common/nbd.py", line 126, in __init__
    self._newstyle_handshake(export_name)
  File "ovirt_imageio_common/nbd.py", line 181, in _newstyle_handshake
    self._receive_go_reply()
  File "ovirt_imageio_common/nbd.py", line 206, in _receive_go_reply
    .format(ERROR_REPLY[reply], message))
ovirt_imageio_common.nbd.Error: The requested export is not available
[message=export '' not present])
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20180805/26ab426b/attachment.htm>


More information about the Libguestfs mailing list