aboutsummaryrefslogtreecommitdiff
path: root/net/shadowsocks-libev/files/ss-rules/set.uc
diff options
context:
space:
mode:
Diffstat (limited to 'net/shadowsocks-libev/files/ss-rules/set.uc')
-rw-r--r--net/shadowsocks-libev/files/ss-rules/set.uc113
1 files changed, 113 insertions, 0 deletions
diff --git a/net/shadowsocks-libev/files/ss-rules/set.uc b/net/shadowsocks-libev/files/ss-rules/set.uc
new file mode 100644
index 0000000..5947f6c
--- /dev/null
+++ b/net/shadowsocks-libev/files/ss-rules/set.uc
@@ -0,0 +1,113 @@
+{%
+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 %}