From: Sean Hefty Date: Thu, 6 May 2010 22:51:06 +0000 (-0700) Subject: librdmacm/mckey: use AF_IB for unmapped multicast addresses X-Git-Tag: 1.0.12~7 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=3eb18b60b4c9e05012574f654220dbee2b52d456;p=~shefty%2Flibrdmacm.git librdmacm/mckey: use AF_IB for unmapped multicast addresses If the user joins an unmapped multicast address, use AF_IB, rather than AF_INET6, to communicate that information with the kernel. Signed-off-by: Sean Hefty --- diff --git a/examples/mckey.c b/examples/mckey.c index ddc34950..a6b5c4d7 100644 --- a/examples/mckey.c +++ b/examples/mckey.c @@ -46,6 +46,7 @@ #include #include +#include struct cmatest_node { int id; @@ -67,9 +68,9 @@ struct cmatest { int conn_index; int connects_left; - struct sockaddr_in6 dst_in; + struct sockaddr_storage dst_in; struct sockaddr *dst_addr; - struct sockaddr_in6 src_in; + struct sockaddr_storage src_in; struct sockaddr *src_addr; }; @@ -460,6 +461,20 @@ static int get_addr(char *dst, struct sockaddr *addr) return ret; } +static int get_dst_addr(char *dst, struct sockaddr *addr) +{ + struct sockaddr_ib *sib; + + if (!unmapped_addr) + return get_addr(dst, addr); + + sib = (struct sockaddr_ib *) addr; + memset(sib, 0, sizeof *sib); + sib->sib_family = AF_IB; + inet_pton(AF_INET6, dst, &sib->sib_addr); + return 0; +} + static int run(void) { int i, ret; @@ -471,7 +486,7 @@ static int run(void) return ret; } - ret = get_addr(dst_addr, (struct sockaddr *) &test.dst_in); + ret = get_dst_addr(dst_addr, (struct sockaddr *) &test.dst_in); if (ret) return ret;