NewMadeleine

Documentation

« back to PM2 home.
sendrecv interface

This is the nmad SendRecv interface, the main interface to send and receive packets. More...

Files

file  nm_sendrecv_interface.h
 
enum  nm_sr_event_t {
  NM_SR_EVENT_NONE = 0 , NM_SR_EVENT_RECV_UNEXPECTED , NM_SR_EVENT_RECV_COMPLETED , NM_SR_EVENT_SEND_COMPLETED ,
  NM_SR_EVENT_RECV_DATA , NM_SR_EVENT_RECV_CANCELLED , NM_SR_EVENT_FINALIZED
}
 events for monitors More...
 
typedef struct nm_sr_request_s nm_sr_request_t
 a sendrecv request object.
 
typedef 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.
 
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_request_monitor_with_ref (nm_session_t p_session, nm_sr_request_t *p_request, nm_sr_event_t mask, nm_sr_event_notifier_t notifier, void *ref)
 
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.
 
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.
 
static int nm_sr_request_isnull (nm_sr_request_t *p_request)
 tests whether a request is NULL
 
static int nm_sr_request_set_ref (nm_sr_request_t *p_request, void *ref)
 Add a user reference to a request.
 
static void * nm_sr_request_get_ref (nm_sr_request_t *p_request)
 Retrieve the 'ref' from a sendrecv 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_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 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 nm_gate_t nm_sr_request_get_gate (nm_sr_request_t *p_request)
 
static nm_session_t nm_sr_request_get_session (nm_sr_request_t *p_request)
 Returns the session this request belongs to.
 
int nm_sr_request_wait (nm_sr_request_t *p_request)
 Wait for request completion (or cancelation)
 
static void nm_sr_request_wait_all (nm_sr_request_t **p_requests, int n)
 wait for completion of an array of requests
 
static int nm_sr_request_test (nm_sr_request_t *p_request)
 tests whether the given request is completed; make it progress if needed
 
static int nm_sr_request_test_status (nm_sr_request_t *p_request, nm_status_t status)
 Tests whether the given status bits are set in request- does not make communication progress.
 
static int nm_sr_request_get_error (nm_sr_request_t *p_request)
 Get the error status of the request.
 
int nm_sr_flush (struct nm_session_s *p_session)
 Flush all pending requests (force submission to the core) and all pending events.
 
static void nm_sr_send_init (nm_session_t p_session, nm_sr_request_t *p_request)
 Init a send 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.
 
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 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_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 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_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_send_header (nm_session_t p_session, nm_sr_request_t *p_request, nm_len_t hlen)
 
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 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.
 
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 void nm_sr_recv_init (nm_session_t p_session, nm_sr_request_t *p_request)
 
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 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 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 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)
 
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 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_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
 
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_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_iprobe (nm_session_t p_session, nm_sr_request_t *p_request)
 probes whether an incoming packet matched this non-posted 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
 
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
 
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 int nm_sr_recv_post (nm_session_t p_session, nm_sr_request_t *p_request)
 posts the receive request to the scheduler
 
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.
 
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.
 
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.
 
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.
 
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)
 
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_progress (nm_session_t p_session)
 Calls the scheduler.
 
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.
 
int nm_sr_scancel (nm_session_t p_session, nm_sr_request_t *p_request)
 Cancel a emission request.
 
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.
 
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)
 
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)
 
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_rwait (nm_session_t p_session, nm_sr_request_t *p_request)
 Wait for the completion of a non blocking receive request.
 
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_rcancel (nm_session_t p_session, nm_sr_request_t *p_request)
 Cancel a reception request.
 
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.
 
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 .
 
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
 
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
 
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).
 
int nm_sr_send_success (nm_session_t p_session, nm_sr_request_t **out_req)
 Poll for any completed send request.
 
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
 
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
 
static int nm_sr_send_data (nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, struct nm_data_s *p_data)
 blocking data send
 
static int nm_sr_recv_data (nm_session_t p_session, nm_gate_t p_gate, nm_tag_t tag, struct nm_data_s *p_data)
 blocking recv
 

Detailed Description

This is the nmad SendRecv interface, the main interface to send and receive packets.

Typedef Documentation

◆ nm_sr_event_notifier_t

typedef 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.

Received ref comes from monitor->ref in case of session monitor, and request->ref in case of request monitor

Definition at line 81 of file nm_sendrecv_interface.h.

◆ nm_sr_request_t

a sendrecv request object.

Supposedly opaque for applications.

Definition at line 60 of file nm_sendrecv_interface.h.

Enumeration Type Documentation

◆ nm_sr_event_t

events for monitors

Enumerator
NM_SR_EVENT_NONE 

no event

NM_SR_EVENT_RECV_UNEXPECTED 

an unexpected packet has arrived.

Post a recv to get data

NM_SR_EVENT_RECV_COMPLETED 

a posted recv has completed

NM_SR_EVENT_SEND_COMPLETED 

a posted send has completed

NM_SR_EVENT_RECV_DATA 

some data has arrived on a req posted without data spec

NM_SR_EVENT_RECV_CANCELLED 

recv operation was canceled

NM_SR_EVENT_FINALIZED 

request finalized, may be freed by user

Definition at line 41 of file nm_sendrecv_interface.h.

Function Documentation

◆ nm_sr_flush()

int nm_sr_flush ( struct nm_session_s p_session)
extern

Flush all pending requests (force submission to the core) and all pending events.

Note
does not guarantee that packets are actually sent, only that lists with deferred work are empty

◆ nm_sr_irecv()

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 
)
inlinestatic

Post a non blocking receive request.

Parameters
p_sessiona pointer to a nmad session object.
p_gatea pointer to the destination gate.
tagthe message tag.
datathe data fragment pointer.
lenthe data fragment length.
p_requesta pointer to a sendrecv request to be filled.
Returns
The NM status.
Examples
nm_bench_req_monitor.c, and nm_sr_hello.c.

Definition at line 377 of file nm_sendrecv_interface.h.

References len, NM_ESUCCESS, nm_sr_recv_init(), nm_sr_recv_irecv(), nm_sr_recv_unpack_contiguous(), NM_TAG_MASK_FULL, p_gate, p_session, and tag.

Referenced by nm_sr_recv().

Here is the call graph for this function:

◆ nm_sr_irecv_data()

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 
)
inlinestatic
Examples
nm_sr_custom_data.c.

Definition at line 398 of file nm_sendrecv_interface.h.

References nm_sr_recv_init(), nm_sr_recv_irecv(), nm_sr_recv_unpack_data(), NM_TAG_MASK_FULL, p_data, p_gate, p_session, and tag.

Referenced by nm_coll_tree_recv(), and nm_sr_recv_data().

Here is the call graph for this function:

◆ nm_sr_irecv_iov()

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 
)
inlinestatic

Definition at line 388 of file nm_sendrecv_interface.h.

References nm_sr_recv_init(), nm_sr_recv_irecv(), nm_sr_recv_unpack_iov(), NM_TAG_MASK_FULL, p_gate, p_session, and tag.

Here is the call graph for this function:

◆ nm_sr_isend()

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 
)
inlinestatic

Post a non blocking send request.

Parameters
p_sessiona pointer to a nmad session object.
p_gatea pointer to the destination gate.
tagthe message tag.
datathe data fragment pointer.
lenthe data fragment length.
p_requesta pointer to a NM request to be filled.
Returns
The NM status.
Examples
nm_bench_req_monitor.c, nm_sr_hello.c, and nm_sr_peek.c.

Definition at line 274 of file nm_sendrecv_interface.h.

References len, nm_sr_send_init(), nm_sr_send_isend(), nm_sr_send_pack_contiguous(), p_gate, p_session, and tag.

Referenced by nm_sr_send().

Here is the call graph for this function:

◆ nm_sr_isend_data()

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 
)
inlinestatic
Examples
nm_sr_custom_data.c.

Definition at line 326 of file nm_sendrecv_interface.h.

References nm_sr_send_init(), nm_sr_send_isend(), nm_sr_send_pack_data(), p_data, p_gate, p_session, and tag.

Referenced by nm_coll_tree_send(), and nm_sr_send_data().

Here is the call graph for this function:

◆ nm_sr_isend_iov()

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 
)
inlinestatic

Test for the completion of a non blocking send request.

Parameters
p_sessiona pointer to a nmad session object.
p_gatea pointer to the destination gate.
tagthe message tag.
iov
num_entries
p_requesta pointer to a sendrecv request to be filled.
Returns
The NM status.

Definition at line 315 of file nm_sendrecv_interface.h.

References nm_sr_send_init(), nm_sr_send_isend(), nm_sr_send_pack_iov(), p_gate, p_session, and tag.

Here is the call graph for this function:

◆ nm_sr_issend()

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 
)
inlinestatic

Synchronous send.

Definition at line 254 of file nm_sendrecv_interface.h.

References len, nm_sr_send_init(), nm_sr_send_issend(), nm_sr_send_pack_contiguous(), p_gate, p_session, and tag.

Here is the call graph for this function:

◆ nm_sr_probe()

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 
)
extern

Unblockingly check if a packet is available for extraction on the (gate,tag) pair .

Parameters
p_sessiona pointer to a nmad session object.
p_gatea pointer to the expected gate.
p_out_gatereturn value with the originating gate.
tagthe expected message tag.
tag_maska mask to be applied on tag before matching
p_out_tagreturn value with the tag
p_out_lenreturn value with the message length
Returns
The NM status.
Note
p_out_gate, p_out_tag and p_out_len may be NULL

◆ nm_sr_progress()

int nm_sr_progress ( nm_session_t  p_session)
extern

Calls the scheduler.

Parameters
p_sessiona pointer to a nmad session object.
Returns
The NM status.

Referenced by nm_sr_recv_data_test().

◆ nm_sr_rcancel()

int nm_sr_rcancel ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
extern

Cancel a reception request.

Parameters
p_sessiona pointer to a nmad session object.
p_requestthe request to cancel.
Returns
The NM status.

◆ nm_sr_recv()

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 
)
inlinestatic

blocking recv

Examples
nm_mcast_basic.c, nm_onesided_queues.c, and nm_onesided_simple.c.

Definition at line 507 of file nm_sendrecv_interface.h.

References len, NM_ESUCCESS, nm_sr_irecv(), nm_sr_rwait(), p_gate, p_session, and tag.

Referenced by nm_sync_clocks_recv().

Here is the call graph for this function:

◆ nm_sr_recv_data()

static int nm_sr_recv_data ( nm_session_t  p_session,
nm_gate_t  p_gate,
nm_tag_t  tag,
struct nm_data_s p_data 
)
inlinestatic

blocking recv

Definition at line 533 of file nm_sendrecv_interface.h.

References NM_ESUCCESS, nm_sr_irecv_data(), nm_sr_rwait(), p_data, p_gate, p_session, and tag.

Here is the call graph for this function:

◆ nm_sr_recv_data_size_wait()

static void nm_sr_recv_data_size_wait ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

waits for data size to be available, for a request posted without data descriptor

◆ nm_sr_recv_data_test()

static int nm_sr_recv_data_test ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

checks whether data is available, for a request posted without data descriptor

◆ nm_sr_recv_data_wait()

static void nm_sr_recv_data_wait ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

waits for first byte of data to be available, for a request posted without data descriptor

Examples
nm_sr_peek.c.

◆ nm_sr_recv_init()

static void nm_sr_recv_init ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

◆ nm_sr_recv_iprobe()

static int nm_sr_recv_iprobe ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

probes whether an incoming packet matched this non-posted request

◆ nm_sr_recv_irecv()

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 
)
inlinestatic

◆ nm_sr_recv_match()

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 
)
inlinestatic

match the request with given gate/tag/mask

Examples
nm_sr_peek.c.

◆ nm_sr_recv_match_event()

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 
)
inlinestatic

match the request with event

◆ nm_sr_recv_offset()

static void nm_sr_recv_offset ( nm_session_t  p_session,
nm_sr_request_t p_request,
nm_len_t  offset 
)
inlinestatic

set offset of data to receive; data before offset will be discarded

Referenced by nm_rpc_recv_header_data().

◆ nm_sr_recv_peek()

static int nm_sr_recv_peek ( nm_session_t  p_session,
nm_sr_request_t p_request,
const struct nm_data_s p_data 
)
inlinestatic

peek for already received (unexpected) data

Examples
nm_sr_peek.c.

◆ nm_sr_recv_peek_offset()

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 
)
inlinestatic

peek for already received (unexpected) data, with offset and explicit len

Referenced by nm_rpc_recv_header_data().

◆ nm_sr_recv_post()

static int nm_sr_recv_post ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

posts the receive request to the scheduler

Examples
nm_sr_peek.c.

◆ nm_sr_recv_source()

int nm_sr_recv_source ( nm_session_t  p_session,
nm_sr_request_t p_request,
nm_gate_t p_gate 
)
extern

Retrieve the pkt source of a complete any source receive request.

Parameters
p_sessiona pointer to a nmad session object.
p_requestthe request to check.
p_gatea pointer to the destination gate.
Returns
The NM status.

◆ nm_sr_recv_success()

int nm_sr_recv_success ( nm_session_t  p_session,
nm_sr_request_t **  out_req 
)
extern

Poll for any completed recv request (any source, any tag).

Note
call nm_sr_request_set_completion_queue() to generate such an event.

◆ nm_sr_recv_unpack_contiguous()

static void nm_sr_recv_unpack_contiguous ( nm_session_t  p_session,
nm_sr_request_t p_request,
void *  ptr,
nm_len_t  len 
)
inlinestatic
Examples
nm_sr_peek.c.

Referenced by nm_sr_irecv().

◆ nm_sr_recv_unpack_data()

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 
)
inlinestatic

Referenced by nm_sr_irecv_data().

◆ nm_sr_recv_unpack_iov()

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 
)
inlinestatic

Referenced by nm_sr_irecv_iov().

◆ nm_sr_request_get_error()

static int nm_sr_request_get_error ( nm_sr_request_t p_request)
inlinestatic

Get the error status of the request.

◆ nm_sr_request_get_expected_size()

static int nm_sr_request_get_expected_size ( nm_sr_request_t request,
nm_len_t size 
)
inlinestatic

Returns the expected size (to be received or to be sent) of the message with the specified request.

◆ nm_sr_request_get_gate()

static nm_gate_t nm_sr_request_get_gate ( nm_sr_request_t p_request)
inlinestatic

Referenced by nm_rpc_get_source().

◆ nm_sr_request_get_ref()

static void * nm_sr_request_get_ref ( nm_sr_request_t p_request)
inlinestatic

Retrieve the 'ref' from a sendrecv request.

◆ nm_sr_request_get_session()

static nm_session_t nm_sr_request_get_session ( nm_sr_request_t p_request)
inlinestatic

Returns the session this request belongs to.

◆ nm_sr_request_get_size()

static int nm_sr_request_get_size ( nm_sr_request_t request,
nm_len_t size 
)
inlinestatic

Returns the actual received or sent size of the message with the specified request.

◆ nm_sr_request_get_tag()

static nm_tag_t nm_sr_request_get_tag ( nm_sr_request_t p_request)
inlinestatic

Retrieve the tag from a sendrecv request.

Referenced by nm_rpc_get_tag().

◆ nm_sr_request_isnull()

static int nm_sr_request_isnull ( nm_sr_request_t p_request)
inlinestatic

tests whether a request is NULL

◆ nm_sr_request_monitor()

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 
)
extern

Set a notification function called upon request completion.

Referenced by nm_sr_request_monitor_with_ref().

◆ nm_sr_request_monitor_with_ref()

static int nm_sr_request_monitor_with_ref ( nm_session_t  p_session,
nm_sr_request_t p_request,
nm_sr_event_t  mask,
nm_sr_event_notifier_t  notifier,
void *  ref 
)
inlinestatic
Examples
nm_bench_req_monitor.c.

Definition at line 408 of file nm_sendrecv_interface.h.

References nm_sr_request_monitor(), nm_sr_request_set_ref(), and p_session.

Referenced by nm_coll_tree_set_notifier().

Here is the call graph for this function:

◆ nm_sr_request_set_completion_queue()

int nm_sr_request_set_completion_queue ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
extern

Ask to enqueue the request in the completion queue upon completion.

◆ nm_sr_request_set_ref()

static int nm_sr_request_set_ref ( nm_sr_request_t p_request,
void *  ref 
)
inlinestatic

Add a user reference to a request.

Referenced by nm_sr_request_monitor_with_ref().

◆ nm_sr_request_test()

static int nm_sr_request_test ( nm_sr_request_t p_request)
inlinestatic

tests whether the given request is completed; make it progress if needed

◆ nm_sr_request_test_status()

static int nm_sr_request_test_status ( nm_sr_request_t p_request,
nm_status_t  status 
)
inlinestatic

Tests whether the given status bits are set in request- does not make communication progress.

◆ nm_sr_request_unset_completion_queue()

int nm_sr_request_unset_completion_queue ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
extern

Ask to not enqueue the request in the completion queue upon completion.

Remove it from the completion queue if it was already enqueued.

◆ nm_sr_request_wait()

int nm_sr_request_wait ( nm_sr_request_t p_request)
extern

Wait for request completion (or cancelation)

Referenced by nm_sr_rwait(), and nm_sr_swait().

◆ nm_sr_request_wait_all()

static void nm_sr_request_wait_all ( nm_sr_request_t **  p_requests,
int  n 
)
inlinestatic

wait for completion of an array of requests

Referenced by nm_rpc_req_wait_all().

◆ nm_sr_rsend()

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 
)
inlinestatic

Post a ready send request, i.e.

assume the receiver is ready thus removing the need for a rdv.

Parameters
p_sessiona pointer to a nmad session object.
p_gatea pointer to the destination gate.
tagthe message tag.
datathe data fragment pointer.
lenthe data fragment length.
p_requesta pointer to a sendrecv request to be filled.
Returns
The NM status.

Definition at line 295 of file nm_sendrecv_interface.h.

References len, nm_sr_send_init(), nm_sr_send_pack_contiguous(), nm_sr_send_rsend(), p_gate, p_session, and tag.

Here is the call graph for this function:

◆ nm_sr_rtest()

int nm_sr_rtest ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
extern

Test for the completion of a non blocking receive request.

Parameters
p_sessiona pointer to a nmad session object.
p_requestthe request to check.
Returns
The NM status.

Referenced by nm_sr_request_test().

◆ nm_sr_rwait()

static int nm_sr_rwait ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

Wait for the completion of a non blocking receive request.

Parameters
p_sessiona pointer to a nmad session object.
p_requestthe request to check.
Returns
The NM status.
Examples
nm_sr_custom_data.c, nm_sr_hello.c, and nm_sr_peek.c.

Referenced by nm_sr_recv(), and nm_sr_recv_data().

◆ nm_sr_rwait_data()

static int nm_sr_rwait_data ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

Wait for data to be available from a non blocking receive request.

Warning
the request may not be fully completed, and neither request nor data buffers may be freed at this point.
Parameters
p_sessiona pointer to a nmad session object.
p_requestthe request to check.
Returns
The NM status.

◆ nm_sr_scancel()

int nm_sr_scancel ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
extern

Cancel a emission request.

Parameters
p_sessiona pointer to a nmad session object.
p_requestthe request to cancel.
Returns
The NM status.

◆ nm_sr_send()

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 
)
inlinestatic

blocking send

Examples
nm_onesided_queues.c, and nm_onesided_simple.c.

Definition at line 493 of file nm_sendrecv_interface.h.

References len, NM_ESUCCESS, nm_sr_isend(), nm_sr_swait(), p_gate, p_session, and tag.

Referenced by nm_sync_clocks_send().

Here is the call graph for this function:

◆ nm_sr_send_data()

static int nm_sr_send_data ( nm_session_t  p_session,
nm_gate_t  p_gate,
nm_tag_t  tag,
struct nm_data_s p_data 
)
inlinestatic

blocking data send

Definition at line 521 of file nm_sendrecv_interface.h.

References NM_ESUCCESS, nm_sr_isend_data(), nm_sr_swait(), p_data, p_gate, p_session, and tag.

Here is the call graph for this function:

◆ nm_sr_send_dest()

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 
)
inlinestatic

set destination to a request, but do not send it immediately

◆ nm_sr_send_header()

static int nm_sr_send_header ( nm_session_t  p_session,
nm_sr_request_t p_request,
nm_len_t  hlen 
)
inlinestatic

◆ nm_sr_send_init()

static void nm_sr_send_init ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

◆ nm_sr_send_isend()

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 
)
inlinestatic

send a built request to given gate & tag

Referenced by nm_sr_isend(), nm_sr_isend_data(), and nm_sr_isend_iov().

◆ nm_sr_send_issend()

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 
)
inlinestatic

send a built request in synchronous mode

Referenced by nm_coll_tree_issend(), and nm_sr_issend().

◆ nm_sr_send_pack_contiguous()

static void nm_sr_send_pack_contiguous ( nm_session_t  p_session,
nm_sr_request_t p_request,
const void *  ,
nm_len_t  len 
)
inlinestatic

Pack contiguous data into the given request.

Referenced by nm_sr_isend(), nm_sr_issend(), and nm_sr_rsend().

◆ nm_sr_send_pack_data()

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 
)
inlinestatic

Pack data described through an iterator into the given request.

Referenced by nm_coll_tree_issend(), and nm_sr_isend_data().

◆ nm_sr_send_pack_iov()

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 
)
inlinestatic

Pack data described through iovec into the given request.

Referenced by nm_sr_isend_iov().

◆ nm_sr_send_rsend()

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 
)
inlinestatic

send a built request in ready mode

Referenced by nm_sr_rsend().

◆ nm_sr_send_set_priority()

static void nm_sr_send_set_priority ( nm_session_t  p_session,
nm_sr_request_t p_request,
nm_prio_t  priority 
)
inlinestatic

attach the given priority to the request.

Note
only strat_prio takes priorities into account

◆ nm_sr_send_submit()

static int nm_sr_send_submit ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

submit the request once it is built

◆ nm_sr_send_submit_chunks()

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 
)
inlinestatic

submit partial chunks of a request.

Warning
no consistency check is done; it is the user responsibility to ensure chunks eventually cover the full request and are not overlapping.

◆ nm_sr_send_success()

int nm_sr_send_success ( nm_session_t  p_session,
nm_sr_request_t **  out_req 
)
extern

Poll for any completed send request.

Note
call nm_sr_request_set_completion_queue() to generate such an event.

◆ nm_sr_session_monitor_remove()

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

◆ nm_sr_session_monitor_set()

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

◆ nm_sr_stest()

int nm_sr_stest ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
extern

Test for the completion of a non blocking send request.

Parameters
p_sessiona pointer to a nmad session object.
p_requestthe request to check.
Returns
The NM status.

Referenced by nm_sr_request_test().

◆ nm_sr_swait()

static int nm_sr_swait ( nm_session_t  p_session,
nm_sr_request_t p_request 
)
inlinestatic

Wait for the completion of a non blocking send request.

Parameters
p_sessiona pointer to a nmad session object.
p_requestthe request to check.
Returns
The NM status.
Examples
nm_bench_req_monitor.c, nm_sr_custom_data.c, nm_sr_hello.c, and nm_sr_peek.c.

Referenced by nm_rpc_req_wait(), nm_sr_send(), and nm_sr_send_data().