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)