Hi,
as mentioned earlier this year, I'm now working on IPv6 support
for OpenMPI.
The main design goals are:
- do not break existing IPv4 code
- compile on SUSv2 (without new socket API)
- do not use mapped addresses
- test the new code on many systems
The porting of OPAL is more or less finished (at least on Linux, but
I'll do some investigations on *BSD and Solaris) and I've halfway
ported ORTE (perhaps I can manage it within the next two or three
weeks). I'll still have to write more test code, but that's already
scheduled for tomorrow.
Christian Kauhaus proposed to set up a blog containing news about
progress, early patches and so on. Is there anyone who'd like to
read it? ;)
I have a few questions to discuss:
In opal/util/if.c:
/*
* Attempt to resolve the adddress as either a dotted decimal formated
* string or a hostname and lookup corresponding interface.
*/
int opal_ifaddrtoname(const char* if_addr, char* if_name, int length)
And somewhere below:
#define ADDRLEN 100
bool
opal_ifislocal(char *hostname)
{
char addrname[ADDRLEN + 1];
[..]
ret = opal_ifaddrtoname(hostname, addrname, ADDRLEN);
Why ADDRLEN? Shouldn't IF_NAMESIZE (defined 32) do the job?
opal_ifaddrtoname copies the interface name to its second
parameter (here: addrname), so the largest string can only
be as long as IF_NAMESIZE.
ORTE-question:
According to RFC 3986 (and some others), I've implemented the
service string as follows:
#ifdef IPV6
if (addr.sin6_family == AF_INET) {
ptr += sprintf(ptr, "tcp://%s:%d", opal_sockaddr2str(&addr),
ntohs(mca_oob_tcp_component.tcp_listen_port));
}
if (addr.sin6_family == AF_INET6) {
ptr += sprintf(ptr, "tcp://[%s]:%d", opal_sockaddr2str(&addr),
ntohs(mca_oob_tcp_component.tcp_listen_port));
}
#else
ptr += sprintf(ptr, "tcp://%s:%d", inet_ntoa(addr.sin_addr),
ntohs(mca_oob_tcp_component.tcp_listen_port));
#endif
Do you agree with a resulting URL like tcp://[2001:6f8::1]:port or
do you think it should be tcp6://?
I prefer the first one due to its RFC compliance. Both versions
won't interfear with existing libraries, because parse_uri would
return ORTE_ERR_BAD_PARAM in case of IPv6-connect strings on
ipv6-unaware systems.
Is it ok to use -DIPV6 or should I rename it? Is there already
a way to get the operating system we're compiling for? (uname -s)
IPv6 interface discovery (talking about opal/util/if.c again)
needs special treatment on some systems. Right now, I have
-DLINUX_IPV6 and I'd probably need to catch more (at least
HPUX defines SIOCGLIFADDR which is also present on OpenBSD).
If I'd have something like -DLINUX, I wouldn't need to
introduce more defines (like -DLINUX_IPV6 oder -DBSD_IPV6).
There is probably more to discuss (i.e. the CIDR support I've
implemented), but let's delay this until the first patch ;)
Best regards.
--
mail: a...@thur.de http://adi.thur.de PGP: v2-key via keyserver
Win95 Error 188: User hat sich aufgehängt