connectd: add counters to each peer connection.

This allows us to detect when lightningd hasn't seen our latest
disconnect/reconnect; in particular, we would hit the following pattern:

1. lightningd says to connect a subd.
2. connectd disconnects and reconnects.
3. connectd reads message, connects subd.
4. lightningd reads disconnect and reconnect, sends msg to connect to subd again.
5. connectd asserts because subd is alreacy connected.

This way connectd can tell if lightningd is talking about the previous
connection, and ignoere it.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2022-07-18 21:42:27 +09:30
committed by neil saitug
parent 41b379ed89
commit d31420211a
12 changed files with 82 additions and 30 deletions

View File

@@ -63,6 +63,7 @@ msgdata,connectd_connect_failed,addrhint,?wireaddr_internal,
# Connectd -> master: we got a peer.
msgtype,connectd_peer_connected,2002
msgdata,connectd_peer_connected,id,node_id,
msgdata,connectd_peer_connected,counter,u64,
msgdata,connectd_peer_connected,addr,wireaddr_internal,
msgdata,connectd_peer_connected,remote_addr,?wireaddr,
msgdata,connectd_peer_connected,incoming,bool,
@@ -72,25 +73,30 @@ msgdata,connectd_peer_connected,features,u8,flen
# connectd -> master: peer disconnected.
msgtype,connectd_peer_disconnect_done,2006
msgdata,connectd_peer_disconnect_done,id,node_id,
msgdata,connectd_peer_disconnect_done,counter,u64,
# Master -> connectd: make peer active immediately (we want to talk) (+ fd to subd).
msgtype,connectd_peer_connect_subd,2004
msgdata,connectd_peer_connect_subd,id,node_id,
msgdata,connectd_peer_connect_subd,counter,u64,
msgdata,connectd_peer_connect_subd,channel_id,channel_id,
# Connectd -> master: peer said something interesting
msgtype,connectd_peer_spoke,2005
msgdata,connectd_peer_spoke,id,node_id,
msgdata,connectd_peer_spoke,counter,u64,
msgdata,connectd_peer_spoke,msgtype,u16,
msgdata,connectd_peer_spoke,channel_id,channel_id,
# master -> connectd: peer no longer wanted, you can disconnect.
msgtype,connectd_discard_peer,2015
msgdata,connectd_discard_peer,id,node_id,
msgdata,connectd_discard_peer,counter,u64,
# master -> connectd: give message to peer and disconnect.
msgtype,connectd_peer_final_msg,2003
msgdata,connectd_peer_final_msg,id,node_id,
msgdata,connectd_peer_final_msg,counter,u64,
msgdata,connectd_peer_final_msg,len,u16,
msgdata,connectd_peer_final_msg,msg,u8,len
1 #include <bitcoin/block.h>
63 msgdata,connectd_peer_connected,features,u8,flen msgdata,connectd_peer_connected,flen,u16,
64 # connectd -> master: peer disconnected. msgdata,connectd_peer_connected,features,u8,flen
65 msgtype,connectd_peer_disconnect_done,2006 # connectd -> master: peer disconnected.
66 msgtype,connectd_peer_disconnect_done,2006
67 msgdata,connectd_peer_disconnect_done,id,node_id,
68 # Master -> connectd: make peer active immediately (we want to talk) (+ fd to subd). msgdata,connectd_peer_disconnect_done,counter,u64,
69 msgtype,connectd_peer_connect_subd,2004 # Master -> connectd: make peer active immediately (we want to talk) (+ fd to subd).
73 msgtype,connectd_peer_spoke,2005 msgdata,connectd_peer_connect_subd,channel_id,channel_id,
74 msgdata,connectd_peer_spoke,id,node_id, # Connectd -> master: peer said something interesting
75 msgdata,connectd_peer_spoke,msgtype,u16, msgtype,connectd_peer_spoke,2005
76 msgdata,connectd_peer_spoke,id,node_id,
77 msgdata,connectd_peer_spoke,channel_id,channel_id, msgdata,connectd_peer_spoke,counter,u64,
78 # master -> connectd: peer no longer wanted, you can disconnect. msgdata,connectd_peer_spoke,msgtype,u16,
79 msgtype,connectd_discard_peer,2015 msgdata,connectd_peer_spoke,channel_id,channel_id,
80 msgdata,connectd_discard_peer,id,node_id, # master -> connectd: peer no longer wanted, you can disconnect.
81 msgtype,connectd_discard_peer,2015
82 # master -> connectd: give message to peer and disconnect. msgdata,connectd_discard_peer,id,node_id,
83 msgtype,connectd_peer_final_msg,2003 msgdata,connectd_discard_peer,counter,u64,
84 msgdata,connectd_peer_final_msg,id,node_id, # master -> connectd: give message to peer and disconnect.
85 msgdata,connectd_peer_final_msg,len,u16, msgtype,connectd_peer_final_msg,2003
86 msgdata,connectd_peer_final_msg,msg,u8,len msgdata,connectd_peer_final_msg,id,node_id,
87 msgdata,connectd_peer_final_msg,counter,u64,
88 # master -> connectd: do you have a memleak? msgdata,connectd_peer_final_msg,len,u16,
89 msgtype,connectd_dev_memleak,2033 msgdata,connectd_peer_final_msg,msg,u8,len
90 msgtype,connectd_dev_memleak_reply,2133 # master -> connectd: do you have a memleak?
91 msgdata,connectd_dev_memleak_reply,leak,bool, msgtype,connectd_dev_memleak,2033
92 # Ping/pong test. Waits for a reply if it expects one. msgtype,connectd_dev_memleak_reply,2133
93 msgtype,connectd_ping,2030 msgdata,connectd_dev_memleak_reply,leak,bool,
94 # Ping/pong test. Waits for a reply if it expects one.
95 msgdata,connectd_ping,id,node_id, msgtype,connectd_ping,2030
96 msgdata,connectd_ping,num_pong_bytes,u16, msgdata,connectd_ping,id,node_id,
97 msgdata,connectd_ping,len,u16, msgdata,connectd_ping,num_pong_bytes,u16,
98 msgtype,connectd_ping_reply,2130 msgdata,connectd_ping,len,u16,
99 msgtype,connectd_ping_reply,2130
100 # False if we there was already a ping in progress.
101 msgdata,connectd_ping_reply,sent,bool,
102 # 0 == no pong expected, otherwise length of pong.