From 9e839b177c236988e482de01416d445340d2e1c1 Mon Sep 17 00:00:00 2001 From: niftynei Date: Thu, 10 Jun 2021 15:30:19 -0500 Subject: [PATCH] gossipd: turn off lease offers if the rates are empty If received lease rates are empty (all zeroes), turn them off --- common/Makefile | 1 + common/lease_rates.c | 17 +++++++++++++++++ common/lease_rates.h | 9 +++++++++ gossipd/Makefile | 1 + gossipd/gossipd.c | 8 ++++++-- 5 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 common/lease_rates.c create mode 100644 common/lease_rates.h diff --git a/common/Makefile b/common/Makefile index 21a22cd94..0ca8359fb 100644 --- a/common/Makefile +++ b/common/Makefile @@ -53,6 +53,7 @@ COMMON_SRC_NOGEN := \ common/key_derive.c \ common/keyset.c \ common/gossmap.c \ + common/lease_rates.c \ common/memleak.c \ common/msg_queue.c \ common/node_id.c \ diff --git a/common/lease_rates.c b/common/lease_rates.c new file mode 100644 index 000000000..cf0b40244 --- /dev/null +++ b/common/lease_rates.c @@ -0,0 +1,17 @@ +#include "config.h" +#include +#include +#include + +bool lease_rates_empty(struct lease_rates *rates) +{ + if (!rates) + return true; + + /* FIXME: why can't i do memeqzero? */ + return rates->funding_weight == 0 + && rates->channel_fee_max_base_msat == 0 + && rates->channel_fee_max_proportional_thousandths == 0 + && rates->lease_fee_base_sat == 0 + && rates->lease_fee_basis == 0; +} diff --git a/common/lease_rates.h b/common/lease_rates.h new file mode 100644 index 000000000..dd10e79fb --- /dev/null +++ b/common/lease_rates.h @@ -0,0 +1,9 @@ +#ifndef LIGHTNING_COMMON_LEASE_RATES_H +#define LIGHTNING_COMMON_LEASE_RATES_H +#include "config.h" +#include + +struct lease_rates; + +bool lease_rates_empty(struct lease_rates *rates); +#endif /* LIGHTNING_COMMON_LEASE_RATES_H */ diff --git a/gossipd/Makefile b/gossipd/Makefile index 7d4f7d70a..510ebccf9 100644 --- a/gossipd/Makefile +++ b/gossipd/Makefile @@ -48,6 +48,7 @@ GOSSIPD_COMMON_OBJS := \ common/status_wiregen.o \ common/gossip_rcvd_filter.o \ common/key_derive.o \ + common/lease_rates.o \ common/memleak.o \ common/msg_queue.o \ common/node_id.o \ diff --git a/gossipd/gossipd.c b/gossipd/gossipd.c index 722d0db8e..2e09b7e6c 100644 --- a/gossipd/gossipd.c +++ b/gossipd/gossipd.c @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -1418,8 +1419,11 @@ static struct io_plan *handle_new_lease_rates(struct io_conn *conn, if (!fromwire_gossipd_new_lease_rates(msg, rates)) master_badmsg(WIRE_GOSSIPD_NEW_LEASE_RATES, msg); - tal_free(daemon->rates); - daemon->rates = rates; + daemon->rates = tal_free(daemon->rates); + if (!lease_rates_empty(rates)) + daemon->rates = rates; + else + tal_free(rates); /* Send the update over to the peer */ maybe_send_own_node_announce(daemon, false);