From db13c7e8517862011e81d767038426dbf515883c Mon Sep 17 00:00:00 2001 From: Christian Decker Date: Sun, 25 Mar 2018 18:10:00 +0200 Subject: [PATCH] gossip: Wrap channel_updates in the gossip_store as well Bypasses verification when loading from the gossip_store. Signed-off-by: Christian Decker --- gossipd/gossip_store.c | 12 ++++++++++++ gossipd/gossip_store.h | 7 +++++++ gossipd/routing.c | 5 +++-- gossipd/test/run-bench-find_route.c | 6 ++++++ gossipd/test/run-find_route-specific.c | 6 ++++++ gossipd/test/run-find_route.c | 6 ++++++ 6 files changed, 40 insertions(+), 2 deletions(-) diff --git a/gossipd/gossip_store.c b/gossipd/gossip_store.c index c3679b558..cb3a10cac 100644 --- a/gossipd/gossip_store.c +++ b/gossipd/gossip_store.c @@ -66,6 +66,14 @@ void gossip_store_add_channel_announcement(struct gossip_store *gs, const u8 *go tal_free(msg); } +void gossip_store_add_channel_update(struct gossip_store *gs, + const u8 *gossip_msg) +{ + u8 *msg = towire_gossip_store_channel_update(NULL, gossip_msg); + gossip_store_append(gs, msg); + tal_free(msg); +} + const u8 *gossip_store_read_next(const tal_t *ctx, struct routing_state *rstate, struct gossip_store *gs) { @@ -109,6 +117,10 @@ const u8 *gossip_store_read_next(const tal_t *ctx, struct routing_state *rstate, /* No harm in returning it, it'll get discarded as a duplicate */ return gossip_msg; + } else if(type == WIRE_GOSSIP_STORE_CHANNEL_UPDATE) { + fromwire_gossip_store_channel_update(msg, msg, &gossip_msg); + routing_add_channel_update(rstate, gossip_msg); + return gossip_msg; } return msg; diff --git a/gossipd/gossip_store.h b/gossipd/gossip_store.h index 095a0fae3..7cda17320 100644 --- a/gossipd/gossip_store.h +++ b/gossipd/gossip_store.h @@ -40,4 +40,11 @@ const u8 *gossip_store_read_next(const tal_t *ctx, struct routing_state *rstate, */ void gossip_store_add_channel_announcement(struct gossip_store *gs, const u8 *gossip_msg, u64 satoshis); + +/** + * Store a channel_update with its associated data in the gossip_store + */ +void gossip_store_add_channel_update(struct gossip_store *gs, + const u8 *gossip_msg); + #endif /* GOSSIPD_GOSSIP_STORE_H */ diff --git a/gossipd/routing.c b/gossipd/routing.c index c6a8ab82a..7621121ed 100644 --- a/gossipd/routing.c +++ b/gossipd/routing.c @@ -1029,8 +1029,9 @@ u8 *handle_channel_update(struct routing_state *rstate, const u8 *update, flags & 0x01, flags & ROUTING_FLAGS_DISABLED ? "DISABLED" : "ACTIVE"); - if (store) - gossip_store_append(rstate->store, serialized); + /* Only store updates for public channels */ + if (chan->public) + gossip_store_add_channel_update(rstate->store, serialized); routing_add_channel_update(rstate, serialized); return NULL; } diff --git a/gossipd/test/run-bench-find_route.c b/gossipd/test/run-bench-find_route.c index cb787f093..67414ce9f 100644 --- a/gossipd/test/run-bench-find_route.c +++ b/gossipd/test/run-bench-find_route.c @@ -65,6 +65,9 @@ bool fromwire_channel_update(const void *p UNNEEDED, secp256k1_ecdsa_signature * /* Generated stub for fromwire_gossip_store_channel_announcement */ bool fromwire_gossip_store_channel_announcement(const tal_t *ctx UNNEEDED, const void *p UNNEEDED, u8 **announcement UNNEEDED, u64 *satoshis UNNEEDED) { fprintf(stderr, "fromwire_gossip_store_channel_announcement called!\n"); abort(); } +/* Generated stub for fromwire_gossip_store_channel_update */ +bool fromwire_gossip_store_channel_update(const tal_t *ctx UNNEEDED, const void *p UNNEEDED, u8 **update UNNEEDED) +{ fprintf(stderr, "fromwire_gossip_store_channel_update called!\n"); abort(); } /* Generated stub for fromwire_node_announcement */ bool fromwire_node_announcement(const tal_t *ctx UNNEEDED, const void *p UNNEEDED, secp256k1_ecdsa_signature *signature UNNEEDED, u8 **features UNNEEDED, u32 *timestamp UNNEEDED, struct pubkey *node_id UNNEEDED, u8 rgb_color[3] UNNEEDED, u8 alias[32] UNNEEDED, u8 **addresses UNNEEDED) { fprintf(stderr, "fromwire_node_announcement called!\n"); abort(); } @@ -102,6 +105,9 @@ u8 *towire_errorfmt(const tal_t *ctx UNNEEDED, /* Generated stub for towire_gossip_store_channel_announcement */ u8 *towire_gossip_store_channel_announcement(const tal_t *ctx UNNEEDED, const u8 *announcement UNNEEDED, u64 satoshis UNNEEDED) { fprintf(stderr, "towire_gossip_store_channel_announcement called!\n"); abort(); } +/* Generated stub for towire_gossip_store_channel_update */ +u8 *towire_gossip_store_channel_update(const tal_t *ctx UNNEEDED, const u8 *update UNNEEDED) +{ fprintf(stderr, "towire_gossip_store_channel_update called!\n"); abort(); } /* AUTOGENERATED MOCKS END */ /* Updates existing route if required. */ diff --git a/gossipd/test/run-find_route-specific.c b/gossipd/test/run-find_route-specific.c index 5c21316bd..ccabf1e7e 100644 --- a/gossipd/test/run-find_route-specific.c +++ b/gossipd/test/run-find_route-specific.c @@ -29,6 +29,9 @@ bool fromwire_channel_update(const void *p UNNEEDED, secp256k1_ecdsa_signature * /* Generated stub for fromwire_gossip_store_channel_announcement */ bool fromwire_gossip_store_channel_announcement(const tal_t *ctx UNNEEDED, const void *p UNNEEDED, u8 **announcement UNNEEDED, u64 *satoshis UNNEEDED) { fprintf(stderr, "fromwire_gossip_store_channel_announcement called!\n"); abort(); } +/* Generated stub for fromwire_gossip_store_channel_update */ +bool fromwire_gossip_store_channel_update(const tal_t *ctx UNNEEDED, const void *p UNNEEDED, u8 **update UNNEEDED) +{ fprintf(stderr, "fromwire_gossip_store_channel_update called!\n"); abort(); } /* Generated stub for fromwire_node_announcement */ bool fromwire_node_announcement(const tal_t *ctx UNNEEDED, const void *p UNNEEDED, secp256k1_ecdsa_signature *signature UNNEEDED, u8 **features UNNEEDED, u32 *timestamp UNNEEDED, struct pubkey *node_id UNNEEDED, u8 rgb_color[3] UNNEEDED, u8 alias[32] UNNEEDED, u8 **addresses UNNEEDED) { fprintf(stderr, "fromwire_node_announcement called!\n"); abort(); } @@ -66,6 +69,9 @@ u8 *towire_errorfmt(const tal_t *ctx UNNEEDED, /* Generated stub for towire_gossip_store_channel_announcement */ u8 *towire_gossip_store_channel_announcement(const tal_t *ctx UNNEEDED, const u8 *announcement UNNEEDED, u64 satoshis UNNEEDED) { fprintf(stderr, "towire_gossip_store_channel_announcement called!\n"); abort(); } +/* Generated stub for towire_gossip_store_channel_update */ +u8 *towire_gossip_store_channel_update(const tal_t *ctx UNNEEDED, const u8 *update UNNEEDED) +{ fprintf(stderr, "towire_gossip_store_channel_update called!\n"); abort(); } /* AUTOGENERATED MOCKS END */ const void *trc; diff --git a/gossipd/test/run-find_route.c b/gossipd/test/run-find_route.c index bb7b569dc..8ef289e7a 100644 --- a/gossipd/test/run-find_route.c +++ b/gossipd/test/run-find_route.c @@ -27,6 +27,9 @@ bool fromwire_channel_update(const void *p UNNEEDED, secp256k1_ecdsa_signature * /* Generated stub for fromwire_gossip_store_channel_announcement */ bool fromwire_gossip_store_channel_announcement(const tal_t *ctx UNNEEDED, const void *p UNNEEDED, u8 **announcement UNNEEDED, u64 *satoshis UNNEEDED) { fprintf(stderr, "fromwire_gossip_store_channel_announcement called!\n"); abort(); } +/* Generated stub for fromwire_gossip_store_channel_update */ +bool fromwire_gossip_store_channel_update(const tal_t *ctx UNNEEDED, const void *p UNNEEDED, u8 **update UNNEEDED) +{ fprintf(stderr, "fromwire_gossip_store_channel_update called!\n"); abort(); } /* Generated stub for fromwire_node_announcement */ bool fromwire_node_announcement(const tal_t *ctx UNNEEDED, const void *p UNNEEDED, secp256k1_ecdsa_signature *signature UNNEEDED, u8 **features UNNEEDED, u32 *timestamp UNNEEDED, struct pubkey *node_id UNNEEDED, u8 rgb_color[3] UNNEEDED, u8 alias[32] UNNEEDED, u8 **addresses UNNEEDED) { fprintf(stderr, "fromwire_node_announcement called!\n"); abort(); } @@ -64,6 +67,9 @@ u8 *towire_errorfmt(const tal_t *ctx UNNEEDED, /* Generated stub for towire_gossip_store_channel_announcement */ u8 *towire_gossip_store_channel_announcement(const tal_t *ctx UNNEEDED, const u8 *announcement UNNEEDED, u64 satoshis UNNEEDED) { fprintf(stderr, "towire_gossip_store_channel_announcement called!\n"); abort(); } +/* Generated stub for towire_gossip_store_channel_update */ +u8 *towire_gossip_store_channel_update(const tal_t *ctx UNNEEDED, const u8 *update UNNEEDED) +{ fprintf(stderr, "towire_gossip_store_channel_update called!\n"); abort(); } /* AUTOGENERATED MOCKS END */ /* Updates existing route if required. */