Skip to content

Commit b010aeb

Browse files
authored
Merge pull request #1326 from Psycho-Pirate/peers
Added option to send remote IP to peers
2 parents cb1d795 + fc2f793 commit b010aeb

15 files changed

+280
-91
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -411,8 +411,8 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
411411
let mut channel_txn = Vec::new();
412412
macro_rules! make_channel {
413413
($source: expr, $dest: expr, $chan_id: expr) => { {
414-
$source.peer_connected(&$dest.get_our_node_id(), &Init { features: InitFeatures::known() });
415-
$dest.peer_connected(&$source.get_our_node_id(), &Init { features: InitFeatures::known() });
414+
$source.peer_connected(&$dest.get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
415+
$dest.peer_connected(&$source.get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
416416

417417
$source.create_channel($dest.get_our_node_id(), 100_000, 42, 0, None).unwrap();
418418
let open_channel = {
@@ -921,15 +921,15 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
921921
},
922922
0x0e => {
923923
if chan_a_disconnected {
924-
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known() });
925-
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::known() });
924+
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
925+
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
926926
chan_a_disconnected = false;
927927
}
928928
},
929929
0x0f => {
930930
if chan_b_disconnected {
931-
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::known() });
932-
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known() });
931+
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
932+
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
933933
chan_b_disconnected = false;
934934
}
935935
},
@@ -1124,13 +1124,13 @@ pub fn do_test<Out: Output>(data: &[u8], underlying_out: Out) {
11241124

11251125
// Next, make sure peers are all connected to each other
11261126
if chan_a_disconnected {
1127-
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known() });
1128-
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::known() });
1127+
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
1128+
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
11291129
chan_a_disconnected = false;
11301130
}
11311131
if chan_b_disconnected {
1132-
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::known() });
1133-
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known() });
1132+
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
1133+
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
11341134
chan_b_disconnected = false;
11351135
}
11361136

fuzz/src/full_stack.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
422422
}
423423
}
424424
if new_id == 0 { return; }
425-
loss_detector.handler.new_outbound_connection(get_pubkey!(), Peer{id: (new_id - 1) as u8, peers_connected: &peers}).unwrap();
425+
loss_detector.handler.new_outbound_connection(get_pubkey!(), Peer{id: (new_id - 1) as u8, peers_connected: &peers}, None).unwrap();
426426
peers.borrow_mut()[new_id - 1] = true;
427427
},
428428
1 => {
@@ -434,7 +434,7 @@ pub fn do_test(data: &[u8], logger: &Arc<dyn Logger>) {
434434
}
435435
}
436436
if new_id == 0 { return; }
437-
loss_detector.handler.new_inbound_connection(Peer{id: (new_id - 1) as u8, peers_connected: &peers}).unwrap();
437+
loss_detector.handler.new_inbound_connection(Peer{id: (new_id - 1) as u8, peers_connected: &peers}, None).unwrap();
438438
peers.borrow_mut()[new_id - 1] = true;
439439
},
440440
2 => {

lightning-background-processor/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,8 +435,8 @@ mod tests {
435435

436436
for i in 0..num_nodes {
437437
for j in (i+1)..num_nodes {
438-
nodes[i].node.peer_connected(&nodes[j].node.get_our_node_id(), &Init { features: InitFeatures::known() });
439-
nodes[j].node.peer_connected(&nodes[i].node.get_our_node_id(), &Init { features: InitFeatures::known() });
438+
nodes[i].node.peer_connected(&nodes[j].node.get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
439+
nodes[j].node.peer_connected(&nodes[i].node.get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
440440
}
441441
}
442442

lightning-net-tokio/src/lib.rs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,11 @@ use tokio::io::{AsyncReadExt, AsyncWrite, AsyncWriteExt};
8181
use lightning::ln::peer_handler;
8282
use lightning::ln::peer_handler::SocketDescriptor as LnSocketTrait;
8383
use lightning::ln::peer_handler::CustomMessageHandler;
84-
use lightning::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler};
84+
use lightning::ln::msgs::{ChannelMessageHandler, RoutingMessageHandler, NetAddress};
8585
use lightning::util::logger::Logger;
8686

8787
use std::task;
88+
use std::net::IpAddr;
8889
use std::net::SocketAddr;
8990
use std::net::TcpStream as StdTcpStream;
9091
use std::sync::{Arc, Mutex};
@@ -222,11 +223,21 @@ pub fn setup_inbound<CMH, RMH, L, UMH>(peer_manager: Arc<peer_handler::PeerManag
222223
RMH: RoutingMessageHandler + 'static + Send + Sync,
223224
L: Logger + 'static + ?Sized + Send + Sync,
224225
UMH: CustomMessageHandler + 'static + Send + Sync {
226+
let ip_addr = stream.peer_addr().unwrap();
225227
let (reader, write_receiver, read_receiver, us) = Connection::new(stream);
226228
#[cfg(debug_assertions)]
227229
let last_us = Arc::clone(&us);
228230

229-
let handle_opt = if let Ok(_) = peer_manager.new_inbound_connection(SocketDescriptor::new(us.clone())) {
231+
let handle_opt = if let Ok(_) = peer_manager.new_inbound_connection(SocketDescriptor::new(us.clone()), match ip_addr.ip() {
232+
IpAddr::V4(ip) => Some(NetAddress::IPv4 {
233+
addr: ip.octets(),
234+
port: ip_addr.port(),
235+
}),
236+
IpAddr::V6(ip) => Some(NetAddress::IPv6 {
237+
addr: ip.octets(),
238+
port: ip_addr.port(),
239+
}),
240+
}) {
230241
Some(tokio::spawn(Connection::schedule_read(peer_manager, us, reader, read_receiver, write_receiver)))
231242
} else {
232243
// Note that we will skip socket_disconnected here, in accordance with the PeerManager
@@ -263,11 +274,20 @@ pub fn setup_outbound<CMH, RMH, L, UMH>(peer_manager: Arc<peer_handler::PeerMana
263274
RMH: RoutingMessageHandler + 'static + Send + Sync,
264275
L: Logger + 'static + ?Sized + Send + Sync,
265276
UMH: CustomMessageHandler + 'static + Send + Sync {
277+
let ip_addr = stream.peer_addr().unwrap();
266278
let (reader, mut write_receiver, read_receiver, us) = Connection::new(stream);
267279
#[cfg(debug_assertions)]
268280
let last_us = Arc::clone(&us);
269-
270-
let handle_opt = if let Ok(initial_send) = peer_manager.new_outbound_connection(their_node_id, SocketDescriptor::new(us.clone())) {
281+
let handle_opt = if let Ok(initial_send) = peer_manager.new_outbound_connection(their_node_id, SocketDescriptor::new(us.clone()), match ip_addr.ip() {
282+
IpAddr::V4(ip) => Some(NetAddress::IPv4 {
283+
addr: ip.octets(),
284+
port: ip_addr.port(),
285+
}),
286+
IpAddr::V6(ip) => Some(NetAddress::IPv6 {
287+
addr: ip.octets(),
288+
port: ip_addr.port(),
289+
}),
290+
}) {
271291
Some(tokio::spawn(async move {
272292
// We should essentially always have enough room in a TCP socket buffer to send the
273293
// initial 10s of bytes. However, tokio running in single-threaded mode will always

lightning/src/ln/chanmon_update_fail_tests.rs

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -334,10 +334,10 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
334334
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
335335
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
336336

337-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
337+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
338338
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
339339
assert_eq!(reestablish_1.len(), 1);
340-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
340+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
341341
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
342342
assert_eq!(reestablish_2.len(), 1);
343343

@@ -356,10 +356,10 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
356356
assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
357357
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
358358

359-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
359+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
360360
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
361361
assert_eq!(reestablish_1.len(), 1);
362-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
362+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
363363
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
364364
assert_eq!(reestablish_2.len(), 1);
365365

@@ -1108,8 +1108,8 @@ fn test_monitor_update_fail_reestablish() {
11081108
commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
11091109

11101110
chanmon_cfgs[1].persister.set_update_ret(Err(ChannelMonitorUpdateErr::TemporaryFailure));
1111-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1112-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1111+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
1112+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
11131113

11141114
let as_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
11151115
let bs_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
@@ -1127,8 +1127,8 @@ fn test_monitor_update_fail_reestablish() {
11271127
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
11281128
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
11291129

1130-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1131-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1130+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
1131+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
11321132

11331133
assert!(as_reestablish == get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id()));
11341134
assert!(bs_reestablish == get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id()));
@@ -1300,8 +1300,8 @@ fn claim_while_disconnected_monitor_update_fail() {
13001300
assert!(nodes[1].node.claim_funds(payment_preimage_1));
13011301
check_added_monitors!(nodes[1], 1);
13021302

1303-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1304-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1303+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
1304+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
13051305

13061306
let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
13071307
let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
@@ -1432,8 +1432,8 @@ fn monitor_failed_no_reestablish_response() {
14321432
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
14331433
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
14341434

1435-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1436-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1435+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
1436+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
14371437

14381438
let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
14391439
let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
@@ -2012,9 +2012,9 @@ fn test_pending_update_fee_ack_on_reconnect() {
20122012
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
20132013
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
20142014

2015-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::known() });
2015+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::known(), remote_network_address: None });
20162016
let as_connect_msg = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
2017-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::known() });
2017+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::known(), remote_network_address: None });
20182018
let bs_connect_msg = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
20192019

20202020
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_connect_msg);
@@ -2094,9 +2094,9 @@ fn do_update_fee_resend_test(deliver_update: bool, parallel_updates: bool) {
20942094
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
20952095
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
20962096

2097-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::known() });
2097+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::known(), remote_network_address: None });
20982098
let as_connect_msg = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
2099-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::known() });
2099+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::known(), remote_network_address: None });
21002100
let bs_connect_msg = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
21012101

21022102
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &as_connect_msg);
@@ -2258,10 +2258,10 @@ fn do_channel_holding_cell_serialize(disconnect: bool, reload_a: bool) {
22582258
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
22592259

22602260
// Now reconnect the two
2261-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
2261+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
22622262
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
22632263
assert_eq!(reestablish_1.len(), 1);
2264-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
2264+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty(), remote_network_address: None });
22652265
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
22662266
assert_eq!(reestablish_2.len(), 1);
22672267

lightning/src/ln/channelmanager.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7351,8 +7351,8 @@ mod tests {
73517351

73527352
let payer_pubkey = nodes[0].node.get_our_node_id();
73537353
let payee_pubkey = nodes[1].node.get_our_node_id();
7354-
nodes[0].node.peer_connected(&payee_pubkey, &msgs::Init { features: InitFeatures::known() });
7355-
nodes[1].node.peer_connected(&payer_pubkey, &msgs::Init { features: InitFeatures::known() });
7354+
nodes[0].node.peer_connected(&payee_pubkey, &msgs::Init { features: InitFeatures::known(), remote_network_address: None });
7355+
nodes[1].node.peer_connected(&payer_pubkey, &msgs::Init { features: InitFeatures::known(), remote_network_address: None });
73567356

73577357
let _chan = create_chan_between_nodes(&nodes[0], &nodes[1], InitFeatures::known(), InitFeatures::known());
73587358
let route_params = RouteParameters {
@@ -7395,8 +7395,8 @@ mod tests {
73957395

73967396
let payer_pubkey = nodes[0].node.get_our_node_id();
73977397
let payee_pubkey = nodes[1].node.get_our_node_id();
7398-
nodes[0].node.peer_connected(&payee_pubkey, &msgs::Init { features: InitFeatures::known() });
7399-
nodes[1].node.peer_connected(&payer_pubkey, &msgs::Init { features: InitFeatures::known() });
7398+
nodes[0].node.peer_connected(&payee_pubkey, &msgs::Init { features: InitFeatures::known(), remote_network_address: None });
7399+
nodes[1].node.peer_connected(&payer_pubkey, &msgs::Init { features: InitFeatures::known(), remote_network_address: None });
74007400

74017401
let _chan = create_chan_between_nodes(&nodes[0], &nodes[1], InitFeatures::known(), InitFeatures::known());
74027402
let route_params = RouteParameters {
@@ -7561,8 +7561,8 @@ pub mod bench {
75617561
});
75627562
let node_b_holder = NodeHolder { node: &node_b };
75637563

7564-
node_a.peer_connected(&node_b.get_our_node_id(), &Init { features: InitFeatures::known() });
7565-
node_b.peer_connected(&node_a.get_our_node_id(), &Init { features: InitFeatures::known() });
7564+
node_a.peer_connected(&node_b.get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
7565+
node_b.peer_connected(&node_a.get_our_node_id(), &Init { features: InitFeatures::known(), remote_network_address: None });
75667566
node_a.create_channel(node_b.get_our_node_id(), 8_000_000, 100_000_000, 42, None).unwrap();
75677567
node_b.handle_open_channel(&node_a.get_our_node_id(), InitFeatures::known(), &get_event_msg!(node_a_holder, MessageSendEvent::SendOpenChannel, node_b.get_our_node_id()));
75687568
node_a.handle_accept_channel(&node_b.get_our_node_id(), InitFeatures::known(), &get_event_msg!(node_b_holder, MessageSendEvent::SendAcceptChannel, node_a.get_our_node_id()));

0 commit comments

Comments
 (0)