Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- cat tc-filter-hash-table.sh
- ./tc-filter-hash-table.sh | tee -a output.txt | sudo tc -force -batch - 2>> output.txt
- ---------------------------------------------------------------------------------------
- #!/bin/bash
- # tvorba prototypu pravidel - pri volani tc na vse uz to bylo v minutach
- #./tc-filter-hash-table.sh | tee -a output.txt | sudo tc -force -batch - 2>> output.txt
- # prikaz pro operaci s tc - musi se volat script jako tc, ale uz to je burt viz vyse
- #v_tc="/sbin/tc"
- v_tc="echo"
- v_upload="enp0s31f6" #onboard - pro odchozi data
- v_download='enx00e04c3004a4' #usb - pro prichozi data
- # ingress qdisky pro presmerovavani trafficu
- "$v_tc" qdisc show dev $v_upload
- "$v_tc" qdisc show dev $v_download
- "$v_tc" qdisc add dev "$v_upload" ingress
- "$v_tc" qdisc add dev "$v_download" ingress
- "$v_tc" qdisc add dev "$v_upload" root handle 1: hfsc default ffff
- "$v_tc" qdisc add dev "$v_download" root handle 1: hfsc default ffff
- # root filter - bez nej nelze nic
- "$v_tc" filter add dev "$v_upload" parent 1:0 protocol ip prio 3 u32
- "$v_tc" filter add dev "$v_download" parent 1:0 protocol ip prio 3 u32
- # vytvoreni hlavni hash tabulky pro 2.(Be) Byte IP adresy - proto handle b
- "$v_tc" filter add dev "$v_upload" parent 1:0 protocol ip prio 5 handle b: u32 divisor 256
- "$v_tc" filter add dev "$v_download" parent 1:0 protocol ip prio 5 handle b: u32 divisor 256
- # vychozi bod hash tabulky - muze mit jen jeden bucket 800::800 - vytvori se v nem filter pro presmerovani
- # na link 2, coz je vyse vytvorena hash tabulka pro B Byte
- "$v_tc" filter add dev "$v_upload" parent 1:0 protocol ip prio 3 handle ::1 u32\
- ht 800:: match ip src 0.0.0.0/0 hashkey mask 0x00ff0000 at 12 link b:
- "$v_tc" filter add dev "$v_download" parent 1:0 protocol ip prio 3 handle ::1 u32\
- ht 800:: match ip dst 0.0.0.0/0 hashkey mask 0x00ff0000 at 16 link b:
- # vytvoreni korenovych trid - root router
- "$v_tc" class add dev "$v_upload" parent 1: classid 1:1\
- hfsc ls m1 0 d 0 m2 13107200 ul m1 0 d 0 m2 13107200
- "$v_tc" class add dev "$v_download" parent 1: classid 1:1\
- hfsc ls m1 0 d 0 m2 13107200 ul m1 0 d 0 m2 13107200
- # catch all
- "$v_tc" class add dev "$v_upload" parent 1:1 classid 1:ffff\
- hfsc ls m1 0 d 0 m2 1310720 ul m1 0 d 0 m2 1310720
- "$v_tc" class add dev "$v_download" parent 1:1 classid 1:ffff\
- hfsc ls m1 0 d 0 m2 1310720 ul m1 0 d 0 m2 1310720
- # vytvoreni jednotlivych hash tabulek pro divisor na druhem byte a linku do prislusnych hash tabulek
- # 0x0 - 0xff
- for bByte in {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
- do
- # vytvoreni jednotlivych hash tabulek pro 3. (Ce) Byte IP adresy - handle c(0-255)
- # je to z toho duvodu, ze nelze adresovat nulovou hodnotu ::1 by asi nemuselo fungovat
- # v nem budou jednotlive buckety :bucket: rozdelujici adresy podle tretiho Byte
- # v bucketech budou jednotlive filtery hash:bucket:filter zaznamy pro jednotlive groupy
- # tady samozrejme muze dochazet k vice kontrolam, ale uz by jich nemelo byt tolik
- # asi tu taky bude nutne zachovat centralizovanou rezervaci IP handle, protoze nebude mozne
- # jednoznacne zarucit, ze sem neprileti napr group 10.168.10.0/27 a 192.168.10.0/27 - nebo to mozna
- # mozne bude - handle by mohlo byt rovno 1. (A) Byte
- # kdyz bude group mit sirsi masku nez /24 - tzn. < 24, tak se do kazdeho prislusneho bucketu
- # bude muset udelat filter s presmerovanim do dane group - taky se to nesmi zapomenout mazat /16 je vcelku
- # dostatecny limit
- # JEDNOTLIVA PRAVIDLA PAK S PRIORITOU 9 - PRIORITA 8 PRO NESEJPOVANE IP
- "$v_tc" filter add dev "$v_upload" parent 1:0 protocol ip prio 7 handle b"$bByte": u32 divisor 256
- "$v_tc" filter add dev "$v_download" parent 1:0 protocol ip prio 7 handle b"$bByte": u32 divisor 256
- # vytvoreni jednotlivych linku na zaklade divisoru
- # link na prislusne tabulky podle id druheho byte s prefixem b
- "$v_tc" filter add dev "$v_upload" parent 1:0 protocol ip prio 5 handle ::1 u32\
- ht b:"$bByte": match ip src 0.0.0.0/0 hashkey mask 0x0000ff00 at 12 link b"$bByte":
- "$v_tc" filter add dev "$v_download" parent 1:0 protocol ip prio 5 handle ::1 u32\
- ht b:"$bByte": match ip src 0.0.0.0/0 hashkey mask 0x0000ff00 at 16 link b"$bByte":
- done
- # VYTVORENI JEDNOTLIVYCH GROUP, AT JE KAM PRESMEROVAVAT Z HASH TABULKY
- # povesene jsou zatim vsechny na koren, coz pro ladeni vubec nicemu nevadi
- # 0x2000 - 0x4fff
- for groupId in {2,3,4}{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}
- do
- # VYTVORENI TRID PRO GROUPY
- "$v_tc" class add dev "$v_upload" parent 1:1 classid 1:"$groupId"\
- hfsc ls m1 0 d 0 m2 2621440 ul m1 0 d 0 m2 2621440
- "$v_tc" class add dev "$v_download" parent 1:1 classid 1:"$groupId"\
- hfsc ls m1 0 d 0 m2 2621440 ul m1 0 d 0 m2 2621440
- # VYTVORENI QDISCU PRO GROUPY
- "$v_tc" qdisc add dev "$v_upload" parent 1:"$groupId" handle "$groupId": hfsc default ffff
- "$v_tc" qdisc add dev "$v_download" parent 1:"$groupId" handle "$groupId": hfsc default ffff
- # ROOT FILTER V QDISCU TRIDY - BEZ NEJ NELZE NIC - POZOR NA ZMENU PARENTU
- "$v_tc" filter add dev "$v_upload" parent "$groupId":0 protocol ip prio 9 u32
- "$v_tc" filter add dev "$v_download" parent "$groupId":0 protocol ip prio 9 u32
- # VYTVORENI SEKUNDARNICH HASH TABULEK PRO 4.(DE) BYTE IP ADRESY - PROTO HANDLE D
- "$v_tc" filter add dev "$v_upload" parent "$groupId":0 protocol ip prio 11 handle d: u32 divisor 256
- "$v_tc" filter add dev "$v_download" parent "$groupId":0 protocol ip prio 11 handle d: u32 divisor 256
- # vychozi bod hash tabulky - muze mit jen jeden bucket 800::800 - vytvori se v nem filter pro presmerovani
- # na link 2, coz je vyse vytvorena hash tabulka pro B Byte
- "$v_tc" filter add dev "$v_upload" parent "$groupId":0 protocol ip prio 9 handle ::1 u32\
- ht 800:: match ip src 0.0.0.0/0 hashkey mask 0x000000ff at 12 link d:
- "$v_tc" filter add dev "$v_download" parent "$groupId":0 protocol ip prio 9 handle ::1 u32\
- ht 800:: match ip dst 0.0.0.0/0 hashkey mask 0x000000ff at 16 link d:
- # catch all 2048kbps
- "$v_tc" class add dev "$v_upload" parent "$groupId":0 classid "$groupId":ffff\
- hfsc ls m1 0 d 0 m2 262144 ul m1 0 d 0 m2 262144
- "$v_tc" class add dev "$v_download" parent "$groupId":0 classid "$groupId":ffff\
- hfsc ls m1 0 d 0 m2 262144 ul m1 0 d 0 m2 262144
- done
- # DEFINICE SUBNETU PRO PRESMEROVANI DO GROUPY
- #"$v_tc" filter add dev "$v_upload" parent 1:0 protocol ip prio 7 handle ::1 u32\
- #ht ba8:0a: match ip src 192.168.10.0/24 hashkey mask 0x000000ff at 12 flowid 2000:
- "$v_tc" filter add dev "$v_upload" parent 1:0 protocol ip prio 7 handle ::1 u32\
- ht ba8:0a: match ip src 192.168.10.0/24 at 12 flowid 1:2000
- #"$v_tc" filter add dev "$v_download" parent 1:0 protocol ip prio 7 handle ::1 u32\
- #ht ba8:0a: match ip dst 192.168.10.0/24 hashkey mask 0x000000ff at 16 flowid 2000:
- "$v_tc" filter add dev "$v_download" parent 1:0 protocol ip prio 7 handle ::1 u32\
- ht ba8:0a: match ip dst 192.168.10.0/24 at 16 flowid 1:2000
- # potud to jede catch allem groupy - ale rychleji...
Advertisement
Add Comment
Please, Sign In to add comment