NewMadeleine

Documentation

« back to PM2 home.
nm_sendrecv_interface.h File Reference
#include <nm_public.h>
#include <nm_session_interface.h>
#include <nm_core_interface.h>
#include <sys/uio.h>
#include <limits.h>
#include <nm_sendrecv_private.h>
Include dependency graph for nm_sendrecv_interface.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

union  nm_sr_event_info_t
 information field for sendrecv events More...
 
struct  nm_sr_monitor_s
 a global monitor to listen to events on the full session More...
 
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