From 0498695f1f6bf595ba1149557bd8fd45c2ff83fc Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 31 Jan 2024 14:58:33 +1030 Subject: [PATCH] gossipd: have seeker quert interfaces take an id, not a struct peer. Again, we don't necessarily have a peer pointer. Signed-off-by: Rusty Russell --- gossipd/gossipd.c | 4 +-- gossipd/seeker.c | 47 ++++++++++++++++------------- gossipd/seeker.h | 15 ++++----- gossipd/test/run-next_block_range.c | 3 ++ 4 files changed, 39 insertions(+), 30 deletions(-) diff --git a/gossipd/gossipd.c b/gossipd/gossipd.c index b702c9358..28694f20e 100644 --- a/gossipd/gossipd.c +++ b/gossipd/gossipd.c @@ -239,7 +239,7 @@ static u8 *handle_channel_update_msg(struct peer *peer, const u8 *msg) /* If it's an unknown channel, ask someone about it */ if (unknown_scid.u64 != 0) - query_unknown_channel(peer->daemon, peer, &unknown_scid); + query_unknown_channel(peer->daemon, &peer->id, unknown_scid); return NULL; } @@ -252,7 +252,7 @@ static u8 *handle_node_announce(struct peer *peer, const u8 *msg) err = handle_node_announcement(peer->daemon->rstate, msg, &peer->id, &was_unknown); if (was_unknown) - query_unknown_node(peer->daemon->seeker, peer); + query_unknown_node(peer->daemon, &peer->id, NULL); return err; } diff --git a/gossipd/seeker.c b/gossipd/seeker.c index a6bb23feb..6f86caae3 100644 --- a/gossipd/seeker.c +++ b/gossipd/seeker.c @@ -626,6 +626,18 @@ static void check_timestamps(struct seeker *seeker, *stale |= query_flag; } +static bool add_unknown_scid(struct seeker *seeker, + struct short_channel_id scid, + struct peer *peer) +{ + /* Check we're not already getting this one. */ + if (!uintmap_add(&seeker->unknown_scids, scid.u64, true)) + return false; + + set_preferred_peer(seeker, peer); + return true; +} + static void process_scid_probe(struct peer *peer, u32 first_blocknum, u32 number_of_blocks, const struct range_query_reply *replies) @@ -647,7 +659,8 @@ static void process_scid_probe(struct peer *peer, continue; } - new_unknown_scids |= add_unknown_scid(seeker, &replies[i].scid, + new_unknown_scids |= add_unknown_scid(seeker, + replies[i].scid, peer); } @@ -932,34 +945,26 @@ bool remove_unknown_scid(struct seeker *seeker, return uintmap_del(&seeker->unknown_scids, scid->u64); } -bool add_unknown_scid(struct seeker *seeker, - const struct short_channel_id *scid, - struct peer *peer) -{ - /* Check we're not already getting this one. */ - if (!uintmap_add(&seeker->unknown_scids, scid->u64, true)) - return false; - - set_preferred_peer(seeker, peer); - return true; -} - /* This peer told us about an update to an unknown channel. Ask it for a * channel_announcement. */ void query_unknown_channel(struct daemon *daemon, - struct peer *peer, - const struct short_channel_id *id) + const struct node_id *source_peer, + struct short_channel_id unknown_scid) { - /* Too many, or duplicate? */ - if (!add_unknown_scid(daemon->seeker, id, peer)) - return; + add_unknown_scid(daemon->seeker, + unknown_scid, + source_peer ? find_peer(daemon, source_peer) : NULL); } /* This peer told us about an unknown node. Start probing it. */ -void query_unknown_node(struct seeker *seeker, struct peer *peer) +void query_unknown_node(struct daemon *daemon, + const struct node_id *source_peer, + const struct node_id *unknown_node) { - seeker->unknown_nodes = true; - set_preferred_peer(seeker, peer); + daemon->seeker->unknown_nodes = true; + if (source_peer) + set_preferred_peer(daemon->seeker, + find_peer(daemon, source_peer)); } /* Peer has died, NULL out any pointers we have */ diff --git a/gossipd/seeker.h b/gossipd/seeker.h index 2edd26623..90afde805 100644 --- a/gossipd/seeker.h +++ b/gossipd/seeker.h @@ -3,25 +3,26 @@ #include "config.h" struct daemon; -struct peer; +struct node_id; struct short_channel_id; struct seeker *new_seeker(struct daemon *daemon); +/* source_peer can be NULL! */ void query_unknown_channel(struct daemon *daemon, - struct peer *peer, - const struct short_channel_id *id); + const struct node_id *source_peer, + const struct short_channel_id unknown_scid); -void query_unknown_node(struct seeker *seeker, struct peer *peer); +/* source_peer can be NULL! */ +void query_unknown_node(struct daemon *daemon, + const struct node_id *source_peer, + const struct node_id *unknown_node); void seeker_setup_peer_gossip(struct seeker *seeker, struct peer *peer); bool remove_unknown_scid(struct seeker *seeker, const struct short_channel_id *scid, bool found); -bool add_unknown_scid(struct seeker *seeker, - const struct short_channel_id *scid, - struct peer *peer); void seeker_peer_gone(struct seeker *seeker, const struct peer *peer); diff --git a/gossipd/test/run-next_block_range.c b/gossipd/test/run-next_block_range.c index 62b8db773..3599c3949 100644 --- a/gossipd/test/run-next_block_range.c +++ b/gossipd/test/run-next_block_range.c @@ -26,6 +26,9 @@ bool blinding_next_pubkey(const struct pubkey *pk UNNEEDED, const struct sha256 *h UNNEEDED, struct pubkey *next UNNEEDED) { fprintf(stderr, "blinding_next_pubkey called!\n"); abort(); } +/* Generated stub for find_peer */ +struct peer *find_peer(struct daemon *daemon UNNEEDED, const struct node_id *id UNNEEDED) +{ fprintf(stderr, "find_peer called!\n"); abort(); } /* Generated stub for first_random_peer */ struct peer *first_random_peer(struct daemon *daemon UNNEEDED, struct peer_node_id_map_iter *it UNNEEDED)