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 */
163static inline int nm_sr_rwait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
167static inline int nm_sr_rwait_data(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
173static inline int nm_sr_swait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
232static inline int nm_sr_send_submit(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
239static inline int nm_sr_send_submit_chunks(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request,
291static inline void nm_sr_recv_unpack_contiguous(nm_session_t p_session, nm_sr_request_t*p_request,
323static inline void nm_sr_recv_match_event(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request,
330static inline int nm_sr_recv_post(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
337static inline int nm_sr_recv_peek(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request,
345static inline int nm_sr_recv_peek_offset(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request,
360static inline int nm_sr_recv_iprobe(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
367static inline void nm_sr_recv_data_wait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
374static inline void nm_sr_recv_data_size_wait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t*p_request)
struct nm_core_event_s __attribute__
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:538
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:271
static nm_tag_t nm_core_tag_get_tag(nm_core_tag_t core_tag)
Definition nm_core_interface.h:278
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:483
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:822
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:840
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:808
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:790
#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:183
#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:181
#define NM_REQ_FLAG_PACK_SYNCHRONOUS
flag pack as synchronous (i.e.
Definition nm_core_interface.h:203
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:79
int nm_sr_request_wait(nm_sr_request_t *p_request)
Wait for request completion (or cancelation)
static void nm_data_contiguous_build(struct nm_data_s *p_data, void *ptr, nm_len_t len)
Definition nm_data.h:355
static void nm_data_iov_build(struct nm_data_s *p_data, const struct iovec *v, int n)
Definition nm_data.h:374
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:225
static void nm_sr_recv_init(nm_session_t p_session, nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:275
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:374
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:167
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:367
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:209
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:239
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:194
static int nm_sr_request_get_error(nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:159
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:299
static int nm_sr_rwait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:163
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:263
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:180
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:284
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:247
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:254
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:323
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:353
static int nm_sr_send_submit(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:232
static int nm_sr_recv_data_test(nm_session_t p_session, nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:381
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:314
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:337
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:188
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_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:291
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:218
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:307
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:345
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:360
static int nm_sr_recv_post(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:330
static int nm_sr_swait(nm_session_t p_session __attribute__((unused)), nm_sr_request_t *p_request)
Definition nm_sendrecv_private.h:173
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 int nm_sr_request_test(nm_sr_request_t *p_request, nm_status_t status)
Definition nm_sendrecv_private.h:155
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:201
Definition nm_core_interface.h:454
a data descriptor, used to pack/unpack data from app layout to/from contiguous buffers
Definition nm_data.h:196
nm_core_tag_t tag
tag to send to/from (works in combination with tag_mask for recv)
Definition nm_core_interface.h:484
nm_len_t expected_len
length of posted recv (may be updated if matched packet is shorter)
Definition nm_core_interface.h:500
struct nm_req_s::@14::@17 unpack
struct nm_req_s::@14::@16 pack
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
struct nm_sr_event_info_t::@75 recv_unexpected
field for unexpected packets (global event NM_SR_EVENT_RECV_UNEXPECTED)
const struct nm_core_event_s * p_core_event
Definition nm_sendrecv_interface.h:69