NewMadeleine

Documentation

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_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 nm_sr_monitor() More...
 
typedef struct nm_sr_request_s nm_sr_request_t
 a sendrecv request object. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
static int nm_sr_request_isnull (nm_sr_request_t *p_request)
 tests whether a request is NULL More...
 
static int nm_sr_request_set_ref (nm_sr_request_t *p_request, void *ref)
 Add a user reference to a request. More...
 
static void * nm_sr_request_get_ref (nm_sr_request_t *p_request)
 Retrieve the 'ref' from a sendrecv request. More...
 
static nm_tag_t nm_sr_request_get_tag (nm_sr_request_t *p_request)
 Retrieve the tag from a sendrecv request. More...
 
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. More...
 
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. More...
 
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. More...
 
int nm_sr_request_wait (nm_sr_request_t *p_request)
 Wait for request completion (or cancelation) More...
 
static void nm_sr_request_wait_all (nm_sr_request_t **p_requests, int n)
 wait for completion of an array of requests More...
 
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. More...
 
static int nm_sr_request_get_error (nm_sr_request_t *p_request)
 Get the error status of the request. More...
 
int nm_sr_flush (struct nm_session_s *p_session)
 Flush all pending requests (force submission to the core) and all pending events. More...
 
static void nm_sr_send_init (nm_session_t p_session, nm_sr_request_t *p_request)
 Init a send request. More...
 
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. More...
 
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. More...
 
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. More...
 
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 More...
 
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 More...
 
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 More...
 
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 More...
 
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 More...
 
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. More...
 
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. More...
 

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 77 of file nm_sendrecv_interface.h.

◆ nm_sr_request_t

a sendrecv request object.

Supposedly opaque for applications.

Definition at line 56 of file nm_sendrecv_interface.h.

Enumeration Type Documentation

◆ nm_sr_event_t

events for nm_sr_monitor()

Enumerator
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 39 of file nm_sendrecv_interface.h.

Function Documentation

◆ nm_sr_flush()

int nm_sr_flush ( struct nm_session_s p_session)

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_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().

Here is the caller graph for this function:

◆ 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().

Here is the caller graph for this function:

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

Set a notification function called upon request completion.

Examples
nm_bench_req_monitor.c.

Referenced by nm_coll_tree_set_notifier().

Here is the caller 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 
)

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.

Examples
nm_bench_req_monitor.c.

Referenced by nm_coll_tree_set_notifier(), nm_sr_irecv_iov_with_ref(), nm_sr_irecv_with_ref(), nm_sr_isend_iov_with_ref(), and nm_sr_isend_with_ref().

Here is the caller graph for this function:

◆ nm_sr_request_test()

static int nm_sr_request_test ( nm_sr_request_t p_request,
nm_status_t  status 
)
inlinestatic

Tests whether the given status bits are set in request.

◆ nm_sr_request_unset_completion_queue()

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.

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)

Wait for request completion (or cancelation)

Referenced by nm_sr_rwait(), and nm_sr_swait().

Here is the caller graph for this function:

◆ 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().

Here is the caller 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

Init a send request.

Referenced by nm_coll_tree_issend(), nm_sr_isend(), nm_sr_isend_data(), nm_sr_isend_iov(), nm_sr_isend_iov_with_ref(), nm_sr_isend_with_ref(), nm_sr_issend(), and nm_sr_rsend().

Here is the caller graph for this function:

◆ 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(), nm_sr_isend_iov(), nm_sr_isend_iov_with_ref(), and nm_sr_isend_with_ref().

Here is the caller graph for this function:

◆ 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().

Here is the caller graph for this function:

◆ 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_isend_with_ref(), nm_sr_issend(), and nm_sr_rsend().

Here is the caller graph for this function:

◆ 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().

Here is the caller graph for this function:

◆ 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(), and nm_sr_isend_iov_with_ref().

Here is the caller graph for this function:

◆ 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().

Here is the caller graph for this function:

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