1
1

Restrict the port range for the OOB and the BTL. Each protocols (v4 and v6)

has his own range which is defined by a min value and a range. By default
there is no limitation on the port range, which is exactly the same
behavior as before.

This commit was SVN r16584.
Этот коммит содержится в:
George Bosilca 2007-10-26 16:36:51 +00:00
родитель 9e4387d021
Коммит 337f78a4a8
4 изменённых файлов: 254 добавлений и 106 удалений

Просмотреть файл

@ -70,16 +70,21 @@ struct mca_btl_tcp_component_t {
opal_hash_table_t tcp_procs; /**< hash table of tcp proc structures */
opal_list_t tcp_events; /**< list of pending tcp events */
opal_mutex_t tcp_lock; /**< lock for accessing module state */
opal_event_t tcp_recv_event; /**< recv event for IPv4 listen socket */
#if OPAL_WANT_IPV6
opal_event_t tcp6_recv_event; /**< recv event for IPv6 listen socket */
#endif
int tcp_listen_sd; /**< IPv4 listen socket for incoming connection requests */
unsigned short tcp_listen_port; /**< IPv4 listen port */
int32_t tcp_port_min; /**< IPv4 minimum port */
int32_t tcp_port_range; /**< IPv4 port range */
#if OPAL_WANT_IPV6
opal_event_t tcp6_recv_event; /**< recv event for IPv6 listen socket */
int tcp6_listen_sd; /**< IPv6 listen socket for incoming connection requests */
unsigned short tcp6_listen_port; /**< IPv6 listen port */
int32_t tcp6_port_min; /**< IPv4 minimum port */
int32_t tcp6_port_range; /**< IPv4 port range */
#endif
/* Port range restriction */
char* tcp_if_include; /**< comma seperated list of interface to include */
char* tcp_if_exclude; /**< comma seperated list of interface to exclude */
int tcp_sndbuf; /**< socket sndbuf size */

Просмотреть файл

@ -217,10 +217,33 @@ int mca_btl_tcp_component_open(void)
mca_btl_tcp_component.tcp_rcvbuf =
mca_btl_tcp_param_register_int ("rcvbuf", NULL, 128*1024);
mca_btl_tcp_component.tcp_endpoint_cache =
mca_btl_tcp_param_register_int ("endpoint_cache", NULL, 30*1024);
mca_btl_tcp_param_register_int ("endpoint_cache",
"The size of the internal cache for each TCP connection. This cache is"
" used to reduce the number of syscalls, by replacing them with memcpy."
" Every read will read the expected data plus the amount of the"
" endpoint_cache", 30*1024);
mca_btl_tcp_component.tcp_use_nodelay =
!mca_btl_tcp_param_register_int ("use_nagle", "Whether to use Nagle's algorithm or not (using Nagle's algorithm may increase short message latency)", 0);
mca_btl_tcp_component.tcp_port_min =
mca_btl_tcp_param_register_int( "port_min_v4",
"The minimum port where the TCP BTL will try to bind (default 0)", 0 );
mca_btl_tcp_component.tcp_port_range =
mca_btl_tcp_param_register_int( "port_range_v4",
"The number of ports where the TCP BTL will try to bind (default 64K)."
" This parameter together with the port min, define a range of ports"
" where Open MPI will open sockets.",
64*1024 - mca_btl_tcp_component.tcp_port_min - 1);
#if OPAL_WANT_IPV6
mca_btl_tcp_component.tcp6_port_min =
mca_btl_tcp_param_register_int( "port_min_v6",
"The minimum port where the TCP BTL will try to bind (default 0)", 0 );
mca_btl_tcp_component.tcp6_port_range =
mca_btl_tcp_param_register_int( "port_range_v6",
"The number of ports where the TCP BTL will try to bind (default 64K)."
" This parameter together with the port min, define a range of ports"
" where Open MPI will open sockets.",
64*1024 - mca_btl_tcp_component.tcp6_port_min - 1);
#endif
mca_btl_tcp_module.super.btl_exclusivity = MCA_BTL_EXCLUSIVITY_LOW;
mca_btl_tcp_module.super.btl_eager_limit = 64*1024;
mca_btl_tcp_module.super.btl_min_send_size = 64*1024;
@ -482,11 +505,7 @@ static int mca_btl_tcp_component_create_listen(uint16_t af_family)
{
int flags;
int sd;
#if OPAL_WANT_IPV6
struct sockaddr_in6 inaddr;
#else
struct sockaddr_in inaddr;
#endif
struct sockaddr_storage inaddr;
opal_socklen_t addrlen;
/* create a listen socket for incoming connections */
@ -499,24 +518,8 @@ static int mca_btl_tcp_component_create_listen(uint16_t af_family)
return OMPI_ERR_IN_ERRNO;
}
/* we now have a socket. Assign it to the real mca_btl_tcp_component */
#if OPAL_WANT_IPV6
if (AF_INET6 == af_family) {
mca_btl_tcp_component.tcp6_listen_sd = sd;
addrlen = sizeof(struct sockaddr_in6);
} else {
mca_btl_tcp_component.tcp_listen_sd = sd;
addrlen = sizeof(struct sockaddr_in);
}
#else
mca_btl_tcp_component.tcp_listen_sd = sd;
addrlen = sizeof(struct sockaddr_in);
#endif
mca_btl_tcp_set_socket_options(sd);
/* bind to all addresses and dynamically assigned port */
memset(&inaddr, 0, sizeof(inaddr));
#if OPAL_WANT_IPV6
{
struct addrinfo hints, *res = NULL;
@ -531,7 +534,8 @@ static int mca_btl_tcp_component_create_listen(uint16_t af_family)
opal_output (0,
"mca_btl_tcp_create_listen: unable to resolve. %s\n",
gai_strerror (error));
return ORTE_ERROR;
CLOSE_THE_SOCKET(sd);
return OMPI_ERROR;
}
memcpy (&inaddr, res->ai_addr, res->ai_addrlen);
@ -551,39 +555,93 @@ static int mca_btl_tcp_component_create_listen(uint16_t af_family)
#endif /* IPV6_V6ONLY */
}
#else
inaddr.sin_family = AF_INET;
inaddr.sin_addr.s_addr = INADDR_ANY;
inaddr.sin_port = 0;
((struct sockaddr_in*) &inaddr)->sin_family = AF_INET;
((struct sockaddr_in*) &inaddr)->sin_addr.s_addr = INADDR_ANY;
addrlen = sizeof(struct sockaddr_in);
#endif
if(bind(sd, (struct sockaddr*)&inaddr, addrlen) < 0) {
BTL_ERROR(("bind() failed: %s (%d)",
strerror(opal_socket_errno), opal_socket_errno));
return OMPI_ERROR;
{ /* Don't reuse ports */
int flg = 0;
if (setsockopt (sd, SOL_SOCKET, SO_REUSEPORT, &flg, sizeof (flg)) < 0) {
BTL_ERROR((0, "mca_btl_tcp_create_listen: unable to unset the "
"SO_REUSEADDR option (%s:%d)\n",
strerror(opal_socket_errno), opal_socket_errno));
CLOSE_THE_SOCKET(sd);
return OMPI_ERROR;
}
}
{
int index, range, port;
if( AF_INET == af_family ) {
range = mca_btl_tcp_component.tcp_port_range;
port = mca_btl_tcp_component.tcp_port_min;
}
#if OPAL_WANT_IPV6
if (AF_INET6 == af_family) {
range = mca_btl_tcp_component.tcp6_port_range;
port = mca_btl_tcp_component.tcp6_port_min;
}
#endif /* OPAL_WANT_IPV6 */
for( index = 0; index < range; index++ ) {
#if OPAL_WANT_IPV6
((struct sockaddr_in6*) &inaddr)->sin6_port = port + index;
#else
((struct sockaddr_in*) &inaddr)->sin_port = port + index;
#endif /* OPAL_WANT_IPV6 */
if(bind(sd, (struct sockaddr*)&inaddr, addrlen) < 0) {
if( (EADDRINUSE == opal_socket_errno) || (EADDRNOTAVAIL == opal_socket_errno) ) {
continue;
}
BTL_ERROR(("bind() failed: %s (%d)",
strerror(opal_socket_errno), opal_socket_errno));
CLOSE_THE_SOCKET(sd);
return OMPI_ERROR;
}
goto socket_binded;
}
if( AF_INET == af_family ) {
BTL_ERROR(("bind() failed: no port available in the range [%d..%d]",
mca_btl_tcp_component.tcp_port_min,
mca_btl_tcp_component.tcp_port_min + range));
}
#if OPAL_WANT_IPV6
if (AF_INET6 == af_family) {
BTL_ERROR(("bind6() failed: no port available in the range [%d..%d]",
mca_btl_tcp_component.tcp6_port_min,
mca_btl_tcp_component.tcp6_port_min + range));
}
#endif /* OPAL_WANT_IPV6 */
CLOSE_THE_SOCKET(sd);
return OMPI_ERROR;
}
socket_binded:
/* resolve system assignend port */
if(getsockname(sd, (struct sockaddr*)&inaddr, &addrlen) < 0) {
BTL_ERROR(("getsockname() failed: %s (%d)",
strerror(opal_socket_errno), opal_socket_errno));
CLOSE_THE_SOCKET(sd);
return OMPI_ERROR;
}
#if OPAL_WANT_IPV6
if (AF_INET == af_family) {
mca_btl_tcp_component.tcp_listen_port = inaddr.sin6_port;
mca_btl_tcp_component.tcp_listen_port = ((struct sockaddr_in*) &inaddr)->sin_port;
mca_btl_tcp_component.tcp_listen_sd = sd;
}
#if OPAL_WANT_IPV6
if (AF_INET6 == af_family) {
mca_btl_tcp_component.tcp6_listen_port = inaddr.sin6_port;
mca_btl_tcp_component.tcp6_listen_port = ((struct sockaddr_in6*) &inaddr)->sin6_port;
mca_btl_tcp_component.tcp6_listen_sd = sd;
}
#else
mca_btl_tcp_component.tcp_listen_port = inaddr.sin_port;
#endif
/* setup listen backlog to maximum allowed by kernel */
if(listen(sd, SOMAXCONN) < 0) {
BTL_ERROR(("listen() failed: %s (%d)",
strerror(opal_socket_errno), opal_socket_errno));
CLOSE_THE_SOCKET(sd);
return OMPI_ERROR;
}
@ -591,42 +649,36 @@ static int mca_btl_tcp_component_create_listen(uint16_t af_family)
if((flags = fcntl(sd, F_GETFL, 0)) < 0) {
BTL_ERROR(("fcntl(F_GETFL) failed: %s (%d)",
strerror(opal_socket_errno), opal_socket_errno));
CLOSE_THE_SOCKET(sd);
return OMPI_ERROR;
} else {
flags |= O_NONBLOCK;
if(fcntl(sd, F_SETFL, flags) < 0) {
BTL_ERROR(("fcntl(F_SETFL) failed: %s (%d)",
strerror(opal_socket_errno), opal_socket_errno));
CLOSE_THE_SOCKET(sd);
return OMPI_ERROR;
}
}
/* register listen port */
#if OPAL_WANT_IPV6
if (AF_INET == af_family) {
opal_event_set( &mca_btl_tcp_component.tcp_recv_event,
sd,
mca_btl_tcp_component.tcp_listen_sd,
OPAL_EV_READ|OPAL_EV_PERSIST,
mca_btl_tcp_component_accept_handler,
0 );
opal_event_add(&mca_btl_tcp_component.tcp_recv_event, 0);
}
#if OPAL_WANT_IPV6
if (AF_INET6 == af_family) {
opal_event_set( &mca_btl_tcp_component.tcp6_recv_event,
sd,
mca_btl_tcp_component.tcp6_listen_sd,
OPAL_EV_READ|OPAL_EV_PERSIST,
mca_btl_tcp_component_accept_handler,
0 );
opal_event_add(&mca_btl_tcp_component.tcp6_recv_event, 0);
}
#else
opal_event_set( &mca_btl_tcp_component.tcp_recv_event,
mca_btl_tcp_component.tcp_listen_sd,
OPAL_EV_READ|OPAL_EV_PERSIST,
mca_btl_tcp_component_accept_handler,
0 );
opal_event_add(&mca_btl_tcp_component.tcp_recv_event,0);
#endif
return OMPI_SUCCESS;
}

Просмотреть файл

@ -356,10 +356,33 @@ int mca_oob_tcp_component_open(void)
10,
&mca_oob_tcp_component.tcp_copy_spin_count);
mca_base_param_reg_int(&mca_oob_tcp_component.super.oob_base,
"port_min_v4", "Starting port allowed (IPv4)",
false, false,
0,
&mca_oob_tcp_component.tcp_port_min);
mca_base_param_reg_int(&mca_oob_tcp_component.super.oob_base,
"port_range_v4", "Range of allowed ports (IPv4)",
false, false,
64*1024 - 1 - mca_oob_tcp_component.tcp_port_min,
&mca_oob_tcp_component.tcp_port_range);
#if OPAL_WANT_IPV6
mca_base_param_reg_int(&mca_oob_tcp_component.super.oob_base,
"port_min_v6", "Starting port allowed (IPv6)",
false, false,
0,
&mca_oob_tcp_component.tcp6_port_min);
mca_base_param_reg_int(&mca_oob_tcp_component.super.oob_base,
"port_range_v6", "Range of allowed ports (IPv6)",
false, false,
64*1024 - 1 - mca_oob_tcp_component.tcp6_port_min,
&mca_oob_tcp_component.tcp6_port_range);
mca_oob_tcp_component.tcp6_listen_sd = -1;
#endif /* OPAL_WANT_IPV6 */
/* initialize state */
mca_oob_tcp_component.tcp_shutdown = false;
mca_oob_tcp_component.tcp_listen_sd = -1;
mca_oob_tcp_component.tcp6_listen_sd = -1;
mca_oob_tcp_component.tcp_match_count = 0;
mca_oob_tcp_component.tcp_last_copy_time = 0;
@ -471,14 +494,9 @@ static int mca_oob_tcp_create_listen(int *target_sd, uint16_t af_family)
int flags;
struct sockaddr_storage inaddr;
opal_socklen_t addrlen;
#if OPAL_WANT_IPV6
struct addrinfo hints, *res = NULL;
int error;
#endif
/* create a listen socket for incoming connections */
*target_sd = socket(af_family, SOCK_STREAM, 0);
if(*target_sd < 0) {
if (EAFNOSUPPORT != opal_socket_errno) {
opal_output(0,"mca_oob_tcp_component_init: socket() failed: %s (%d)",
@ -490,69 +508,125 @@ static int mca_oob_tcp_create_listen(int *target_sd, uint16_t af_family)
/* setup socket options */
mca_oob_tcp_set_socket_options(*target_sd);
/* bind address */
memset(&inaddr, 0, sizeof(inaddr));
#if OPAL_WANT_IPV6
memset(&hints, 0, sizeof(hints));
hints.ai_family = af_family;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
{
struct addrinfo hints, *res = NULL;
int error;
memset(&hints, 0, sizeof(hints));
hints.ai_family = af_family;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
if ((error = getaddrinfo(NULL, "0", &hints, &res))) {
opal_output (0,
"mca_oob_tcp_create_listen: unable to resolve. %s\n",
gai_strerror (error));
return ORTE_ERROR;
}
if ((error = getaddrinfo(NULL, "0", &hints, &res))) {
opal_output (0,
"mca_oob_tcp_create_listen: unable to resolve. %s\n",
gai_strerror (error));
return ORTE_ERROR;
}
memcpy (&inaddr, res->ai_addr, res->ai_addrlen);
addrlen = res->ai_addrlen;
freeaddrinfo (res);
memcpy (&inaddr, res->ai_addr, res->ai_addrlen);
addrlen = res->ai_addrlen;
freeaddrinfo (res);
#ifdef IPV6_V6ONLY
/* in case of AF_INET6, disable v4-mapped addresses */
if (AF_INET6 == af_family) {
int flg = 0;
if (setsockopt (*target_sd, IPPROTO_IPV6, IPV6_V6ONLY,
&flg, sizeof (flg)) < 0) {
opal_output(0,
"mca_oob_tcp_create_listen: unable to disable v4-mapped addresses\n");
/* in case of AF_INET6, disable v4-mapped addresses */
if (AF_INET6 == af_family) {
int flg = 0;
if (setsockopt (*target_sd, IPPROTO_IPV6, IPV6_V6ONLY,
&flg, sizeof (flg)) < 0) {
opal_output(0,
"mca_oob_tcp_create_listen: unable to disable v4-mapped addresses\n");
}
}
}
#endif /* IPV6_V6ONLY */
#else
if (AF_INET == af_family) {
struct sockaddr_in * in = (struct sockaddr_in*) &inaddr;
in->sin_family = af_family;
in->sin_addr.s_addr = INADDR_ANY;
in->sin_port = 0;
addrlen = sizeof(struct sockaddr_in);
} else {
if (AF_INET != af_family) {
return ORTE_ERROR;
}
((struct sockaddr_in*) &inaddr)->sin_family = af_family;
((struct sockaddr_in*) &inaddr)->sin_addr.s_addr = INADDR_ANY;
addrlen = sizeof(struct sockaddr_in);
#endif
if (bind(*target_sd, (struct sockaddr*)&inaddr, addrlen) < 0) {
opal_output(0,"mca_oob_tcp_create_listen: bind() failed: %s (%d)",
strerror(opal_socket_errno), opal_socket_errno);
return ORTE_ERROR;
{ /* Don't reuse ports */
int flg = 0;
if (setsockopt (*target_sd, SOL_SOCKET, SO_REUSEPORT, &flg, sizeof (flg)) < 0) {
opal_output(0, "mca_oob_tcp_create_listen: unable to unset the "
"SO_REUSEADDR option (%s:%d)\n",
strerror(opal_socket_errno), opal_socket_errno);
CLOSE_THE_SOCKET(*target_sd);
return ORTE_ERROR;
}
}
{
int index, range, port;
if( AF_INET == af_family ) {
range = mca_oob_tcp_component.tcp_port_range;
port = mca_oob_tcp_component.tcp_port_min;
}
#if OPAL_WANT_IPV6
if (AF_INET6 == af_family) {
range = mca_oob_tcp_component.tcp6_port_range;
port = mca_oob_tcp_component.tcp6_port_min;
}
#endif /* OPAL_WANT_IPV6 */
for( index = 0; index < range; index++ ) {
#if OPAL_WANT_IPV6
((struct sockaddr_in6*) &inaddr)->sin6_port = port + index;
#else
((struct sockaddr_in*) &inaddr)->sin_port = port + index;
#endif /* OPAL_WANT_IPV6 */
if(bind(*target_sd, (struct sockaddr*)&inaddr, addrlen) < 0) {
if( (EADDRINUSE == opal_socket_errno) || (EADDRNOTAVAIL == opal_socket_errno) ) {
continue;
}
opal_output( 0, "bind() failed: %s (%d)",
strerror(opal_socket_errno), opal_socket_errno );
CLOSE_THE_SOCKET(*target_sd);
return ORTE_ERROR;
}
goto socket_binded;
}
if( AF_INET == af_family ) {
opal_output( 0, "bind() failed: no port available in the range [%d..%d]",
mca_oob_tcp_component.tcp_port_min,
mca_oob_tcp_component.tcp_port_min + range);
}
#if OPAL_WANT_IPV6
if (AF_INET6 == af_family) {
opal_output( 0, "bind6() failed: no port available in the range [%d..%d]",
mca_oob_tcp_component.tcp6_port_min,
mca_oob_tcp_component.tcp6_port_min + range );
}
#endif /* OPAL_WANT_IPV6 */
CLOSE_THE_SOCKET(*target_sd);
return ORTE_ERROR;
}
socket_binded:
/* resolve system assigned port */
if (getsockname(*target_sd, (struct sockaddr*)&inaddr, &addrlen) < 0) {
opal_output(0, "mca_oob_tcp_create_listen: getsockname(): %s (%d)",
strerror(opal_socket_errno), opal_socket_errno);
CLOSE_THE_SOCKET(*target_sd);
return ORTE_ERROR;
}
if (AF_INET == af_family) {
mca_oob_tcp_component.tcp_listen_port =
((struct sockaddr_in*) &inaddr)->sin_port;
} else if (AF_INET6 == af_family) {
mca_oob_tcp_component.tcp6_listen_port =
((struct sockaddr_in6*) &inaddr)->sin6_port;
mca_oob_tcp_component.tcp_listen_port = ((struct sockaddr_in*) &inaddr)->sin_port;
mca_oob_tcp_component.tcp_listen_sd = *target_sd;
}
#if OPAL_WANT_IPV6
if (AF_INET6 == af_family) {
mca_oob_tcp_component.tcp6_listen_port = ((struct sockaddr_in6*) &inaddr)->sin6_port;
mca_oob_tcp_component.tcp6_listen_sd = *target_sd;
}
#endif /* OPAL_WANT_IPV6 */
/* setup listen backlog to maximum allowed by kernel */
if(listen(*target_sd, SOMAXCONN) < 0) {
opal_output(0, "mca_oob_tcp_component_init: listen(): %s (%d)",
@ -582,7 +656,9 @@ static int mca_oob_tcp_create_listen(int *target_sd, uint16_t af_family)
mca_oob_tcp_recv_handler,
0);
opal_event_add(&mca_oob_tcp_component.tcp_recv_event, 0);
} else if (AF_INET6 == af_family) {
}
#if OPAL_WANT_IPV6
if (AF_INET6 == af_family) {
opal_event_set(&mca_oob_tcp_component.tcp6_recv_event,
*target_sd,
OPAL_EV_READ|OPAL_EV_PERSIST,
@ -590,7 +666,7 @@ static int mca_oob_tcp_create_listen(int *target_sd, uint16_t af_family)
0);
opal_event_add(&mca_oob_tcp_component.tcp6_recv_event, 0);
}
#endif /* OPAL_WANT_IPV6 */
return ORTE_SUCCESS;
}
@ -909,8 +985,11 @@ static void mca_oob_tcp_recv_handler(int sd, short flags, void* user)
int rc;
/* accept new connections on the listen socket */
if((mca_oob_tcp_component.tcp_listen_sd == sd) ||
(mca_oob_tcp_component.tcp6_listen_sd == sd)) {
if( (mca_oob_tcp_component.tcp_listen_sd == sd)
#if OPAL_WANT_IPV6
|| (mca_oob_tcp_component.tcp6_listen_sd == sd)
#endif /* OPAL_WANT_IPV6 */
) {
mca_oob_tcp_accept(sd);
return;
}
@ -1040,8 +1119,9 @@ mca_oob_t* mca_oob_tcp_component_init(int* priority)
/* intialize event library */
memset(&mca_oob_tcp_component.tcp_recv_event, 0, sizeof(opal_event_t));
#if OPAL_WANT_IPV6
memset(&mca_oob_tcp_component.tcp6_recv_event, 0, sizeof(opal_event_t));
#endif /* OPAL_WANT_IPV6 */
return &mca_oob_tcp;
}
@ -1161,12 +1241,14 @@ int mca_oob_tcp_fini(void)
if (OOB_TCP_EVENT == mca_oob_tcp_component.tcp_listen_type) {
opal_event_del(&mca_oob_tcp_component.tcp_recv_event);
CLOSE_THE_SOCKET(mca_oob_tcp_component.tcp_listen_sd);
mca_oob_tcp_component.tcp_listen_sd = -1;
#if OPAL_WANT_IPV6
if (mca_oob_tcp_component.tcp6_listen_sd >= 0) {
opal_event_del(&mca_oob_tcp_component.tcp6_recv_event);
CLOSE_THE_SOCKET(mca_oob_tcp_component.tcp6_listen_sd);
mca_oob_tcp_component.tcp6_listen_sd = -1;
}
#endif /* OPAL_WANT_IPV6 */
} else if (OOB_TCP_LISTEN_THREAD == mca_oob_tcp_component.tcp_listen_type) {
void *data;
/* adi@2007-04-12: Bug, FIXME:
@ -1251,10 +1333,13 @@ char* mca_oob_tcp_get_addr(void)
if (dev->if_addr.ss_family == AF_INET) {
ptr += sprintf(ptr, "tcp://%s:%d", opal_net_get_hostname((struct sockaddr*) &dev->if_addr),
ntohs(mca_oob_tcp_component.tcp_listen_port));
} else if (dev->if_addr.ss_family == AF_INET6) {
}
#if OPAL_WANT_IPV6
if (dev->if_addr.ss_family == AF_INET6) {
ptr += sprintf(ptr, "tcp6://%s:%d", opal_net_get_hostname((struct sockaddr*) &dev->if_addr),
ntohs(mca_oob_tcp_component.tcp6_listen_port));
}
#endif /* OPAL_WANT_IPV6 */
}
return contact_info;
}

Просмотреть файл

@ -196,10 +196,6 @@ struct mca_oob_tcp_component_t {
mca_oob_base_component_1_0_0_t super; /**< base OOB component */
char* tcp_include; /**< list of ip interfaces to include */
char* tcp_exclude; /**< list of ip interfaces to exclude */
int tcp_listen_sd; /**< listen socket for incoming IPv4 connection requests */
unsigned short tcp_listen_port; /**< IPv4 listen port */
int tcp6_listen_sd; /**< listen socket for incoming IPv6 connection requests */
unsigned short tcp6_listen_port; /**< IPv6 listen port */
opal_list_t tcp_peer_list; /**< list of peers sorted in mru order */
opal_hash_table_t tcp_peers; /**< peers sorted by name */
opal_hash_table_t tcp_peer_names; /**< cache of peer contact info sorted by name */
@ -210,7 +206,17 @@ struct mca_oob_tcp_component_t {
int tcp_rcvbuf; /**< socket recv buffer size */
opal_free_list_t tcp_msgs; /**< free list of messages */
opal_event_t tcp_recv_event; /**< event structure for IPv4 recvs */
int tcp_listen_sd; /**< listen socket for incoming IPv4 connection requests */
unsigned short tcp_listen_port; /**< IPv4 listen port */
int tcp_port_min; /**< Minimum allowed port for the OOB listen socket */
int tcp_port_range; /**< Range of allowed TCP ports */
#if OPAL_WANT_IPV6
opal_event_t tcp6_recv_event; /**< event structure for IPv6 recvs */
int tcp6_listen_sd; /**< listen socket for incoming IPv6 connection requests */
unsigned short tcp6_listen_port; /**< IPv6 listen port */
int tcp6_port_min; /**< Minimum allowed port for the OOB listen socket */
int tcp6_port_range; /**< Range of allowed TCP ports */
#endif /* OPAL_WANT_IPV6 */
opal_mutex_t tcp_lock; /**< lock for accessing module state */
opal_list_t tcp_events; /**< list of pending events (accepts) */
opal_list_t tcp_msg_post; /**< list of recieves user has posted */