Motr  M0
network.c
Go to the documentation of this file.
1 /* -*- C -*- */
2 /*
3  * Copyright (c) 2013-2020 Seagate Technology LLC and/or its Affiliates
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  * For any questions about this software or licensing,
18  * please email opensource@seagate.com or cortx-questions@seagate.com.
19  *
20  */
21 
22 #ifndef __KERNEL__
23 #include <unistd.h>
24 #endif
25 
26 #include "ut/ut.h" /* M0_UT_ASSERT */
27 #include "lib/misc.h" /* M0_SET0 */
28 #include "lib/semaphore.h" /* m0_semaphore */
29 #include "lib/memory.h" /* m0_alloc */
30 #include "net/lnet/lnet.h" /* m0_net_lnet_ifaces_get */
31 
32 #include "net/test/network.h"
33 
34 enum {
37  NET_TEST_BULK_BUF_SIZE = 1024 * 1024,
39 };
40 
42  struct m0_bufvec *src,
43  m0_bcount_t len)
44 {
45  struct m0_bufvec_cursor bcsrc;
46  struct m0_bufvec_cursor bcdst;
47 
48  m0_bufvec_cursor_init(&bcsrc, src);
49  m0_bufvec_cursor_init(&bcdst, dst);
50  return m0_bufvec_cursor_copy(&bcdst, &bcsrc, len);
51 }
52 
55  struct m0_net_test_network_ctx *ctx1,
56  uint32_t buf_index1,
57  struct m0_net_test_network_ctx *ctx2,
58  uint32_t buf_index2)
59 {
60  void *b1_data;
61  void *b2_data;
62  m0_bcount_t length;
63  struct m0_net_buffer *b1;
64  struct m0_net_buffer *b2;
65  struct m0_bufvec bv1 = M0_BUFVEC_INIT_BUF(&b1_data, &length);
66  struct m0_bufvec bv2 = M0_BUFVEC_INIT_BUF(&b2_data, &length);
67  m0_bcount_t rc_bcount;
68  bool rc;
69 
70  b1 = m0_net_test_network_buf(ctx1, buf_type, buf_index1);
71  b2 = m0_net_test_network_buf(ctx2, buf_type, buf_index2);
72 
73  if (b1->nb_length != b2->nb_length)
74  return false;
75 
76  length = b1->nb_length;
77 
78  b1_data = m0_alloc(length);
79  b2_data = m0_alloc(length);
80 
81  rc_bcount = bv_copy(&bv1, &b1->nb_buffer, length);
82  M0_ASSERT(rc_bcount == length);
83  rc_bcount = bv_copy(&bv2, &b2->nb_buffer, length);
84  M0_ASSERT(rc_bcount == length);
85 
86  rc = memcmp(b1_data, b2_data, length) == 0;
87 
88  m0_free(b1_data);
89  m0_free(b2_data);
90 
91  return rc;
92 }
93 
94 static void ping_tm_event_cb(const struct m0_net_tm_event *ev)
95 {
96 }
97 
98 static struct m0_semaphore recv_sem;
99 static struct m0_semaphore send_sem;
100 
102  const uint32_t buf_index,
103  enum m0_net_queue_type q,
104  const struct m0_net_buffer_event *ev)
105 {
107 }
108 
110  const uint32_t buf_index,
111  enum m0_net_queue_type q,
112  const struct m0_net_buffer_event *ev)
113 {
115 }
116 
118  const uint32_t buf_index,
119  enum m0_net_queue_type q,
120  const struct m0_net_buffer_event *ev)
121 {
122 
123  M0_IMPOSSIBLE("impossible bulk buffer callback in ping test");
124 }
125 
126 static const struct m0_net_tm_callbacks ping_tm_cb = {
128 };
129 
131  .ntnbc_cb = {
138  }
139 };
140 
142 {
143  static struct m0_net_test_network_cfg cfg;
144  static struct m0_net_test_network_ctx send;
145  static struct m0_net_test_network_ctx recv;
146  int rc;
147  bool rc_bool;
149 
151  M0_SET0(&cfg);
152  cfg.ntncfg_tm_cb = ping_tm_cb;
155  cfg.ntncfg_buf_ping_nr = 1;
156  cfg.ntncfg_ep_max = 1;
158  rc = m0_net_test_network_ctx_init(&send, &cfg, "0@lo:12345:42:1000");
159  M0_UT_ASSERT(rc == 0);
160 
161  rc = m0_net_test_network_ctx_init(&recv, &cfg, "0@lo:12345:42:1001");
162  M0_UT_ASSERT(rc == 0);
163 
164  rc = m0_net_test_network_ep_add(&send, "0@lo:12345:42:1001");
165  M0_UT_ASSERT(rc == 0);
166  rc = m0_net_test_network_ep_add(&recv, "0@lo:12345:42:1000");
167  M0_UT_ASSERT(rc == 0);
168 
171 
172  while (buf_size > 0) {
173  /* test buffer resize. @see m0_net_test_network_buf_resize */
175  buf_size);
177  buf_size);
178 
182  &send, 0, &recv, 0);
183  M0_ASSERT(!rc_bool);
184 
185  rc = m0_net_test_network_msg_recv(&recv, 0);
186  M0_UT_ASSERT(rc == 0);
187  rc = m0_net_test_network_msg_send(&send, 0, 0);
188  M0_UT_ASSERT(rc == 0);
189 
193 
195  &send, 0, &recv, 0);
196  M0_ASSERT(rc_bool);
197 
200  }
201 
204 
207 }
208 
211 
212 static void bulk_cb(struct m0_net_test_network_ctx *ctx,
213  const uint32_t buf_index,
214  enum m0_net_queue_type q,
215  const struct m0_net_buffer_event *ev)
216 {
217  M0_PRE(q < M0_NET_QT_NR);
218 
219  /*
220  m0_net_buffer_event.nbe_offset can't have non-zero value
221  in this test.
222  */
223  if (ev->nbe_offset != 0)
224  bulk_offset_mismatch = true;
225 
227 }
228 
229 static const struct m0_net_tm_callbacks bulk_tm_cb = {
231 };
232 
234  .ntnbc_cb = {
241  }
242 };
243 
245 {
246  static struct m0_net_test_network_cfg cfg;
247  static struct m0_net_test_network_ctx client;
248  static struct m0_net_test_network_ctx server;
250  m0_bcount_t bcount;
251  int rc;
252  size_t rc_size;
253  int i;
254  bool rc_bool;
255 
256  M0_SET0(&cfg);
257  cfg.ntncfg_tm_cb = bulk_tm_cb;
260  cfg.ntncfg_buf_ping_nr = 1;
262  cfg.ntncfg_buf_bulk_nr = 2;
263  cfg.ntncfg_ep_max = 1;
265  rc = m0_net_test_network_ctx_init(&client, &cfg, "0@lo:12345:42:1000");
266  M0_UT_ASSERT(rc == 0);
267  cfg.ntncfg_buf_bulk_nr = 1;
268  rc = m0_net_test_network_ctx_init(&server, &cfg, "0@lo:12345:42:1001");
269  M0_UT_ASSERT(rc == 0);
270 
271  rc = m0_net_test_network_ep_add(&client, "0@lo:12345:42:1001");
272  M0_UT_ASSERT(rc == 0);
273  rc = m0_net_test_network_ep_add(&server, "0@lo:12345:42:1000");
274  M0_UT_ASSERT(rc == 0);
275 
276  /* start of bulk send/recv */
277  bulk_offset_mismatch = false;
278  /* fill bulk buffers with different values */
282  rc_bool = net_buf_data_eq(M0_NET_TEST_BUF_BULK, &client, 0, &server, 0);
283  M0_ASSERT(!rc_bool);
284  rc_bool = net_buf_data_eq(M0_NET_TEST_BUF_BULK, &client, 1, &server, 0);
285  M0_ASSERT(!rc_bool);
286  rc_bool = net_buf_data_eq(M0_NET_TEST_BUF_BULK, &client, 0, &client, 1);
287  M0_ASSERT(!rc_bool);
288  /* init callback semaphores */
289  for (i = 0; i < M0_NET_QT_NR; ++i)
291  /* server: receive ping buf */
292  rc = m0_net_test_network_msg_recv(&server, 0);
293  M0_UT_ASSERT(rc == 0);
294  /* client: add passive sender->active receiver bulk buffer to q */
297  M0_UT_ASSERT(rc == 0);
298  /* client: add passive receiver<-active sender bulk buffer to q */
301  M0_UT_ASSERT(rc == 0);
302  /* client: add buffer descriptors to ping buf */
303  offset = 0;
305  &client, 0, 0, offset);
306  M0_UT_ASSERT(bcount != 0);
307  offset += bcount;
309  &client, 1, 0, offset);
310  M0_UT_ASSERT(bcount != 0);
311  rc_size = m0_net_test_network_bd_nr(&client, 0);
312  M0_UT_ASSERT(rc_size == 2);
313  /* client: send ping buf */
315  M0_UT_ASSERT(rc == 0);
316  /* server: wait for buf from client */
318  /* server: check ping buffer size and data */
319  rc_bool = net_buf_data_eq(M0_NET_TEST_BUF_PING, &client, 0, &server, 0);
320  M0_ASSERT(rc_bool);
321  /* server: extract buf descriptor for active recv */
322  rc_size = m0_net_test_network_bd_nr(&server, 0);
323  M0_UT_ASSERT(rc_size == 2);
324  offset = 0;
326  &server, 0, 0, offset);
327  M0_UT_ASSERT(bcount != 0);
328  offset += bcount;
329  /* server: do active recv */
330  rc = m0_net_test_network_bulk_enqueue(&server, 0, 0,
332  M0_UT_ASSERT(rc == 0);
333  /* server: wait for active recv callback */
335  /* server: extract buf descriptor for active send */
337  &server, 0, 0, offset);
338  M0_UT_ASSERT(bcount != 0);
339  /* server: do active send */
340  rc = m0_net_test_network_bulk_enqueue(&server, 0, 0,
342  M0_UT_ASSERT(rc == 0);
343  /* server: wait for active send callbacks */
345  /*
346  client: now all data are actually sent, so check for passive
347  send/recv callbacks called
348  */
349  /* send message */
351  /* passive bulk send */
353  /* passive bulk recv */
355  /* fini callback semaphores */
356  for (i = 0; i < M0_NET_QT_NR; ++i)
358  /* check for equal bulk buffers on client and server */
359  rc_bool = net_buf_data_eq(M0_NET_TEST_BUF_BULK, &client, 0, &server, 0);
360  M0_ASSERT(rc_bool);
361  rc_bool = net_buf_data_eq(M0_NET_TEST_BUF_BULK, &client, 0, &client, 1);
362  M0_ASSERT(rc_bool);
363  /* end of bulk send/recv */
365 
368 }
369 
370 static void tm_event_cb_empty(const struct m0_net_tm_event *ev)
371 {
372 }
373 
375  const uint32_t buf_index,
376  enum m0_net_queue_type q,
377  const struct m0_net_buffer_event *ev)
378 {
379 }
380 
381 static const struct m0_net_tm_callbacks tm_cb_empty = {
383 };
384 
386  .ntnbc_cb = {
393  }
394 };
395 
399 static bool buf_desc_eq(struct m0_net_test_network_ctx *ctx1,
400  uint32_t buf_index1,
401  struct m0_net_test_network_ctx *ctx2,
402  uint32_t buf_index2)
403 {
404  struct m0_net_buffer *b1;
405  struct m0_net_buffer *b2;
406  struct m0_net_buf_desc *d1;
407  struct m0_net_buf_desc *d2;
408 
409  b1 = m0_net_test_network_buf(ctx1, M0_NET_TEST_BUF_BULK, buf_index1);
410  b2 = m0_net_test_network_buf(ctx2, M0_NET_TEST_BUF_BULK, buf_index2);
411  d1 = &b1->nb_desc;
412  d2 = &b2->nb_desc;
413 
414  return d1->nbd_len == d2->nbd_len &&
415  memcmp(d1->nbd_data, d2->nbd_data, d1->nbd_len) == 0;
416 }
417 
419  int count)
420 {
421  m0_bcount_t bcount;
423  size_t rc_size;
424  int i;
425  bool rc_bool;
426 
427  offset = 0;
428  for (i = 0; i < count; ++i) {
429  /* encode */
431  ctx, i % 2, 0, offset);
432  M0_UT_ASSERT(bcount != 0);
433  offset += bcount;
434  /* check number of buf descriptors in the ping buffer */
435  rc_size = m0_net_test_network_bd_nr(ctx, 0);
436  M0_UT_ASSERT(rc_size == i + 1);
437  }
438  /* prepare to decode */
439  offset = 0;
440  for (i = 0; i < count; ++i) {
441  /* decode */
444  ctx, 2 + i % 2, 0, offset);
445  M0_UT_ASSERT(bcount != 0);
446  offset += bcount;
447  /* compare m0_net_buf_desc's */
448  rc_bool = buf_desc_eq(ctx, i % 2, ctx, 2 + i % 2);
449  M0_UT_ASSERT(rc_bool);
450  }
451 }
452 
454 {
455  static struct m0_net_test_network_cfg cfg;
456  static struct m0_net_test_network_ctx ctx;
457  static struct m0_clink tmwait;
458  int i;
459  int rc;
460 
461  M0_SET0(&cfg);
465  cfg.ntncfg_buf_ping_nr = 2;
467  cfg.ntncfg_buf_bulk_nr = 4;
468  cfg.ntncfg_ep_max = 1;
470  rc = m0_net_test_network_ctx_init(&ctx, &cfg, "0@lo:12345:42:*");
471  M0_UT_ASSERT(rc == 0);
472 
473  /* add some ep - tranfer machine ep */
474  rc = m0_net_test_network_ep_add(&ctx, ctx.ntc_tm->ntm_ep->nep_addr);
475  M0_UT_ASSERT(rc == 0);
476 
477  /* obtain some m0_net_buf_desc */
480  M0_UT_ASSERT(rc == 0);
483  M0_UT_ASSERT(rc == 0);
484 
485  /* run multiple tests */
486  for (i = 0; i < NET_TEST_BUF_DESC_NR; ++i)
488 
489  /* remove bulk buffer from queue */
490  m0_clink_init(&tmwait, NULL);
491  m0_clink_add_lock(&ctx.ntc_tm->ntm_chan, &tmwait);
493  m0_chan_wait(&tmwait);
495  m0_chan_wait(&tmwait);
496  m0_clink_del_lock(&tmwait);
497  m0_clink_fini(&tmwait);
498 
500 }
501 
502 /* This UT verifies and exercies libfabric address decode path. */
504 {
505 #ifndef __KERNEL__
506  static struct m0_net_test_network_cfg cfg;
507  static struct m0_net_test_network_ctx send;
508  int rc;
510  char hostname[100];
511  char ep_str[150];
512 
513  if (USE_LIBFAB) {
514 
516  M0_SET0(&cfg);
517  cfg.ntncfg_tm_cb = ping_tm_cb;
520  cfg.ntncfg_buf_ping_nr = 1;
521  cfg.ntncfg_ep_max = 10;
523 
524  rc = m0_net_test_network_ctx_init(&send, &cfg, "0@lo:12345:42:3000");
525  M0_UT_ASSERT(rc == 0);
526 
527  /* decode: lnet addressing format*/
528  rc = m0_net_test_network_ep_add(&send, "0@lo:12345:42:3001");
529  M0_UT_ASSERT(rc == 0);
530 
531  /* decode: inet addresses of type tcp*/
532  rc = m0_net_test_network_ep_add(&send, "inet:tcp:127.0.0.1@3002");
533  M0_UT_ASSERT(rc == 1);
534  rc = m0_net_test_network_ep_add(&send, "inet:tcp:localhost@3003");
535  M0_UT_ASSERT(rc == 2);
536  /* decode: FQDN of type tcp */
537  memset(&hostname, 0, sizeof(hostname));
538  memset(&ep_str, 0, sizeof(ep_str));
539  rc = gethostname(hostname, sizeof(hostname)-1);
540  M0_UT_ASSERT(rc == 0);
541  sprintf(ep_str, "inet:tcp:%s@3004", hostname);
542  rc = m0_net_test_network_ep_add(&send, ep_str);
543  M0_UT_ASSERT(rc == 3);
544 
560  /* decode: inet addresses of type verbs */
561  rc = m0_net_test_network_ep_add(&send, "inet:verbs:127.0.0.1@3007");
562  M0_UT_ASSERT(rc == 4);
563  /* decode: FQDN of type verbs */
564  memset(&ep_str, 0, sizeof(ep_str));
565  sprintf(ep_str, "inet:verbs:%s@3008", hostname);
566  rc = m0_net_test_network_ep_add(&send, ep_str);
567  M0_UT_ASSERT(rc == 5);
568 
570  }
571 #endif
572 }
573 
574 /*
575  * Local variables:
576  * c-indentation-style: "K&R"
577  * c-basic-offset: 8
578  * tab-width: 8
579  * fill-column: 80
580  * scroll-step: 1
581  * End:
582  */
#define M0_BUFVEC_INIT_BUF(addr_ptr, count_ptr)
Definition: vec.h:165
void m0_net_test_network_buffer_dequeue(struct m0_net_test_network_ctx *ctx, enum m0_net_test_network_buf_type buf_type, int32_t buf_index)
Definition: network.c:500
struct m0_net_test_network_timeouts m0_net_test_network_timeouts_never(void)
Definition: network.c:803
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
Definition: chan.c:336
#define M0_PRE(cond)
#define USE_LIBFAB
Definition: net.h:99
uint32_t ntncfg_buf_ping_nr
Definition: network.h:86
static struct m0_semaphore q
Definition: rwlock.c:55
#define NULL
Definition: misc.h:38
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
Definition: chan.c:201
int m0_net_test_network_msg_recv(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index)
Definition: network.c:469
int m0_net_test_network_ctx_init(struct m0_net_test_network_ctx *ctx, struct m0_net_test_network_cfg *cfg, const char *tm_addr)
Definition: network.c:367
static struct m0_bufvec dst
Definition: xform.c:61
buf_type
Definition: service_ut.c:111
M0_INTERNAL void m0_clink_del_lock(struct m0_clink *link)
Definition: chan.c:293
static const struct m0_net_tm_callbacks bulk_tm_cb
Definition: network.c:229
struct m0_bufvec nb_buffer
Definition: net.h:1322
uint32_t nbd_len
Definition: net_otw_types.h:37
static void ping_tm_event_cb(const struct m0_net_tm_event *ev)
Definition: network.c:94
int m0_net_test_network_ep_add(struct m0_net_test_network_ctx *ctx, const char *ep_addr)
Definition: network.c:380
m0_bcount_t m0_net_test_network_bd_serialize(enum m0_net_test_serialize_op op, struct m0_net_test_network_ctx *ctx, uint32_t buf_bulk_index, uint32_t buf_ping_index, m0_bcount_t offset)
Definition: network.c:655
m0_net_test_network_buffer_cb_proc_t ntnbc_cb[M0_NET_QT_NR]
Definition: network.h:66
uint8_t * nbd_data
Definition: net_otw_types.h:38
static struct m0_net_test_network_buffer_callbacks bulk_buf_cb
Definition: network.c:233
m0_bcount_t nb_length
Definition: net.h:1334
uint64_t m0_bcount_t
Definition: types.h:77
m0_bindex_t nbe_offset
Definition: net.h:1238
#define M0_SET0(obj)
Definition: misc.h:64
static struct m0_semaphore send_sem
Definition: network.c:99
static m0_bcount_t count
Definition: xcode.c:167
static void ping_cb_msg_recv(struct m0_net_test_network_ctx *ctx, const uint32_t buf_index, enum m0_net_queue_type q, const struct m0_net_buffer_event *ev)
Definition: network.c:101
static struct m0_semaphore recv_sem
Definition: network.c:98
static void bulk_cb(struct m0_net_test_network_ctx *ctx, const uint32_t buf_index, enum m0_net_queue_type q, const struct m0_net_buffer_event *ev)
Definition: network.c:212
int m0_net_test_network_bulk_enqueue(struct m0_net_test_network_ctx *ctx, int32_t buf_bulk_index, int32_t ep_index, enum m0_net_queue_type q)
Definition: network.c:479
int i
Definition: dir.c:1033
void m0_net_test_network_ut_buf_desc(void)
Definition: network.c:453
static struct m0_net_test_network_buffer_callbacks ping_buf_cb
Definition: network.c:130
static void ping_cb_impossible(struct m0_net_test_network_ctx *ctx, const uint32_t buf_index, enum m0_net_queue_type q, const struct m0_net_buffer_event *ev)
Definition: network.c:117
static void multiple_buf_desc_encode_decode(struct m0_net_test_network_ctx *ctx, int count)
Definition: network.c:418
m0_bcount_t ntncfg_buf_size_bulk
Definition: network.h:88
M0_INTERNAL m0_bcount_t m0_bufvec_cursor_copy(struct m0_bufvec_cursor *dcur, struct m0_bufvec_cursor *scur, m0_bcount_t num_bytes)
Definition: vec.c:620
struct m0_net_test_network_buffer_callbacks ntncfg_buf_cb
Definition: network.h:82
#define M0_ASSERT(cond)
void(* ntc_event_cb)(const struct m0_net_tm_event *ev)
Definition: net.h:752
Definition: client.h:37
static struct m0_net_test_network_buffer_callbacks buf_cb_empty
Definition: network.c:385
M0_INTERNAL void m0_bufvec_cursor_init(struct m0_bufvec_cursor *cur, const struct m0_bufvec *bvec)
Definition: vec.c:563
void m0_net_test_network_ctx_fini(struct m0_net_test_network_ctx *ctx)
Definition: network.c:374
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
Definition: semaphore.c:38
void * m0_alloc(size_t size)
Definition: memory.c:126
static void tm_event_cb_empty(const struct m0_net_tm_event *ev)
Definition: network.c:370
m0_net_test_network_buf_type
Definition: network.h:45
static m0_bindex_t offset
Definition: dump.c:173
int m0_net_test_network_msg_send(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index, uint32_t ep_index)
Definition: network.c:457
size_t m0_net_test_network_bd_nr(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index)
Definition: network.c:712
void m0_net_test_network_ut_addr_decode(void)
Definition: network.c:503
static m0_bcount_t bv_copy(struct m0_bufvec *dst, struct m0_bufvec *src, m0_bcount_t len)
Definition: network.c:41
static const struct m0_net_tm_callbacks ping_tm_cb
Definition: network.c:126
void m0_clink_add_lock(struct m0_chan *chan, struct m0_clink *link)
Definition: chan.c:255
struct m0_net_buffer * m0_net_test_network_buf(struct m0_net_test_network_ctx *ctx, enum m0_net_test_network_buf_type buf_type, uint32_t buf_index)
Definition: network.c:725
uint32_t ntncfg_ep_max
Definition: network.h:92
m0_net_queue_type
Definition: net.h:591
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
Definition: semaphore.c:45
m0_bcount_t ntncfg_buf_size_ping
Definition: network.h:84
struct m0_net_test_network_timeouts ntncfg_timeouts
Definition: network.h:97
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
Definition: chan.c:208
void m0_net_test_network_ut_bulk(void)
Definition: network.c:244
static const struct m0_net_tm_callbacks tm_cb_empty
Definition: network.c:381
static void cb_empty(struct m0_net_test_network_ctx *ctx, const uint32_t buf_index, enum m0_net_queue_type q, const struct m0_net_buffer_event *ev)
Definition: network.c:374
static bool buf_desc_eq(struct m0_net_test_network_ctx *ctx1, uint32_t buf_index1, struct m0_net_test_network_ctx *ctx2, uint32_t buf_index2)
Definition: network.c:399
uint32_t ntncfg_buf_bulk_nr
Definition: network.h:90
static bool bulk_offset_mismatch
Definition: network.c:210
struct m0_net_buf_desc nb_desc
Definition: net.h:1412
void m0_net_test_network_buf_fill(struct m0_net_test_network_ctx *ctx, enum m0_net_test_network_buf_type buf_type, uint32_t buf_index, uint8_t fill)
Definition: network.c:756
static uint32_t buf_size
Definition: ad.c:75
M0_INTERNAL void m0_semaphore_down(struct m0_semaphore *semaphore)
Definition: semaphore.c:49
Definition: nucleus.c:42
static struct m0_semaphore bulk_cb_sem[M0_NET_QT_NR]
Definition: network.c:209
void m0_net_test_network_ut_ping(void)
Definition: network.c:141
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
Definition: semaphore.c:65
static bool net_buf_data_eq(enum m0_net_test_network_buf_type buf_type, struct m0_net_test_network_ctx *ctx1, uint32_t buf_index1, struct m0_net_test_network_ctx *ctx2, uint32_t buf_index2)
Definition: network.c:54
int m0_net_test_network_buf_resize(struct m0_net_test_network_ctx *ctx, enum m0_net_test_network_buf_type buf_type, uint32_t buf_index, m0_bcount_t new_size)
Definition: network.c:741
void m0_free(void *data)
Definition: memory.c:146
static void ping_cb_msg_send(struct m0_net_test_network_ctx *ctx, const uint32_t buf_index, enum m0_net_queue_type q, const struct m0_net_buffer_event *ev)
Definition: network.c:109
struct m0_pdclust_src_addr src
Definition: fd.c:108
int32_t rc
Definition: trigger_fop.h:47
struct m0_net_tm_callbacks ntncfg_tm_cb
Definition: network.h:80
#define M0_UT_ASSERT(a)
Definition: ut.h:46
Definition: vec.h:145
#define M0_IMPOSSIBLE(fmt,...)