= Linux Traffic Control SkillSharing 2015 = <> == Scaletta == * concetti fondamentali qdisc, class, drop, filter * qdisc contengono classi che contengono qdisc - iniziare e finire sempre con una qdisc * si puo' controllare solo il traffico in uscita * token bucket == command history == {{{ tc qdisc del root dev eth0 ip link sh dev eth0 ip link set qlen 100 dev eth0 ip link sh dev eth0 ip link set qlen 5000 dev eth0 ip link set qlen 50000 dev eth0 ip link set qlen 500000 dev eth0 ip link set qlen 5000000 dev eth0 ip link set qlen 50000000 dev eth0 ip link set qlen 500000000 dev eth0 ip link sh dev eth0 ip link set qlen 5000000000 dev eth0 ip link set qlen 500000000 dev eth0 ip link set qlen 1000 ip link set qlen 1000 dev eth0 tc qdisc show dev wlan0 tc qdisc del dev wlan0 tc qdisc del root dev wlan0 tc qdisc del dev wlan0 tc qdisc show dev wlan0 tc qdisc add dev wlan0 root htb default 1 tc qdisc del root dev wlan0 tc qdisc add dev wlan0 root handle 1: htb default 1 tc class add dev wlan0 parent 1: handle 1:1 htb rate 1Mbit tc class add dev wlan0 parent 1: classid 1:1 htb rate 1Mbit tc class add dev wlan0 parent 1: classid 1:2 htb rate 2Mbit tc class add dev wlan0 parent 1: classid 1:3 htb rate 3Mbit tc qdisc add dev wlan0 parent 1:1 handle 10: pfifo tc qdisc add dev wlan0 parent 1:1 handle 20: pfifo tc qdisc add dev wlan0 parent 1:2 handle 20: pfifo tc qdisc add dev wlan0 parent 1:3 handle 30: pfifo iperf -c 10.172.5.26 -t 300 iperf -c 10.172.5.26 -t 300 -i 3 tc filter add dev wlan0 protocol ip prio 1 handle 0x10 fw flowid 1:2 iptables -t mangle -A POSTROUTING -d 10.172.5.26/32 -j MARK --set-mark 0x10 iperf -c 10.172.5.26 -u -b 3Mbit -t 300 -i 3 iptables -t mangle -L POSTROUTING -n -v tc -s class sh dev wlan0 tc filter sh dev wlan0 tc filter del dev wlan0 protocol ip pref 1 fw classid 1:2 tc filter add dev wlan0 protocol ip prio 1 handle 0x10 fw flowid 1:3 tc filter show dev wlan0 iperf -c 10.172.5.26 -u -b 8Mbit -t 300 -i 3 }}} == simple htb shaper == {{{ tc qdisc del dev eth0 root tc qdisc add dev eth0 root handle 1: htb default 1 tc class add dev eth0 parent 1: classid 1:1 htb rate 1Mbit ceil 1Mbit tc qdisc add dev eth0 parent 1:1 handle 2: pfifo limit 100 }}} == simple priority scheduler == (non abbiamo fatto in tempo a vederlo) {{{ tc qdisc del dev eth0 root tc qdisc add dev eth0 root handle 1: prio bands 3 tc qdisc add dev eth0 parent 1:1 handle 10: pfifo limit 100 tc qdisc add dev eth0 parent 1:2 handle 20: pfifo limit 100 tc qdisc add dev eth0 parent 1:3 handle 30: pfifo limit 100 tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip tos 8 0xff flowid 1:1 tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip tos 160 0xff flowid 1:2 tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip tos 48 0xff flowid 1:3 }}} == Links == * https://en.wikipedia.org/wiki/Bufferbloat * http://tldp.org/HOWTO/Traffic-Control-HOWTO/index.html * https://en.wikipedia.org/wiki/Token_bucket * http://wiki.ninux.org/Presentazioni?action=AttachFile&do=get&target=LinuxDayRoma2009_ninux.pdf * https://svn.ninux.org/ninuxdeveloping/browser/freenux/ninux-free2.sh