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 <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2021-09-23 11:59:48 +09:30
committed by Christian Decker
parent be8e45b16d
commit 7ef2f4d7fb
4 changed files with 35 additions and 2 deletions

View File

@@ -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 */

View File

@@ -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);

View File

@@ -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

28
devtools/features.c Normal file
View File

@@ -0,0 +1,28 @@
/* Turns a hex string into feature. */
#include "config.h"
#include <ccan/err/err.h>
#include <common/features.h>
#include <common/utils.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
const u8 *features;
setup_locale();
if (argc != 2)
errx(1, "Usage: %s <hexstring>", 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);
}