From 7ef2f4d7fbbf731c51bff04b736e11f8cf445479 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Thu, 23 Sep 2021 11:59:48 +0930 Subject: [PATCH] devtools/features: tool to convert feature bitmap to names. For example: ``` $ ./devtools/features 80008008226aa2 option_data_loss_protect/odd (optional) option_upfront_shutdown_script/odd (optional) option_gossip_queries/odd (optional) option_var_onion_optin/odd (optional) option_gossip_queries_ex/odd (optional) option_static_remotekey/odd (optional) option_payment_secret/even (compulsory) option_basic_mpp/odd (optional) option_anchor_outputs/odd (optional) option_shutdown_anysegwit/odd (optional) option_onion_messages/odd (optional) option_unknown_54/odd (optional) ``` Signed-off-by: Rusty Russell --- common/features.c | 2 +- common/features.h | 3 +++ devtools/Makefile | 4 +++- devtools/features.c | 28 ++++++++++++++++++++++++++++ 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 devtools/features.c diff --git a/common/features.c b/common/features.c index b09e46bec..b1d71c809 100644 --- a/common/features.c +++ b/common/features.c @@ -373,7 +373,7 @@ int features_unsupported(const struct feature_set *our_features, return all_supported_features(our_features, their_features, p); } -static const char *feature_name(const tal_t *ctx, size_t f) +const char *feature_name(const tal_t *ctx, size_t f) { static const char *fnames[] = { "option_data_loss_protect", /* 0/1 */ diff --git a/common/features.h b/common/features.h index 176dea86e..828685cc9 100644 --- a/common/features.h +++ b/common/features.h @@ -64,6 +64,9 @@ bool feature_check_depends(const u8 *their_features, const char **list_supported_features(const tal_t *ctx, const struct feature_set *fset); +/* Give a name for this feature */ +const char *feature_name(const tal_t *ctx, size_t f); + /* Low-level helpers to deal with big-endian bitfields. */ bool feature_is_set(const u8 *features, size_t bit); void set_feature_bit(u8 **ptr, u32 bit); diff --git a/devtools/Makefile b/devtools/Makefile index 93ebbf2f1..b4c23f03a 100644 --- a/devtools/Makefile +++ b/devtools/Makefile @@ -1,4 +1,4 @@ -DEVTOOLS := devtools/bolt11-cli devtools/decodemsg devtools/onion devtools/dump-gossipstore devtools/gossipwith devtools/create-gossipstore devtools/mkcommit devtools/mkfunding devtools/mkclose devtools/mkgossip devtools/mkencoded devtools/mkquery devtools/lightning-checkmessage devtools/topology devtools/route devtools/blindedpath devtools/bolt12-cli devtools/encodeaddr +DEVTOOLS := devtools/bolt11-cli devtools/decodemsg devtools/onion devtools/dump-gossipstore devtools/gossipwith devtools/create-gossipstore devtools/mkcommit devtools/mkfunding devtools/mkclose devtools/mkgossip devtools/mkencoded devtools/mkquery devtools/lightning-checkmessage devtools/topology devtools/route devtools/blindedpath devtools/bolt12-cli devtools/encodeaddr devtools/features ifeq ($(HAVE_SQLITE3),1) DEVTOOLS += devtools/checkchannels endif @@ -47,6 +47,8 @@ DEVTOOLS_COMMON_OBJS := \ wire/channel_type_wiregen.o \ wire/tlvstream.o +devtools/features: $(CCAN_OBJS) common/features.o common/utils.o wire/fromwire.o wire/towire.o devtools/features.o + devtools/bolt11-cli: $(DEVTOOLS_COMMON_OBJS) $(JSMN_OBJS) $(CCAN_OBJS) $(BITCOIN_OBJS) wire/fromwire.o wire/towire.o devtools/bolt11-cli.o devtools/encodeaddr: common/utils.o common/bech32.o devtools/encodeaddr.o diff --git a/devtools/features.c b/devtools/features.c new file mode 100644 index 000000000..f6598906e --- /dev/null +++ b/devtools/features.c @@ -0,0 +1,28 @@ +/* Turns a hex string into feature. */ +#include "config.h" +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + const u8 *features; + + setup_locale(); + + if (argc != 2) + errx(1, "Usage: %s ", argv[0]); + + features = tal_hexdata(NULL, argv[1], strlen(argv[1])); + if (!features) + errx(1, "bad hexstring"); + + for (size_t i = 0; i < tal_bytelen(features) * 8; i++) { + if (feature_is_set(features, i)) + printf("%s (%s)\n", + feature_name(features, i), + i % 2 ? "optional" : "compulsory"); + } + tal_free(features); +}