Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

From: Adrian Knoth (adi_at_[hidden])
Date: 2006-08-19 17:07:26


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: adi_at_[hidden]  	http://adi.thur.de	PGP: v2-key via keyserver
Win95 Error 188: User hat sich aufgehängt