qemu/nbd/nbd-internal.h
<<
>>
Prefs
   1/*
   2 * NBD Internal Declarations
   3 *
   4 * Copyright Red Hat
   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 "system/block-backend.h"
  14#include "io/channel-tls.h"
  15
  16#include "qemu/iov.h"
  17
  18#ifndef _WIN32
  19#include <sys/ioctl.h>
  20#endif
  21#ifdef HAVE_SYS_IOCCOM_H
  22#include <sys/ioccom.h>
  23#endif
  24
  25#ifdef __linux__
  26#include <linux/fs.h>
  27#endif
  28
  29#include "qemu/bswap.h"
  30
  31/* This is all part of the "official" NBD API.
  32 *
  33 * The most up-to-date documentation is available at:
  34 * https://github.com/yoe/nbd/blob/master/doc/proto.md
  35 */
  36
  37/* Size of all compact NBD_CMD_*, without payload */
  38#define NBD_REQUEST_SIZE            (4 + 2 + 2 + 8 + 8 + 4)
  39/* Size of all extended NBD_CMD_*, without payload */
  40#define NBD_EXTENDED_REQUEST_SIZE   (4 + 2 + 2 + 8 + 8 + 8)
  41
  42/* Size of all NBD_REP_* sent in answer to most NBD_OPT_*, without payload */
  43#define NBD_REPLY_SIZE              (4 + 4 + 8)
  44/* Size of reply to NBD_OPT_EXPORT_NAME */
  45#define NBD_REPLY_EXPORT_NAME_SIZE  (8 + 2 + 124)
  46/* Size of oldstyle negotiation */
  47#define NBD_OLDSTYLE_NEGOTIATE_SIZE (8 + 8 + 8 + 4 + 124)
  48
  49#define NBD_INIT_MAGIC              0x4e42444d41474943LL /* ASCII "NBDMAGIC" */
  50#define NBD_OPTS_MAGIC              0x49484156454F5054LL /* ASCII "IHAVEOPT" */
  51#define NBD_CLIENT_MAGIC            0x0000420281861253LL
  52#define NBD_REP_MAGIC               0x0003e889045565a9LL
  53
  54#define NBD_SET_SOCK                _IO(0xab, 0)
  55#define NBD_SET_BLKSIZE             _IO(0xab, 1)
  56#define NBD_SET_SIZE                _IO(0xab, 2)
  57#define NBD_DO_IT                   _IO(0xab, 3)
  58#define NBD_CLEAR_SOCK              _IO(0xab, 4)
  59#define NBD_CLEAR_QUE               _IO(0xab, 5)
  60#define NBD_PRINT_DEBUG             _IO(0xab, 6)
  61#define NBD_SET_SIZE_BLOCKS         _IO(0xab, 7)
  62#define NBD_DISCONNECT              _IO(0xab, 8)
  63#define NBD_SET_TIMEOUT             _IO(0xab, 9)
  64#define NBD_SET_FLAGS               _IO(0xab, 10)
  65
  66/* nbd_write
  67 * Writes @size bytes to @ioc. Returns 0 on success.
  68 */
  69static inline int nbd_write(QIOChannel *ioc, const void *buffer, size_t size,
  70                            Error **errp)
  71{
  72    return qio_channel_write_all(ioc, buffer, size, errp) < 0 ? -EIO : 0;
  73}
  74
  75int nbd_drop(QIOChannel *ioc, size_t size, Error **errp);
  76
  77/* nbd_set_socket_send_buffer
  78 * Set the socket send buffer size for optimal performance.
  79 */
  80void nbd_set_socket_send_buffer(QIOChannelSocket *sioc);
  81
  82#endif
  83