nm_sendrecv_interface.h
Go to the documentation of this file.
70 } recv_unexpected;
79typedef void (*nm_sr_event_notifier_t)(nm_sr_event_t event, const nm_sr_event_info_t*event_info, void*ref);
104extern int nm_sr_request_unset_completion_queue(nm_session_t p_session, nm_sr_request_t*p_request);
186static inline int nm_sr_send_header(nm_session_t p_session, nm_sr_request_t*p_request, nm_len_t hlen);
198static inline void nm_sr_send_set_priority(nm_session_t p_session, nm_sr_request_t*p_request, nm_prio_t priority);
212static inline void nm_sr_recv_unpack_contiguous(nm_session_t p_session, nm_sr_request_t*p_request,
235static inline void nm_sr_recv_offset(nm_session_t p_session, nm_sr_request_t*p_request, nm_len_t offset);
526extern int nm_sr_monitor(nm_session_t p_session, nm_sr_event_t mask, nm_sr_event_notifier_t notifier);
532int nm_sr_session_monitor_remove(nm_session_t p_session, const struct nm_sr_monitor_s*p_monitor);
#define NM_STATUS_UNPACK_CANCELLED
unpack operation has been cancelled
Definition nm_core_interface.h:173
#define NM_STATUS_UNEXPECTED
data or rdv has arrived, with no matching unpack
Definition nm_core_interface.h:171
#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
int nm_sr_request_monitor(nm_session_t p_session, nm_sr_request_t *p_request, nm_sr_event_t mask, nm_sr_event_notifier_t notifier)
Set a notification function called upon request completion.
static int nm_sr_send_submit_chunks(nm_session_t p_session, nm_sr_request_t *p_request, int n, const struct nm_chunk_s *p_chunks)
submit partial chunks of a request.
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
static nm_gate_t nm_sr_request_get_gate(nm_sr_request_t *p_request)
static void nm_sr_send_set_priority(nm_session_t p_session, nm_sr_request_t *p_request, nm_prio_t priority)
attach the given priority to the request.
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)
set destination to a request, but do not send it immediately
static int nm_sr_request_get_error(nm_sr_request_t *p_request)
Get the error status of the request.
static int nm_sr_request_get_size(nm_sr_request_t *request, nm_len_t *size)
Returns the actual received or sent size of the message with the specified request.
static nm_tag_t nm_sr_request_get_tag(nm_sr_request_t *p_request)
Retrieve the tag from a sendrecv request.
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)
send a built request in ready mode
static int nm_sr_send_header(nm_session_t p_session, nm_sr_request_t *p_request, nm_len_t hlen)
static int nm_sr_request_isnull(nm_sr_request_t *p_request)
tests whether a request is NULL
static void nm_sr_send_init(nm_session_t p_session, nm_sr_request_t *p_request)
Init a send request.
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)
send a built request to given gate & tag
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)
send a built request in synchronous mode
static void nm_sr_request_wait_all(nm_sr_request_t **p_requests, int n)
wait for completion of an array of requests
int nm_sr_request_wait(nm_sr_request_t *p_request)
Wait for request completion (or cancelation)
int nm_sr_flush(struct nm_session_s *p_session)
Flush all pending requests (force submission to the core) and all pending events.
int nm_sr_request_unset_completion_queue(nm_session_t p_session, nm_sr_request_t *p_request)
Ask to not enqueue the request in the completion queue upon completion.
int nm_sr_request_set_completion_queue(nm_session_t p_session, nm_sr_request_t *p_request)
Ask to enqueue the request in the completion queue upon completion.
static int nm_sr_request_get_expected_size(nm_sr_request_t *request, nm_len_t *size)
Returns the expected size (to be received or to be sent) of the message with the specified request.
static void nm_sr_send_pack_iov(nm_session_t p_session, nm_sr_request_t *p_request, const struct iovec *iov, int num_entries)
Pack data described through iovec into the given request.
static nm_session_t nm_sr_request_get_session(nm_sr_request_t *p_request)
Returns the session this request belongs to.
static void nm_sr_send_pack_data(nm_session_t p_session, nm_sr_request_t *p_request, const struct nm_data_s *p_data)
Pack data described through an iterator into the given request.
static int nm_sr_send_submit(nm_session_t p_session, nm_sr_request_t *p_request)
submit the request once it is built
static void * nm_sr_request_get_ref(nm_sr_request_t *p_request)
Retrieve the 'ref' from a sendrecv request.
static int nm_sr_request_set_ref(nm_sr_request_t *p_request, void *ref)
Add a user reference to a request.
static int nm_sr_request_test(nm_sr_request_t *p_request, nm_status_t status)
Tests whether the given status bits are set in request.
static void nm_sr_send_pack_contiguous(nm_session_t p_session, nm_sr_request_t *p_request, const void *, nm_len_t len)
Pack contiguous data into the given request.
@ NM_SR_EVENT_RECV_DATA
some data has arrived on a req posted without data spec
Definition nm_sendrecv_interface.h:50
nm_len_t size
size of the onsided data (not incuding target-side completion)
Definition nm_onesided_private.h:1
This is the common public header for NewMad.
static void nm_sr_recv_unpack_data(nm_session_t p_session, nm_sr_request_t *p_request, const struct nm_data_s *p_data)
static void nm_sr_recv_init(nm_session_t p_session, nm_sr_request_t *p_request)
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.
static int nm_sr_recv_peek(nm_session_t p_session, nm_sr_request_t *p_request, const struct nm_data_s *p_data)
peek for already received (unexpected) data
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.
static int nm_sr_isend_data(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, struct nm_data_s *p_data, nm_sr_request_t *p_request)
Definition nm_sendrecv_interface.h:353
static int nm_sr_swait(nm_session_t p_session, nm_sr_request_t *p_request)
Wait for the completion of a non blocking send request.
static void nm_sr_recv_data_wait(nm_session_t p_session, nm_sr_request_t *p_request)
waits for first byte of data to be available, for a request posted without data descriptor
int nm_sr_session_monitor_set(nm_session_t p_session, const struct nm_sr_monitor_s *p_monitor)
set a monitor for events on the session
static int nm_sr_irecv_with_ref(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, void *data, nm_len_t len, nm_sr_request_t *p_request, void *ref)
Test for the completion of a non blocking receive request.
Definition nm_sendrecv_interface.h:425
static int nm_sr_rwait(nm_session_t p_session, nm_sr_request_t *p_request)
Wait for the completion of a non blocking receive request.
static void nm_sr_recv_unpack_iov(nm_session_t p_session, nm_sr_request_t *p_request, const struct iovec *iov, int num_entry)
static int nm_sr_recv_post(nm_session_t p_session, nm_sr_request_t *p_request)
posts the receive request to the scheduler
int nm_sr_session_monitor_remove(nm_session_t p_session, const struct nm_sr_monitor_s *p_monitor)
remove the event monitor from the session
static int nm_sr_rwait_data(nm_session_t p_session, nm_sr_request_t *p_request)
Wait for data to be available from a non blocking receive request.
int nm_sr_recv_success(nm_session_t p_session, nm_sr_request_t **out_req)
Poll for any completed recv request (any source, any tag).
static int nm_sr_recv(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, void *data, nm_len_t len)
blocking recv
Definition nm_sendrecv_interface.h:563
static void nm_sr_recv_match_event(nm_session_t p_session, nm_sr_request_t *p_request, const nm_sr_event_info_t *p_event)
match the request with event
static int nm_sr_isend_with_ref(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, const void *data, nm_len_t len, nm_sr_request_t *p_request, void *ref)
Definition nm_sendrecv_interface.h:286
static int nm_sr_isend_iov(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, const struct iovec *iov, int num_entries, nm_sr_request_t *p_request)
Test for the completion of a non blocking send request.
Definition nm_sendrecv_interface.h:329
static int nm_sr_issend(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, const void *data, nm_len_t len, nm_sr_request_t *p_request)
Synchronous send.
Definition nm_sendrecv_interface.h:255
int nm_sr_rcancel(nm_session_t p_session, nm_sr_request_t *p_request)
Cancel a reception request.
static int nm_sr_recv_data_test(nm_session_t p_session, nm_sr_request_t *p_request)
checks whether data is available, for a request posted without data descriptor
static void nm_sr_recv_offset(nm_session_t p_session, nm_sr_request_t *p_request, nm_len_t offset)
set offset of data to receive; data before offset will be discarded
static int nm_sr_recv_peek_offset(nm_session_t p_session, nm_sr_request_t *p_request, const struct nm_data_s *p_data, nm_len_t peek_offset, nm_len_t peek_len)
peek for already received (unexpected) data, with offset and explicit len
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)
match the request with given gate/tag/mask
static int nm_sr_irecv_data(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, struct nm_data_s *p_data, nm_sr_request_t *p_request)
Definition nm_sendrecv_interface.h:458
static int nm_sr_irecv_iov(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, struct iovec *iov, int num_entries, nm_sr_request_t *p_request)
Definition nm_sendrecv_interface.h:437
int nm_sr_recv_source(nm_session_t p_session, nm_sr_request_t *p_request, nm_gate_t *p_gate)
Retrieve the pkt source of a complete any source receive request.
static int nm_sr_isend_iov_with_ref(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, const struct iovec *iov, int num_entries, nm_sr_request_t *p_request, void *ref)
Definition nm_sendrecv_interface.h:340
static void nm_sr_recv_unpack_contiguous(nm_session_t p_session, nm_sr_request_t *p_request, void *ptr, nm_len_t len)
static int nm_sr_send(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, const void *data, nm_len_t len)
blocking send
Definition nm_sendrecv_interface.h:549
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)
int nm_sr_send_success(nm_session_t p_session, nm_sr_request_t **out_req)
Poll for any completed send request.
int nm_sr_probe(nm_session_t p_session, nm_gate_t p_gate, nm_gate_t *p_out_gate, nm_tag_t tag, nm_tag_t tag_mask, nm_tag_t *p_out_tag, nm_len_t *p_out_len)
Unblockingly check if a packet is available for extraction on the (gate,tag) pair .
static int nm_sr_rsend(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, const void *data, nm_len_t len, nm_sr_request_t *p_request)
Post a ready send request, i.e.
Definition nm_sendrecv_interface.h:309
static int nm_sr_irecv(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, void *data, nm_len_t len, nm_sr_request_t *p_request)
Post a non blocking receive request.
Definition nm_sendrecv_interface.h:404
static int nm_sr_irecv_iov_with_ref(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, struct iovec *iov, int num_entries, nm_sr_request_t *p_request, void *ref)
Definition nm_sendrecv_interface.h:447
static int nm_sr_recv_iprobe(nm_session_t p_session, nm_sr_request_t *p_request)
probes whether an incoming packet matched this non-posted request
int nm_sr_monitor(nm_session_t p_session, nm_sr_event_t mask, nm_sr_event_notifier_t notifier)
monitors sendrecv events globally
int nm_sr_scancel(nm_session_t p_session, nm_sr_request_t *p_request)
Cancel a emission request.
static int nm_sr_isend(nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, const void *data, nm_len_t len, nm_sr_request_t *p_request)
Post a non blocking send request.
Definition nm_sendrecv_interface.h:275
static void nm_sr_recv_data_size_wait(nm_session_t p_session, nm_sr_request_t *p_request)
waits for data size to be available, for a request posted without data descriptor
This file contains private bits of the sendrecv interface.
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
Definition nm_session_private.h:24
a global monitor to listen to events on the full session
Definition nm_sendrecv_interface.h:83
nm_sr_event_notifier_t p_notifier
the function to call when a matching event happen
Definition nm_sendrecv_interface.h:84
nm_tag_t tag_mask
tag mask for event filter- fire event when event.tag & monitor.tag_mask == monitor....
Definition nm_sendrecv_interface.h:88
nm_sr_event_t event_mask
a bitmask containing events kinds to listen to
Definition nm_sendrecv_interface.h:85
nm_gate_t p_gate
listen for events on given gate; NM_ANY_GATE for any
Definition nm_sendrecv_interface.h:86
const struct nm_core_event_s * p_core_event
Definition nm_sendrecv_interface.h:69
nm_sr_request_t * p_request
the request on which the event happened
Definition nm_sendrecv_interface.h:73
nm_session_t p_session
session where the unexpected packet arrived
Definition nm_sendrecv_interface.h:68