URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 81158
[ Назад ]

Исходное сообщение
"Помогите подправить скрипт шейпера"

Отправлено oblin , 14-Июл-08 13:02 
Здравствуйте! Есть железка D-Link DSA-3110 сервисный шлюз доступа, в нутри у нее обычный линукс. В этом линуксе есть скрипт шейпера, но он на примитивный. Он просто режет скорость всем поровну.

----------------------------------------------
#!/bin/sh


ATTR=/var/run/radattr.${PPP_IFACE}
TC=/sbin/tc
RATE_DFLT=256kbit

get_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кбит анлим. Вот у меня появилась задача, как прописать в скрипте шейпера ип-адреса этих серверов, что бы скорость не ограничивалась?


Содержание

Сообщения в этом обсуждении
"Помогите подправить скрипт шейпера"
Отправлено Z0termaNN , 14-Июл-08 14:17 
подойдет любой иерархический класс, хотя можно и
непосредственно в фильтре скорость ограничивать.
в общем примерно так:

# размер буфера в байтах
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



"Помогите подправить скрипт шейпера"
Отправлено oblin , 15-Июл-08 06:18 
Если вас не затруднит напишите готовый вид скрипта, а то я в линуксе еще только начинаю разбираться. Заранее спасибо.

"Помогите подправить скрипт шейпера"
Отправлено Z0termaNN , 16-Июл-08 20:46 
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
}