QoS w rc-scriptach

Arkadiusz Miskiewicz misiek w pld.ORG.PL
Śro, 21 Sie 2002, 23:26:40 CEST


Blues <blues w ds6.pg.gda.pl> writes:

> Konfiguracja ich by była w postaci kolejkowanie,przepustowosc,priorytet:
> QOS=sfq,115000,1
> 
> albo wręcz:
> QoS=115000
Ok, plan wygląda tak - ustawiane parametry w np. ifcfg-eth0:

QDISC=[sfq|teql0|prio|...]
QDISC_CLASS=[htb|cbq|none]
BANDWIDTH_IN=[w kilobitach]
BANDWIDTH_OUT=[w kilobitach]

A skrypt robił by to: jeśli podano limit na out to sprawdzamy czy
podano której klasowej kolejki używać (cbq czy htb), gdy jakaś podano
to tej używamy, gdy nie podano żadnej to jedziemy via tbf. W przypadku
gdy nie podano limitu na out to po prostu dodajemy dane QDISC jako root.
Limit na incoming traffic robiony jest poprzez ingress oraz police rate
w filtrze (działa tylko na 2.4 afaik, na 2.2 tym samym nie ma możliwości
limitowania incoming trafficu poza imq ale to akurat odpada).

Ów skrypt byłby odpalany w ifup-post.

if [ -n "${BANDWIDTH_OUT}" ]; then
    if [ "${QDISC_CLASS}" = "htb" -o "${QDISC_CLASS}" = "cbq" ]; then
	case "${QDISC_CLASS}" in
	    htb)
		tc qdisc add dev ${DEVICE} root handle 1: htb default 10
		tc class add dev ${DEVICE} parent 1: classid 1:10 htb rate \
                        ${BANDWIDTH_OUT}kbit ceil ${BANDWIDTH_OUT}kbit
		[ -n "${QDISC}" ] && tc qdisc add dev ${DEVICE} parent 1:10 ${QDISC}
		;;
	    cbq)
		tc qdisc add dev ${DEVICE} root handle 1: cbq bandwidth \
                        ${BANDWIDTH_OUT} cell 8 avpkt 1000 mpu 64
		tc class add dev ${DEVICE} parent 1 classid 1:10 cbq \
                        bandwidth ${BANDWIDTH_OUT} rate ${BANDWIDTH_OUT} \
                        maxburst 5 avpkt 1000 allot 1514 bounded
		[ -n "${QDISC}" ] && tc qdisc add dev ${DEVICE} parent 1:10 ${QDISC}
		;;
	esac
    else if [ -z "${QDISC}" -o "${QDISC}" = "tbf" ]; then
	# net schedulers that are able to limit traffic
	tc qdisc add dev ${DEVICE} root tbf rate ${BANDWIDTH_OUT}kbit \
                latency 50ms burst 1540
    fi
else
    if [ -n "${QDISC}" ]; then
        tc qdisc add dev ${DEVICE} root ${QDISC}
    fi
fi

if [ -n "${BANDWIDTH_IN}" ]; then
    tc qdisc add dev ${DEVICE} handle ffff: ingress
    tc filter add dev ${DEVICE} parent ffff: protocol ip prio 50 u32 match \
                ip src 0.0.0.0/0 police rate ${BANDWIDTH_IN}kbit \
                burst 10k drop flowid :3
fi

Pytania itp
- jeśli ktoś widzi gdzieś błąd lub możliwość ulepszenia to niech da znać
- jeśli ktoś zna inne sposoby limitowania trafficu poza
  cbq/htb i tbf to poproszę o info
- jeśli ktoś zna sposób limitowania incoming traffic
  na jajkach 2.2 to również poproszę o info (imq odpada)

> pozdr.  Paweł Gołaszewski        

-- 
Arkadiusz Miśkiewicz   IPv6 ready PLD Linux at http://www.pld.org.pl
misiek(at)pld.org.pl   AM2-6BONE, 1024/3DB19BBD, arekm(at)ircnet, PWr



Więcej informacji o liście dyskusyjnej pld-devel-pl