1
2
3
4
5
6
7
8
9#ifndef RTRS_H
10#define RTRS_H
11
12#include <linux/socket.h>
13#include <linux/scatterlist.h>
14
15struct rtrs_permit;
16struct rtrs_clt;
17struct rtrs_srv_ctx;
18struct rtrs_srv;
19struct rtrs_srv_op;
20
21
22
23
24
25
26
27
28
29
30enum rtrs_clt_link_ev {
31 RTRS_CLT_LINK_EV_RECONNECTED,
32 RTRS_CLT_LINK_EV_DISCONNECTED,
33};
34
35
36
37
38struct rtrs_addr {
39 struct sockaddr_storage *src;
40 struct sockaddr_storage *dst;
41};
42
43
44
45
46
47
48
49
50struct rtrs_clt_ops {
51 void *priv;
52 void (*link_ev)(void *priv, enum rtrs_clt_link_ev ev);
53};
54
55struct rtrs_clt *rtrs_clt_open(struct rtrs_clt_ops *ops,
56 const char *sessname,
57 const struct rtrs_addr *paths,
58 size_t path_cnt, u16 port,
59 size_t pdu_sz, u8 reconnect_delay_sec,
60 u16 max_segments,
61 size_t max_segment_size,
62 s16 max_reconnect_attempts);
63
64void rtrs_clt_close(struct rtrs_clt *sess);
65
66enum {
67 RTRS_PERMIT_NOWAIT = 0,
68 RTRS_PERMIT_WAIT = 1,
69};
70
71
72
73
74
75
76
77enum rtrs_clt_con_type {
78 RTRS_ADMIN_CON,
79 RTRS_IO_CON
80};
81
82struct rtrs_permit *rtrs_clt_get_permit(struct rtrs_clt *sess,
83 enum rtrs_clt_con_type con_type,
84 int wait);
85
86void rtrs_clt_put_permit(struct rtrs_clt *sess, struct rtrs_permit *permit);
87
88
89
90
91
92
93
94
95
96
97struct rtrs_clt_req_ops {
98 void *priv;
99 void (*conf_fn)(void *priv, int errno);
100};
101
102int rtrs_clt_request(int dir, struct rtrs_clt_req_ops *ops,
103 struct rtrs_clt *sess, struct rtrs_permit *permit,
104 const struct kvec *vec, size_t nr, size_t len,
105 struct scatterlist *sg, unsigned int sg_cnt);
106
107
108
109
110struct rtrs_attrs {
111 u32 queue_depth;
112 u32 max_io_size;
113 u8 sessname[NAME_MAX];
114 struct kobject *sess_kobj;
115};
116
117int rtrs_clt_query(struct rtrs_clt *sess, struct rtrs_attrs *attr);
118
119
120
121
122
123
124
125
126
127
128
129enum rtrs_srv_link_ev {
130 RTRS_SRV_LINK_EV_CONNECTED,
131 RTRS_SRV_LINK_EV_DISCONNECTED,
132};
133
134struct rtrs_srv_ops {
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155 int (*rdma_ev)(struct rtrs_srv *sess, void *priv,
156 struct rtrs_srv_op *id, int dir,
157 void *data, size_t datalen, const void *usr,
158 size_t usrlen);
159
160
161
162
163
164
165
166
167
168
169 int (*link_ev)(struct rtrs_srv *sess, enum rtrs_srv_link_ev ev,
170 void *priv);
171};
172
173struct rtrs_srv_ctx *rtrs_srv_open(struct rtrs_srv_ops *ops, u16 port);
174
175void rtrs_srv_close(struct rtrs_srv_ctx *ctx);
176
177bool rtrs_srv_resp_rdma(struct rtrs_srv_op *id, int errno);
178
179void rtrs_srv_set_sess_priv(struct rtrs_srv *sess, void *priv);
180
181int rtrs_srv_get_sess_name(struct rtrs_srv *sess, char *sessname, size_t len);
182
183int rtrs_srv_get_queue_depth(struct rtrs_srv *sess);
184
185int rtrs_addr_to_sockaddr(const char *str, size_t len, u16 port,
186 struct rtrs_addr *addr);
187
188int sockaddr_to_str(const struct sockaddr *addr, char *buf, size_t len);
189#endif
190