Makefile: update to include fix for remote_addr generation.

Now it's formatted properly, we don't need the patch.

But we need to explicitly marshal/unmarshal into a byte stream,
which involves some code rearrangement.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2022-05-18 10:52:41 +09:30
parent 685fa25756
commit abd01a1701
4 changed files with 29 additions and 34 deletions

View File

@@ -21,7 +21,7 @@ CCANDIR := ccan
# Where we keep the BOLT RFCs # Where we keep the BOLT RFCs
BOLTDIR := ../bolts/ BOLTDIR := ../bolts/
DEFAULT_BOLTVERSION := c4a0369e705ad43babee50dd0466f162567e6427 DEFAULT_BOLTVERSION := 105c2e5e9f17c68e8c19dc4ca548600a0b8f66f0
# Can be overridden on cmdline. # Can be overridden on cmdline.
BOLTVERSION := $(DEFAULT_BOLTVERSION) BOLTVERSION := $(DEFAULT_BOLTVERSION)

View File

@@ -91,29 +91,37 @@ static struct io_plan *peer_init_received(struct io_conn *conn,
/* fetch optional tlv `remote_addr` */ /* fetch optional tlv `remote_addr` */
remote_addr = NULL; remote_addr = NULL;
/* BOLT-remote-address #1: /* BOLT #1:
* The receiving node: * The receiving node:
* ... * ...
* - MAY use the `remote_addr` to update its `node_annoucement` * - MAY use the `remote_addr` to update its `node_announcement`
*/ */
if (tlvs->remote_addr) { if (tlvs->remote_addr) {
switch (tlvs->remote_addr->type) { const u8 *cursor = tlvs->remote_addr;
size_t len = tal_bytelen(tlvs->remote_addr);
remote_addr = tal(peer, struct wireaddr);
if (fromwire_wireaddr(&cursor, &len, remote_addr)) {
switch (remote_addr->type) {
case ADDR_TYPE_IPV4: case ADDR_TYPE_IPV4:
case ADDR_TYPE_IPV6: case ADDR_TYPE_IPV6:
#if DEVELOPER /* ignore private addresses (non-DEVELOPER builds) */ #if DEVELOPER /* ignore private addresses (non-DEVELOPER builds) */
if (address_routable(tlvs->remote_addr, true)) if (!address_routable(remote_addr, true))
#else #else
if (address_routable(tlvs->remote_addr, false)) if (!address_routable(remote_addr, false))
#endif /* DEVELOPER */ #endif /* DEVELOPER */
remote_addr = tal_steal(peer, tlvs->remote_addr); remote_addr = tal_free(remote_addr);
break; break;
/* We are only interested in IP addresses */ /* We are only interested in IP addresses */
case ADDR_TYPE_TOR_V2_REMOVED: case ADDR_TYPE_TOR_V2_REMOVED:
case ADDR_TYPE_TOR_V3: case ADDR_TYPE_TOR_V3:
case ADDR_TYPE_DNS: case ADDR_TYPE_DNS:
case ADDR_TYPE_WEBSOCKET: case ADDR_TYPE_WEBSOCKET:
remote_addr = tal_free(remote_addr);
break; break;
} }
} else
remote_addr = tal_free(remote_addr);
} }
/* The globalfeatures field is now unused, but there was a /* The globalfeatures field is now unused, but there was a
@@ -217,7 +225,7 @@ struct io_plan *peer_exchange_initmsg(struct io_conn *conn,
/* set optional tlv `remote_addr` on incoming IP connections */ /* set optional tlv `remote_addr` on incoming IP connections */
tlvs->remote_addr = NULL; tlvs->remote_addr = NULL;
/* BOLT-remote-address #1: /* BOLT #1:
* The sending node: * The sending node:
* ... * ...
* - SHOULD set `remote_addr` to reflect the remote IP address (and port) of an * - SHOULD set `remote_addr` to reflect the remote IP address (and port) of an
@@ -229,8 +237,8 @@ struct io_plan *peer_exchange_initmsg(struct io_conn *conn,
switch (addr->u.wireaddr.type) { switch (addr->u.wireaddr.type) {
case ADDR_TYPE_IPV4: case ADDR_TYPE_IPV4:
case ADDR_TYPE_IPV6: case ADDR_TYPE_IPV6:
tlvs->remote_addr = tal(tlvs, struct wireaddr); tlvs->remote_addr = tal_arr(tlvs, u8, 0);
*tlvs->remote_addr = addr->u.wireaddr; towire_wireaddr(&tlvs->remote_addr, &addr->u.wireaddr);
break; break;
/* Only report IP addresses back for now */ /* Only report IP addresses back for now */
case ADDR_TYPE_TOR_V2_REMOVED: case ADDR_TYPE_TOR_V2_REMOVED:

View File

@@ -1,13 +0,0 @@
diff --git a/wire/peer_wire.csv b/wire/peer_wire.csv
index a028ddc66..4043c6350 100644
--- a/wire/peer_wire.csv
+++ b/wire/peer_wire.csv
@@ -6,6 +6,8 @@ msgdata,init,features,byte,flen
msgdata,init,tlvs,init_tlvs,
tlvtype,init_tlvs,networks,1
tlvdata,init_tlvs,networks,chains,chain_hash,...
+tlvtype,init_tlvs,remote_addr,3
+tlvdata,init_tlvs,remote_addr,remote_addr,wireaddr,
msgtype,error,17
msgdata,error,channel_id,channel_id,
msgdata,error,len,u16,

View File

@@ -7,7 +7,7 @@ msgdata,init,tlvs,init_tlvs,
tlvtype,init_tlvs,networks,1 tlvtype,init_tlvs,networks,1
tlvdata,init_tlvs,networks,chains,chain_hash,... tlvdata,init_tlvs,networks,chains,chain_hash,...
tlvtype,init_tlvs,remote_addr,3 tlvtype,init_tlvs,remote_addr,3
tlvdata,init_tlvs,remote_addr,remote_addr,wireaddr, tlvdata,init_tlvs,remote_addr,data,byte,...
msgtype,error,17 msgtype,error,17
msgdata,error,channel_id,channel_id, msgdata,error,channel_id,channel_id,
msgdata,error,len,u16, msgdata,error,len,u16,
1 msgtype,init,16
7 tlvtype,init_tlvs,networks,1
8 tlvdata,init_tlvs,networks,chains,chain_hash,...
9 tlvtype,init_tlvs,remote_addr,3
10 tlvdata,init_tlvs,remote_addr,remote_addr,wireaddr, tlvdata,init_tlvs,remote_addr,data,byte,...
11 msgtype,error,17
12 msgdata,error,channel_id,channel_id,
13 msgdata,error,len,u16,