34 #define NET_TEST_MODULE_NAME commands 197 return len_total == 0 ? -EINVAL : 0;
228 const uint32_t buf_index,
237 LOGD(
"M0_NET_QT_MSG_RECV commands callback from %s",
243 ctx->ntcc_buf_status[buf_index].ntcbs_ep = ev->
nbe_ep;
244 ctx->ntcc_buf_status[buf_index].ntcbs_buf_status = ev->
nbe_status;
254 const uint32_t buf_index,
263 LOGD(
"M0_NET_QT_MSG_SEND commands callback to %s",
275 const uint32_t buf_index,
280 M0_IMPOSSIBLE(
"commands bulk buffer callback is impossible");
303 M0_PRE(buf_index >=
ctx->ntcc_ep_nr && buf_index < ctx->ntcc_ep_nr * 2);
305 ctx->ntcc_buf_status[buf_index].ntcbs_in_recv_queue =
true;
308 ctx->ntcc_buf_status[buf_index].ntcbs_in_recv_queue =
false;
323 if (
ctx->ntcc_buf_status[buf_index].ntcbs_ep !=
NULL)
330 M0_PRE(buf_index >=
ctx->ntcc_ep_nr && buf_index < ctx->ntcc_ep_nr * 2);
332 return ctx->ntcc_buf_status[buf_index].ntcbs_in_recv_queue;
341 for (
i = 0;
i <
nr; ++
i)
345 for (
i = 0;
i <
nr; ++
i)
349 for (
i = 0;
i <
nr; ++
i)
376 ctx->ntcc_send_cb = send_cb;
391 if (
ctx->ntcc_buf_status ==
NULL)
405 goto free_buf_status;
410 for (
i = 0;
i <
ctx->ntcc_ep_nr; ++
i) {
467 LOGD(
"m0_net_test_commands_send: from %s to %lu %s cmd->ntc_type = %d",
495 LOGD(
"m0_net_test_commands_send_wait_all enter");
499 nr =
ctx->ntcc_send_nr;
500 ctx->ntcc_send_nr = 0;
503 LOGD(
"nr = %ld", (
long)
nr);
504 for (
i = 0;
i <
nr; ++
i) {
505 LOGD(
"semaphore_down() #%ld", (
long)
i);
508 LOGD(
"m0_net_test_commands_send_wait_all leave");
540 rc =
ctx->ntcc_buf_status[buf_index].ntcbs_buf_status;
550 ep =
ctx->ntcc_buf_status[buf_index].ntcbs_ep;
558 ctx->ntcc_buf_status[buf_index].ntcbs_in_recv_queue =
false;
560 LOGD(
"m0_net_test_commands_recv: from %lu %s to %s " 561 "rc = %d cmd->ntc_type = %d",
564 ctx->ntcc_net.ntc_tm->ntm_ep->nep_addr,
588 if (
ctx->ntcc_ep_nr == 0)
590 if (
ctx->ntcc_ep_nr !=
ctx->ntcc_net.ntc_ep_nr)
592 if (
ctx->ntcc_ep_nr * 2 !=
ctx->ntcc_net.ntc_cfg.ntncfg_buf_ping_nr)
594 if (
ctx->ntcc_net.ntc_cfg.ntncfg_buf_bulk_nr != 0)
599 #undef NET_TEST_MODULE_NAME
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_bcount_t m0_net_test_stats_serialize(enum m0_net_test_serialize_op op, struct m0_net_test_stats *stats, struct m0_bufvec *bv, m0_bcount_t bv_offset)
#define M0_ALLOC_ARR(arr, nr)
struct m0_net_test_slist ntci_ep
M0_INTERNAL void m0_mutex_unlock(struct m0_mutex *mutex)
int m0_net_test_commands_init(struct m0_net_test_cmd_ctx *ctx, const char *cmd_ep, m0_time_t send_timeout, m0_net_test_commands_send_cb_t send_cb, struct m0_net_test_slist *ep_list)
uint32_t ntncfg_buf_ping_nr
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)
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)
struct m0_net_test_mps ntcsd_mps_recv
static m0_bcount_t cmd_status_data_serialize(enum m0_net_test_serialize_op op, struct m0_net_test_cmd_status_data *sd, struct m0_bufvec *bv, m0_bcount_t offset)
const m0_time_t M0_TIME_NEVER
static int commands_initfini(struct m0_net_test_cmd_ctx *ctx, const char *cmd_ep, m0_time_t send_timeout, m0_net_test_commands_send_cb_t send_cb, struct m0_net_test_slist *ep_list, bool init)
struct m0_net_test_stats ntcsd_rtt
M0_INTERNAL bool m0_semaphore_timeddown(struct m0_semaphore *semaphore, const m0_time_t abs_timeout)
struct m0_net_test_cmd_status_data ntc_status_data
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)
static const struct m0_net_tm_callbacks net_test_commands_tm_cb
int m0_net_test_commands_recv_enqueue(struct m0_net_test_cmd_ctx *ctx, size_t buf_index)
static void commands_cb_msg_recv(struct m0_net_test_network_ctx *net_ctx, const uint32_t buf_index, enum m0_net_queue_type q, const struct m0_net_buffer_event *ev)
TYPE_DESCR(m0_net_test_cmd)
#define container_of(ptr, type, member)
static m0_bcount_t net_test_len_accumulate(m0_bcount_t accumulator, m0_bcount_t addend)
M0_INTERNAL void m0_mutex_lock(struct m0_mutex *mutex)
struct m0_net_test_msg_nr ntcsd_bulk_nr_send
struct m0_net_buffer * nbe_buffer
m0_time_t ntnt_timeout[M0_NET_QT_NR]
static void commands_recv_dequeue_nr(struct m0_net_test_cmd_ctx *ctx, size_t nr)
struct m0_net_end_point * nbe_ep
struct m0_net_test_msg_nr ntcsd_transfers
static void commands_recv_ep_put(struct m0_net_test_cmd_ctx *ctx, size_t buf_index)
bool m0_net_test_slist_unique(const struct m0_net_test_slist *slist)
size_t m0_net_test_ringbuf_pop(struct m0_net_test_ringbuf *rb)
void m0_net_test_commands_received_free(struct m0_net_test_cmd *cmd)
static void commands_cb_msg_send(struct m0_net_test_network_ctx *net_ctx, const uint32_t buf_index, enum m0_net_queue_type q, const struct m0_net_buffer_event *ev)
void m0_net_test_commands_fini(struct m0_net_test_cmd_ctx *ctx)
void m0_net_test_ringbuf_fini(struct m0_net_test_ringbuf *rb)
struct m0_net_test_cmd_init ntc_init
struct m0_net_test_network_buffer_callbacks ntncfg_buf_cb
int m0_net_test_commands_send(struct m0_net_test_cmd_ctx *ctx, struct m0_net_test_cmd *cmd)
static void commands_recv_dequeue(struct m0_net_test_cmd_ctx *ctx, size_t buf_index)
void m0_net_test_slist_fini(struct m0_net_test_slist *slist)
void(* ntc_event_cb)(const struct m0_net_tm_event *ev)
static int cmd_serialize(enum m0_net_test_serialize_op op, struct m0_net_test_cmd *cmd, struct m0_net_buffer *buf, m0_bcount_t offset, m0_bcount_t *length)
void m0_net_test_commands_send_wait_all(struct m0_net_test_cmd_ctx *ctx)
struct m0_net_test_mps ntcsd_mps_send
struct m0_net_test_msg_nr ntcsd_msg_nr_recv
void m0_net_test_ringbuf_push(struct m0_net_test_ringbuf *rb, size_t value)
int m0_net_test_commands_recv(struct m0_net_test_cmd_ctx *ctx, struct m0_net_test_cmd *cmd, m0_time_t deadline)
static void cmd_free(struct m0_net_test_cmd *cmd)
void m0_net_test_network_ctx_fini(struct m0_net_test_network_ctx *ctx)
M0_INTERNAL int m0_semaphore_init(struct m0_semaphore *semaphore, unsigned value)
static struct m0_net_test_cmd_ctx * cmd_ctx_extract(struct m0_net_test_network_ctx *net_ctx)
M0_INTERNAL void m0_mutex_init(struct m0_mutex *mutex)
#define FIELD_DESCR(type, field)
M0_INTERNAL void m0_net_end_point_get(struct m0_net_end_point *ep)
static m0_bindex_t offset
m0_bcount_t m0_net_test_str_serialize(enum m0_net_test_serialize_op op, char **str, struct m0_bufvec *bv, m0_bcount_t bv_offset)
int m0_net_test_network_msg_send(struct m0_net_test_network_ctx *ctx, uint32_t buf_ping_index, uint32_t ep_index)
void(* m0_net_test_commands_send_cb_t)(struct m0_net_test_cmd_ctx *ctx, size_t ep_index, int buf_status)
struct m0_net_test_msg_nr ntcsd_msg_nr_send
int init(struct workload *w)
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]
struct m0_net_test_cmd_done ntc_done
M0_INTERNAL void m0_semaphore_fini(struct m0_semaphore *semaphore)
m0_bcount_t m0_net_test_slist_serialize(enum m0_net_test_serialize_op op, struct m0_net_test_slist *slist, struct m0_bufvec *bv, m0_bcount_t offset)
m0_bcount_t ntncfg_buf_size_ping
static int commands_recv_enqueue(struct m0_net_test_cmd_ctx *ctx, size_t buf_index)
bool m0_net_test_commands_invariant(struct m0_net_test_cmd_ctx *ctx)
static void commands_tm_event_cb(const struct m0_net_tm_event *ev)
static bool is_buf_in_recv_q(struct m0_net_test_cmd_ctx *ctx, size_t buf_index)
M0_INTERNAL void m0_mutex_fini(struct m0_mutex *mutex)
struct m0_net_test_msg_nr ntcsd_bulk_nr_recv
struct m0_net_test_network_timeouts ntncfg_timeouts
struct m0_net_test_network_ctx ntcc_net
static void commands_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)
enum m0_net_test_cmd_type ntc_type
int fini(struct workload *w)
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)
M0_INTERNAL void m0_semaphore_up(struct m0_semaphore *semaphore)
struct m0_net_test_stats ntmps_stats
struct m0_net_tm_callbacks ntncfg_tm_cb
#define USE_TYPE_DESCR(type_name)
struct m0_net_end_point * nb_ep
static const struct m0_net_test_network_buffer_callbacks commands_buffer_cb
#define M0_IMPOSSIBLE(fmt,...)