1
1

Fix static port usage, ensure that both ipv4 and ipv6 are given if ipv6 was enabled

This commit was SVN r27682.
Этот коммит содержится в:
Ralph Castain 2012-12-18 03:59:49 +00:00
родитель 885fc8432d
Коммит 82f1ba0ea8

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

@ -168,6 +168,7 @@ static int mca_oob_tcp_component_register(void)
{ {
int tmp; int tmp;
char *listen_type, *str = NULL; char *listen_type, *str = NULL;
bool ip4_ports_given = false;
mca_base_param_reg_int(&mca_oob_tcp_component.super.oob_base, mca_base_param_reg_int(&mca_oob_tcp_component.super.oob_base,
"verbose", "verbose",
@ -301,6 +302,7 @@ static int mca_oob_tcp_component_register(void)
&str); &str);
/* if ports were provided, parse the provided range */ /* if ports were provided, parse the provided range */
if (NULL != str) { if (NULL != str) {
ip4_ports_given = true;
orte_static_ports = true; orte_static_ports = true;
orte_util_parse_range_options(str, &mca_oob_tcp_component.tcp4_static_ports); orte_util_parse_range_options(str, &mca_oob_tcp_component.tcp4_static_ports);
if (0 == strcmp(mca_oob_tcp_component.tcp4_static_ports[0], "-1")) { if (0 == strcmp(mca_oob_tcp_component.tcp4_static_ports[0], "-1")) {
@ -352,11 +354,19 @@ static int mca_oob_tcp_component_register(void)
orte_static_ports = true; orte_static_ports = true;
orte_util_parse_range_options(str, &mca_oob_tcp_component.tcp6_static_ports); orte_util_parse_range_options(str, &mca_oob_tcp_component.tcp6_static_ports);
if (0 == strcmp(mca_oob_tcp_component.tcp6_static_ports[0], "-1")) { if (0 == strcmp(mca_oob_tcp_component.tcp6_static_ports[0], "-1")) {
if (ip4_ports_given) {
opal_output(0, "OOB:TCP:Error: IP4 static ports given, but IPv6 is enabled and an incorrect static port range was provided for it");
return ORTE_ERR_FATAL;
}
opal_argv_free(mca_oob_tcp_component.tcp6_static_ports); opal_argv_free(mca_oob_tcp_component.tcp6_static_ports);
mca_oob_tcp_component.tcp6_static_ports = NULL; mca_oob_tcp_component.tcp6_static_ports = NULL;
orte_static_ports = false; orte_static_ports = false;
} }
} else { } else {
if (ip4_ports_given) {
opal_output(0, "OOB:TCP:Error: IP4 static ports given, but IPv6 is enabled and no static ports provided for it");
return ORTE_ERR_FATAL;
}
orte_static_ports = false; orte_static_ports = false;
mca_oob_tcp_component.tcp6_static_ports = NULL; mca_oob_tcp_component.tcp6_static_ports = NULL;
} }
@ -659,7 +669,8 @@ mca_oob_tcp_create_listen(int *target_sd, unsigned short *target_port, uint16_t
ptr++; ptr++;
opal_argv_append_nosize(&ports, ptr); opal_argv_append_nosize(&ports, ptr);
free(portptr); free(portptr);
} else if (ORTE_PROC_IS_HNP || ORTE_PROC_IS_DAEMON) { } else if (ORTE_PROC_IS_HNP || ORTE_PROC_IS_DAEMON ||
ORTE_PROC_IS_CM || ORTE_PROC_IS_CMSLAVE) {
if (NULL != mca_oob_tcp_component.tcp4_static_ports) { if (NULL != mca_oob_tcp_component.tcp4_static_ports) {
/* if static ports were provided, the daemon takes the /* if static ports were provided, the daemon takes the
* first entry in the list * first entry in the list
@ -722,7 +733,8 @@ mca_oob_tcp_create_listen(int *target_sd, unsigned short *target_port, uint16_t
#if OPAL_WANT_IPV6 #if OPAL_WANT_IPV6
if (AF_INET6 == af_family) { if (AF_INET6 == af_family) {
if (ORTE_PROC_IS_HNP || ORTE_PROC_IS_DAEMON) { if (ORTE_PROC_IS_HNP || ORTE_PROC_IS_DAEMON ||
ORTE_PROC_IS_CM || ORTE_PROC_IS_CMSLAVE) {
if (NULL != mca_oob_tcp_component.tcp6_static_ports) { if (NULL != mca_oob_tcp_component.tcp6_static_ports) {
/* if static ports were provided, the daemon takes the /* if static ports were provided, the daemon takes the
* first entry in the list * first entry in the list
@ -1671,18 +1683,15 @@ int mca_oob_tcp_resolve(mca_oob_tcp_peer_t* peer)
} }
inaddr = ((struct sockaddr_in*)(&addr))->sin_addr; inaddr = ((struct sockaddr_in*)(&addr))->sin_addr;
haddr = inet_ntoa(inaddr); haddr = inet_ntoa(inaddr);
goto proceed; break;
} }
} }
} else {
haddr = inet_ntoa(*(struct in_addr*)h->h_addr_list[0]);
} }
opal_output(0, "%s COULD NOT COMPUTE CONTACT INFO FOR PROC %s on NODE %s",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
ORTE_NAME_PRINT(&peer->peer_name), host);
goto unlock;
} else { } else {
haddr = inet_ntoa(*(struct in_addr*)h->h_addr_list[0]); goto unlock;
} }
proceed:
/* we can't know which af_family we are using, so for now, let's /* we can't know which af_family we are using, so for now, let's
* just look to see which static port family was provided * just look to see which static port family was provided
*/ */
@ -1699,7 +1708,6 @@ int mca_oob_tcp_resolve(mca_oob_tcp_peer_t* peer)
/* this isn't an error - it just means we don't know /* this isn't an error - it just means we don't know
* how to compute a contact info for this proc * how to compute a contact info for this proc
*/ */
opal_output(0, "COULD NOT GET NODE RANK");
rc = ORTE_ERR_ADDRESSEE_UNKNOWN; rc = ORTE_ERR_ADDRESSEE_UNKNOWN;
goto unlock; goto unlock;
} }