2004-07-01 18:49:54 +04:00
|
|
|
/*
|
|
|
|
* $HEADER$
|
|
|
|
*/
|
|
|
|
/** @file:
|
|
|
|
*
|
|
|
|
* Defines the functions for the tcp module.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _MCA_OOB_TCP_H_
|
|
|
|
#define _MCA_OOB_TCP_H_
|
|
|
|
|
|
|
|
#include "mca/oob/oob.h"
|
|
|
|
#include "mca/oob/base/base.h"
|
2004-08-05 03:42:51 +04:00
|
|
|
#include "mca/base/base.h"
|
2004-07-13 02:46:57 +04:00
|
|
|
#include "class/ompi_free_list.h"
|
2004-07-01 18:49:54 +04:00
|
|
|
#include "class/ompi_rb_tree.h"
|
2004-07-13 02:46:57 +04:00
|
|
|
#include "event/event.h"
|
|
|
|
#include "threads/mutex.h"
|
|
|
|
#include "threads/condition.h"
|
2004-07-01 18:49:54 +04:00
|
|
|
#include "mca/oob/tcp/oob_tcp_peer.h"
|
2004-07-13 02:46:57 +04:00
|
|
|
#include "mca/oob/tcp/oob_tcp_msg.h"
|
2004-07-01 18:49:54 +04:00
|
|
|
|
|
|
|
|
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2004-09-02 03:07:40 +04:00
|
|
|
|
|
|
|
#define OMPI_NAME_COMPONENTS(n) (n).cellid,(n).jobid,(n).vpid
|
|
|
|
|
|
|
|
|
2004-07-01 18:49:54 +04:00
|
|
|
/*
|
2004-08-19 23:34:37 +04:00
|
|
|
* standard component functions
|
2004-07-01 18:49:54 +04:00
|
|
|
*/
|
2004-08-19 23:34:37 +04:00
|
|
|
int mca_oob_tcp_component_open(void);
|
|
|
|
int mca_oob_tcp_component_close(void);
|
2004-08-28 05:15:19 +04:00
|
|
|
mca_oob_t* mca_oob_tcp_component_init(int* priority, bool *allow_multi_user_threads, bool *have_hidden_threads);
|
2004-08-19 23:34:37 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Hook function to allow the selected oob components
|
|
|
|
* to register their contact info with the registry
|
|
|
|
*/
|
|
|
|
|
|
|
|
int mca_oob_tcp_init(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Cleanup resources during shutdown.
|
|
|
|
*/
|
|
|
|
int mca_oob_tcp_fini(void);
|
2004-07-01 18:49:54 +04:00
|
|
|
|
2004-08-10 03:07:53 +04:00
|
|
|
/**
|
2004-08-03 01:24:00 +04:00
|
|
|
* Convert process name from network to host byte order.
|
|
|
|
*
|
|
|
|
* @param name
|
|
|
|
*/
|
|
|
|
#define OMPI_PROCESS_NAME_NTOH(n) \
|
|
|
|
n.cellid = ntohl(n.cellid); \
|
|
|
|
n.jobid = ntohl(n.jobid); \
|
|
|
|
n.vpid = ntohl(n.vpid);
|
2004-07-01 18:49:54 +04:00
|
|
|
|
2004-08-10 03:07:53 +04:00
|
|
|
/**
|
2004-08-03 01:24:00 +04:00
|
|
|
* Convert process name from host to network byte order.
|
|
|
|
*
|
|
|
|
* @param name
|
|
|
|
*/
|
|
|
|
#define OMPI_PROCESS_NAME_HTON(n) \
|
|
|
|
n.cellid = htonl(n.cellid); \
|
|
|
|
n.jobid = htonl(n.jobid); \
|
|
|
|
n.vpid = htonl(n.vpid);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Compare two process names for equality.
|
|
|
|
*
|
|
|
|
* @param n1 Process name 1.
|
|
|
|
* @param n2 Process name 2.
|
|
|
|
* @return (-1 for n1<n2 0 for equality, 1 for n1>n2)
|
|
|
|
*
|
|
|
|
* Note that the definition of < or > is somewhat arbitrary -
|
|
|
|
* just needs to be consistently applied to maintain an ordering
|
|
|
|
* when process names are used as indices.
|
|
|
|
*/
|
2004-08-05 19:30:36 +04:00
|
|
|
int mca_oob_tcp_process_name_compare(const ompi_process_name_t* n1, const ompi_process_name_t* n2);
|
2004-08-03 01:24:00 +04:00
|
|
|
|
2004-08-16 23:39:54 +04:00
|
|
|
/**
|
|
|
|
* Obtain contact information for this host (e.g. <ipaddress>:<port>)
|
|
|
|
*/
|
|
|
|
|
|
|
|
char* mca_oob_tcp_get_addr(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set address for the seed.
|
|
|
|
*/
|
|
|
|
|
|
|
|
int mca_oob_tcp_set_seed(const char*);
|
|
|
|
|
2004-07-01 18:49:54 +04:00
|
|
|
/**
|
2004-07-14 01:03:03 +04:00
|
|
|
* Similiar to unix writev(2).
|
2004-07-01 18:49:54 +04:00
|
|
|
*
|
|
|
|
* @param peer (IN) Opaque name of peer process.
|
|
|
|
* @param msg (IN) Array of iovecs describing user buffers and lengths.
|
|
|
|
* @param count (IN) Number of elements in iovec array.
|
2004-08-03 01:24:00 +04:00
|
|
|
* @param tag (IN) User defined tag for matching send/recv.
|
2004-07-01 18:49:54 +04:00
|
|
|
* @param flags (IN) Currently unused.
|
|
|
|
* @return OMPI error code (<0) on error number of bytes actually sent.
|
|
|
|
*/
|
|
|
|
|
2004-08-03 01:24:00 +04:00
|
|
|
int mca_oob_tcp_send(
|
2004-08-13 02:41:42 +04:00
|
|
|
ompi_process_name_t* peer,
|
|
|
|
struct iovec *msg,
|
2004-08-03 01:24:00 +04:00
|
|
|
int count,
|
|
|
|
int tag,
|
|
|
|
int flags);
|
2004-07-01 18:49:54 +04:00
|
|
|
|
|
|
|
/**
|
2004-07-14 01:03:03 +04:00
|
|
|
* Similiar to unix readv(2)
|
2004-07-01 18:49:54 +04:00
|
|
|
*
|
2004-08-05 03:42:51 +04:00
|
|
|
* @param peer (IN) Opaque name of peer process or MCA_OOB_NAME_ANY for wildcard receive.
|
2004-07-01 18:49:54 +04:00
|
|
|
* @param msg (IN) Array of iovecs describing user buffers and lengths.
|
|
|
|
* @param count (IN) Number of elements in iovec array.
|
2004-08-03 01:24:00 +04:00
|
|
|
* @param tag (IN) User defined tag for matching send/recv.
|
2004-07-15 23:08:54 +04:00
|
|
|
* @param flags (IN) May be MCA_OOB_PEEK to return up to the number of bytes provided in the
|
2004-07-01 18:49:54 +04:00
|
|
|
* iovec array without removing the message from the queue.
|
|
|
|
* @return OMPI error code (<0) on error or number of bytes actually received.
|
|
|
|
*/
|
|
|
|
|
2004-08-03 01:24:00 +04:00
|
|
|
int mca_oob_tcp_recv(
|
|
|
|
ompi_process_name_t* peer,
|
2004-08-13 02:41:42 +04:00
|
|
|
struct iovec * msg,
|
2004-08-03 01:24:00 +04:00
|
|
|
int count,
|
2004-08-13 02:41:42 +04:00
|
|
|
int* tag,
|
2004-08-03 01:24:00 +04:00
|
|
|
int flags);
|
2004-07-01 18:49:54 +04:00
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Non-blocking versions of send/recv.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Non-blocking version of mca_oob_send().
|
|
|
|
*
|
|
|
|
* @param peer (IN) Opaque name of peer process.
|
|
|
|
* @param msg (IN) Array of iovecs describing user buffers and lengths.
|
|
|
|
* @param count (IN) Number of elements in iovec array.
|
2004-08-03 01:24:00 +04:00
|
|
|
* @param tag (IN) User defined tag for matching send/recv.
|
2004-07-01 18:49:54 +04:00
|
|
|
* @param flags (IN) Currently unused.
|
|
|
|
* @param cbfunc (IN) Callback function on send completion.
|
|
|
|
* @param cbdata (IN) User data that is passed to callback function.
|
|
|
|
* @return OMPI error code (<0) on error number of bytes actually sent.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
2004-08-03 01:24:00 +04:00
|
|
|
int mca_oob_tcp_send_nb(
|
2004-08-13 02:41:42 +04:00
|
|
|
ompi_process_name_t* peer,
|
|
|
|
struct iovec* msg,
|
2004-08-03 01:24:00 +04:00
|
|
|
int count,
|
|
|
|
int tag,
|
|
|
|
int flags,
|
|
|
|
mca_oob_callback_fn_t cbfunc,
|
|
|
|
void* cbdata);
|
2004-07-01 18:49:54 +04:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Non-blocking version of mca_oob_recv().
|
|
|
|
*
|
2004-08-05 03:42:51 +04:00
|
|
|
* @param peer (IN) Opaque name of peer process or MCA_OOB_NAME_ANY for wildcard receive.
|
2004-07-01 18:49:54 +04:00
|
|
|
* @param msg (IN) Array of iovecs describing user buffers and lengths.
|
|
|
|
* @param count (IN) Number of elements in iovec array.
|
2004-08-03 01:24:00 +04:00
|
|
|
* @param tag (IN) User defined tag for matching send/recv.
|
2004-07-15 23:08:54 +04:00
|
|
|
* @param flags (IN) May be MCA_OOB_PEEK to return up to size bytes of msg w/out removing it from the queue,
|
2004-07-01 18:49:54 +04:00
|
|
|
* @param cbfunc (IN) Callback function on recv completion.
|
|
|
|
* @param cbdata (IN) User data that is passed to callback function.
|
|
|
|
* @return OMPI error code (<0) on error or number of bytes actually received.
|
|
|
|
*/
|
|
|
|
|
2004-08-03 01:24:00 +04:00
|
|
|
int mca_oob_tcp_recv_nb(
|
|
|
|
ompi_process_name_t* peer,
|
2004-08-13 02:41:42 +04:00
|
|
|
struct iovec* msg,
|
2004-08-03 01:24:00 +04:00
|
|
|
int count,
|
|
|
|
int tag,
|
|
|
|
int flags,
|
|
|
|
mca_oob_callback_fn_t cbfunc,
|
|
|
|
void* cbdata);
|
2004-07-01 18:49:54 +04:00
|
|
|
|
2004-09-02 03:07:40 +04:00
|
|
|
/**
|
|
|
|
* Attempt to map a peer name to its corresponding address.
|
|
|
|
*/
|
|
|
|
|
|
|
|
int mca_oob_tcp_resolve(mca_oob_tcp_peer_t*);
|
|
|
|
|
2004-08-19 23:34:37 +04:00
|
|
|
/**
|
|
|
|
* Parse a URI string into an IP address and port number.
|
|
|
|
*/
|
|
|
|
int mca_oob_tcp_parse_uri(
|
|
|
|
const char* uri,
|
|
|
|
struct sockaddr_in* inaddr
|
|
|
|
);
|
|
|
|
|
2004-07-01 18:49:54 +04:00
|
|
|
|
2004-07-13 02:46:57 +04:00
|
|
|
/**
|
|
|
|
* OOB TCP Component
|
|
|
|
*/
|
|
|
|
struct mca_oob_tcp_component_t {
|
2004-07-15 17:51:40 +04:00
|
|
|
mca_oob_base_component_1_0_0_t super; /**< base OOB component */
|
2004-08-16 23:39:54 +04:00
|
|
|
int tcp_listen_sd; /**< listen socket for incoming connection requests */
|
|
|
|
unsigned short tcp_listen_port; /**< listen port */
|
|
|
|
struct sockaddr_in tcp_seed_addr; /**< uri string of tcp peer address */
|
2004-09-02 03:07:40 +04:00
|
|
|
ompi_list_t tcp_subscriptions; /**< list of registry subscriptions */
|
2004-08-16 23:39:54 +04:00
|
|
|
ompi_list_t tcp_peer_list; /**< list of peers sorted in mru order */
|
|
|
|
ompi_rb_tree_t tcp_peer_tree; /**< tree of peers sorted by name */
|
2004-09-02 03:07:40 +04:00
|
|
|
ompi_rb_tree_t tcp_peer_names; /**< cache of peer contact info sorted by name */
|
2004-08-16 23:39:54 +04:00
|
|
|
ompi_free_list_t tcp_peer_free; /**< free list of peers */
|
|
|
|
size_t tcp_peer_limit; /**< max size of tcp peer cache */
|
|
|
|
int tcp_peer_retries; /**< max number of retries before declaring peer gone */
|
|
|
|
ompi_free_list_t tcp_msgs; /**< free list of messages */
|
|
|
|
ompi_event_t tcp_send_event; /**< event structure for sends */
|
|
|
|
ompi_event_t tcp_recv_event; /**< event structure for recvs */
|
|
|
|
ompi_mutex_t tcp_lock; /**< lock for accessing module state */
|
|
|
|
ompi_list_t tcp_msg_post; /**< list of recieves user has posted */
|
|
|
|
ompi_list_t tcp_msg_recv; /**< list of recieved messages */
|
|
|
|
ompi_mutex_t tcp_match_lock; /**< lock held while searching/posting messages */
|
2004-09-02 03:07:40 +04:00
|
|
|
int tcp_debug; /**< debug level */
|
2004-07-13 02:46:57 +04:00
|
|
|
};
|
2004-08-16 23:39:54 +04:00
|
|
|
|
2004-08-10 03:07:53 +04:00
|
|
|
/**
|
|
|
|
* Convenience Typedef
|
|
|
|
*/
|
2004-07-13 02:46:57 +04:00
|
|
|
typedef struct mca_oob_tcp_component_t mca_oob_tcp_component_t;
|
|
|
|
|
2004-08-02 04:24:22 +04:00
|
|
|
extern mca_oob_tcp_component_t mca_oob_tcp_component;
|
2004-07-13 02:46:57 +04:00
|
|
|
|
|
|
|
|
2004-07-01 18:49:54 +04:00
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* MCA_OOB_TCP_H_ */
|
|
|
|
|