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
|
|
|
|
2004-09-09 23:21:34 +04:00
|
|
|
#define OMPI_NAME_ARGS(n) (n).cellid,(n).jobid,(n).vpid
|
2004-09-02 03:07:40 +04:00
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
|
/**
|
Not as bad as this all may look. Tim and I made a significant change to the way we handle the startup of the oob, the seed, etc. We have made it backwards-compatible so that mpirun2 and singleton operations remain working. We had to adjust the name server and gpr as well, plus the process_info structure.
This also includes a checkpoint update to openmpi.c and ompid.c. I have re-enabled the ompid compile.
This latter raises an important point. The trunk compiles the programs like ompid just fine under Linux. It also does just fine for OSX under the dynamic libraries. However, we are seeing errors when compiling under OSX for the static case - the linker seems to have trouble resolving some variable names, even though linker diagnostics show the variables as being defined. Thus, a warning to Mac users that you may have to locally turn things off if you are trying to do static compiles. We ask, however, that you don't commit those changes that turn things off for everyone else - instead, let's try to figure out why the static compile is having a problem, and let everyone else continue to work.
Thanks
Ralph
This commit was SVN r2534.
2004-09-08 07:59:06 +04:00
|
|
|
* Setup cached addresses for the peers.
|
2004-08-16 23:39:54 +04:00
|
|
|
*/
|
|
|
|
|
Not as bad as this all may look. Tim and I made a significant change to the way we handle the startup of the oob, the seed, etc. We have made it backwards-compatible so that mpirun2 and singleton operations remain working. We had to adjust the name server and gpr as well, plus the process_info structure.
This also includes a checkpoint update to openmpi.c and ompid.c. I have re-enabled the ompid compile.
This latter raises an important point. The trunk compiles the programs like ompid just fine under Linux. It also does just fine for OSX under the dynamic libraries. However, we are seeing errors when compiling under OSX for the static case - the linker seems to have trouble resolving some variable names, even though linker diagnostics show the variables as being defined. Thus, a warning to Mac users that you may have to locally turn things off if you are trying to do static compiles. We ask, however, that you don't commit those changes that turn things off for everyone else - instead, let's try to figure out why the static compile is having a problem, and let everyone else continue to work.
Thanks
Ralph
This commit was SVN r2534.
2004-09-08 07:59:06 +04:00
|
|
|
int mca_oob_tcp_set_addr(const ompi_process_name_t*, const char*);
|
2004-08-16 23:39:54 +04:00
|
|
|
|
2004-09-08 21:02:24 +04:00
|
|
|
/**
|
|
|
|
* A routine to ping a given process name to determine if it is reachable.
|
|
|
|
*
|
|
|
|
* @param name The peer name.
|
|
|
|
* @param tv The length of time to wait on a connection/response.
|
|
|
|
*
|
|
|
|
* Note that this routine blocks up to the specified timeout waiting for a
|
|
|
|
* connection / response from the specified peer. If the peer is unavailable
|
|
|
|
* an error status is returned.
|
|
|
|
*/
|
|
|
|
|
|
|
|
int mca_oob_tcp_ping(const ompi_process_name_t* name, const struct timeval* tv);
|
|
|
|
|
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 */
|
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 */
|
Not as bad as this all may look. Tim and I made a significant change to the way we handle the startup of the oob, the seed, etc. We have made it backwards-compatible so that mpirun2 and singleton operations remain working. We had to adjust the name server and gpr as well, plus the process_info structure.
This also includes a checkpoint update to openmpi.c and ompid.c. I have re-enabled the ompid compile.
This latter raises an important point. The trunk compiles the programs like ompid just fine under Linux. It also does just fine for OSX under the dynamic libraries. However, we are seeing errors when compiling under OSX for the static case - the linker seems to have trouble resolving some variable names, even though linker diagnostics show the variables as being defined. Thus, a warning to Mac users that you may have to locally turn things off if you are trying to do static compiles. We ask, however, that you don't commit those changes that turn things off for everyone else - instead, let's try to figure out why the static compile is having a problem, and let everyone else continue to work.
Thanks
Ralph
This commit was SVN r2534.
2004-09-08 07:59:06 +04:00
|
|
|
int tcp_peer_limit; /**< max size of tcp peer cache */
|
2004-08-16 23:39:54 +04:00
|
|
|
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_ */
|
|
|
|
|