mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 07:04:22 +01:00
jsonrpc: adds optional remote_addr to listpeers
Changelog-Added: jsonrpc: adds optional `remote_addr` to listpeers
This commit is contained in:
committed by
Rusty Russell
parent
a2b75b66ba
commit
475e4c9bd9
@@ -159,6 +159,7 @@ If **connected** is *true*:
|
|||||||
- **netaddr** (array of strings): A single entry array:
|
- **netaddr** (array of strings): A single entry array:
|
||||||
- address, e.g. 1.2.3.4:1234
|
- address, e.g. 1.2.3.4:1234
|
||||||
- **features** (hex): bitmap of BOLT #9 features from peer's INIT message
|
- **features** (hex): bitmap of BOLT #9 features from peer's INIT message
|
||||||
|
- **remote_addr** (string, optional): The public IPv4/6 address the peer sees us from, e.g. 1.2.3.4:1234
|
||||||
|
|
||||||
[comment]: # (GENERATE-FROM-SCHEMA-END)
|
[comment]: # (GENERATE-FROM-SCHEMA-END)
|
||||||
|
|
||||||
@@ -380,4 +381,4 @@ Main web site: <https://github.com/ElementsProject/lightning> Lightning
|
|||||||
RFC site (BOLT \#9):
|
RFC site (BOLT \#9):
|
||||||
<https://github.com/lightningnetwork/lightning-rfc/blob/master/09-features.md>
|
<https://github.com/lightningnetwork/lightning-rfc/blob/master/09-features.md>
|
||||||
|
|
||||||
[comment]: # ( SHA256STAMP:4f76b5ac19d3dfdaf3d04f5dd5de2312a2ab0ccffe779508c416aaf6e644612a)
|
[comment]: # ( SHA256STAMP:e6829e8ced923131b95bcfa4f366dd04286fe85485039e9ebc89e79899937df6)
|
||||||
|
|||||||
@@ -1114,6 +1114,10 @@
|
|||||||
"description": "address, e.g. 1.2.3.4:1234"
|
"description": "address, e.g. 1.2.3.4:1234"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"remote_addr": {
|
||||||
|
"type": "string",
|
||||||
|
"description": "The public IPv4/6 address the peer sees us from, e.g. 1.2.3.4:1234"
|
||||||
|
},
|
||||||
"features": {
|
"features": {
|
||||||
"type": "hex",
|
"type": "hex",
|
||||||
"description": "bitmap of BOLT #9 features from peer's INIT message"
|
"description": "bitmap of BOLT #9 features from peer's INIT message"
|
||||||
|
|||||||
@@ -97,6 +97,7 @@ struct peer *new_peer(struct lightningd *ld, u64 dbid,
|
|||||||
peer->uncommitted_channel = NULL;
|
peer->uncommitted_channel = NULL;
|
||||||
peer->addr = *addr;
|
peer->addr = *addr;
|
||||||
peer->connected_incoming = connected_incoming;
|
peer->connected_incoming = connected_incoming;
|
||||||
|
peer->remote_addr = NULL;
|
||||||
peer->their_features = NULL;
|
peer->their_features = NULL;
|
||||||
list_head_init(&peer->channels);
|
list_head_init(&peer->channels);
|
||||||
peer->direction = node_id_idx(&peer->ld->id, &peer->id);
|
peer->direction = node_id_idx(&peer->ld->id, &peer->id);
|
||||||
@@ -1154,6 +1155,9 @@ void peer_connected(struct lightningd *ld, const u8 *msg)
|
|||||||
/* Update peer address and direction */
|
/* Update peer address and direction */
|
||||||
peer->addr = hook_payload->addr;
|
peer->addr = hook_payload->addr;
|
||||||
peer->connected_incoming = hook_payload->incoming;
|
peer->connected_incoming = hook_payload->incoming;
|
||||||
|
if (peer->remote_addr)
|
||||||
|
tal_free(peer->remote_addr);
|
||||||
|
peer->remote_addr = NULL;
|
||||||
peer_update_features(peer, their_features);
|
peer_update_features(peer, their_features);
|
||||||
|
|
||||||
tal_steal(peer, hook_payload);
|
tal_steal(peer, hook_payload);
|
||||||
@@ -1172,6 +1176,8 @@ void peer_connected(struct lightningd *ld, const u8 *msg)
|
|||||||
if (hook_payload->remote_addr) {
|
if (hook_payload->remote_addr) {
|
||||||
log_peer_info(ld->log, &id, "Peer says it sees our address as: %s",
|
log_peer_info(ld->log, &id, "Peer says it sees our address as: %s",
|
||||||
fmt_wireaddr(tmpctx, hook_payload->remote_addr));
|
fmt_wireaddr(tmpctx, hook_payload->remote_addr));
|
||||||
|
peer->remote_addr = tal_dup(peer, struct wireaddr,
|
||||||
|
hook_payload->remote_addr);
|
||||||
/* Currently only from peers we have a channel with, until we
|
/* Currently only from peers we have a channel with, until we
|
||||||
* do stuff like probing for remote_addr to a random node. */
|
* do stuff like probing for remote_addr to a random node. */
|
||||||
if (!list_empty(&peer->channels))
|
if (!list_empty(&peer->channels))
|
||||||
@@ -1671,6 +1677,10 @@ static void json_add_peer(struct lightningd *ld,
|
|||||||
struct wireaddr_internal,
|
struct wireaddr_internal,
|
||||||
&p->addr));
|
&p->addr));
|
||||||
json_array_end(response);
|
json_array_end(response);
|
||||||
|
/* If peer reports our IP remote_addr, add that here */
|
||||||
|
if (p->remote_addr)
|
||||||
|
json_add_string(response, "remote_addr",
|
||||||
|
fmt_wireaddr(response, p->remote_addr));
|
||||||
json_add_hex_talarr(response, "features", p->their_features);
|
json_add_hex_talarr(response, "features", p->their_features);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ struct peer {
|
|||||||
struct wireaddr_internal addr;
|
struct wireaddr_internal addr;
|
||||||
bool connected_incoming;
|
bool connected_incoming;
|
||||||
|
|
||||||
|
/* They send what they see as our address as remote_addr */
|
||||||
|
struct wireaddr *remote_addr;
|
||||||
|
|
||||||
/* We keep a copy of their feature bits */
|
/* We keep a copy of their feature bits */
|
||||||
const u8 *their_features;
|
const u8 *their_features;
|
||||||
|
|
||||||
|
|||||||
@@ -86,7 +86,9 @@ def test_remote_addr(node_factory, bitcoind):
|
|||||||
l2.start()
|
l2.start()
|
||||||
|
|
||||||
l2.rpc.connect(l1.info['id'], 'localhost', l1.port)
|
l2.rpc.connect(l1.info['id'], 'localhost', l1.port)
|
||||||
l2.daemon.wait_for_log("Peer says it sees our address as: 127.0.0.1:[0-9]{5}")
|
logmsg = l2.daemon.wait_for_log("Peer says it sees our address as: 127.0.0.1:[0-9]{5}")
|
||||||
|
# check 'listpeers' contains the 'remote_addr' as logged
|
||||||
|
assert logmsg.endswith(l2.rpc.listpeers()['peers'][0]['remote_addr'])
|
||||||
|
|
||||||
# Fund first channel so initial node_announcement is send
|
# Fund first channel so initial node_announcement is send
|
||||||
# and also check no addresses have been announced yet
|
# and also check no addresses have been announced yet
|
||||||
|
|||||||
Reference in New Issue
Block a user