1
0
mirror of https://github.com/lightning/bolts.git synced 2024-11-19 10:00:04 +01:00
lightning-bolts/tools/extract-formats.py

208 lines
6.0 KiB
Python
Raw Normal View History

#! /usr/bin/python3
# Simple script to parse specs and produce CSV files.
# Released by Rusty Russell under CC0:
# https://creativecommons.org/publicdomain/zero/1.0/
# Outputs:
#
# Standard message types:
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
# msgtype,<msgname>,<value>
# msgdata,<msgname>,<fieldname>,<typename>,[<count>]
#
# TLV types:
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
# tlvtype,<tlvstreamname>,<tlvname>,<value>
# tlvdata,<tlvstreamname>,<tlvname>,<fieldname>,<typename>,[<count>]
#
# Subtypes:
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
# subtype,<msgname>
# subtypedata,<msgname>,<fieldname>,<typename>,[<count>]
from optparse import OptionParser
import sys
import re
import fileinput
# We allow either ordered or unordered lists.
typeline = re.compile(
'(1\.|\*) type: (?P<value>[-0-9A-Za-z_|]+) \(`(?P<name>[A-Za-z0-9_]+)`\)( \(`?(?P<option>[^)`]*)`\))?')
tlvline = re.compile(
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
'(1\.|\*) `tlv_stream`: `(?P<name>[A-Za-z0-9_]+)`')
subtypeline = re.compile(
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
'(1\.|\*) subtype: `(?P<name>[A-Za-z0-9_]+)`')
dataline = re.compile(
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
'\s+([0-9]+\.|\*) \[`(?P<typefield>[-._a-zA-Z0-9*+]+)`:`(?P<name>[_a-z0-9]+)`\]')
datastartline = re.compile(
'(2\.|\*) data:')
tlvtypesline = re.compile(
'(2\.|\*) types:')
# Generator to give us one line at a time.
def next_line(args, lines):
if lines is None:
lines = fileinput.input(args)
for i, line in enumerate(lines):
yield i, line.rstrip()
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
# Helper to print a line to output
def print_csv(output, fmt):
print(fmt, file=output)
# 1. type: 17 (`error`) (`optionXXX`)
# 2. data:
# * [`short_channel_id`:`channel_id`]
# * [`u16`:`num_inputs`]
# * [`num_inputs*sha256`:`input_info`]
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
# * [`u32`:`len`]
# * [`len*byte`:`data`]
#
# output:
# msgtype,error,17,optionXXX
# msgdata,error,channel_id,short_channel_id,
# msgdata,error,num_inputs,u16,
# msgdata,error,input_info,sha256,num_inputs
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
# msgdata,error,len,u32,
# msgdata,error,data,byte,len
#
# 1. type: PERM|NODE|3 (`required_node_feature_missing`)
#
# output:
# msgtype,required_node_feature_missing,PERM|NODE|3
#
# 1. type: 261 (`query_short_channel_ids`) (`gossip_queries`)
# 2. data:
# * [`chain_hash`:`chain_hash`]
# * [`u16`:`len`]
# * [`len*byte`:`encoded_short_ids`]
# * [`query_short_channel_ids_tlvs`:`tlvs`]
#
# output:
# msgtype,query_short_channel_ids,261,gossip_queries
# msgdata,query_short_channel_ids,chain_hash,chain_hash,
# msgdata,query_short_channel_ids,len,u16,
# msgdata,query_short_channel_ids,encoded_short_ids,byte,len
# msgdata,query_short_channel_ids,tlvs,query_short_channel_ids_tlvs,
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
def parse_type(genline, output, name, value, in_tlv=None):
_, line = next(genline)
if in_tlv:
type_prefix='tlvtype,{}'.format(in_tlv)
data_prefix='tlvdata,{}'.format(in_tlv)
else:
type_prefix='msgtype'
data_prefix='msgdata'
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
print_csv(output, '{},{},{}'.format(type_prefix, name, value))
# Expect a data: line before values, if any
if not datastartline.fullmatch(line.lstrip()):
return _, line
while True:
i, line = next(genline)
match = dataline.fullmatch(line)
if not match:
return _, line
if '*' in match.group('typefield'):
num,typename = match.group('typefield').split('*')
else:
num,typename = ("", match.group('typefield'))
print_csv(output,
"{},{},{},{},{}"
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
.format(data_prefix, name, match.group('name'), typename, num))
# 1. tlvs: `query_short_channel_ids_tlvs`
# 2. types:
# 1. type: 1 (`query_flags`)
# 2. data:
# * [`byte`:`encoding_type`]
# * [`...*byte`:`encoded_query_flags`]
#
# output:
# tlvtype,query_short_channel_ids_tlvs,query_flags,1
# tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte,
# tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,...
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
def parse_tlv(genline, output, name):
i, line = next(genline)
# Expect a types: line after tlvs.
if not tlvtypesline.fullmatch(line):
raise ValueError('{}: Expected "2. types:" line'.format(i))
_, line = next(genline)
while True:
# Inside tlv, types are indented.
match = typeline.fullmatch(line.lstrip())
if not match:
break
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
_, line = parse_type(genline, output, match.group('name'), match.group('value'), name)
# 1. subtype: `input_info`
# 2. data:
# * [`u64`:`satoshis`]
# * [`sha256`:`prevtx_txid`]
#
# output:
# subtype,input_info
# subtypedata,input_info,satoshis,u64,
# subtypedata,input_info,prevtx_txid,sha256,
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
def parse_subtype(genline, output, name):
i, line = next(genline)
# Expect a data: line after subtype.
if not datastartline.fullmatch(line):
raise ValueError('{}: Expected "2. data:" line'.format(i))
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
print_csv(output, 'subtype,{}'.format(name))
while True:
i, line = next(genline)
match = dataline.fullmatch(line)
if not match:
break
if '*' in match.group('typefield'):
num,typename = match.group('typefield').split('*')
else:
num,typename = ("", match.group('typefield'))
print_csv(output,
"{},{},{},{},{}"
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
.format('subtypedata', name, match.group('name'), typename, num))
def main(options, args=None, output=sys.stdout, lines=None):
genline = next_line(args, lines)
try:
while True:
_, line = next(genline)
match = typeline.fullmatch(line)
if match:
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
parse_type(genline, output, match.group('name'), match.group('value'))
continue
match = tlvline.fullmatch(line)
if match:
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
parse_tlv(genline, output, match.group('name'))
continue
match = subtypeline.fullmatch(line)
if match:
tools: remove option handling now last optional field was removed. 6fee63fc342736a2eb7f6e856ae0d85807cc50ec made `htlc_maximum_msat` compulsory, which was the last "optional" field. All future options will be TLVs, so we never need to parse the "] (optionxxx)" format for fields again. We allow options for messages, but only for documentation (we have some messages which are only for `gossip_queries`), so we don't put it in the output. Here's the before/after diff of the output for all the spec files: ```diff --- /tmp/before 2023-04-27 14:21:07.417170213 +0930 +++ /tmp/after 2023-04-27 14:19:39.184573086 +0930 @@ -273,7 +273,7 @@ msgdata,channel_update,fee_base_msat,u32, msgdata,channel_update,fee_proportional_millionths,u32, msgdata,channel_update,htlc_maximum_msat,u64, -msgtype,query_short_channel_ids,261,gossip_queries +msgtype,query_short_channel_ids,261 msgdata,query_short_channel_ids,chain_hash,chain_hash, msgdata,query_short_channel_ids,len,u16, msgdata,query_short_channel_ids,encoded_short_ids,byte,len @@ -281,17 +281,17 @@ tlvtype,query_short_channel_ids_tlvs,query_flags,1 tlvdata,query_short_channel_ids_tlvs,query_flags,encoding_type,byte, tlvdata,query_short_channel_ids_tlvs,query_flags,encoded_query_flags,byte,... -msgtype,reply_short_channel_ids_end,262,gossip_queries +msgtype,reply_short_channel_ids_end,262 msgdata,reply_short_channel_ids_end,chain_hash,chain_hash, msgdata,reply_short_channel_ids_end,full_information,byte, -msgtype,query_channel_range,263,gossip_queries +msgtype,query_channel_range,263 msgdata,query_channel_range,chain_hash,chain_hash, msgdata,query_channel_range,first_blocknum,u32, msgdata,query_channel_range,number_of_blocks,u32, msgdata,query_channel_range,tlvs,query_channel_range_tlvs, tlvtype,query_channel_range_tlvs,query_option,1 tlvdata,query_channel_range_tlvs,query_option,query_option_flags,bigsize, -msgtype,reply_channel_range,264,gossip_queries +msgtype,reply_channel_range,264 msgdata,reply_channel_range,chain_hash,chain_hash, msgdata,reply_channel_range,first_blocknum,u32, msgdata,reply_channel_range,number_of_blocks,u32, @@ -310,7 +310,7 @@ subtype,channel_update_checksums subtypedata,channel_update_checksums,checksum_node_id_1,u32, subtypedata,channel_update_checksums,checksum_node_id_2,u32, -msgtype,gossip_timestamp_filter,265,gossip_queries +msgtype,gossip_timestamp_filter,265 msgdata,gossip_timestamp_filter,chain_hash,chain_hash, msgdata,gossip_timestamp_filter,first_timestamp,u32, msgdata,gossip_timestamp_filter,timestamp_range,u32, ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
2023-04-27 06:24:42 +02:00
parse_subtype(genline, output, match.group('name'))
continue
except StopIteration:
pass
if __name__ == "__main__":
parser = OptionParser()
(options, args) = parser.parse_args()
main(options, args)