diff options
author | Nick Thomas <nick@bytemark.co.uk> | 2011-02-22 15:44:53 +0000 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2011-04-07 13:51:48 +0200 |
commit | c12504ceef999c80b82c69c0154205ca23247fd5 (patch) | |
tree | 3702d59560a42ecf0a559e8ddb1543f52b1c767e /nbd.h | |
parent | b82eac92ac69a22243d341dde0213b7d15d7ba24 (diff) | |
download | hqemu-c12504ceef999c80b82c69c0154205ca23247fd5.zip hqemu-c12504ceef999c80b82c69c0154205ca23247fd5.tar.gz |
NBD: Use qemu_socket functions to open TCP and UNIX sockets
This commit has the side-effect of making the qemu-nbd binary
capable of binding to IPv6 addresses. ("-b ::1", for instance).
block/nbd.c fails to parse IPv6 IP addresses correctly at this
point, but will work over IPv6 when given a hostname. It still
works over IPv4 as before.
We move the qemu-sockets object from the 'common' to the 'block'
list in the Makefile. The common list includes the block list,
so this is effectively a no-op for the rest of the code.
We also add 32-bit 'magic' attributes to nbd_(request|reply) to
facilitate calculating maximum request/response sizes later.
Signed-off-by: Nick Thomas <nick@bytemark.co.uk>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'nbd.h')
-rw-r--r-- | nbd.h | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -22,19 +22,22 @@ #include <sys/types.h> #include <qemu-common.h> + #include "block_int.h" struct nbd_request { + uint32_t magic; uint32_t type; uint64_t handle; uint64_t from; uint32_t len; -}; +} __attribute__ ((__packed__)); struct nbd_reply { + uint32_t magic; uint32_t error; uint64_t handle; -}; +} __attribute__ ((__packed__)); enum { NBD_CMD_READ = 0, @@ -47,6 +50,8 @@ enum { size_t nbd_wr_sync(int fd, void *buffer, size_t size, bool do_read); int tcp_socket_outgoing(const char *address, uint16_t port); int tcp_socket_incoming(const char *address, uint16_t port); +int tcp_socket_outgoing_spec(const char *address_and_port); +int tcp_socket_incoming_spec(const char *address_and_port); int unix_socket_outgoing(const char *path); int unix_socket_incoming(const char *path); |