Jak napisałem - mój skrypt. No to teraz mi się oberwie, że jestem szmaciarz, pisać skryptów nie umiem, a w ogóle to poza instalowanie windy (i to co najwyżej 98) nie powinienem się zabierać. ;-) Jakby ktoś jednak miał inne uwagi niż powyższe to baaardzo proszę.
pozdroofka Krzysztof 'Xyo' Dendra
#!/bin/bash #set -x # wrr.sh # (c) Krzysztof 'Xyo' Dendra 23.06.2004 # poprawki, komentarze - k_dendra@o2.pl # ----still in developement---- # # #wrr homepage: # http://wipl-wrr.sourceforge.net/wrr.html # # # Uwaga o to musi zadbac konfiguracja iptables # NET_WAN_A -> IMQ_WAN_A -> LAN # NET_WAN_B -> IMQ_WAN_B -> LAN # # Uwaga2: program wymaga bc
BC="/usr/bin/bc"
#tu wpisz, ustawienia łacza A NET_WAN_A="80.xx.xx.16/29" IMQ_WAN_A="imq1" IF_WAN_A="eth1" BW_IN_A="950" #prędkosć łacza w kilobitach/sekundę (w dół) [max 95% !!] BW_OUT_A="200" #prędkosć łacza w kilobitach/sekundę (w górę) [max 95% !!]
#tu wpisz ustawienia łacza B NET_WAN_B="217.xx.xx.128/29" IMQ_WAN_B="imq0" IF_WAN_B="eth2" BW_IN_B="650" #prędkosć łacza w kilobitach/sekundę (w dół) [max 95% !!] BW_OUT_B="400" #prędkosć łacza w kilobitach/sekundę (w górę) [max 95% !!]
#ustawienia LANu NET_LAN="192.168.0.0/16" IFS_LAN="eth2 eth0 eth3" # ograniczenie do NMAC sieciówek w lanie - moze byc duzo :-) NMAC=400
#tego lepiej nie zmieniaj RISE_TIME_IN_A="600" FALL_TIME_IN_A="300" MIN_IN_A="0.3" RISE_TIME_OUT_A="600" FALL_TIME_OUT_A="300" MIN_OUT_A="0.3" #tego lepiej nie zmieniaj RISE_TIME_IN_B="600" FALL_TIME_IN_B="300" MIN_IN_B="0.3" RISE_TIME_OUT_B="600" FALL_TIME_OUT_B="300" MIN_OUT_B="0.3"
#################################################################### #PONIŻEJ TEJ LINII NIE ZMIENIAJ, CHYBA, ŻE DOBRZE WIESZ, CO ROBISZ # #################################################################### # min = min # incr = (1.0-min) / RISE # speed = 128 * Bandwidth[kbit] # decr1 = (1.0-min)*(1+FALL/RISE)/(FALL*SPEED) ########################################
INCR_IN_WAN_A=`echo "scale=15; (1.0 - ${MIN_IN_A}) / ${RISE_TIME_IN_A}" | ${BC}` DECR_IN_WAN_A=`echo "scale=15; (1.0 - ${MIN_IN_A}) * ( 1 + ${FALL_TIME_IN_A} / ${RISE_TIME_IN_A}) / (${FALL_TIME_IN_A} * ${BW_IN_A} * 128)" | $BC` INCR_OUT_WAN_A=`echo "scale=15; (1.0 - ${MIN_OUT_A}) / ${RISE_TIME_OUT_A}" | ${BC}` DECR_OUT_WAN_A=`echo "scale=15; (1.0 - ${MIN_OUT_A}) * ( 1 + ${FALL_TIME_OUT_A} / ${RISE_TIME_OUT_A}) / (${FALL_TIME_OUT_A} * ${BW_OUT_A} * 128)" | $BC` INCR_IN_WAN_B=`echo "scale=15; (1.0 - ${MIN_IN_B}) / ${RISE_TIME_IN_B}" | ${BC}` DECR_IN_WAN_B=`echo "scale=15; (1.0 - ${MIN_IN_B}) * ( 1 + ${FALL_TIME_IN_B} / ${RISE_TIME_IN_B}) / (${FALL_TIME_IN_B} * ${BW_IN_B} * 128)" | $BC` INCR_OUT_WAN_B=`echo "scale=15; (1.0 - ${MIN_OUT_B}) / ${RISE_TIME_OUT_B}" | ${BC}` DECR_OUT_WAN_B=`echo "scale=15; (1.0 - ${MIN_OUT_B}) * ( 1 + ${FALL_TIME_OUT_B} / ${RISE_TIME_OUT_B}) / (${FALL_TIME_OUT_B} * ${BW_OUT_B} * 128)" | $BC`
REMAP=0 BW_TOTAL=5000 BW_LAN=$[ ${BW_TOTAL} - ${BW_IN_A} - ${BW_IN_B}]
#Wyczysc wszystkie interfejsy echo "Czyszczenie ustawien interfejsow" tc qdisc del root dev ${IMQ_WAN_A} > /dev/null 2>&1 tc qdisc del root dev ${IF_WAN_A} > /dev/null 2>&1 tc qdisc del root dev ${IMQ_WAN_B} > /dev/null 2>&1 tc qdisc del root dev ${IF_WAN_B} > /dev/null 2>&1 for i in $IFS_LAN; do tc qdisc del root dev $i > /dev/null 2>&1 done
################################################################## #Ruch wychodzacy # echo "${IF_WAN_A} - ruch wychodzšcy przez ${NET_WAN_A}" tc qdisc add dev ${IF_WAN_A} root handle 3000:0 htb default 1001 #Glowna klasa tc class add dev ${IF_WAN_A} parent 3000:0 classid 3000:1001 htb rate ${BW_OUT_A}Kbit ceil ${BW_OUT_A}Kbit # WRR echo "tworzenie WRR..." # utworz $NMAC klas (max tyle sieciowek moze byc max w lanie) tc qdisc add dev ${IF_WAN_A} parent 3000:1001 handle 8001: wrr sour masq $NMAC $REMAP #pod wszystkie $NMAC WRR podepnij SFQ declare -i NUM=$NMAC; while [ $NUM -ge 1 ]; do HNUM=$(printf %X $NUM) tc qdisc add dev ${IF_WAN_A} parent 8001:$HNUM handle $HNUM: sfq NUM=$NUM-1 done echo "konfiguracja..." # Ustaw parametry penalty tc qdisc change handle 8001 dev ${IF_WAN_A} wrr qdisc wmode1=3 wmode2=3 declare -i NUM=$NMAC; while [ $NUM -ge 1 ]; do HNUM=$(printf %X $NUM) tc class change classid 8001:$HNUM dev ${IF_WAN_A} \ wrr min1=${MIN_OUT_A} max1=1 \ decr1=${DECR_OUT_WAN_A} incr1=${INCR_OUT_WAN_A} \ weight1=1.0 \ min2=${MIN_OUT_A} max2=1.0 \ decr2=${DECR_OUT_WAN_A} incr2=${INCR_OUT_WAN_A} \ weight2=0.1 NUM=$NUM-1 done
########################## echo "${IF_WAN_B} - ruch wychodzšcy przez ${NET_WAN_B}" tc qdisc add dev ${IF_WAN_B} root handle 3000:0 htb default 1001 #Glowna klasa tc class add dev ${IF_WAN_B} parent 3000:0 classid 3000:1001 htb rate ${BW_OUT_B}Kbit ceil ${BW_OUT_B}Kbit # WRR echo "tworzenie WRRa" # utworz $NMAC klas (max tyle sieciowek moze byc max w lanie) tc qdisc add dev ${IF_WAN_B} parent 3000:1001 handle 8001: wrr sour masq $NMAC $REMAP #pod wszystkie $NMAC WRR podepnij SFQ declare -i NUM=$NMAC; while [ $NUM -ge 1 ]; do HNUM=$(printf %X $NUM) tc qdisc add dev ${IF_WAN_B} parent 8001:$HNUM handle $HNUM: sfq NUM=$NUM-1 done echo "konfiguracja..." # Ustaw parametry penalty tc qdisc change handle 8001 dev ${IF_WAN_B} wrr qdisc wmode1=3 wmode2=3 declare -i NUM=$NMAC; while [ $NUM -ge 1 ]; do HNUM=$(printf %X $NUM) tc class change classid 8001:$HNUM dev ${IF_WAN_B} \ wrr min1=${MIN_OUT_B} max1=1 \ decr1=${DECR_OUT_WAN_B} incr1=${INCR_OUT_WAN_B} \ weight1=1.0 \ min2=${MIN_OUT_B} max2=1.0 \ decr2=${DECR_OUT_WAN_B} incr2=${INCR_OUT_WAN_B} \ weight2=0.1 NUM=$NUM-1 done #######
############################################################# #Ruch wchodzacy # echo "${IMQ_WAN_A} - ruch wchodzacy przez ${NET_WAN_A}" ############################################################## #kolejka glowna tc qdisc add dev ${IMQ_WAN_A} root handle 1000:0 htb default 1002 #Glowna klasa tc class add dev ${IMQ_WAN_A} parent 1000:0 classid 1000:1001 htb rate ${BW_TOTAL}kbit ceil ${BW_TOTAL}kbit prio 1 #Ruch wchodzacy tc class add dev ${IMQ_WAN_A} parent 1000:0 classid 1000:1002 htb rate ${BW_IN_A}kbit ceil ${BW_IN_A}kbit prio 2 #Ruch lokalny tc class add dev ${IMQ_WAN_A} parent 1000:1001 classid 1000:1003 htb rate ${BW_LAN}kbit ceil ${BW_LAN}kbit prio 6 #Ustawienia ruchu lokalnego: tc qdisc add dev ${IMQ_WAN_A} parent 1000:1003 handle 1010: sfq perturb 10 # dodaj sfq # Co jest ruchem lokalnym? Filtry: tc filter add dev ${IMQ_WAN_A} protocol ip preference 1 parent 1000:0 u32 match ip src \ ${NET_WAN_A} flowid 1000:1003 # tc filter add dev ${IMQ_WAN_A} protocol ip preference 2 parent 1000:0 u32 match ip src \ ${NET_LAN} flowid 1000:1003 # ruch po wewn. interfejsach echo "tworzenie WRRa" # utworz $NMAC klas (max tyle sieciowek moze byc max w lanie) tc qdisc add dev ${IMQ_WAN_A} parent 1000:1002 handle 8001: wrr dest ip $NMAC $REMAP #pod wszystkie $NMAC WRR podepnij SFQ declare -i NUM=$NMAC; while [ $NUM -ge 1 ]; do HNUM=$(printf %X $NUM) tc qdisc add dev ${IMQ_WAN_A} parent 8001:$HNUM handle $HNUM: sfq NUM=$NUM-1 done echo "konfiguracja..." # Ustaw parametry penalty tc qdisc change handle 8001 dev ${IMQ_WAN_A} wrr qdisc wmode1=3 wmode2=3 declare -i NUM=$NMAC; while [ $NUM -ge 1 ]; do HNUM=$(printf %X $NUM) tc class change classid 8001:$HNUM dev ${IMQ_WAN_A} \ wrr min1=${MIN_IN_A} max1=1 \ decr1=${DECR_IN_WAN_A} incr1=${INCR_IN_WAN_A} \ weight1=1.0 \ min2=${MIN_IN_A} max2=1.0 \ decr2=${DECR_IN_WAN_A} incr2=${INCR_IN_WAN_A} \ weight2=0.1 NUM=$NUM-1 done ######
echo "${IMQ_WAN_B} - ruch wchodzacy przez ${NET_WAN_B}" #kolejka glowna tc qdisc add dev ${IMQ_WAN_B} root handle 1000:0 htb default 1002 #Glowna klasa tc class add dev ${IMQ_WAN_B} parent 1000:0 classid 1000:1001 htb rate ${BW_TOTAL}kbit ceil ${BW_TOTAL}kbit prio 1 #Ruch wchodzacy tc class add dev ${IMQ_WAN_B} parent 1000:0 classid 1000:1002 htb rate ${BW_IN_B}kbit ceil ${BW_IN_B}kbit prio 2 #Ruch lokalny tc class add dev ${IMQ_WAN_B} parent 1000:1001 classid 1000:1003 htb rate ${BW_LAN}kbit ceil ${BW_LAN}kbit prio 6 #Ustawienia ruchu lokalnego: tc qdisc add dev ${IMQ_WAN_B} parent 1000:1003 handle 1010: sfq perturb 10 # dodaj sfq # Co jest ruchem lokalnym? Filtry: tc filter add dev ${IMQ_WAN_B} protocol ip preference 1 parent 1000:0 u32 match ip src \ ${NET_WAN_B} flowid 1000:1003 # tc filter add dev imq1 protocol ip preference 2 parent 1000:0 u32 match ip src \ ${NET_LAN} flowid 1000:1003 # ruch po wewn. interfejsach echo "tworzenie WRRa" # utworz $NMAC klas (max tyle sieciowek moze byc max w lanie) tc qdisc add dev ${IMQ_WAN_B} parent 1000:1002 handle 8001: wrr dest ip $NMAC $REMAP #pod wszystkie $NMAC WRR podepnij SFQ declare -i NUM=$NMAC; while [ $NUM -ge 1 ]; do HNUM=$(printf %X $NUM) tc qdisc add dev ${IMQ_WAN_B} parent 8001:$HNUM handle $HNUM: sfq NUM=$NUM-1 done echo "konfiguracja..." # Ustaw parametry penalty tc qdisc change handle 8001 dev ${IMQ_WAN_B} wrr qdisc wmode1=3 wmode2=3 declare -i NUM=$NMAC; while [ $NUM -ge 1 ]; do HNUM=$(printf %X $NUM) tc class change classid 8001:$HNUM dev ${IMQ_WAN_B} \ wrr min1=${MIN_IN_B} max1=1 \ decr1=${DECR_IN_WAN_B} incr1=${INCR_IN_WAN_B} \ weight1=1.0 \ min2=${MIN_IN_B} max2=1.0 \ decr2=${DECR_IN_WAN_B} incr2=${INCR_IN_WAN_B} \ weight2=0.1 NUM=$NUM-1 done
echo "FINITO"