Здравствуйте! Есть железка D-Link DSA-3110 сервисный шлюз доступа, в нутри у нее обычный линукс. В этом линуксе есть скрипт шейпера, но он на примитивный. Он просто режет скорость всем поровну.----------------------------------------------
#!/bin/sh
ATTR=/var/run/radattr.${PPP_IFACE}
TC=/sbin/tc
RATE_DFLT=256kbitget_ratelimit()
{
[ ! -r $ATTR ] && return 2
cat $ATTR |
while read attr value
do
[ "$attr" != "Port-Limit" ] && continue;
echo $value
return 0
done
return 1
}set_default_and_exit()
{
# $1 - exit value
${TC} qdisc add dev $PPP_IFACE root tbf rate $RATE_DFLT latency 50ms burst 15$
[ $1 -eq 0 ] && exit $? || exit $1
}
RATELIMIT=`get_ratelimit`[ -z "$RATELIMIT" ] &&
{
echo "Cannot get rate limit!! set to default..."
set_default_and_exit 1
}
-------------------------------------------Вышестоящий пров имеет несколько внутренних ресурсов с неограниченной скоростью, а интернет 256кбит анлим. Вот у меня появилась задача, как прописать в скрипте шейпера ип-адреса этих серверов, что бы скорость не ограничивалась?
подойдет любой иерархический класс, хотя можно и
непосредственно в фильтре скорость ограничивать.
в общем примерно так:# размер буфера в байтах
BURST=$(( $RATE * 5 ))
# если мне не изменяет память, то меньше трех полос не получается
# делать, но все равно будем использовать только одну полосу
tc qdisc add dev $PPP root handle 1:0 prio bands 3 priomap 0 0 0
tc qdisc add dev $PPP parent 1:1 handle 100 sfq perturb 5
# для списка серверов скорость не ограничиваем
tc filter add dev $PPP pref 0 u32 match ip src 1.1.1.1 flowid 1:1
tc filter add dev $PPP pref 0 u32 match ip src 2.2.2.2 flowid 1:1
tc filter add dev $PPP pref 0u32 match ip src 3.3.3.0/24 flowid 1:1
# для всего остального по ipv4 скорость режем
tc filter add dev $PPP pref 0 u32 match u8 0x40 0xf0 at 0 flowid 1:1 \
police rate ${RATE}bit burst ${BURST} drop
Если вас не затруднит напишите готовый вид скрипта, а то я в линуксе еще только начинаю разбираться. Заранее спасибо.
set_default_and_exit ()
{
BURST=$(( $RATE_DFLT * 5 ))
tc qdisc add dev $PPP root handle 1:0 prio bands 3 priomap 0 0 0
tc qdisc add dev $PPP parent 1:1 handle 100 sfq perturb 5
tc filter add dev $PPP pref 0 u32 match ip src 1.1.1.1 flowid 1:1
tc filter add dev $PPP pref 0 u32 match ip src 2.2.2.2 flowid 1:1
tc filter add dev $PPP pref 0 u32 match ip src 3.3.3.0/24 flowid 1:1
tc filter add dev $PPP pref 1 u32 match u8 0x40 0xf0 at 0 flowid 1:1 \
police rate ${RATE_DFLT}bit burst ${BURST} drop
[ $1 -eq 0 ] && exit $? || exit $1
}