{%
|
|
let fs = require("fs");
|
|
|
|
let o_dst_bypass4_ = "
|
|
0.0.0.0/8
|
|
10.0.0.0/8
|
|
100.64.0.0/10
|
|
127.0.0.0/8
|
|
169.254.0.0/16
|
|
172.16.0.0/12
|
|
192.0.0.0/24
|
|
192.0.2.0/24
|
|
192.31.196.0/24
|
|
192.52.193.0/24
|
|
192.88.99.0/24
|
|
192.168.0.0/16
|
|
192.175.48.0/24
|
|
198.18.0.0/15
|
|
198.51.100.0/24
|
|
203.0.113.0/24
|
|
224.0.0.0/4
|
|
240.0.0.0/4
|
|
";
|
|
let o_dst_bypass6_ = "
|
|
::1/128
|
|
::/128
|
|
::ffff:0:0/96
|
|
64:ff9b:1::/48
|
|
100::/64
|
|
fe80::/10
|
|
2001::/23
|
|
fc00::/7
|
|
";
|
|
let o_dst_bypass_ = o_dst_bypass4_ + " " + o_dst_bypass6_;
|
|
|
|
let set_suffix = {
|
|
"src_bypass": {
|
|
str: o_src_bypass,
|
|
},
|
|
"src_forward": {
|
|
str: o_src_forward,
|
|
},
|
|
"src_checkdst": {
|
|
str: o_src_checkdst,
|
|
},
|
|
"dst_bypass": {
|
|
str: o_dst_bypass,
|
|
file: o_dst_bypass_file,
|
|
},
|
|
"dst_bypass_": {
|
|
str: o_dst_bypass_,
|
|
},
|
|
"dst_forward": {
|
|
str: o_dst_forward,
|
|
file: o_dst_forward_file,
|
|
},
|
|
"dst_forward_rrst_": {},
|
|
};
|
|
|
|
function set_name(suf, af) {
|
|
if (af == 4) {
|
|
return "ss_rules_"+suf;
|
|
} else {
|
|
return "ss_rules6_"+suf;
|
|
}
|
|
}
|
|
|
|
function set_elements_parse(res, str, af) {
|
|
for (let addr in split(str, /[ \t\n]/)) {
|
|
addr = trim(addr);
|
|
if (!addr) continue;
|
|
if (af == 4 && index(addr, ":") != -1) continue;
|
|
if (af == 6 && index(addr, ":") == -1) continue;
|
|
push(res, addr);
|
|
}
|
|
}
|
|
|
|
function set_elements(suf, af) {
|
|
let obj = set_suffix[suf];
|
|
let res = [];
|
|
let addr;
|
|
|
|
let str = obj["str"];
|
|
if (str) {
|
|
set_elements_parse(res, str, af);
|
|
}
|
|
|
|
let file = obj["file"];
|
|
if (file) {
|
|
let fd = fs.open(file);
|
|
if (fd) {
|
|
str = fd.read("all");
|
|
set_elements_parse(res, str, af);
|
|
}
|
|
}
|
|
|
|
return res;
|
|
}
|
|
%}
|
|
|
|
{% for (let suf in set_suffix): for (let af in [4, 6]): %}
|
|
set {{ set_name(suf, af) }} {
|
|
type ipv{{af}}_addr;
|
|
flags interval;
|
|
{% let elems = set_elements(suf, af); if (length(elems)): %}
|
|
elements = {
|
|
{% for (let i = 0; i < length(elems); i++): %}
|
|
{{ elems[i] }}{% if (i < length(elems) - 1): %},{% endif %}{% print("\n") %}
|
|
{% endfor %}
|
|
}
|
|
{% endif %}
|
|
}
|
|
{% endfor; endfor %}
|