qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

nbd-internal.h (2514B)


      1 /*
      2  * NBD Internal Declarations
      3  *
      4  * Copyright (C) 2016 Red Hat, Inc.
      5  *
      6  * This work is licensed under the terms of the GNU GPL, version 2 or later.
      7  * See the COPYING file in the top-level directory.
      8  */
      9 
     10 #ifndef NBD_INTERNAL_H
     11 #define NBD_INTERNAL_H
     12 #include "block/nbd.h"
     13 #include "sysemu/block-backend.h"
     14 #include "io/channel-tls.h"
     15 
     16 #include "qemu/coroutine.h"
     17 #include "qemu/iov.h"
     18 
     19 #ifndef _WIN32
     20 #include <sys/ioctl.h>
     21 #endif
     22 #ifdef HAVE_SYS_IOCCOM_H
     23 #include <sys/ioccom.h>
     24 #endif
     25 
     26 #ifdef __linux__
     27 #include <linux/fs.h>
     28 #endif
     29 
     30 #include "qemu/bswap.h"
     31 
     32 /* This is all part of the "official" NBD API.
     33  *
     34  * The most up-to-date documentation is available at:
     35  * https://github.com/yoe/nbd/blob/master/doc/proto.md
     36  */
     37 
     38 /* Size of all NBD_OPT_*, without payload */
     39 #define NBD_REQUEST_SIZE            (4 + 2 + 2 + 8 + 8 + 4)
     40 /* Size of all NBD_REP_* sent in answer to most NBD_OPT_*, without payload */
     41 #define NBD_REPLY_SIZE              (4 + 4 + 8)
     42 /* Size of reply to NBD_OPT_EXPORT_NAME */
     43 #define NBD_REPLY_EXPORT_NAME_SIZE  (8 + 2 + 124)
     44 /* Size of oldstyle negotiation */
     45 #define NBD_OLDSTYLE_NEGOTIATE_SIZE (8 + 8 + 8 + 4 + 124)
     46 
     47 #define NBD_INIT_MAGIC              0x4e42444d41474943LL /* ASCII "NBDMAGIC" */
     48 #define NBD_REQUEST_MAGIC           0x25609513
     49 #define NBD_OPTS_MAGIC              0x49484156454F5054LL /* ASCII "IHAVEOPT" */
     50 #define NBD_CLIENT_MAGIC            0x0000420281861253LL
     51 #define NBD_REP_MAGIC               0x0003e889045565a9LL
     52 
     53 #define NBD_SET_SOCK                _IO(0xab, 0)
     54 #define NBD_SET_BLKSIZE             _IO(0xab, 1)
     55 #define NBD_SET_SIZE                _IO(0xab, 2)
     56 #define NBD_DO_IT                   _IO(0xab, 3)
     57 #define NBD_CLEAR_SOCK              _IO(0xab, 4)
     58 #define NBD_CLEAR_QUE               _IO(0xab, 5)
     59 #define NBD_PRINT_DEBUG             _IO(0xab, 6)
     60 #define NBD_SET_SIZE_BLOCKS         _IO(0xab, 7)
     61 #define NBD_DISCONNECT              _IO(0xab, 8)
     62 #define NBD_SET_TIMEOUT             _IO(0xab, 9)
     63 #define NBD_SET_FLAGS               _IO(0xab, 10)
     64 
     65 /* nbd_write
     66  * Writes @size bytes to @ioc. Returns 0 on success.
     67  */
     68 static inline int nbd_write(QIOChannel *ioc, const void *buffer, size_t size,
     69                             Error **errp)
     70 {
     71     return qio_channel_write_all(ioc, buffer, size, errp) < 0 ? -EIO : 0;
     72 }
     73 
     74 struct NBDTLSHandshakeData {
     75     GMainLoop *loop;
     76     bool complete;
     77     Error *error;
     78 };
     79 
     80 
     81 void nbd_tls_handshake(QIOTask *task,
     82                        void *opaque);
     83 
     84 int nbd_drop(QIOChannel *ioc, size_t size, Error **errp);
     85 
     86 #endif