2
0

set.uc 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. {%
  2. let fs = require("fs");
  3. let o_dst_bypass4_ = "
  4. 0.0.0.0/8
  5. 10.0.0.0/8
  6. 100.64.0.0/10
  7. 127.0.0.0/8
  8. 169.254.0.0/16
  9. 172.16.0.0/12
  10. 192.0.0.0/24
  11. 192.0.2.0/24
  12. 192.31.196.0/24
  13. 192.52.193.0/24
  14. 192.88.99.0/24
  15. 192.168.0.0/16
  16. 192.175.48.0/24
  17. 198.18.0.0/15
  18. 198.51.100.0/24
  19. 203.0.113.0/24
  20. 224.0.0.0/4
  21. 240.0.0.0/4
  22. ";
  23. let o_dst_bypass6_ = "
  24. ::1/128
  25. ::/128
  26. ::ffff:0:0/96
  27. 64:ff9b:1::/48
  28. 100::/64
  29. fe80::/10
  30. 2001::/23
  31. fc00::/7
  32. ";
  33. let o_dst_bypass_ = o_dst_bypass4_ + " " + o_dst_bypass6_;
  34. let set_suffix = {
  35. "src_bypass": {
  36. str: o_src_bypass,
  37. },
  38. "src_forward": {
  39. str: o_src_forward,
  40. },
  41. "src_checkdst": {
  42. str: o_src_checkdst,
  43. },
  44. "dst_bypass": {
  45. str: o_dst_bypass + " " + o_remote_servers,
  46. file: o_dst_bypass_file,
  47. },
  48. "dst_bypass_": {
  49. str: o_dst_bypass_,
  50. },
  51. "dst_forward": {
  52. str: o_dst_forward,
  53. file: o_dst_forward_file,
  54. },
  55. "dst_forward_rrst_": {},
  56. };
  57. function set_name(suf, af) {
  58. if (af == 4) {
  59. return "ss_rules_"+suf;
  60. } else {
  61. return "ss_rules6_"+suf;
  62. }
  63. }
  64. function set_elements_parse(res, str, af) {
  65. for (let addr in split(str, /[ \t\n]/)) {
  66. addr = trim(addr);
  67. if (!addr) continue;
  68. if (af == 4 && index(addr, ":") != -1) continue;
  69. if (af == 6 && index(addr, ":") == -1) continue;
  70. push(res, addr);
  71. }
  72. }
  73. function set_elements(suf, af) {
  74. let obj = set_suffix[suf];
  75. let res = [];
  76. let addr;
  77. let str = obj["str"];
  78. if (str) {
  79. set_elements_parse(res, str, af);
  80. }
  81. let file = obj["file"];
  82. if (file) {
  83. let fd = fs.open(file);
  84. if (fd) {
  85. str = fd.read("all");
  86. set_elements_parse(res, str, af);
  87. }
  88. }
  89. return res;
  90. }
  91. %}
  92. {% for (let suf in set_suffix): for (let af in [4, 6]): %}
  93. set {{ set_name(suf, af) }} {
  94. type ipv{{af}}_addr;
  95. flags interval;
  96. auto-merge;
  97. {% let elems = set_elements(suf, af); if (length(elems)): %}
  98. elements = {
  99. {% for (let i = 0; i < length(elems); i++): %}
  100. {{ elems[i] }}{% if (i < length(elems) - 1): %},{% endif %}{% print("\n") %}
  101. {% endfor %}
  102. }
  103. {% endif %}
  104. }
  105. {% endfor; endfor %}