38 #define NET_TEST_MODULE_NAME node_ping 274 LOGD(
"buf_index = %lu", buf_index);
275 buf_state_tlist_add_tail(&
ctx->npc_client->npcc_to,
276 &
ctx->npc_buf_state[buf_index]);
282 LOGD(
"buf_index = %lu", buf_index);
283 buf_state_tlist_del(&
ctx->npc_buf_state[buf_index]);
291 bs = buf_state_tlist_head(&
ctx->npc_client->npcc_to);
292 buf_index = bs ==
NULL ? -1 : bs -
ctx->npc_buf_state;
295 (buf_index >= 0 && buf_index < ctx->npc_buf_nr));
305 size_t concurrency =
ctx->npc_client->npcc_concurrency;
307 for (
i = 0;
i < concurrency; ++
i) {
308 buf_index = concurrency * server_index +
i;
309 if (
ctx->npc_buf_state[buf_index].bs_seq ==
seq)
334 LOGD(
"q = %d, buf_index = %lu, ep_index = %lu, %s",
335 q, buf_index, ep_index,
ctx->npc_net.ntc_tm->ntm_ep->nep_addr);
370 M0_PRE(buf_index < ctx->npc_buf_nr / 2);
372 bs = &
ctx->npc_buf_state[buf_index];
374 ep_index = buf_index /
cctx->npcc_concurrency;
380 bs->
bs_seq =
ctx->npc_nh.ntnh_transfers_started_nr;
415 ssize_t server_index;
416 ssize_t buf_index_send;
421 M0_PRE(buf_index >=
ctx->npc_buf_nr / 2 &&
422 buf_index < ctx->npc_buf_nr);
432 if (server_index == -1)
444 if (buf_index_send == -1)
446 bs_send = &
ctx->npc_buf_state[buf_index_send];
459 if (bs_send ==
NULL) {
462 return bs_send !=
NULL;
477 bs = &
ctx->npc_buf_state[buf_index];
479 LOGD(
"role = %d, buf_index = %u, nbe_status = %d, q = %d",
505 const uint32_t buf_index,
510 "net-test ping node can't have it.");
531 bs = &
ctx->npc_buf_state[buf_index];
536 ++
ctx->npc_client->npcc_msg_rt;
611 if (
ctx->npc_buf_rb_done)
614 bs = &
ctx->npc_buf_state[buf_index];
615 LOGD(
"POP from ringbuf: %lu, role = %d",
616 buf_index,
ctx->npc_nh.ntnh_role);
634 for (
i = 0;
i <
ctx->npc_buf_nr; ++
i) {
639 for (
i = 0;
i <
ctx->npc_buf_nr; ++
i)
654 bs = &
ctx->npc_buf_state[buf_index];
664 size_t half_buf =
ctx->npc_buf_nr / 2;
669 for (
i = 0;
i < half_buf; ++
i)
672 for (
i = 0;
i < half_buf; ++
i)
675 for (
i = 0;
i <
ctx->npc_buf_nr; ++
i)
689 if (
ctx->npc_nh.ntnh_test_initialized)
703 goto free_buf_rb_sem;
705 if (
ctx->npc_buf_state ==
NULL)
717 ctx->npc_buf_send_timeout;
728 buf_state_tlist_init(&
ctx->npc_client->npcc_to);
729 for (
i = 0;
i <
ctx->npc_buf_nr; ++
i)
730 buf_state_tlink_init(&
ctx->npc_buf_state[
i]);
736 for (
i = 0;
i <
ctx->npc_buf_nr; ++
i)
737 buf_state_tlink_fini(&
ctx->npc_buf_state[
i]);
738 buf_state_tlist_fini(&
ctx->npc_client->npcc_to);
764 ctx->npc_nh.ntnh_test_initialized =
false;
813 if (
ctx->npc_nh.ntnh_test_initialized) {
827 ctx->npc_client = role_client ? &
ctx->npc__client :
NULL;
828 ctx->npc_server = !role_client ? &
ctx->npc__server :
NULL;
838 if (
ctx->npc_buf_size < 1 ||
ctx->npc_buf_nr < 1 ||
852 reply->ntc_done.ntcd_errno =
rc;
869 sd = &
ctx->npc_nh.ntnh_sd;
880 ctx->npc_buf_rb_done =
false;
890 reply->ntc_done.ntcd_errno =
rc;
906 ctx->npc_buf_rb_done =
true;
916 reply->ntc_done.ntcd_errno = 0;
960 #undef NET_TEST_MODULE_NAME
static int node_ping_cmd_stop(void *ctx_, const struct m0_net_test_cmd *cmd, struct m0_net_test_cmd *reply)
static int node_ping_cmd_start(void *ctx_, const struct m0_net_test_cmd *cmd, struct m0_net_test_cmd *reply)
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)
enum m0_net_test_cmd_type ntsch_type
struct m0_net_test_network_timeouts m0_net_test_network_timeouts_never(void)
#define M0_ALLOC_ARR(arr, nr)
void m0_net_test_timestamp_init(struct m0_net_test_timestamp *t, uint64_t seq)
struct m0_net_test_slist ntci_ep
uint32_t ntncfg_buf_ping_nr
static void node_ping_to_del(struct node_ping_ctx *ctx, size_t buf_index)
static struct m0_semaphore q
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)
struct m0_net_test_mps ntcsd_mps_recv
struct m0_net_test_service * npc_svc
static void node_ping_to_add(struct node_ping_ctx *ctx, size_t buf_index)
static bool node_ping_client_recv_cb(struct node_ping_ctx *ctx, struct buf_state *bs, size_t buf_index)
static void node_ping_client_cb2(struct node_ping_ctx *ctx, size_t buf_index)
M0_INTERNAL bool m0_semaphore_trydown(struct m0_semaphore *semaphore)
int m0_thread_join(struct m0_thread *q)
void m0_net_test_service_state_change(struct m0_net_test_service *svc, enum m0_net_test_service_state state)
static void * node_ping_init(struct m0_net_test_service *svc)
static void sd_update(struct node_ping_ctx *ctx, enum m0_net_test_nh_msg_type type, enum m0_net_test_nh_msg_status status, enum m0_net_test_nh_msg_direction direction)
struct m0_net_end_point * m0_net_test_network_ep(struct m0_net_test_network_ctx *ctx, size_t ep_index)
M0_INTERNAL bool m0_semaphore_timeddown(struct m0_semaphore *semaphore, const m0_time_t abs_timeout)
void m0_net_test_nh_sd_copy_locked(struct m0_net_test_nh *nh)
m0_net_test_network_buffer_cb_proc_t ntnbc_cb[M0_NET_QT_NR]
int m0_net_test_ringbuf_init(struct m0_net_test_ringbuf *rb, size_t size)
struct m0_net_test_ringbuf npc_buf_rb
static ssize_t node_ping_to_peek(struct node_ping_ctx *ctx)
void m0_net_test_nh_sd_update_rtt(struct m0_net_test_nh *nh, m0_time_t rtt)
struct node_ping_server_ctx * npc_server
static const struct m0_net_tm_callbacks node_ping_tm_cb
static struct m0_rpc_client_ctx cctx
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 struct node_ping_ctx * node_ping_ctx_from_net_ctx(struct m0_net_test_network_ctx *net_ctx)
#define M0_THREAD_INIT(thread, TYPE, init, func, arg, namefmt,...)
struct m0_semaphore npc_buf_rb_sem
M0_TL_DEFINE(buf_state, static, struct buf_state)
struct m0_thread npc_thread
static int node_ping_test_init_fini(struct node_ping_ctx *ctx, const struct m0_net_test_cmd *cmd)
#define container_of(ptr, type, member)
struct m0_net_buffer * nbe_buffer
m0_time_t ntnt_timeout[M0_NET_QT_NR]
struct m0_semaphore npc_buf_q_sem
struct m0_net_end_point * nbe_ep
static int node_ping_step(void *ctx_)
m0_bcount_t ntci_msg_size
m0_net_test_nh_msg_status
m0_bcount_t m0_net_test_timestamp_serialize(enum m0_net_test_serialize_op op, struct m0_net_test_timestamp *t, struct m0_bufvec *bv, m0_bcount_t bv_offset)
struct m0_net_test_nh npc_nh
m0_net_test_nh_msg_direction
static m0_time_t node_ping_timestamp_put(struct m0_net_test_network_ctx *net_ctx, uint32_t buf_index, uint64_t seq)
static int node_ping_cmd_init(void *ctx_, const struct m0_net_test_cmd *cmd, struct m0_net_test_cmd *reply)
size_t m0_net_test_ringbuf_pop(struct m0_net_test_ringbuf *rb)
struct m0_net_buffer_event bs_ev
m0_time_t ntci_buf_send_timeout
struct node_ping_server_ctx npc__server
bool m0_net_test_nh_transfer_next(struct m0_net_test_nh *nh)
M0_TL_DESCR_DEFINE(buf_state, "buf_state", static, struct buf_state, bs_link, bs_link_magic, M0_NET_TEST_BS_LINK_MAGIC, M0_NET_TEST_BS_HEAD_MAGIC)
bool npc_test_initialized
static struct m0_net_test_service_cmd_handler node_ping_cmd_handler[]
enum m0_net_queue_type nb_qtype
void m0_net_test_ringbuf_fini(struct m0_net_test_ringbuf *rb)
struct m0_net_test_cmd_init ntc_init
enum m0_net_test_role ntci_role
struct m0_net_test_network_buffer_callbacks ntncfg_buf_cb
static void node_ping_buf_enqueue_recv(struct node_ping_ctx *ctx, size_t buf_index)
static void node_ping_to_check(struct node_ping_ctx *ctx)
void(* ntc_event_cb)(const struct m0_net_tm_event *ev)
m0_time_t m0_time_now(void)
struct m0_net_test_mps ntcsd_mps_send
static void node_ping_tm_event_cb(const struct m0_net_tm_event *ev)
void m0_net_test_nh_cmd_status(struct m0_net_test_nh *nh, const struct m0_net_test_cmd *cmd, struct m0_net_test_cmd *reply)
void m0_thread_fini(struct m0_thread *q)
void m0_net_test_ringbuf_push(struct m0_net_test_ringbuf *rb, size_t value)
static void node_ping_rb_fill(struct node_ping_ctx *ctx)
static void node_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)
void m0_net_test_network_ctx_fini(struct m0_net_test_network_ctx *ctx)
static void node_ping_buf_enqueue(struct node_ping_ctx *ctx, size_t buf_index, enum m0_net_queue_type q, struct m0_net_end_point *ep, size_t ep_index)
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
void m0_net_test_nh_sd_update(struct m0_net_test_nh *nh, enum m0_net_test_nh_msg_type type, enum m0_net_test_nh_msg_status status, enum m0_net_test_nh_msg_direction direction)
m0_time_t npc_buf_send_timeout
static int node_ping_cmd_status(void *ctx_, const struct m0_net_test_cmd *cmd, struct m0_net_test_cmd *reply)
m0_time_t ntcsd_time_start
M0_INTERNAL void m0_net_end_point_get(struct m0_net_end_point *ep)
uint64_t ntci_msg_concurrency
int m0_net_test_network_msg_send(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index, uint32_t ep_index)
static void node_ping_msg_cb(struct m0_net_test_network_ctx *net_ctx, uint32_t buf_index, enum m0_net_queue_type q, const struct m0_net_buffer_event *ev)
m0_time_t m0_time_add(const m0_time_t t1, const m0_time_t t2)
static struct fdmi_ctx ctx
static struct m0_net_test_network_buffer_callbacks node_ping_buf_cb
enum m0_net_test_type ntci_type
static bool node_ping_timestamp_get(struct m0_net_test_network_ctx *net_ctx, uint32_t buf_index, struct m0_net_test_timestamp *ts)
void m0_net_test_mps_init(struct m0_net_test_mps *mps, unsigned long messages, m0_time_t timestamp, m0_time_t interval)
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 void node_ping_client_send(struct node_ping_ctx *ctx, size_t buf_index)
static ssize_t node_ping_client_search_seq(struct node_ping_ctx *ctx, size_t server_index, uint64_t seq)
static void node_ping_client_handle(struct node_ping_ctx *ctx, struct buf_state *bs, size_t buf_index)
#define M0_ALLOC_PTR(ptr)
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
m0_bcount_t ntncfg_buf_size_ping
struct buf_state * npc_buf_state
void m0_net_test_nh_init(struct m0_net_test_nh *nh, const struct m0_net_test_cmd_init *icmd)
m0_time_t m0_time_sub(const m0_time_t t1, const m0_time_t t2)
static struct m0_net_test_service svc
struct m0_net_test_service_ops m0_net_test_node_ping_ops
enum m0_net_queue_type bs_q
struct m0_net_test_network_ctx npc_net
struct m0_net_test_network_timeouts ntncfg_timeouts
bool m0_net_test_ringbuf_is_empty(struct m0_net_test_ringbuf *rb)
struct node_ping_client_ctx * npc_client
int fini(struct workload *w)
#define M0_MKTIME(secs, ns)
int m0_net_test_network_ep_add_slist(struct m0_net_test_network_ctx *ctx, const struct m0_net_test_slist *eps)
ssize_t m0_net_test_network_ep_search(struct m0_net_test_network_ctx *ctx, const char *ep_addr)
M0_INTERNAL void m0_semaphore_down(struct m0_semaphore *semaphore)
void *(* ntso_init)(struct m0_net_test_service *svc)
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
static void node_ping_fini(void *ctx_)
static struct m0_dtm_oper_descr reply
static void node_ping_server_handle(struct node_ping_ctx *ctx, struct buf_state *bs, size_t buf_index)
static void node_ping_worker(struct node_ping_ctx *ctx)
static void * node_ping_initfini(void *ctx_, struct m0_net_test_service *svc)
struct m0_net_tm_callbacks ntncfg_tm_cb
struct node_ping_client_ctx npc__client
#define M0_IMPOSSIBLE(fmt,...)