ib_acme.c: Support IPv6 addressing in resolve_ip
PATCH v2 13/16 ib_acme.c: Support IPv6 addressing in resolve_ip
---
Change since v1:
Rebased
src/acme.c | 33 ++++++++++++++++++++++++++++----- 1 files changed, 28 insertions(+), 5 deletions(-)
src/acme.c +28 -5
@@ -476,29 +476,52 @@ static int resolve_ip(struct ibv_path_record *path) {struct ibv_path_data *paths;struct sockaddr_in src, dest; +struct sockaddr_in6 src6, dest6;struct sockaddr *saddr;int ret, count; +int is_ipv6_src, is_ipv6_dest;if (src_addr) { + is_ipv6_src =0 ; src.sin_family =AF_INET ; ret =inet_pton (AF_INET , src_addr, &src.sin_addr);if (ret <=0 ) { -printf ("inet_pton error on source address (%s): 0x%x\n" , src_addr, ret); -return -1 ; + src6.sin6_family =AF_INET6 ; + ret =inet_pton (AF_INET6 , src_addr, &src6.sin6_addr); +if (ret <=0 ) { +printf ("inet_pton error on source address (%s): 0x%x\n" , src_addr, ret); +return -1 ; + } + is_ipv6_src =1 ; } - saddr = (struct sockaddr *) &src; +if (is_ipv6_src) + saddr = (struct sockaddr *) &src6; +else + saddr = (struct sockaddr *) &src; }else { saddr =NULL ; } + is_ipv6_dest =0 ; dest.sin_family =AF_INET ; ret =inet_pton (AF_INET , dest_addr, &dest.sin_addr);if (ret <=0 ) { -printf ("inet_pton error on destination address (%s): 0x%x\n" , dest_addr, ret); + dest6.sin6_family =AF_INET6 ; + ret =inet_pton (AF_INET6 , dest_addr, &dest6.sin6_addr); +if (ret <=0 ) { +printf ("inet_pton error on destination address (%s): 0x%x\n" , dest_addr, ret); +return -1 ; + } + is_ipv6_dest =1 ; + } + +if (src_addr && is_ipv6_src != is_ipv6_dest) { +printf ("source and destination address families don't match\n" );return -1 ; } - ret =ib_acm_resolve_ip (saddr, (struct sockaddr *) &dest, + ret =ib_acm_resolve_ip (saddr, + (is_ipv6_dest ? (struct sockaddr *) &dest6 : (struct sockaddr *) &dest), &paths, &count,get_resolve_flags ());if (ret) {printf ("ib_acm_resolve_ip failed: %s\n" ,strerror (errno));
Signature · 6 lines
1.7.8.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html