-
Notifications
You must be signed in to change notification settings - Fork 1
/
queue-tree-generator
35 lines (32 loc) · 2.99 KB
/
queue-tree-generator
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#run this script periodicaly using scheduler
:if ([:len [queue tree find name="DL-root"]] = 0) do={queue tree add name="DL-root" parent=global-out limit-at=0 priority=8 max-limit=19M burst-limit=0 burst-threshold=0 burst-time=0s;}
:if ([:len [queue tree find name="UL-root"]] = 0) do={queue tree add name="UL-root" parent=global-out limit-at=0 priority=8 max-limit=19M burst-limit=0 burst-threshold=0 burst-time=0s;}
:if ([:len [queue tree find name="DLx-per-ip"]] = 0) do={queue tree add parent=DL-root max-limit=19M name="DLx-per-ip" priority=8 queue=default;}
:if ([:len [queue tree find name="ULx-per-ip"]] = 0) do={queue tree add parent=UL-root max-limit=19M name="ULx-per-ip" priority=8 queue=default;}
#github
:local githubip;
:set githubip "207.97.192.0/18";
:if ([:len [ip fir mangle find dst-address=$githubip]] = 0) do={
ip fir mangle add chain=prerouting dst-address=207.97.192.0/18 action=mark-packet new-packet-mark="to-github" passthrough=no;
ip fir mangle add chain=prerouting src-address=207.97.192.0/18 action=mark-packet new-packet-mark="from-github" passthrough=no;
}
:if ([:len [queue tree find name="DL-from-github"]] = 0) do={queue tree add parent=DL-root limit-at=15M max-limit=19M name="DL-from-github" packet-mark="from-github" priority=3 queue=wireless-default;}
:if ([:len [queue tree find name="UL-to-github"]] = 0) do={queue tree add parent=UL-root limit-at=15M max-limit=19M name="UL-to-github" packet-mark="to-github" priority=3 queue=wireless-default;}
#ssh
:if ([:len [ip fir mangle find protocol=tcp src-port=22]] = 0) do={
ip fir mangle add chain=prerouting protocol=tcp src-port=22 action=mark-packet new-packet-mark=ssh-in passthrough=no;
ip fir mangle add chain=prerouting protocol=tcp dst-port=22 action=mark-packet new-packet-mark=ssh-out passthrough=no;
}
:if ([:len [queue tree find name="DL-ssh-in"]] = 0) do={queue tree add parent=DL-root limit-at=15M max-limit=19M name="DL-ssh-in" packet-mark="ssh-in" priority=2 queue=wireless-default;}
:if ([:len [queue tree find name="UL-ssh-out"]] = 0) do={queue tree add parent=UL-root limit-at=15M max-limit=19M name="UL-ssh-out" packet-mark="ssh-out" priority=2 queue=wireless-default;}
#get wireless clients IPs, look if there are coresponding rules, if not - create
:foreach i in=[/int wir reg find] do={
:local ip [/int wir reg get $i last-ip];:if ([:len $ip] > 0) do={
:if ([:len [ip fir mangle find dst-address=$ip]] = 0) do={
ip fir mangle add chain=prerouting dst-address=$ip action=mark-packet new-packet-mark="DL-$ip" passthrough=no; queue tree add parent=DLx-per-ip limit-at=5M max-limit=7M name="DLQ-$ip" packet-mark="DL-$ip" priority=8 queue=default;
}
:if ([:len [ip fir mangle find src-address=$ip]] = 0) do={
ip fir mangle add chain=prerouting src-address=$ip action=mark-packet new-packet-mark="UL-$ip" passthrough=no; queue tree add parent=ULx-per-ip limit-at=5M max-limit=7M name="ULQ-$ip" packet-mark="UL-$ip" priority=8 queue=default
}
}
}