Skip to content

Commit 34e7dae

Browse files
committed
align xlio_socket_api.c with updated implementation
Signed-off-by: Liu, Changcheng <[email protected]>
1 parent c92a5bc commit 34e7dae

File tree

1 file changed

+58
-46
lines changed

1 file changed

+58
-46
lines changed

tests/extra_api/xlio_socket_api.c

+58-46
Original file line numberDiff line numberDiff line change
@@ -32,21 +32,23 @@
3232
* SOFTWARE.
3333
*/
3434

35-
/* g++ -I./install/include -L./install/lib -L../dpcp/install/lib -o test xlio_socket_api.c -lxlio -lm -lnl-3 -ldpcp -libverbs -lmlx5 -lrdmacm -lnl-route-3 -g3 */
36-
/* LD_LIBRARY_PATH=./install/lib:../dpcp/install/lib ./test */
37-
/* Use `nc -l 8080` on the remote side */
35+
/* Build:
36+
* gcc -o xlio_socket_api xlio_socket_api.c -lxlio -libverbs -g3
37+
* Remote/server side:
38+
* nc -l 8080
39+
* Local/client side:
40+
* sudo ./xlio_socket_api <server_ip_addr>
41+
*/
3842

3943
#include <assert.h>
4044
#include <stdbool.h>
4145
#include <stdio.h>
4246
#include <stdlib.h>
43-
#include <string.h>
44-
#include <sys/socket.h>
45-
#include <netinet/in.h>
4647
#include <arpa/inet.h>
4748

48-
#include <mellanox/xlio.h>
4949
#include <infiniband/verbs.h>
50+
#include <mellanox/xlio.h>
51+
#include <mellanox/xlio_extra.h>
5052

5153
#define TEST_USERDATA_MAGIC 0xfeedbeef
5254
#define FAKE_PORT 65535
@@ -58,6 +60,16 @@ static int g_comp_events = 0;
5860
static char sndbuf[256];
5961
static struct ibv_mr *mr_buf;
6062

63+
static struct xlio_api_t *xlio_api = NULL;
64+
void __attribute__((constructor)) init_xlio_api(void)
65+
{
66+
xlio_api = xlio_get_api();
67+
if (xlio_api == NULL) {
68+
printf("Extra API not found\n");
69+
exit(-1);
70+
}
71+
}
72+
6173
static void memory_cb(void *data, size_t size, size_t page_size)
6274
{
6375
printf("Memory area allocated data=%p size=%zu page_size=%zu\n", data, size, page_size);
@@ -72,9 +84,9 @@ static void send_single_msg(xlio_socket_t sock, const void *data, size_t len, ui
7284
.userdata_op = userdata_op,
7385
};
7486
memcpy(sndbuf, data, len);
75-
int ret = xlio_socket_send(sock, sndbuf, len, &attr);
87+
int ret = xlio_api->xlio_socket_send(sock, sndbuf, len, &attr);
7688
assert(ret == 0);
77-
xlio_socket_flush(sock);
89+
xlio_api->xlio_socket_flush(sock);
7890
}
7991

8092
static void send_inline_msg(xlio_socket_t sock, const void *data, size_t len, uintptr_t userdata_op,
@@ -85,9 +97,9 @@ static void send_inline_msg(xlio_socket_t sock, const void *data, size_t len, ui
8597
.mkey = 0,
8698
.userdata_op = userdata_op,
8799
};
88-
int ret = xlio_socket_send(sock, data, len, &attr);
100+
int ret = xlio_api->xlio_socket_send(sock, data, len, &attr);
89101
assert(ret == 0);
90-
xlio_socket_flush(sock);
102+
xlio_api->xlio_socket_flush(sock);
91103
}
92104

93105
static void socket_event_cb(xlio_socket_t sock, uintptr_t userdata_sq, int event, int value)
@@ -143,7 +155,7 @@ static void socket_rx_cb(xlio_socket_t sock, uintptr_t userdata_sq, void *data,
143155
free(msg);
144156

145157
send_single_msg(sock, data, len, 0xdeadbeef, 0);
146-
xlio_socket_buf_free(sock, buf);
158+
xlio_api->xlio_socket_buf_free(sock, buf);
147159
}
148160

149161
static void test_event_cb(xlio_socket_t sock, uintptr_t userdata_sq, int event, int value)
@@ -172,7 +184,7 @@ static void test_rx_cb(xlio_socket_t sock, uintptr_t userdata_sq, void *data, si
172184
(void)data;
173185
(void)len;
174186
assert(userdata_sq = TEST_USERDATA_MAGIC);
175-
xlio_socket_buf_free(sock, buf);
187+
xlio_api->xlio_socket_buf_free(sock, buf);
176188
}
177189

178190
static void test_multi_groups(const char *ip)
@@ -192,13 +204,13 @@ static void test_multi_groups(const char *ip)
192204
.socket_rx_cb = &test_rx_cb,
193205
};
194206

195-
rc = xlio_poll_group_create(&gattr, &group1);
207+
rc = xlio_api->xlio_poll_group_create(&gattr, &group1);
196208
assert(rc == 0);
197-
rc = xlio_poll_group_create(&gattr, &group2);
209+
rc = xlio_api->xlio_poll_group_create(&gattr, &group2);
198210
assert(rc == 0);
199211

200212
gattr.flags = XLIO_GROUP_FLAG_SAFE;
201-
rc = xlio_poll_group_create(&gattr, &group3);
213+
rc = xlio_api->xlio_poll_group_create(&gattr, &group3);
202214
assert(rc == 0);
203215

204216
struct xlio_socket_attr sattr = {
@@ -207,15 +219,15 @@ static void test_multi_groups(const char *ip)
207219
};
208220

209221
sattr.group = group1;
210-
rc = xlio_socket_create(&sattr, &sock1_1);
222+
rc = xlio_api->xlio_socket_create(&sattr, &sock1_1);
211223
assert(rc == 0);
212-
rc = xlio_socket_create(&sattr, &sock1_2);
224+
rc = xlio_api->xlio_socket_create(&sattr, &sock1_2);
213225
assert(rc == 0);
214226
sattr.group = group2;
215-
rc = xlio_socket_create(&sattr, &sock2);
227+
rc = xlio_api->xlio_socket_create(&sattr, &sock2);
216228
assert(rc == 0);
217229
sattr.group = group3;
218-
rc = xlio_socket_create(&sattr, &sock3);
230+
rc = xlio_api->xlio_socket_create(&sattr, &sock3);
219231
assert(rc == 0);
220232

221233
struct sockaddr_in addr = {};
@@ -226,40 +238,40 @@ static void test_multi_groups(const char *ip)
226238

227239
g_test_events = 0;
228240
/* Connect will fail, we need it to allocate rings for the checks below. */
229-
rc = xlio_socket_connect(sock1_1, (struct sockaddr *)&addr, sizeof(addr));
241+
rc = xlio_api->xlio_socket_connect(sock1_1, (struct sockaddr *)&addr, sizeof(addr));
230242
assert(rc == 0);
231-
rc = xlio_socket_connect(sock1_2, (struct sockaddr *)&addr, sizeof(addr));
243+
rc = xlio_api->xlio_socket_connect(sock1_2, (struct sockaddr *)&addr, sizeof(addr));
232244
assert(rc == 0);
233-
rc = xlio_socket_connect(sock2, (struct sockaddr *)&addr, sizeof(addr));
245+
rc = xlio_api->xlio_socket_connect(sock2, (struct sockaddr *)&addr, sizeof(addr));
234246
assert(rc == 0);
235-
rc = xlio_socket_connect(sock3, (struct sockaddr *)&addr, sizeof(addr));
247+
rc = xlio_api->xlio_socket_connect(sock3, (struct sockaddr *)&addr, sizeof(addr));
236248
assert(rc == 0);
237249

238250
/* TODO There is no API to check expected internal ring distribution. */
239251

240252
/* Wait for ERROR events (ECONREFUSED). */
241253
while (g_test_events < 4) {
242-
xlio_poll_group_poll(group1);
243-
xlio_poll_group_poll(group2);
244-
xlio_poll_group_poll(group3);
254+
xlio_api->xlio_poll_group_poll(group1);
255+
xlio_api->xlio_poll_group_poll(group2);
256+
xlio_api->xlio_poll_group_poll(group3);
245257
}
246258

247259
g_test_events = 0;
248-
xlio_socket_destroy(sock1_1);
249-
xlio_socket_destroy(sock1_2);
250-
xlio_socket_destroy(sock2);
251-
xlio_socket_destroy(sock3);
260+
xlio_api->xlio_socket_destroy(sock1_1);
261+
xlio_api->xlio_socket_destroy(sock1_2);
262+
xlio_api->xlio_socket_destroy(sock2);
263+
xlio_api->xlio_socket_destroy(sock3);
252264

253265
/* Wait for TERMINATED events. */
254266
while (g_test_events < 4) {
255-
xlio_poll_group_poll(group1);
256-
xlio_poll_group_poll(group2);
257-
xlio_poll_group_poll(group3);
267+
xlio_api->xlio_poll_group_poll(group1);
268+
xlio_api->xlio_poll_group_poll(group2);
269+
xlio_api->xlio_poll_group_poll(group3);
258270
}
259271

260-
xlio_poll_group_destroy(group1);
261-
xlio_poll_group_destroy(group2);
262-
xlio_poll_group_destroy(group3);
272+
xlio_api->xlio_poll_group_destroy(group1);
273+
xlio_api->xlio_poll_group_destroy(group2);
274+
xlio_api->xlio_poll_group_destroy(group3);
263275

264276
printf("Multi group test done.\n");
265277
}
@@ -288,12 +300,12 @@ int main(int argc, char **argv)
288300
return 1;
289301
}
290302

291-
rc = xlio_init_ex(&iattr);
303+
rc = xlio_api->xlio_init_ex(&iattr);
292304
assert(rc == 0);
293305

294306
test_multi_groups(argv[1]);
295307

296-
rc = xlio_poll_group_create(&gattr, &group);
308+
rc = xlio_api->xlio_poll_group_create(&gattr, &group);
297309
assert(rc == 0);
298310

299311
printf("Group created.\n");
@@ -304,7 +316,7 @@ int main(int argc, char **argv)
304316
.userdata_sq = 0xdeadc0de,
305317
};
306318

307-
rc = xlio_socket_create(&sattr, &sock);
319+
rc = xlio_api->xlio_socket_create(&sattr, &sock);
308320
assert(rc == 0);
309321

310322
printf("Socket created, connecting to %s:8080.\n", argv[1]);
@@ -315,30 +327,30 @@ int main(int argc, char **argv)
315327
rc = inet_aton(argv[1], &addr.sin_addr);
316328
assert(rc != 0);
317329

318-
rc = xlio_socket_connect(sock, (struct sockaddr *)&addr, sizeof(addr));
330+
rc = xlio_api->xlio_socket_connect(sock, (struct sockaddr *)&addr, sizeof(addr));
319331
assert(rc == 0);
320332

321-
struct ibv_pd *pd = xlio_socket_get_pd(sock);
333+
struct ibv_pd *pd = xlio_api->xlio_socket_get_pd(sock);
322334
assert(pd != NULL);
323335
mr_buf = ibv_reg_mr(pd, sndbuf, sizeof(sndbuf), IBV_ACCESS_LOCAL_WRITE);
324336
assert(mr_buf != NULL);
325337

326338
printf("Starting polling loop.\n");
327339

328340
while (!quit) {
329-
xlio_poll_group_poll(group);
341+
xlio_api->xlio_poll_group_poll(group);
330342
}
331343

332344
printf("Quiting...\n");
333345

334-
rc = xlio_socket_destroy(sock);
346+
rc = xlio_api->xlio_socket_destroy(sock);
335347
assert(rc == 0);
336348

337349
while (!terminated) {
338-
xlio_poll_group_poll(group);
350+
xlio_api->xlio_poll_group_poll(group);
339351
}
340352

341-
rc = xlio_poll_group_destroy(group);
353+
rc = xlio_api->xlio_poll_group_destroy(group);
342354
assert(rc == 0);
343355

344356
printf("Zerocopy completion events: %d\n", g_comp_events);

0 commit comments

Comments
 (0)