From 9598e746259df6847d200d99d2cd19f9f7ceb44b Mon Sep 17 00:00:00 2001 From: Michael Schmoock Date: Tue, 19 Oct 2021 11:32:52 +0200 Subject: [PATCH] chore: use EXPERIMENTAL for BOLT7 DNS #911 Changelog-EXPERIMENTAL: Ability to announce DNS addresses --- connectd/connectd.c | 6 ++++++ lightningd/options.c | 2 ++ tests/test_gossip.py | 19 ++++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/connectd/connectd.c b/connectd/connectd.c index e127c81bfe1a..3bbd3df9a98b 100644 --- a/connectd/connectd.c +++ b/connectd/connectd.c @@ -928,11 +928,13 @@ static void try_connect_one_addr(struct connecting *connect) bool use_proxy = connect->daemon->always_use_proxy; const struct wireaddr_internal *addr = &connect->addrs[connect->addrnum]; struct io_conn *conn; +#if EXPERIMENTAL_FEATURES /* BOLT7 DNS RFC #911 */ struct addrinfo hints, *ais, *aii; struct wireaddr_internal addrhint; int gai_err; struct sockaddr_in *sa4; struct sockaddr_in6 *sa6; +#endif /* In case we fail without a connection, make destroy_io_conn happy */ connect->conn = NULL; @@ -983,6 +985,7 @@ static void try_connect_one_addr(struct connecting *connect) af = AF_INET6; break; case ADDR_TYPE_DNS: +#if EXPERIMENTAL_FEATURES /* BOLT7 DNS RFC #911 */ if (use_proxy) /* hand it to the proxy */ break; /* Resolve with getaddrinfo */ @@ -1022,6 +1025,7 @@ static void try_connect_one_addr(struct connecting *connect) addr = &connect->addrs[connect->addrnum]; } freeaddrinfo(ais); +#endif goto next; case ADDR_TYPE_WEBSOCKET: af = -1; @@ -1663,8 +1667,10 @@ static void add_seed_addrs(struct wireaddr_internal **addrs, NULL, broken_reply, NULL); if (new_addrs) { for (size_t j = 0; j < tal_count(new_addrs); j++) { +#if EXPERIMENTAL_FEATURES /* BOLT7 DNS RFC #911 */ if (new_addrs[j].type == ADDR_TYPE_DNS) continue; +#endif struct wireaddr_internal a; a.itype = ADDR_INTERNAL_WIREADDR; a.u.wireaddr = new_addrs[j]; diff --git a/lightningd/options.c b/lightningd/options.c index 8e903cfb3c94..4e79efeb32f2 100644 --- a/lightningd/options.c +++ b/lightningd/options.c @@ -221,6 +221,7 @@ static char *opt_add_addr_withtype(const char *arg, tal_arr_expand(&ld->proposed_wireaddr, wi); } +#if EXPERIMENTAL_FEATURES /* BOLT7 DNS RFC #911 */ /* Add ADDR_TYPE_DNS to announce DNS hostnames */ if (is_dnsaddr(address) && ala & ADDR_ANNOUNCE) { memset(&wi, 0, sizeof(wi)); @@ -234,6 +235,7 @@ static char *opt_add_addr_withtype(const char *arg, tal_arr_expand(&ld->proposed_listen_announce, ADDR_ANNOUNCE); tal_arr_expand(&ld->proposed_wireaddr, wi); } +#endif return NULL; diff --git a/tests/test_gossip.py b/tests/test_gossip.py index d486eb32876c..d193b81a9157 100644 --- a/tests/test_gossip.py +++ b/tests/test_gossip.py @@ -4,7 +4,8 @@ from fixtures import TEST_NETWORK from pyln.client import RpcError, Millisatoshi from utils import ( - DEVELOPER, wait_for, TIMEOUT, only_one, sync_blockheight, expected_node_features, COMPAT + DEVELOPER, wait_for, TIMEOUT, only_one, sync_blockheight, + expected_node_features, COMPAT, EXPERIMENTAL_FEATURES ) import json @@ -118,6 +119,13 @@ def test_announce_address(node_factory, bitcoind): '::'], 'log-level': 'io', 'dev-allow-localhost': None} + if not EXPERIMENTAL_FEATURES: # BOLT7 DNS RFC #911 + opts = {'disable-dns': None, 'announce-addr': + ['4acth47i6kxnvkewtm6q7ib2s3ufpo5sqbsnzjpbi7utijcltosqemad.onion', + '1.2.3.4:1234', + '::'], + 'log-level': 'io', + 'dev-allow-localhost': None} l1, l2 = node_factory.get_nodes(2, opts=[opts, {}]) l1.rpc.connect(l2.info['id'], 'localhost', l2.port) @@ -127,6 +135,14 @@ def test_announce_address(node_factory, bitcoind): l1.wait_channel_active(scid) l2.wait_channel_active(scid) + if not EXPERIMENTAL_FEATURES: # BOLT7 DNS RFC #911 + l1.daemon.wait_for_log(r"\[OUT\] 0101.*47" + "010102030404d2" + "017f000001...." + "02000000000000000000000000000000002607" + "04e00533f3e8f2aedaa8969b3d0fa03a96e857bbb28064dca5e147e934244b9ba50230032607") + return + # We should see it send node announce with all addresses (257 = 0x0101) # Note: local ephemeral port is masked out. # Note: Since we `disable-dns` it should not announce a resolved IPv4 @@ -154,6 +170,7 @@ def test_announce_address(node_factory, bitcoind): assert addresses_dns[1]['port'] == 1236 +@unittest.skipIf(not EXPERIMENTAL_FEATURES, "BOLT7 DNS RFC #911") @pytest.mark.developer("gossip without DEVELOPER=1 is slow") def test_announce_and_connect_via_dns(node_factory, bitcoind): """ Test that DNS annoucements propagate and can be used when connecting.