From 6ce7e7ea60d10194c294617061156837776f18f6 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 28 Dec 2021 09:52:09 +1030 Subject: [PATCH] common: is_msg_gossip_broadcast() for putting things in filter. We don't need the other "gossip" messages in our echo-suppression filter. Signed-off-by: Rusty Russell --- common/read_peer_msg.c | 3 ++- wire/peer_wire.c | 54 ++++++++++++++++++++++++++++++++++++++++++ wire/peer_wire.h | 2 ++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/common/read_peer_msg.c b/common/read_peer_msg.c index 7fc4b0f05..dc58c4a8c 100644 --- a/common/read_peer_msg.c +++ b/common/read_peer_msg.c @@ -181,7 +181,8 @@ bool handle_peer_gossip_or_error(struct per_peer_state *pps, sync_crypto_write(pps, take(pong)); return true; } else if (is_msg_for_gossipd(msg)) { - gossip_rcvd_filter_add(pps->grf, msg); + if (is_msg_gossip_broadcast(msg)) + gossip_rcvd_filter_add(pps->grf, msg); wire_sync_write(pps->gossip_fd, msg); /* wire_sync_write takes, so don't take again. */ return true; diff --git a/wire/peer_wire.c b/wire/peer_wire.c index 340085d28..33156f8be 100644 --- a/wire/peer_wire.c +++ b/wire/peer_wire.c @@ -108,6 +108,60 @@ bool is_msg_for_gossipd(const u8 *cursor) return false; } +bool is_msg_gossip_broadcast(const u8 *cursor) +{ + switch ((enum peer_wire)fromwire_peektype(cursor)) { + case WIRE_CHANNEL_ANNOUNCEMENT: + case WIRE_NODE_ANNOUNCEMENT: + case WIRE_CHANNEL_UPDATE: + return true; + case WIRE_QUERY_SHORT_CHANNEL_IDS: + case WIRE_REPLY_SHORT_CHANNEL_IDS_END: + case WIRE_QUERY_CHANNEL_RANGE: + case WIRE_REPLY_CHANNEL_RANGE: + case WIRE_ONION_MESSAGE: + case WIRE_OBS2_ONION_MESSAGE: + case WIRE_WARNING: + case WIRE_INIT: + case WIRE_PING: + case WIRE_PONG: + case WIRE_ERROR: + case WIRE_OPEN_CHANNEL: + case WIRE_ACCEPT_CHANNEL: + case WIRE_FUNDING_CREATED: + case WIRE_FUNDING_SIGNED: + case WIRE_FUNDING_LOCKED: + case WIRE_SHUTDOWN: + case WIRE_CLOSING_SIGNED: + case WIRE_UPDATE_ADD_HTLC: + case WIRE_UPDATE_FULFILL_HTLC: + case WIRE_UPDATE_FAIL_HTLC: + case WIRE_UPDATE_FAIL_MALFORMED_HTLC: + case WIRE_COMMITMENT_SIGNED: + case WIRE_REVOKE_AND_ACK: + case WIRE_UPDATE_FEE: + case WIRE_UPDATE_BLOCKHEIGHT: + case WIRE_CHANNEL_REESTABLISH: + case WIRE_ANNOUNCEMENT_SIGNATURES: + case WIRE_GOSSIP_TIMESTAMP_FILTER: + case WIRE_TX_ADD_INPUT: + case WIRE_TX_REMOVE_INPUT: + case WIRE_TX_ADD_OUTPUT: + case WIRE_TX_REMOVE_OUTPUT: + case WIRE_TX_COMPLETE: + case WIRE_TX_SIGNATURES: + case WIRE_OPEN_CHANNEL2: + case WIRE_ACCEPT_CHANNEL2: + case WIRE_INIT_RBF: + case WIRE_ACK_RBF: +#if EXPERIMENTAL_FEATURES + case WIRE_STFU: +#endif + break; + } + return false; +} + /* Return true if it's an unknown ODD message. cursor is a tal ptr. */ bool is_unknown_msg_discardable(const u8 *cursor) { diff --git a/wire/peer_wire.h b/wire/peer_wire.h index 12c951b8f..d57a84d20 100644 --- a/wire/peer_wire.h +++ b/wire/peer_wire.h @@ -23,6 +23,8 @@ bool is_unknown_msg_discardable(const u8 *cursor); /* Return true if it's a message for gossipd. */ bool is_msg_for_gossipd(const u8 *cursor); +/* Return true if it's a gossip update or announcement. */ +bool is_msg_gossip_broadcast(const u8 *cursor); /* Extract channel_id from various packets, return true if possible. */ bool extract_channel_id(const u8 *in_pkt, struct channel_id *channel_id);