Skip to content

Commit

Permalink
devtools/features: tool to convert feature bitmap to names.
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
rustyrussell authored and cdecker committed Sep 23, 2021
1 parent be8e45b commit 7ef2f4d
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 2 deletions.
2 changes: 1 addition & 1 deletion common/features.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
3 changes: 3 additions & 0 deletions common/features.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
4 changes: 3 additions & 1 deletion devtools/Makefile
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
Expand Down
28 changes: 28 additions & 0 deletions devtools/features.c
Original file line number Diff line number Diff line change
@@ -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);
}

0 comments on commit 7ef2f4d

Please sign in to comment.