#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; size_t blocksize; 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; BlockDriverState *bs; } NbdClientSession; int nbd_client_session_init(NbdClientSession *client, BlockDriverState *bs, int sock, const char *export_name); void nbd_client_session_close(NbdClientSession *client); int nbd_client_session_co_discard(NbdClientSession *client, int64_t sector_num, int nb_sectors); int nbd_client_session_co_flush(NbdClientSession *client); int nbd_client_session_co_writev(NbdClientSession *client, int64_t sector_num, int nb_sectors, QEMUIOVector *qiov); int nbd_client_session_co_readv(NbdClientSession *client, int64_t sector_num, int nb_sectors, QEMUIOVector *qiov); #endif /* NBD_CLIENT_H */