Skip to content

Commit 79d050f

Browse files
committed
Pass peer's Init message through to ChannelManager
1 parent b59efad commit 79d050f

8 files changed

+43
-40
lines changed

fuzz/src/chanmon_consistency.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use lightning::ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, HTL
3030
use lightning::ln::channelmanager::{ChannelManager, PaymentHash, PaymentPreimage, ChannelManagerReadArgs};
3131
use lightning::ln::router::{Route, RouteHop};
3232
use lightning::ln::features::InitFeatures;
33-
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, ErrorAction, UpdateAddHTLC};
33+
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, ErrorAction, UpdateAddHTLC, Init};
3434
use lightning::util::enforcing_trait_impls::EnforcingChannelKeys;
3535
use lightning::util::events;
3636
use lightning::util::logger::Logger;
@@ -650,15 +650,15 @@ pub fn do_test(data: &[u8]) {
650650
},
651651
0x11 => {
652652
if chan_a_disconnected {
653-
nodes[0].peer_connected(&nodes[1].get_our_node_id());
654-
nodes[1].peer_connected(&nodes[0].get_our_node_id());
653+
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::empty() });
654+
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: InitFeatures::empty() });
655655
chan_a_disconnected = false;
656656
}
657657
},
658658
0x12 => {
659659
if chan_b_disconnected {
660-
nodes[1].peer_connected(&nodes[2].get_our_node_id());
661-
nodes[2].peer_connected(&nodes[1].get_our_node_id());
660+
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: InitFeatures::empty() });
661+
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: InitFeatures::empty() });
662662
chan_b_disconnected = false;
663663
}
664664
},

lightning/src/ln/chanmon_update_fail_tests.rs

+12-12
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,10 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
215215
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
216216
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
217217

218-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
218+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
219219
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
220220
assert_eq!(reestablish_1.len(), 1);
221-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
221+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
222222
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
223223
assert_eq!(reestablish_2.len(), 1);
224224

@@ -237,10 +237,10 @@ fn do_test_monitor_temporary_update_fail(disconnect_count: usize) {
237237
assert!(nodes[0].node.get_and_clear_pending_events().is_empty());
238238
assert!(nodes[0].node.get_and_clear_pending_msg_events().is_empty());
239239

240-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
240+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
241241
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
242242
assert_eq!(reestablish_1.len(), 1);
243-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
243+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
244244
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
245245
assert_eq!(reestablish_2.len(), 1);
246246

@@ -938,8 +938,8 @@ fn test_monitor_update_fail_reestablish() {
938938
commitment_signed_dance!(nodes[1], nodes[2], updates.commitment_signed, false);
939939

940940
*nodes[1].chan_monitor.update_ret.lock().unwrap() = Err(ChannelMonitorUpdateErr::TemporaryFailure);
941-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
942-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
941+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
942+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
943943

944944
let as_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
945945
let bs_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
@@ -954,8 +954,8 @@ fn test_monitor_update_fail_reestablish() {
954954
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
955955
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
956956

957-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
958-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
957+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
958+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
959959

960960
assert!(as_reestablish == get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id()));
961961
assert!(bs_reestablish == get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id()));
@@ -1118,8 +1118,8 @@ fn claim_while_disconnected_monitor_update_fail() {
11181118
assert!(nodes[1].node.claim_funds(payment_preimage_1, 1_000_000));
11191119
check_added_monitors!(nodes[1], 1);
11201120

1121-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
1122-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
1121+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1122+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
11231123

11241124
let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
11251125
let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
@@ -1246,8 +1246,8 @@ fn monitor_failed_no_reestablish_response() {
12461246
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
12471247
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
12481248

1249-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
1250-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
1249+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
1250+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
12511251

12521252
let as_reconnect = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
12531253
let bs_reconnect = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());

lightning/src/ln/channelmanager.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2853,7 +2853,7 @@ impl<ChanSigner: ChannelKeys> ChannelMessageHandler for ChannelManager<ChanSigne
28532853
}
28542854
}
28552855

2856-
fn peer_connected(&self, their_node_id: &PublicKey) {
2856+
fn peer_connected(&self, their_node_id: &PublicKey, _init_msg: &msgs::Init) {
28572857
log_debug!(self, "Generating channel_reestablish events for {}", log_pubkey!(their_node_id));
28582858

28592859
let _ = self.total_consistency_lock.read().unwrap();

lightning/src/ln/functional_test_utils.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1084,9 +1084,9 @@ macro_rules! handle_chan_reestablish_msgs {
10841084
/// pending_htlc_adds includes both the holding cell and in-flight update_add_htlcs, whereas
10851085
/// for claims/fails they are separated out.
10861086
pub fn reconnect_nodes(node_a: &Node, node_b: &Node, send_funding_locked: (bool, bool), pending_htlc_adds: (i64, i64), pending_htlc_claims: (usize, usize), pending_cell_htlc_claims: (usize, usize), pending_cell_htlc_fails: (usize, usize), pending_raa: (bool, bool)) {
1087-
node_a.node.peer_connected(&node_b.node.get_our_node_id());
1087+
node_a.node.peer_connected(&node_b.node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
10881088
let reestablish_1 = get_chan_reestablish_msgs!(node_a, node_b);
1089-
node_b.node.peer_connected(&node_a.node.get_our_node_id());
1089+
node_b.node.peer_connected(&node_a.node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
10901090
let reestablish_2 = get_chan_reestablish_msgs!(node_b, node_a);
10911091

10921092
if send_funding_locked.0 {

lightning/src/ln/functional_tests.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -852,9 +852,9 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) {
852852
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
853853
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
854854

855-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
855+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
856856
let node_0_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
857-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
857+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
858858
let node_1_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
859859

860860
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &node_0_reestablish);
@@ -916,9 +916,9 @@ fn do_test_shutdown_rebroadcast(recv_count: u8) {
916916
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
917917
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
918918

919-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
919+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
920920
let node_0_2nd_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
921-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
921+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
922922
if recv_count == 0 {
923923
// If all closing_signeds weren't delivered we can just resume where we left off...
924924
let node_1_2nd_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
@@ -3254,10 +3254,10 @@ fn test_drop_messages_peer_disconnect_dual_htlc() {
32543254
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
32553255
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
32563256

3257-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
3257+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
32583258
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
32593259
assert_eq!(reestablish_1.len(), 1);
3260-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
3260+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
32613261
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
32623262
assert_eq!(reestablish_2.len(), 1);
32633263

@@ -3451,9 +3451,9 @@ fn test_no_txn_manager_serialize_deserialize() {
34513451
assert_eq!(nodes[0].node.list_channels().len(), 1);
34523452
check_added_monitors!(nodes[0], 1);
34533453

3454-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
3454+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
34553455
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
3456-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
3456+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
34573457
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
34583458

34593459
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]);
@@ -3586,9 +3586,9 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
35863586
//... and we can even still claim the payment!
35873587
claim_payment(&nodes[2], &[&nodes[0], &nodes[1]], our_payment_preimage, 1_000_000);
35883588

3589-
nodes[3].node.peer_connected(&nodes[0].node.get_our_node_id());
3589+
nodes[3].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
35903590
let reestablish = get_event_msg!(nodes[3], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
3591-
nodes[0].node.peer_connected(&nodes[3].node.get_our_node_id());
3591+
nodes[0].node.peer_connected(&nodes[3].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
35923592
nodes[0].node.handle_channel_reestablish(&nodes[3].node.get_our_node_id(), &reestablish);
35933593
let msg_events = nodes[0].node.get_and_clear_pending_msg_events();
35943594
assert_eq!(msg_events.len(), 1);
@@ -5380,10 +5380,10 @@ fn test_update_add_htlc_bolt2_receiver_check_repeated_id_ignore() {
53805380
//Disconnect and Reconnect
53815381
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
53825382
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
5383-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
5383+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
53845384
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
53855385
assert_eq!(reestablish_1.len(), 1);
5386-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
5386+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
53875387
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
53885388
assert_eq!(reestablish_2.len(), 1);
53895389
nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]);
@@ -6155,8 +6155,8 @@ fn test_data_loss_protect() {
61556155

61566156
check_added_monitors!(nodes[0], 1);
61576157

6158-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
6159-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
6158+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
6159+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
61606160

61616161
let reestablish_0 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
61626162

@@ -6297,10 +6297,10 @@ fn test_announce_disable_channels() {
62976297
}
62986298
}
62996299
// Reconnect peers
6300-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
6300+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
63016301
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
63026302
assert_eq!(reestablish_1.len(), 3);
6303-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
6303+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: InitFeatures::empty() });
63046304
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
63056305
assert_eq!(reestablish_2.len(), 3);
63066306

lightning/src/ln/msgs.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ pub enum DecodeError {
5656

5757
/// An init message to be sent or received from a peer
5858
pub struct Init {
59+
#[cfg(not(feature = "fuzztarget"))]
5960
pub(crate) features: InitFeatures,
61+
#[cfg(feature = "fuzztarget")]
62+
pub features: InitFeatures,
6063
}
6164

6265
/// An error message to be sent or received from a peer
@@ -570,7 +573,7 @@ pub trait ChannelMessageHandler : events::MessageSendEventsProvider + Send + Syn
570573
fn peer_disconnected(&self, their_node_id: &PublicKey, no_connection_possible: bool);
571574

572575
/// Handle a peer reconnecting, possibly generating channel_reestablish message(s).
573-
fn peer_connected(&self, their_node_id: &PublicKey);
576+
fn peer_connected(&self, their_node_id: &PublicKey, msg: &Init);
574577
/// Handle an incoming channel_reestablish message from the given peer.
575578
fn handle_channel_reestablish(&self, their_node_id: &PublicKey, msg: &ChannelReestablish);
576579

lightning/src/ln/peer_handler.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,6 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
622622
peer.sync_status = InitSyncTracker::ChannelsSyncing(0);
623623
peers.peers_needing_send.insert(peer_descriptor.clone());
624624
}
625-
peer.their_features = Some(msg.features);
626625

627626
if !peer.outbound {
628627
let mut features = InitFeatures::supported();
@@ -636,7 +635,8 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
636635
}, 16);
637636
}
638637

639-
self.message_handler.chan_handler.peer_connected(&peer.their_node_id.unwrap());
638+
self.message_handler.chan_handler.peer_connected(&peer.their_node_id.unwrap(), &msg);
639+
peer.their_features = Some(msg.features);
640640
},
641641
17 => {
642642
let msg = try_potential_decodeerror!(msgs::ErrorMessage::read(&mut reader));

lightning/src/util/test_utils.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler {
117117
fn handle_announcement_signatures(&self, _their_node_id: &PublicKey, _msg: &msgs::AnnouncementSignatures) {}
118118
fn handle_channel_reestablish(&self, _their_node_id: &PublicKey, _msg: &msgs::ChannelReestablish) {}
119119
fn peer_disconnected(&self, _their_node_id: &PublicKey, _no_connection_possible: bool) {}
120-
fn peer_connected(&self, _their_node_id: &PublicKey) {}
120+
fn peer_connected(&self, _their_node_id: &PublicKey, _msg: &msgs::Init) {}
121121
fn handle_error(&self, _their_node_id: &PublicKey, _msg: &msgs::ErrorMessage) {}
122122
}
123123

0 commit comments

Comments
 (0)