mirror of
https://github.com/smoltcp-rs/smoltcp.git
synced 2025-10-02 15:15:05 +00:00

The Ipv6HopByHopRepr was previously the same as an Ipv6ExtHeader. However, the RFC says that hop-by-hop options might change, which is not possible with the current implementation. I added a representatation for the Hop-by-Hop header, which has an heapless Vec of parsed options. This way, we can modify the options when needed. The function of the Ipv6ExtHeader struct is now purely for parsing the ext header type and the length. It also returns a pointer to the data it holds, which must be parsed by the correct extension header representations.
87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
import os
|
|
|
|
abspath = os.path.abspath(__file__)
|
|
dname = os.path.dirname(abspath)
|
|
os.chdir(dname)
|
|
|
|
features = []
|
|
|
|
|
|
def feature(name, default, min, max, pow2=None):
|
|
vals = set()
|
|
val = min
|
|
while val <= max:
|
|
vals.add(val)
|
|
if pow2 == True or (isinstance(pow2, int) and val >= pow2):
|
|
val *= 2
|
|
else:
|
|
val += 1
|
|
vals.add(default)
|
|
|
|
features.append(
|
|
{
|
|
"name": name,
|
|
"default": default,
|
|
"vals": sorted(list(vals)),
|
|
}
|
|
)
|
|
|
|
|
|
feature("iface_max_addr_count", default=2, min=1, max=8)
|
|
feature("iface_max_multicast_group_count", default=4, min=1, max=1024, pow2=8)
|
|
feature("iface_max_sixlowpan_address_context_count", default=4, min=1, max=1024, pow2=8)
|
|
feature("iface_neighbor_cache_count", default=4, min=1, max=1024, pow2=8)
|
|
feature("iface_max_route_count", default=2, min=1, max=1024, pow2=8)
|
|
feature("fragmentation_buffer_size", default=1500, min=256, max=65536, pow2=True)
|
|
feature("assembler_max_segment_count", default=4, min=1, max=32, pow2=4)
|
|
feature("reassembly_buffer_size", default=1500, min=256, max=65536, pow2=True)
|
|
feature("reassembly_buffer_count", default=1, min=1, max=32, pow2=4)
|
|
feature("ipv6_hbh_max_options", default=1, min=1, max=32, pow2=4)
|
|
feature("dns_max_result_count", default=1, min=1, max=32, pow2=4)
|
|
feature("dns_max_server_count", default=1, min=1, max=32, pow2=4)
|
|
feature("dns_max_name_size", default=255, min=64, max=255, pow2=True)
|
|
feature("rpl_relations_buffer_count", default=16, min=1, max=128, pow2=True)
|
|
feature("rpl_parents_buffer_count", default=8, min=2, max=32, pow2=True)
|
|
|
|
# ========= Update Cargo.toml
|
|
|
|
things = ""
|
|
for f in features:
|
|
name = f["name"].replace("_", "-")
|
|
for val in f["vals"]:
|
|
things += f"{name}-{val} = []"
|
|
if val == f["default"]:
|
|
things += " # Default"
|
|
things += "\n"
|
|
things += "\n"
|
|
|
|
SEPARATOR_START = "# BEGIN AUTOGENERATED CONFIG FEATURES\n"
|
|
SEPARATOR_END = "# END AUTOGENERATED CONFIG FEATURES\n"
|
|
HELP = "# Generated by gen_config.py. DO NOT EDIT.\n"
|
|
with open("Cargo.toml", "r") as f:
|
|
data = f.read()
|
|
before, data = data.split(SEPARATOR_START, maxsplit=1)
|
|
_, after = data.split(SEPARATOR_END, maxsplit=1)
|
|
data = before + SEPARATOR_START + HELP + things + SEPARATOR_END + after
|
|
with open("Cargo.toml", "w") as f:
|
|
f.write(data)
|
|
|
|
|
|
# ========= Update build.rs
|
|
|
|
things = ""
|
|
for f in features:
|
|
name = f["name"].upper()
|
|
things += f' ("{name}", {f["default"]}),\n'
|
|
|
|
SEPARATOR_START = "// BEGIN AUTOGENERATED CONFIG FEATURES\n"
|
|
SEPARATOR_END = "// END AUTOGENERATED CONFIG FEATURES\n"
|
|
HELP = " // Generated by gen_config.py. DO NOT EDIT.\n"
|
|
with open("build.rs", "r") as f:
|
|
data = f.read()
|
|
before, data = data.split(SEPARATOR_START, maxsplit=1)
|
|
_, after = data.split(SEPARATOR_END, maxsplit=1)
|
|
data = before + SEPARATOR_START + HELP + things + " " + SEPARATOR_END + after
|
|
with open("build.rs", "w") as f:
|
|
f.write(data)
|