72 arr = type_ping ?
ctx->ntc_buf_ping :
ctx->ntc_buf_bulk;
74 index_max = type_ping ?
ctx->ntc_cfg.ntncfg_buf_ping_nr :
75 ctx->ntc_cfg.ntncfg_buf_bulk_nr;
109 ctx->ntc_cfg.ntncfg_buf_cb.ntnbc_cb[
q](
ctx, buf_index,
q, ev);
149 if (
size > buf_size_max)
153 seg_size_max = buf_size_max;
160 seg_num =
size / seg_size_max + !!(
size % seg_size_max);
162 if (
seg_size * seg_num > buf_size_max)
169 buf->nb_max_receive_msgs = 1;
170 buf->nb_min_receive_size =
size;
174 buf->nb_desc.nbd_len = 0;
176 buf->nb_app_private =
ctx;
203 for (
i = 0;
i < buf_nr; ++
i)
215 bool is_pingbuf = (
buf ==
ctx->ntc_buf_ping);
217 for (
i = 0;
i < buf_nr; ++
i) {
253 return ctx->ntc_ep_nr <=
ctx->ntc_cfg.ntncfg_ep_max;
297 ctx->ntc_tm->ntm_callbacks = &
ctx->ntc_cfg.ntncfg_tm_cb;
303 rc =
ctx->ntc_cfg.ntncfg_sync ?
323 ctx->ntc_cfg.ntncfg_buf_ping_nr,
324 ctx->ntc_cfg.ntncfg_buf_size_ping,
ctx);
328 ctx->ntc_cfg.ntncfg_buf_bulk_nr,
329 ctx->ntc_cfg.ntncfg_buf_size_bulk,
ctx);
339 for (
i = 0;
i <
ctx->ntc_ep_nr; ++
i)
388 if (
ctx->ntc_ep_nr !=
ctx->ntc_cfg.ntncfg_ep_max) {
393 rc =
ctx->ntc_ep_nr++;
421 return rc >= 0 ? 0 :
rc;
443 uint32_t buf_ping_index,
449 M0_PRE(buf_ping_index < ctx->ntc_cfg.ntncfg_buf_ping_nr);
451 nb = &
ctx->ntc_buf_ping[buf_ping_index];
458 uint32_t buf_ping_index,
462 M0_PRE(buf_ping_index < ctx->ntc_cfg.ntncfg_buf_ping_nr);
463 M0_PRE(ep_index < ctx->ntc_ep_nr);
466 ctx->ntc_ep[ep_index]);
470 uint32_t buf_ping_index)
473 M0_PRE(buf_ping_index < ctx->ntc_cfg.ntncfg_buf_ping_nr);
480 int32_t buf_bulk_index,
487 M0_PRE(buf_bulk_index < ctx->ntc_cfg.ntncfg_buf_bulk_nr);
489 buf = &
ctx->ntc_buf_bulk[buf_bulk_index];
492 M0_PRE(ep_index < ctx->ntc_ep_nr);
493 buf->nb_ep =
ctx->ntc_ep[ep_index];
570 buf->nb_desc.nbd_len = 0;
573 if (
buf->nb_desc.nbd_data ==
NULL)
579 buf->nb_desc.nbd_len,
true,
580 bv, bv_offset + len_total);
627 uint32_t buf_ping_index,
635 M0_PRE(buf_ping_index < ctx->ntc_cfg.ntncfg_buf_ping_nr);
657 uint32_t buf_bulk_index,
658 uint32_t buf_ping_index,
669 M0_PRE(buf_bulk_index < ctx->ntc_cfg.ntncfg_buf_bulk_nr);
670 M0_PRE(buf_ping_index < ctx->ntc_cfg.ntncfg_buf_ping_nr);
713 uint32_t buf_ping_index)
719 uint32_t buf_ping_index)
733 ctx->ntc_cfg.ntncfg_buf_ping_nr :
734 ctx->ntc_cfg.ntncfg_buf_bulk_nr));
737 &
ctx->ntc_buf_ping[buf_index] : &
ctx->ntc_buf_bulk[buf_index];
774 for (
i = 0;
i < length; ++
i) {
786 M0_PRE(ep_index < ctx->ntc_ep_nr);
788 return ctx->ntc_ep[ep_index];
794 size_t addr_len = strlen(
ep_addr) + 1;
797 for (
i = 0;
i <
ctx->ntc_ep_nr; ++
i)
798 if (strncmp(
ep_addr,
ctx->ntc_ep[
i]->nep_addr, addr_len) == 0)
static m0_bcount_t seg_size
M0_INTERNAL m0_bcount_t m0_net_domain_get_max_buffer_segment_size(struct m0_net_domain *dom)
TYPE_DESCR(net_test_network_bd)
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)
struct m0_net_test_network_timeouts m0_net_test_network_timeouts_never(void)
M0_INTERNAL void m0_chan_wait(struct m0_clink *link)
#define M0_ALLOC_ARR(arr, nr)
void m0_net_domain_fini(struct m0_net_domain *dom)
M0_INTERNAL int m0_net_tm_start(struct m0_net_transfer_mc *tm, const char *addr)
static struct m0_semaphore q
M0_INTERNAL void m0_clink_init(struct m0_clink *link, m0_chan_cb_t cb)
int m0_net_test_network_msg_recv(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index)
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)
m0_bcount_t m0_net_test_serialize(enum m0_net_test_serialize_op op, void *obj, const struct m0_net_test_descr descr[], size_t descr_nr, struct m0_bufvec *bv, m0_bcount_t bv_offset)
M0_INTERNAL void m0_clink_del_lock(struct m0_clink *link)
struct m0_bufvec nb_buffer
M0_INTERNAL int m0_net_buffer_register(struct m0_net_buffer *buf, struct m0_net_domain *dom)
static const char * ep_addr
const m0_time_t M0_TIME_NEVER
struct m0_net_end_point * m0_net_test_network_ep(struct m0_net_test_network_ctx *ctx, size_t ep_index)
int m0_net_test_network_ep_add(struct m0_net_test_network_ctx *ctx, const char *ep_addr)
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)
enum m0_net_tm_state ntm_state
int const char const void * value
int m0_net_test_network_msg_send_ep(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index, struct m0_net_end_point *ep)
static size_t network_bd_nr_add(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index, int32_t value)
M0_INTERNAL void * m0_bufvec_cursor_addr(struct m0_bufvec_cursor *cur)
M0_INTERNAL bool m0_net_buffer_del(struct m0_net_buffer *buf, struct m0_net_transfer_mc *tm)
static m0_bcount_t network_bds_serialize(enum m0_net_test_serialize_op op, size_t *nr, struct m0_bufvec *bv)
static m0_bcount_t net_test_len_accumulate(m0_bcount_t accumulator, m0_bcount_t addend)
struct m0_net_buffer * nbe_buffer
m0_time_t ntnt_timeout[M0_NET_QT_NR]
m0_bcount_t ntnbd_buf_size
int m0_bufvec_alloc_aligned(struct m0_bufvec *bufvec, uint32_t num_segs, m0_bcount_t seg_size, unsigned shift)
M0_INTERNAL bool m0_bufvec_cursor_move(struct m0_bufvec_cursor *cur, m0_bcount_t count)
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)
static int net_test_buf_init(struct m0_net_buffer *buf, m0_bcount_t size, struct m0_net_test_network_ctx *ctx, bool is_pingbuf)
M0_INTERNAL int m0_net_tm_init(struct m0_net_transfer_mc *tm, struct m0_net_domain *dom)
enum m0_net_queue_type nb_qtype
M0_INTERNAL void m0_net_tm_fini(struct m0_net_transfer_mc *tm)
m0_time_t m0_time_now(void)
static void net_test_bufs_fini(struct m0_net_buffer *buf, uint32_t buf_nr, struct m0_net_domain *dom)
static uint32_t cb_buf_index_extract(const struct m0_net_buffer_event *ev, struct m0_net_test_network_ctx *ctx, enum m0_net_queue_type q)
static struct m0_stob_domain * dom
M0_INTERNAL void m0_bufvec_cursor_init(struct m0_bufvec_cursor *cur, const struct m0_bufvec *bvec)
struct m0_net_xprt * m0_net_xprt_default_get(void)
void m0_net_test_network_ctx_fini(struct m0_net_test_network_ctx *ctx)
void * m0_alloc(size_t size)
#define FIELD_DESCR(type, field)
m0_net_test_network_buf_type
M0_INTERNAL void m0_net_desc_free(struct m0_net_buf_desc *desc)
static struct m0_net_buffer_callbacks net_test_network_buf_cb
M0_INTERNAL m0_bcount_t m0_net_domain_get_max_buffer_size(struct m0_net_domain *dom)
m0_net_buffer_cb_proc_t nbc_cb[M0_NET_QT_NR]
static m0_bindex_t offset
int m0_net_test_network_msg_send(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index, uint32_t ep_index)
size_t m0_net_test_network_bd_nr(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index)
m0_time_t m0_time_add(const m0_time_t t1, const m0_time_t t2)
static struct fdmi_ctx ctx
M0_INTERNAL int m0_net_tm_stop(struct m0_net_transfer_mc *tm, bool abort)
M0_INTERNAL void m0_bufvec_free_aligned(struct m0_bufvec *bufvec, unsigned shift)
M0_INTERNAL m0_bcount_t m0_vec_count(const struct m0_vec *vec)
void m0_clink_add_lock(struct m0_chan *chan, struct m0_clink *link)
bool m0_net_test_slist_invariant(const struct m0_net_test_slist *slist)
void m0_net_end_point_put(struct m0_net_end_point *ep)
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)
static uint8_t fail[DATA_UNIT_COUNT_MAX+PARITY_UNIT_COUNT_MAX]
static void cb_default(const struct m0_net_buffer_event *ev)
M0_INTERNAL void m0_net_buffer_deregister(struct m0_net_buffer *buf, struct m0_net_domain *dom)
int m0_net_domain_init(struct m0_net_domain *dom, const struct m0_net_xprt *xprt)
M0_INTERNAL int m0_net_buffer_event_deliver_synchronously(struct m0_net_transfer_mc *tm)
static void net_test_tm_stop(struct m0_net_transfer_mc *tm)
static int net_test_buf_queue(struct m0_net_test_network_ctx *ctx, struct m0_net_buffer *nb, enum m0_net_queue_type q)
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL int m0_net_buffer_add(struct m0_net_buffer *buf, struct m0_net_transfer_mc *tm)
static m0_bcount_t network_bd_serialize(enum m0_net_test_serialize_op op, struct m0_net_buffer *buf, struct m0_bufvec *bv, m0_bcount_t bv_offset)
M0_INTERNAL void m0_clink_fini(struct m0_clink *link)
int fini(struct workload *w)
static int net_test_bufs_init(struct m0_net_buffer *buf, uint32_t buf_nr, m0_bcount_t size, struct m0_net_test_network_ctx *ctx)
int m0_net_test_network_ep_add_slist(struct m0_net_test_network_ctx *ctx, const struct m0_net_test_slist *eps)
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)
ssize_t m0_net_test_network_ep_search(struct m0_net_test_network_ctx *ctx, const char *ep_addr)
static void net_test_buf_fini(struct m0_net_buffer *buf, struct m0_net_domain *dom)
static int net_test_network_ctx_initfini(struct m0_net_test_network_ctx *ctx, struct m0_net_test_network_cfg *cfg, const char *tm_addr)
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)
static struct m0_net_test_network_ctx * cb_ctx_extract(const struct m0_net_buffer_event *ev)
m0_bcount_t m0_net_test_serialize_data(enum m0_net_test_serialize_op op, void *data, m0_bcount_t data_len, bool plain_data, struct m0_bufvec *bv, m0_bcount_t bv_offset)
bool m0_net_test_network_ctx_invariant(struct m0_net_test_network_ctx *ctx)
M0_INTERNAL int m0_net_end_point_create(struct m0_net_end_point **epp, struct m0_net_transfer_mc *tm, const char *addr)
void m0_net_test_network_bd_nr_dec(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index)
#define USE_TYPE_DESCR(type_name)
struct m0_net_end_point * nb_ep