From 07d6a4db6b6d7596d425c38a14ee867175e099fc Mon Sep 17 00:00:00 2001 From: Tim Woodall Date: Mon, 19 Apr 2004 16:10:24 +0000 Subject: [PATCH] fixes or multi-nic support This commit was SVN r1051. --- src/mca/ptl/tcp/src/ptl_tcp_module.c | 12 +++++------- src/mca/ptl/tcp/src/ptl_tcp_peer.c | 25 +++++++++++++++++++++++++ src/mca/ptl/tcp/src/ptl_tcp_recvfrag.c | 2 +- 3 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/mca/ptl/tcp/src/ptl_tcp_module.c b/src/mca/ptl/tcp/src/ptl_tcp_module.c index 54333a77cd..2c3bb24abc 100644 --- a/src/mca/ptl/tcp/src/ptl_tcp_module.c +++ b/src/mca/ptl/tcp/src/ptl_tcp_module.c @@ -140,19 +140,19 @@ int mca_ptl_tcp_module_close(void) if (mca_ptl_tcp_module.tcp_send_requests.fl_num_allocated != mca_ptl_tcp_module.tcp_send_requests.super.lam_list_length) { lam_output(0, "tcp send requests: %d allocated %d returned\n", - mca_ptl_tcp_module.tcp_send_requests.fl_num_allocated != + mca_ptl_tcp_module.tcp_send_requests.fl_num_allocated, mca_ptl_tcp_module.tcp_send_requests.super.lam_list_length); } if (mca_ptl_tcp_module.tcp_send_frags.fl_num_allocated != mca_ptl_tcp_module.tcp_send_frags.super.lam_list_length) { lam_output(0, "tcp send frags: %d allocated %d returned\n", - mca_ptl_tcp_module.tcp_send_frags.fl_num_allocated != + mca_ptl_tcp_module.tcp_send_frags.fl_num_allocated, mca_ptl_tcp_module.tcp_send_frags.super.lam_list_length); } if (mca_ptl_tcp_module.tcp_recv_frags.fl_num_allocated != mca_ptl_tcp_module.tcp_recv_frags.super.lam_list_length) { lam_output(0, "tcp recv frags: %d allocated %d returned\n", - mca_ptl_tcp_module.tcp_recv_frags.fl_num_allocated != + mca_ptl_tcp_module.tcp_recv_frags.fl_num_allocated, mca_ptl_tcp_module.tcp_recv_frags.super.lam_list_length); } @@ -216,7 +216,7 @@ static int mca_ptl_tcp_module_create_instances(void) return LAM_ERR_OUT_OF_RESOURCE; /* if the user specified an interface list - use these exclusively */ - argv = include = lam_argv_split(mca_ptl_tcp_module.tcp_if_include,'\''); + argv = include = lam_argv_split(mca_ptl_tcp_module.tcp_if_include,','); while(argv && *argv) { char* if_name = *argv; int if_index = lam_ifnametoindex(if_name); @@ -235,7 +235,7 @@ static int mca_ptl_tcp_module_create_instances(void) /* if the interface list was not specified by the user, create * a PTL for each interface that was not excluded. */ - exclude = lam_argv_split(mca_ptl_tcp_module.tcp_if_exclude,'\''); + exclude = lam_argv_split(mca_ptl_tcp_module.tcp_if_exclude,','); for(if_index = lam_ifbegin(); if_index >= 0; if_index = lam_ifnext(if_index)) { char if_name[32]; lam_ifindextoname(if_index, if_name, sizeof(if_name)); @@ -394,8 +394,6 @@ mca_ptl_t** mca_ptl_tcp_module_init(int *num_ptls, /* create a PTL TCP module for selected interfaces */ if(mca_ptl_tcp_module_create_instances() != LAM_SUCCESS) return 0; - if(mca_ptl_tcp_module.tcp_num_ptls == 1) - mca_ptl_tcp_module.tcp_ptls[0]->super.ptl_max_frag_size = 1024 * 1024; /* create a TCP listen socket for incoming connection attempts */ if(mca_ptl_tcp_module_create_listen() != LAM_SUCCESS) diff --git a/src/mca/ptl/tcp/src/ptl_tcp_peer.c b/src/mca/ptl/tcp/src/ptl_tcp_peer.c index 38410f8c7e..3d37e67aff 100644 --- a/src/mca/ptl/tcp/src/ptl_tcp_peer.c +++ b/src/mca/ptl/tcp/src/ptl_tcp_peer.c @@ -232,6 +232,31 @@ void mca_ptl_tcp_peer_close(mca_ptl_base_peer_t* ptl_peer) static void mca_ptl_tcp_peer_connected(mca_ptl_base_peer_t* ptl_peer) { + /* setup socket options */ + int optval = 1; + lam_socklen_t optlen = sizeof(optval); + +#if defined(TCP_NODELAY) + optval = 1; + if(setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, &optval, optlen) < 0) { + lam_output(0, "mca_ptl_tcp_peer_connected: setsockopt(TCP_NODELAY) failed with errno=%d\n", errno); + } +#endif +#if defined(TCP_NODELACK) + optval = 1; + if(setsockopt(sd, IPPROTO_TCP, TCP_NODELACK, &optval, optlen) < 0) { + lam_output(0, "mca_ptl_tcp_peer_connected: setsockopt(TCP_NODELACK) failed with errno=%d\n", errno); + } +#endif +#if 0 +#if defined(TCP_QUICKACK) + optval = 1; + if(setsockopt(sd, IPPROTO_TCP, TCP_QUICKACK, &optval, optlen) < 0) { + lam_output(0, "mca_ptl_tcp_peer_connected: setsockopt(TCP_QUICKACK) failed with errno=%d\n", errno); + } +#endif +#endif + ptl_peer->peer_state = MCA_PTL_TCP_CONNECTED; ptl_peer->peer_retries = 0; if(lam_list_get_size(&ptl_peer->peer_frags) > 0) { diff --git a/src/mca/ptl/tcp/src/ptl_tcp_recvfrag.c b/src/mca/ptl/tcp/src/ptl_tcp_recvfrag.c index 30b9c34761..acf9b8fa82 100644 --- a/src/mca/ptl/tcp/src/ptl_tcp_recvfrag.c +++ b/src/mca/ptl/tcp/src/ptl_tcp_recvfrag.c @@ -123,7 +123,7 @@ static bool mca_ptl_tcp_recv_frag_ack(mca_ptl_tcp_recv_frag_t* frag, int sd) sendreq = sendfrag->super.frag_request; sendreq->req_peer_request = frag->frag_header.hdr_ack.hdr_dst_ptr; sendfrag->frag_owner->ptl_send_progress(sendreq, &sendfrag->super); - /* don't return first fragment - it is returned along with the request */ + mca_ptl_tcp_recv_frag_return(frag->frag_owner, frag); return true; }