]>
Commit | Line | Data |
---|---|---|
2302c1ca MAL |
1 | #ifndef NBD_CLIENT_H |
2 | #define NBD_CLIENT_H | |
3 | ||
4 | #include "qemu-common.h" | |
5 | #include "block/nbd.h" | |
6 | #include "block/block_int.h" | |
064097d9 | 7 | #include "io/channel-socket.h" |
2302c1ca MAL |
8 | |
9 | /* #define DEBUG_NBD */ | |
10 | ||
11 | #if defined(DEBUG_NBD) | |
12 | #define logout(fmt, ...) \ | |
13 | fprintf(stderr, "nbd\t%-24s" fmt, __func__, ##__VA_ARGS__) | |
14 | #else | |
15 | #define logout(fmt, ...) ((void)0) | |
16 | #endif | |
17 | ||
18 | #define MAX_NBD_REQUESTS 16 | |
19 | ||
40f4a218 SH |
20 | typedef struct { |
21 | Coroutine *coroutine; | |
f140e300 | 22 | uint64_t offset; /* original offset of the request */ |
40f4a218 SH |
23 | bool receiving; /* waiting for read_reply_co? */ |
24 | } NBDClientRequest; | |
25 | ||
10676b81 | 26 | typedef struct NBDClientSession { |
064097d9 DB |
27 | QIOChannelSocket *sioc; /* The master data channel */ |
28 | QIOChannel *ioc; /* The current I/O channel which may differ (eg TLS) */ | |
004a89fc | 29 | NBDExportInfo info; |
2302c1ca MAL |
30 | |
31 | CoMutex send_mutex; | |
9bc9732f | 32 | CoQueue free_sema; |
ff82911c | 33 | Coroutine *read_reply_co; |
2302c1ca MAL |
34 | int in_flight; |
35 | ||
40f4a218 | 36 | NBDClientRequest requests[MAX_NBD_REQUESTS]; |
ed2dd912 | 37 | NBDReply reply; |
72b6ffc7 | 38 | bool quit; |
10676b81 | 39 | } NBDClientSession; |
2302c1ca | 40 | |
10676b81 | 41 | NBDClientSession *nbd_get_client_session(BlockDriverState *bs); |
f53a829b | 42 | |
064097d9 DB |
43 | int nbd_client_init(BlockDriverState *bs, |
44 | QIOChannelSocket *sock, | |
45 | const char *export_name, | |
75822a12 DB |
46 | QCryptoTLSCreds *tlscreds, |
47 | const char *hostname, | |
f53a829b HR |
48 | Error **errp); |
49 | void nbd_client_close(BlockDriverState *bs); | |
50 | ||
f5a5ca79 | 51 | int nbd_client_co_pdiscard(BlockDriverState *bs, int64_t offset, int bytes); |
f53a829b | 52 | int nbd_client_co_flush(BlockDriverState *bs); |
70c4fb26 EB |
53 | int nbd_client_co_pwritev(BlockDriverState *bs, uint64_t offset, |
54 | uint64_t bytes, QEMUIOVector *qiov, int flags); | |
fa778fff | 55 | int nbd_client_co_pwrite_zeroes(BlockDriverState *bs, int64_t offset, |
f5a5ca79 | 56 | int bytes, BdrvRequestFlags flags); |
70c4fb26 EB |
57 | int nbd_client_co_preadv(BlockDriverState *bs, uint64_t offset, |
58 | uint64_t bytes, QEMUIOVector *qiov, int flags); | |
f53a829b HR |
59 | |
60 | void nbd_client_detach_aio_context(BlockDriverState *bs); | |
61 | void nbd_client_attach_aio_context(BlockDriverState *bs, | |
62 | AioContext *new_context); | |
69447cd8 | 63 | |
2302c1ca | 64 | #endif /* NBD_CLIENT_H */ |