gen_config.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import os
  2. abspath = os.path.abspath(__file__)
  3. dname = os.path.dirname(abspath)
  4. os.chdir(dname)
  5. features = []
  6. def feature(name, default, min, max, pow2=None):
  7. vals = set()
  8. val = min
  9. while val <= max:
  10. vals.add(val)
  11. if pow2 == True or (isinstance(pow2, int) and val >= pow2):
  12. val *= 2
  13. else:
  14. val += 1
  15. vals.add(default)
  16. features.append(
  17. {
  18. "name": name,
  19. "default": default,
  20. "vals": sorted(list(vals)),
  21. }
  22. )
  23. feature("iface_max_addr_count", default=2, min=1, max=8)
  24. feature("iface_max_multicast_group_count", default=4, min=1, max=1024, pow2=8)
  25. feature("iface_max_sixlowpan_address_context_count", default=4, min=1, max=1024, pow2=8)
  26. feature("iface_neighbor_cache_count", default=4, min=1, max=1024, pow2=8)
  27. feature("iface_max_route_count", default=2, min=1, max=1024, pow2=8)
  28. feature("fragmentation_buffer_size", default=1500, min=256, max=65536, pow2=True)
  29. feature("assembler_max_segment_count", default=4, min=1, max=32, pow2=4)
  30. feature("reassembly_buffer_size", default=1500, min=256, max=65536, pow2=True)
  31. feature("reassembly_buffer_count", default=1, min=1, max=32, pow2=4)
  32. feature("ipv6_hbh_max_options", default=1, min=1, max=32, pow2=4)
  33. feature("dns_max_result_count", default=1, min=1, max=32, pow2=4)
  34. feature("dns_max_server_count", default=1, min=1, max=32, pow2=4)
  35. feature("dns_max_name_size", default=255, min=64, max=255, pow2=True)
  36. feature("rpl_relations_buffer_count", default=16, min=1, max=128, pow2=True)
  37. feature("rpl_parents_buffer_count", default=8, min=2, max=32, pow2=True)
  38. # ========= Update Cargo.toml
  39. things = ""
  40. for f in features:
  41. name = f["name"].replace("_", "-")
  42. for val in f["vals"]:
  43. things += f"{name}-{val} = []"
  44. if val == f["default"]:
  45. things += " # Default"
  46. things += "\n"
  47. things += "\n"
  48. SEPARATOR_START = "# BEGIN AUTOGENERATED CONFIG FEATURES\n"
  49. SEPARATOR_END = "# END AUTOGENERATED CONFIG FEATURES\n"
  50. HELP = "# Generated by gen_config.py. DO NOT EDIT.\n"
  51. with open("Cargo.toml", "r") as f:
  52. data = f.read()
  53. before, data = data.split(SEPARATOR_START, maxsplit=1)
  54. _, after = data.split(SEPARATOR_END, maxsplit=1)
  55. data = before + SEPARATOR_START + HELP + things + SEPARATOR_END + after
  56. with open("Cargo.toml", "w") as f:
  57. f.write(data)
  58. # ========= Update build.rs
  59. things = ""
  60. for f in features:
  61. name = f["name"].upper()
  62. things += f' ("{name}", {f["default"]}),\n'
  63. SEPARATOR_START = "// BEGIN AUTOGENERATED CONFIG FEATURES\n"
  64. SEPARATOR_END = "// END AUTOGENERATED CONFIG FEATURES\n"
  65. HELP = " // Generated by gen_config.py. DO NOT EDIT.\n"
  66. with open("build.rs", "r") as f:
  67. data = f.read()
  68. before, data = data.split(SEPARATOR_START, maxsplit=1)
  69. _, after = data.split(SEPARATOR_END, maxsplit=1)
  70. data = before + SEPARATOR_START + HELP + things + " " + SEPARATOR_END + after
  71. with open("build.rs", "w") as f:
  72. f.write(data)