From 51356588053ab9448718a0a7c081d5116b94f9b4 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sun, 11 Feb 2024 21:00:41 +1030 Subject: [PATCH] common: add gossmap_chan_is_dying() helper to check flags. And fix up gossip_store backwards comment! Signed-off-by: Rusty Russell --- common/gossip_store.h | 4 ++-- common/gossmap.c | 13 +++++++++++++ common/gossmap.h | 4 ++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/common/gossip_store.h b/common/gossip_store.h index eb7e9c254..9da13b521 100644 --- a/common/gossip_store.h +++ b/common/gossip_store.h @@ -44,8 +44,8 @@ struct gossip_rcvd_filter; * gossip_hdr -- On-disk format header. */ struct gossip_hdr { - beint16_t flags; /* Length of message after header. */ - beint16_t len; /* GOSSIP_STORE_xxx_BIT flags. */ + beint16_t flags; /* GOSSIP_STORE_xxx_BIT flags. */ + beint16_t len; /* Length of message after header. */ beint32_t crc; /* crc of message of timestamp, after header. */ beint32_t timestamp; /* timestamp of msg. */ }; diff --git a/common/gossmap.c b/common/gossmap.c index 0a93e6614..9957bc4dd 100644 --- a/common/gossmap.c +++ b/common/gossmap.c @@ -1093,6 +1093,19 @@ bool gossmap_chan_is_localmod(const struct gossmap *map, return c->cann_off >= map->map_size; } +bool gossmap_chan_is_dying(const struct gossmap *map, + const struct gossmap_chan *c) +{ + struct gossip_hdr ghdr; + size_t off; + + /* FIXME: put this flag in plus_scid_off instead? */ + off = c->cann_off - sizeof(ghdr); + map_copy(map, off, &ghdr, sizeof(ghdr)); + + return ghdr.flags & CPU_TO_BE16(GOSSIP_STORE_DYING_BIT); +} + bool gossmap_chan_get_capacity(const struct gossmap *map, const struct gossmap_chan *c, struct amount_sat *amount) diff --git a/common/gossmap.h b/common/gossmap.h index d9d2ad399..25f45c20c 100644 --- a/common/gossmap.h +++ b/common/gossmap.h @@ -122,6 +122,10 @@ void gossmap_remove_localmods(struct gossmap *map, bool gossmap_chan_is_localmod(const struct gossmap *map, const struct gossmap_chan *c); +/* Is this channel dying? */ +bool gossmap_chan_is_dying(const struct gossmap *map, + const struct gossmap_chan *c); + /* Each channel has a unique (low) index. */ u32 gossmap_node_idx(const struct gossmap *map, const struct gossmap_node *node); u32 gossmap_chan_idx(const struct gossmap *map, const struct gossmap_chan *chan);