nm_sendrecv_private.h
Go to the documentation of this file.
44#define NM_SR_EVENT_MONITOR_NULL ((struct nm_sr_event_monitor_s){ (nm_sr_event_t)NM_SR_EVENT_NONE, (nm_sr_event_notifier_t)NULL })
46#define NM_SR_EVENT_MONITOR_NULL ((struct nm_sr_event_monitor_s){ .mask = NM_SR_EVENT_NONE, .notifier = NULL })
60#define NM_SR_REQUEST_NULL ((struct nm_sr_request_s){ .p_session = NULL, .monitor = NM_SR_EVENT_MONITOR_NULL, .ref = NULL})
151 const uintptr_t offset = (uintptr_t)&p_req->req - (uintptr_t)p_req; /* offset of 'req' in nm_sr_request_t */
178static inline int nm_sr_rwait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
182static inline int nm_sr_rwait_data(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
188static inline int nm_sr_swait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
247static inline int nm_sr_send_submit(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
254static inline int nm_sr_send_submit_chunks(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request,
306static inline void nm_sr_recv_unpack_contiguous(nm_session_t p_session, nm_sr_request_t*p_request,
338static inline void nm_sr_recv_match_event(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request,
345static inline int nm_sr_recv_post(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
352static inline int nm_sr_recv_peek(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request,
360static inline int nm_sr_recv_peek_offset(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request,
375static inline int nm_sr_recv_iprobe(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
382static inline void nm_sr_recv_data_wait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
389static inline void nm_sr_recv_data_size_wait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
int nm_core_unpack_iprobe(struct nm_core *p_core, struct nm_req_s *p_unpack)
probes whether an incoming packet matched this unposted request.
void nm_core_pack_data(nm_core_t p_core, struct nm_req_s *p_pack, const struct nm_data_s *p_data)
build a pack request from data descriptor
void nm_core_unpack_init(struct nm_core *p_core, struct nm_req_s *p_unpack)
initializes an empty unpack request
int nm_core_unpack_peek(struct nm_core *p_core, struct nm_req_s *p_unpack, const struct nm_data_s *p_data, nm_len_t peek_offset, nm_len_t peek_len)
peeks unexpected data without consumming it.
void nm_core_pack_send(struct nm_core *p_core, struct nm_req_s *p_pack, nm_core_tag_t tag, nm_gate_t p_gate, nm_req_flag_t flags)
set tag/gate/flags for pack request
void nm_core_unpack_offset(struct nm_core *p_core, struct nm_req_s *p_unpack, nm_len_t offset)
set an offset on data; data before offset will be discarded
void nm_core_unpack_match_recv(struct nm_core *p_core, struct nm_req_s *p_unpack, nm_gate_t p_gate, nm_core_tag_t tag, nm_core_tag_t tag_mask)
match an unpack request with given gate/tag, next sequence number assumed
void nm_core_pack_init(struct nm_core *p_core, struct nm_req_s *p_pack)
initializes an empty pack request
void nm_core_pack_submit(struct nm_core *p_core, struct nm_req_s *p_pack)
post a pack request
void nm_core_unpack_data(struct nm_core *p_core, struct nm_req_s *p_unpack, const struct nm_data_s *p_data)
build an unpack request from data descriptor
static void nm_core_pack_set_hlen(struct nm_core *p_core __attribute__((unused)), struct nm_req_s *p_pack, nm_len_t hlen)
set a header length for the given pack request
Definition nm_core_interface.h:556
void nm_core_unpack_match_event(struct nm_core *p_core, struct nm_req_s *p_unpack, const struct nm_core_event_s *p_event)
match an unpack request with a packet that triggered an event
void nm_core_unpack_submit(struct nm_core *p_core, struct nm_req_s *p_unpack, nm_req_flag_t flags)
submit an unpack request
void nm_core_pack_set_priority(struct nm_core *p_core, struct nm_req_s *p_pack, nm_prio_t priority)
set a priority for the given pack request
void nm_core_pack_submit_chunks(struct nm_core *p_core, struct nm_req_s *p_pack, int n, const struct nm_chunk_s *p_chunks)
static nm_core_tag_t nm_core_tag_build(nm_session_hash_t hashcode, nm_tag_t tag)
Definition nm_core_interface.h:270
static nm_tag_t nm_core_tag_get_tag(nm_core_tag_t core_tag)
Definition nm_core_interface.h:277
static nm_len_t nm_data_size(const struct nm_data_s *p_data)
returns the amount of data contained in the descriptor
Definition nm_data.h:674
static void nm_status_wait_all(void **pp_reqs, int n, uintptr_t offset, nm_status_t bitmask, nm_core_t p_core)
wait for all reqs, any bit in bitmask
Definition nm_core_interface.h:840
static int nm_status_test_allbits(struct nm_req_s *p_req, nm_status_t bitmask)
tests for all given bits in status
Definition nm_core_interface.h:857
static void nm_status_wait(struct nm_req_s *p_req, nm_status_t bitmask, nm_core_t p_core)
wait for any bit matching in req status
Definition nm_core_interface.h:826
static nm_status_t nm_status_test(const struct nm_req_s *p_req, nm_status_t bitmask)
query for given bits in req status; returns matched bits
Definition nm_core_interface.h:808
#define NM_STATUS_UNPACK_DATA_SIZE
size of data is known (last chunk of data arrived), not unpacked yet- event triggered only if unpack ...
Definition nm_core_interface.h:182
#define NM_STATUS_UNPACK_DATA0
first byte of data arrived, not unpacked yet- event triggered only if unpack is posted without data s...
Definition nm_core_interface.h:180
#define NM_REQ_FLAG_PACK_SYNCHRONOUS
flag pack as synchronous (i.e.
Definition nm_core_interface.h:202
void(* nm_sr_event_notifier_t)(nm_sr_event_t event, const nm_sr_event_info_t *event_info, void *ref)
notification function for sendrecv events.
Definition nm_sendrecv_interface.h:81
int nm_sr_rtest(nm_session_t p_session, nm_sr_request_t *p_request)
Test for the completion of a non blocking receive request.
int nm_sr_stest(nm_session_t p_session, nm_sr_request_t *p_request)
Test for the completion of a non blocking send request.
int nm_sr_request_wait(nm_sr_request_t *p_request)
Wait for request completion (or cancelation)
assert(p_data->ops.p_traversal !=NULL)
static void nm_data_contiguous_build(struct nm_data_s *p_data, void *ptr, nm_len_t len)
Definition nm_data.h:561
static void nm_data_iov_build(struct nm_data_s *p_data, const struct iovec *v, int n)
Definition nm_data.h:580
nm_len_t size
size of the onsided data (not incuding target-side completion)
Definition nm_onesided_private.h:1
static int nm_sr_send_header(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request, nm_len_t hlen)
Definition nm_sendrecv_private.h:240
static void nm_sr_recv_init(nm_session_t p_session, nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:290
static void nm_sr_recv_data_size_wait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:389
static nm_gate_t nm_sr_request_get_gate(nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:84
static int nm_sr_rwait_data(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:182
static void nm_sr_recv_data_wait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:382
static int nm_sr_send_dest(nm_session_t p_session, nm_sr_request_t *p_request, nm_gate_t p_gate, nm_tag_t tag)
Definition nm_sendrecv_private.h:224
static int nm_sr_send_submit_chunks(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request, int n, const struct nm_chunk_s *p_chunks)
Definition nm_sendrecv_private.h:254
static void nm_sr_send_pack_contiguous(nm_session_t p_session, nm_sr_request_t *p_request, const void *ptr, nm_len_t len)
Definition nm_sendrecv_private.h:209
static int nm_sr_request_get_error(nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:174
static nm_tag_t nm_sr_request_get_tag(nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:79
static void nm_sr_recv_unpack_iov(nm_session_t p_session, nm_sr_request_t *p_request, const struct iovec *v, int n)
Definition nm_sendrecv_private.h:314
static int nm_sr_rwait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:178
static int nm_sr_send_rsend(nm_session_t p_session, nm_sr_request_t *p_request, nm_gate_t p_gate, nm_tag_t tag)
Definition nm_sendrecv_private.h:278
static int nm_sr_request_isnull(nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:64
static void nm_sr_send_init(nm_session_t p_session, nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:195
static int nm_sr_request_test(nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:155
static void nm_sr_recv_unpack_data(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request, const struct nm_data_s *p_data)
Definition nm_sendrecv_private.h:299
static int nm_sr_send_isend(nm_session_t p_session, nm_sr_request_t *p_request, nm_gate_t p_gate, nm_tag_t tag)
Definition nm_sendrecv_private.h:262
static int nm_sr_send_issend(nm_session_t p_session, nm_sr_request_t *p_request, nm_gate_t p_gate, nm_tag_t tag)
Definition nm_sendrecv_private.h:269
static void nm_sr_request_wait_all(nm_sr_request_t **p_requests, int n)
Definition nm_sendrecv_private.h:147
static void nm_sr_recv_match_event(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request, const nm_sr_event_info_t *p_event)
Definition nm_sendrecv_private.h:338
static void nm_sr_recv_offset(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request, nm_len_t offset)
Definition nm_sendrecv_private.h:368
static int nm_sr_send_submit(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:247
static int nm_sr_recv_data_test(nm_session_t p_session, nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:396
static void nm_sr_recv_match(nm_session_t p_session, nm_sr_request_t *p_request, nm_gate_t p_gate, nm_tag_t tag, nm_tag_t mask)
Definition nm_sendrecv_private.h:329
static int nm_sr_recv_peek(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request, const struct nm_data_s *p_data)
Definition nm_sendrecv_private.h:352
static void nm_sr_send_pack_data(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request, const struct nm_data_s *p_data)
Definition nm_sendrecv_private.h:203
static int nm_sr_request_get_expected_size(nm_sr_request_t *p_request, nm_len_t *size)
Definition nm_sendrecv_private.h:119
static int nm_sr_request_test_status(nm_sr_request_t *p_request, nm_status_t status)
Definition nm_sendrecv_private.h:170
static int nm_sr_request_get_size(nm_sr_request_t *p_request, nm_len_t *size)
Definition nm_sendrecv_private.h:100
static void nm_sr_recv_unpack_contiguous(nm_session_t p_session, nm_sr_request_t *p_request, void *ptr, nm_len_t len)
Definition nm_sendrecv_private.h:306
static void nm_sr_send_set_priority(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request, nm_prio_t priority)
Definition nm_sendrecv_private.h:233
static int nm_sr_recv_irecv(nm_session_t p_session, nm_sr_request_t *p_request, nm_gate_t p_gate, nm_tag_t tag, nm_tag_t mask)
Definition nm_sendrecv_private.h:322
static int nm_sr_recv_peek_offset(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request, const struct nm_data_s *p_data, nm_len_t peek_offset, nm_len_t peek_len)
Definition nm_sendrecv_private.h:360
static nm_session_t nm_sr_request_get_session(nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:74
static int nm_sr_recv_iprobe(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:375
static int nm_sr_recv_post(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:345
static int nm_sr_swait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:188
static void * nm_sr_request_get_ref(nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:69
static int nm_sr_request_set_ref(nm_sr_request_t *p_request, void *ref)
Definition nm_sendrecv_private.h:89
static void nm_sr_send_pack_iov(nm_session_t p_session, nm_sr_request_t *p_request, const struct iovec *v, int n)
Definition nm_sendrecv_private.h:216
Definition nm_core_interface.h:472
a data descriptor, used to pack/unpack data from app layout to/from contiguous buffers
Definition nm_data.h:200
nm_core_tag_t tag
tag to send to/from (works in combination with tag_mask for recv)
Definition nm_core_interface.h:502
struct nm_req_s::@15::@18 unpack
struct nm_req_s::@15::@17 pack
nm_len_t expected_len
length of posted recv (may be updated if matched packet is shorter)
Definition nm_core_interface.h:518
Definition nm_session_private.h:24
nm_session_hash_t hash_code
hash of session label, used as ID on the wire
Definition nm_session_private.h:25
nm_sr_event_notifier_t notifier
notification function to call uppon event
Definition nm_sendrecv_private.h:41
struct nm_req_s req
inlined core pack/unpack request to avoid dynamic allocation
Definition nm_sendrecv_private.h:54
struct nm_sr_event_monitor_s monitor
events triggered on status transitions
Definition nm_sendrecv_private.h:56
const struct nm_core_event_s * p_core_event
Definition nm_sendrecv_interface.h:71
struct nm_sr_event_info_t::@83 recv_unexpected
field for unexpected packets (global event NM_SR_EVENT_RECV_UNEXPECTED)