summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGabriele Santomaggio <gabriele.santomaggio@erlang-solutions.com>2017-04-21 18:09:04 +0200
committerGabriele Santomaggio <gabriele.santomaggio@erlang-solutions.com>2017-04-21 18:09:04 +0200
commit875c327c6b99cdc7d6811d0aa8b6ac0f944493b3 (patch)
treef1224ff2bcf2dddf40041e1d9aef7a87db1d632c /src
parent0ee51b1bbb44800edd7b3c2e0b7204fab54f96b4 (diff)
downloadrabbitmq-server-git-875c327c6b99cdc7d6811d0aa8b6ac0f944493b3.tar.gz
Add support for IPv6
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_peer_discovery_dns.erl26
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;