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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
#!/bin/bash
it () {
iptables $@
ip6tables $@
}
setup_htb() {
FROM=$1
TO=$2
RATEMBIT=$3
FIFOLIMIT=$(( RATEMBIT * 1048576 / 8 )) # about one second
echo $FROM..$TO ${RATEMBIT}Mbit fifolimit=$FIFOLIMIT >&2
for i in $( seq $FROM $TO ); do
# slots need to be in hex, crazy enough
slot=$( printf %x $(( i + 1 )) )
# no burst! perfectly even sending at the given rate
echo class add dev eth0 parent 8000: classid 8000:$slot htb rate ${RATEMBIT}Mbit burst 0 mtu 576
# every class needs a child qdisc, plug in a plain fifo
# 8000kbit = 512 000
echo qdisc add dev eth0 parent 8000:$slot handle $slot: bfifo limit $FIFOLIMIT
#echo qdisc add dev eth0 parent 8000:$slot handle $slot: fq_codel limit 1000
done
}
ethtool -K eth0 gso off tso off
# iptables stuff
it -t mangle -F OUTPUT
it -t mangle -A OUTPUT -p tcp -m multiport ! --sport 3013,3014,3015,3016,3017,3018,5013,5015,5016,5018 -j MARK --set-mark 65000
it -t mangle -A OUTPUT ! -p tcp -j MARK --set-mark 65000
(
# reset tc
echo qdisc del dev eth0 root
# @Sesse Rockj: https://www.google.com/search?q=6000+kbit%2Fsec+*+0.5+seconds+in+byte
# @Sesse ViD: også trenger du flere sett med køer, for 2mbit-strømmer burde shapes annerledes enn 5mbit-strømmer :-P
# root qdisc should be htb
echo qdisc add dev eth0 root handle 8000: htb r2q 100
# all non-vlc traffic (fwmark 5) goes into the default class
echo class add dev eth0 parent 8000: classid 8000:1 htb rate 10Gbit burst 8192 mtu 1514
echo filter add dev eth0 parent 8000: handle 65000 pref 10 fw classid 8000:1
# setup_htb 1 799 6 # Main stream hq 3mbps
# setup_htb 800 1000 15 # Fuglecam raw 7-8mbps
# # setup_htb 10000 11999 15 # South raw ??
# # setup_htb 12000 13999 1 # South transcoded, 500 kbits
# # setup_htb 14000 15999 25 # NOC Fisheye 15mbps ish
# # setup_htb 20000 21999 2 # Flashstrøm 1mbps
# setup_htb 1 4999 10 # Main stream hq 6mbps
# setup_htb 5000 7999 5 # Main stream sd 2mbit
# setup_htb 8000 9999 15 # Fuglecam raw 7-8mbps
# setup_htb 10000 11999 15 # South raw ??
# setup_htb 12000 13999 1 # South transcoded, 500 kbits
# setup_htb 14000 15999 25 # NOC Fisheye 15mbps ish
# setup_htb 16000 18999 2 # Flashstrøm fugleberget 1mbps
# setup_htb 19000 21999 2 # Flashstrøm event 1mbps
# setup_htb 22000 24999 2 # Flashstrøm south 1mbps
# setup_htb 25000 27999 2 # Flashstrøm noc 1mbps
setup_htb 1 4999 10 # Main stream hq 6mbps
setup_htb 5000 5999 5 # Main stream sd 2mbit
setup_htb 8000 9999 15 # Fuglecam raw 7-8mbps
setup_htb 10000 11999 15 # South raw ??
setup_htb 12000 13999 1 # South transcoded, 500 kbits
setup_htb 14000 15999 25 # NOC Fisheye 15mbps ish
setup_htb 16000 18999 2 # Flashstrøm fugleberget 1mbps
setup_htb 19000 21999 2 # Flashstrøm event 1mbps
setup_htb 22000 24999 2 # Flashstrøm south 1mbps
setup_htb 25000 25999 2 # Flashstrøm noc 1mbps
# decide between the classes by mark
echo filter add dev eth0 parent 8000: handle 2 pref 20 flow map key mark baseclass 8000:2
) | tc -b
|