| /* | 
 |  * NBD Internal Declarations | 
 |  * | 
 |  * Copyright Red Hat | 
 |  * | 
 |  * This work is licensed under the terms of the GNU GPL, version 2 or later. | 
 |  * See the COPYING file in the top-level directory. | 
 |  */ | 
 |  | 
 | #ifndef NBD_INTERNAL_H | 
 | #define NBD_INTERNAL_H | 
 | #include "block/nbd.h" | 
 | #include "system/block-backend.h" | 
 | #include "io/channel-tls.h" | 
 |  | 
 | #include "qemu/iov.h" | 
 |  | 
 | #ifndef _WIN32 | 
 | #include <sys/ioctl.h> | 
 | #endif | 
 | #ifdef HAVE_SYS_IOCCOM_H | 
 | #include <sys/ioccom.h> | 
 | #endif | 
 |  | 
 | #ifdef __linux__ | 
 | #include <linux/fs.h> | 
 | #endif | 
 |  | 
 | #include "qemu/bswap.h" | 
 |  | 
 | /* This is all part of the "official" NBD API. | 
 |  * | 
 |  * The most up-to-date documentation is available at: | 
 |  * https://github.com/yoe/nbd/blob/master/doc/proto.md | 
 |  */ | 
 |  | 
 | /* Size of all compact NBD_CMD_*, without payload */ | 
 | #define NBD_REQUEST_SIZE            (4 + 2 + 2 + 8 + 8 + 4) | 
 | /* Size of all extended NBD_CMD_*, without payload */ | 
 | #define NBD_EXTENDED_REQUEST_SIZE   (4 + 2 + 2 + 8 + 8 + 8) | 
 |  | 
 | /* Size of all NBD_REP_* sent in answer to most NBD_OPT_*, without payload */ | 
 | #define NBD_REPLY_SIZE              (4 + 4 + 8) | 
 | /* Size of reply to NBD_OPT_EXPORT_NAME */ | 
 | #define NBD_REPLY_EXPORT_NAME_SIZE  (8 + 2 + 124) | 
 | /* Size of oldstyle negotiation */ | 
 | #define NBD_OLDSTYLE_NEGOTIATE_SIZE (8 + 8 + 8 + 4 + 124) | 
 |  | 
 | #define NBD_INIT_MAGIC              0x4e42444d41474943LL /* ASCII "NBDMAGIC" */ | 
 | #define NBD_OPTS_MAGIC              0x49484156454F5054LL /* ASCII "IHAVEOPT" */ | 
 | #define NBD_CLIENT_MAGIC            0x0000420281861253LL | 
 | #define NBD_REP_MAGIC               0x0003e889045565a9LL | 
 |  | 
 | #define NBD_SET_SOCK                _IO(0xab, 0) | 
 | #define NBD_SET_BLKSIZE             _IO(0xab, 1) | 
 | #define NBD_SET_SIZE                _IO(0xab, 2) | 
 | #define NBD_DO_IT                   _IO(0xab, 3) | 
 | #define NBD_CLEAR_SOCK              _IO(0xab, 4) | 
 | #define NBD_CLEAR_QUE               _IO(0xab, 5) | 
 | #define NBD_PRINT_DEBUG             _IO(0xab, 6) | 
 | #define NBD_SET_SIZE_BLOCKS         _IO(0xab, 7) | 
 | #define NBD_DISCONNECT              _IO(0xab, 8) | 
 | #define NBD_SET_TIMEOUT             _IO(0xab, 9) | 
 | #define NBD_SET_FLAGS               _IO(0xab, 10) | 
 |  | 
 | /* nbd_write | 
 |  * Writes @size bytes to @ioc. Returns 0 on success. | 
 |  */ | 
 | static inline int nbd_write(QIOChannel *ioc, const void *buffer, size_t size, | 
 |                             Error **errp) | 
 | { | 
 |     return qio_channel_write_all(ioc, buffer, size, errp) < 0 ? -EIO : 0; | 
 | } | 
 |  | 
 | int nbd_drop(QIOChannel *ioc, size_t size, Error **errp); | 
 |  | 
 | #endif |