diff options
| author | Gabriele Santomaggio <gabriele.santomaggio@erlang-solutions.com> | 2017-04-21 18:09:04 +0200 |
|---|---|---|
| committer | Gabriele Santomaggio <gabriele.santomaggio@erlang-solutions.com> | 2017-04-21 18:09:04 +0200 |
| commit | 875c327c6b99cdc7d6811d0aa8b6ac0f944493b3 (patch) | |
| tree | f1224ff2bcf2dddf40041e1d9aef7a87db1d632c | |
| parent | 0ee51b1bbb44800edd7b3c2e0b7204fab54f96b4 (diff) | |
| download | rabbitmq-server-git-875c327c6b99cdc7d6811d0aa8b6ac0f944493b3.tar.gz | |
Add support for IPv6
| -rw-r--r-- | src/rabbit_peer_discovery_dns.erl | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/src/rabbit_peer_discovery_dns.erl b/src/rabbit_peer_discovery_dns.erl index c8f6a7f39a..4005704550 100644 --- a/src/rabbit_peer_discovery_dns.erl +++ b/src/rabbit_peer_discovery_dns.erl @@ -68,14 +68,30 @@ discover_nodes(SeedHostname, LongNamesUsed) -> H <- discover_hostnames(SeedHostname, LongNamesUsed)]. discover_hostnames(SeedHostname, LongNamesUsed) -> - %% TODO: IPv6 support - IPs = inet_res:lookup(SeedHostname, in, a), - rabbit_log:info("Addresses discovered via A records of ~s: ~s", - [SeedHostname, string:join([inet_parse:ntoa(IP) || IP <- IPs], ", ")]), + case lookup(SeedHostname, LongNamesUsed, ipv4) of + [] -> + rabbit_log:info("Hostnames lookup failed for IPv4, trying IPv6"), + lookup(SeedHostname, LongNamesUsed, ipv6); + Hosts4 -> Hosts4 + end. + + +decode_record(ipv4) -> + a; +decode_record(ipv6) -> + aaaa. + +lookup(SeedHostname, LongNamesUsed, IPv) -> + IPs = inet_res:lookup(SeedHostname, in, decode_record(IPv)), + rabbit_log:info("Addresses discovered via ~s records of ~s: ~s", + [string:to_upper(atom_to_list(decode_record(IPv))), + SeedHostname, + string:join([inet_parse:ntoa(IP) || IP <- IPs], ", ")]), Hosts = [extract_host(inet:gethostbyaddr(A), LongNamesUsed, A) || - A <- IPs], + A <- IPs], lists:filter(fun(E) -> E =/= error end, Hosts). + %% long node names are used extract_host({ok, {hostent, FQDN, _, _, _, _}}, true, _Address) -> FQDN; |
