Skip to content

Commit 95e14f6

Browse files
committed
Pass peer's Init message through to ChannelManager
1 parent 3fe3374 commit 95e14f6

File tree

8 files changed

+43
-40
lines changed

8 files changed

+43
-40
lines changed

fuzz/src/chanmon_consistency.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use lightning::ln::channelmonitor;
2929
use lightning::ln::channelmonitor::{ChannelMonitor, ChannelMonitorUpdateErr, HTLCUpdate};
3030
use lightning::ln::channelmanager::{ChannelManager, PaymentHash, PaymentPreimage, ChannelManagerReadArgs};
3131
use lightning::ln::router::{Route, RouteHop};
32-
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, ErrorAction, LightningError, UpdateAddHTLC, Features, FeatureContextInit};
32+
use lightning::ln::msgs::{CommitmentUpdate, ChannelMessageHandler, ErrorAction, LightningError, UpdateAddHTLC, Features, FeatureContextInit, Init};
3333
use lightning::util::enforcing_trait_impls::EnforcingChannelKeys;
3434
use lightning::util::events;
3535
use lightning::util::logger::Logger;
@@ -651,15 +651,15 @@ pub fn do_test(data: &[u8]) {
651651
},
652652
0x11 => {
653653
if chan_a_disconnected {
654-
nodes[0].peer_connected(&nodes[1].get_our_node_id());
655-
nodes[1].peer_connected(&nodes[0].get_our_node_id());
654+
nodes[0].peer_connected(&nodes[1].get_our_node_id(), &Init { features: Features::empty() });
655+
nodes[1].peer_connected(&nodes[0].get_our_node_id(), &Init { features: Features::empty() });
656656
chan_a_disconnected = false;
657657
}
658658
},
659659
0x12 => {
660660
if chan_b_disconnected {
661-
nodes[1].peer_connected(&nodes[2].get_our_node_id());
662-
nodes[2].peer_connected(&nodes[1].get_our_node_id());
661+
nodes[1].peer_connected(&nodes[2].get_our_node_id(), &Init { features: Features::empty() });
662+
nodes[2].peer_connected(&nodes[1].get_our_node_id(), &Init { features: Features::empty() });
663663
chan_b_disconnected = false;
664664
}
665665
},

lightning/src/ln/chanmon_update_fail_tests.rs

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

217-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
217+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
218218
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
219219
assert_eq!(reestablish_1.len(), 1);
220-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
220+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
221221
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
222222
assert_eq!(reestablish_2.len(), 1);
223223

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

239-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
239+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
240240
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
241241
assert_eq!(reestablish_1.len(), 1);
242-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
242+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
243243
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
244244
assert_eq!(reestablish_2.len(), 1);
245245

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

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

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

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

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

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

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

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

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

lightning/src/ln/channelmanager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2890,7 +2890,7 @@ impl<ChanSigner: ChannelKeys> ChannelMessageHandler for ChannelManager<ChanSigne
28902890
}
28912891
}
28922892

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

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

lightning/src/ln/functional_test_utils.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,9 +1071,9 @@ macro_rules! handle_chan_reestablish_msgs {
10711071
/// pending_htlc_adds includes both the holding cell and in-flight update_add_htlcs, whereas
10721072
/// for claims/fails they are separated out.
10731073
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)) {
1074-
node_a.node.peer_connected(&node_b.node.get_our_node_id());
1074+
node_a.node.peer_connected(&node_b.node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
10751075
let reestablish_1 = get_chan_reestablish_msgs!(node_a, node_b);
1076-
node_b.node.peer_connected(&node_a.node.get_our_node_id());
1076+
node_b.node.peer_connected(&node_a.node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
10771077
let reestablish_2 = get_chan_reestablish_msgs!(node_b, node_a);
10781078

10791079
if send_funding_locked.0 {

lightning/src/ln/functional_tests.rs

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

854-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
854+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
855855
let node_0_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
856-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
856+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
857857
let node_1_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
858858

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

918-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
918+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
919919
let node_0_2nd_reestablish = get_event_msg!(nodes[0], MessageSendEvent::SendChannelReestablish, nodes[1].node.get_our_node_id());
920-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
920+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
921921
if recv_count == 0 {
922922
// If all closing_signeds weren't delivered we can just resume where we left off...
923923
let node_1_2nd_reestablish = get_event_msg!(nodes[1], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
@@ -3236,10 +3236,10 @@ fn test_drop_messages_peer_disconnect_dual_htlc() {
32363236
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
32373237
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
32383238

3239-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
3239+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
32403240
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
32413241
assert_eq!(reestablish_1.len(), 1);
3242-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
3242+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
32433243
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
32443244
assert_eq!(reestablish_2.len(), 1);
32453245

@@ -3433,9 +3433,9 @@ fn test_no_txn_manager_serialize_deserialize() {
34333433
assert_eq!(nodes[0].node.list_channels().len(), 1);
34343434
check_added_monitors!(nodes[0], 1);
34353435

3436-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
3436+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
34373437
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
3438-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
3438+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
34393439
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
34403440

34413441
nodes[1].node.handle_channel_reestablish(&nodes[0].node.get_our_node_id(), &reestablish_1[0]).unwrap();
@@ -3568,9 +3568,9 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
35683568
//... and we can even still claim the payment!
35693569
claim_payment(&nodes[2], &[&nodes[0], &nodes[1]], our_payment_preimage, 1_000_000);
35703570

3571-
nodes[3].node.peer_connected(&nodes[0].node.get_our_node_id());
3571+
nodes[3].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
35723572
let reestablish = get_event_msg!(nodes[3], MessageSendEvent::SendChannelReestablish, nodes[0].node.get_our_node_id());
3573-
nodes[0].node.peer_connected(&nodes[3].node.get_our_node_id());
3573+
nodes[0].node.peer_connected(&nodes[3].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
35743574
if let Err(msgs::LightningError { action: msgs::ErrorAction::SendErrorMessage { msg }, .. }) = nodes[0].node.handle_channel_reestablish(&nodes[3].node.get_our_node_id(), &reestablish) {
35753575
assert_eq!(msg.channel_id, channel_id);
35763576
} else { panic!("Unexpected result"); }
@@ -5372,10 +5372,10 @@ fn test_update_add_htlc_bolt2_receiver_check_repeated_id_ignore() {
53725372
//Disconnect and Reconnect
53735373
nodes[0].node.peer_disconnected(&nodes[1].node.get_our_node_id(), false);
53745374
nodes[1].node.peer_disconnected(&nodes[0].node.get_our_node_id(), false);
5375-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
5375+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
53765376
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
53775377
assert_eq!(reestablish_1.len(), 1);
5378-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
5378+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
53795379
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
53805380
assert_eq!(reestablish_2.len(), 1);
53815381
nodes[0].node.handle_channel_reestablish(&nodes[1].node.get_our_node_id(), &reestablish_2[0]).unwrap();
@@ -6180,8 +6180,8 @@ fn test_data_loss_protect() {
61806180

61816181
check_added_monitors!(nodes[0], 1);
61826182

6183-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
6184-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
6183+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
6184+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
61856185

61866186
let reestablish_0 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
61876187

@@ -6319,10 +6319,10 @@ fn test_announce_disable_channels() {
63196319
}
63206320
}
63216321
// Reconnect peers
6322-
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id());
6322+
nodes[0].node.peer_connected(&nodes[1].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
63236323
let reestablish_1 = get_chan_reestablish_msgs!(nodes[0], nodes[1]);
63246324
assert_eq!(reestablish_1.len(), 3);
6325-
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id());
6325+
nodes[1].node.peer_connected(&nodes[0].node.get_our_node_id(), &msgs::Init { features: msgs::Features::empty() });
63266326
let reestablish_2 = get_chan_reestablish_msgs!(nodes[1], nodes[0]);
63276327
assert_eq!(reestablish_2.len(), 3);
63286328

lightning/src/ln/msgs.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,10 @@ impl Features<FeatureContextInit> {
236236

237237
/// An init message to be sent or received from a peer
238238
pub struct Init {
239+
#[cfg(not(feature = "fuzztarget"))]
239240
pub(crate) features: Features<FeatureContextInit>,
241+
#[cfg(feature = "fuzztarget")]
242+
pub features: Features<FeatureContextInit>,
240243
}
241244

242245
/// An error message to be sent or received from a peer
@@ -750,7 +753,7 @@ pub trait ChannelMessageHandler : events::MessageSendEventsProvider + Send + Syn
750753
fn peer_disconnected(&self, their_node_id: &PublicKey, no_connection_possible: bool);
751754

752755
/// Handle a peer reconnecting, possibly generating channel_reestablish message(s).
753-
fn peer_connected(&self, their_node_id: &PublicKey);
756+
fn peer_connected(&self, their_node_id: &PublicKey, msg: &Init);
754757
/// Handle an incoming channel_reestablish message from the given peer.
755758
fn handle_channel_reestablish(&self, their_node_id: &PublicKey, msg: &ChannelReestablish) -> Result<(), LightningError>;
756759

lightning/src/ln/peer_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,6 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
629629
peer.sync_status = InitSyncTracker::ChannelsSyncing(0);
630630
peers.peers_needing_send.insert(peer_descriptor.clone());
631631
}
632-
peer.their_features = Some(msg.features);
633632

634633
if !peer.outbound {
635634
let mut features = msgs::Features::<msgs::FeatureContextInit>::our_features();
@@ -643,7 +642,8 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
643642
}, 16);
644643
}
645644

646-
self.message_handler.chan_handler.peer_connected(&peer.their_node_id.unwrap());
645+
self.message_handler.chan_handler.peer_connected(&peer.their_node_id.unwrap(), &msg);
646+
peer.their_features = Some(msg.features);
647647
},
648648
17 => {
649649
let msg = try_potential_decodeerror!(msgs::ErrorMessage::read(&mut reader));

lightning/src/util/test_utils.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ impl msgs::ChannelMessageHandler for TestChannelMessageHandler {
147147
Err(LightningError { err: "", action: msgs::ErrorAction::IgnoreError })
148148
}
149149
fn peer_disconnected(&self, _their_node_id: &PublicKey, _no_connection_possible: bool) {}
150-
fn peer_connected(&self, _their_node_id: &PublicKey) {}
150+
fn peer_connected(&self, _their_node_id: &PublicKey, _msg: &msgs::Init) {}
151151
fn handle_error(&self, _their_node_id: &PublicKey, _msg: &msgs::ErrorMessage) {}
152152
}
153153

0 commit comments

Comments
 (0)