#ifndef NBD_CLIENT_H #define NBD_CLIENT_H #include "qemu-common.h" #include "block/nbd.h" #include "block/block_int.h" /* #define DEBUG_NBD */ #if defined(DEBUG_NBD) #define logout(fmt, ...) \ fprintf(stderr, "nbd\t%-24s" fmt, __func__, ##__VA_ARGS__) #else #define logout(fmt, ...) ((void)0) #endif #define MAX_NBD_REQUESTS 16 typedef struct NbdClientSession { int sock; uint32_t nbdflags; off_t size; CoMutex send_mutex; CoMutex free_sema; Coroutine *send_coroutine; int in_flight; Coroutine *recv_coroutine[MAX_NBD_REQUESTS]; struct nbd_reply reply; bool is_unix; } NbdClientSession; NbdClientSession *nbd_get_client_session(BlockDriverState *bs); int nbd_client_init(BlockDriverState *bs, int sock, const char *export_name, Error **errp); void nbd_client_close(BlockDriverState *bs); int nbd_client_co_discard(BlockDriverState *bs, int64_t sector_num, int nb_sectors); int nbd_client_co_flush(BlockDriverState *bs); int nbd_client_co_writev(BlockDriverState *bs, int64_t sector_num, int nb_sectors, QEMUIOVector *qiov); int nbd_client_co_readv(BlockDriverState *bs, int64_t sector_num, int nb_sectors, QEMUIOVector *qiov); void nbd_client_detach_aio_context(BlockDriverState *bs); void nbd_client_attach_aio_context(BlockDriverState *bs, AioContext *new_context); #endif /* NBD_CLIENT_H */