Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Якорь
wifi_shaping_inet
wifi_shaping_inet

Шейпинг осуществляется с помощью iproute2. Его реализация происходит через внешний скрипты и настраиваемые RADIUS-атрибуты, получаемые в Accept-пакете от Access-сервера. Вы можете реализовать свой вариант или изменить наш под ваши нужды. Общий принцип такой :

...

Мы вам предлагаем свой вариант реализации этих скриптов. Для корректной работы этого варианта в системе должен быть установлен perl. Для его конфигурации надо добавить в файл conf.sh следующие строчки:

Блок кода

languageruby
linenumbersfalse
 

USE_MANAD=1 MANAD0
#MANAD_INTERFACE_IN=eth0 MANAD_
#MANAD_INTERFACE_OUT=eth1
#MANAD_PORT=4567

Здесь USE_MANAD=1 обозначает, что будет использоваться шейпинг, MANAD_INTERFACE_IN - это интерфейс, на котором будет контролироваться входящий трафик клиента и MANAD_,  MANAD_INTERFACE_OUT -  это интерфейс, на котором будет контролироваться исходящий трафик клиента, MANAD_PORT - порт, на котором будет слушать perl-скрипт wifi_manad.pl, управляющий шейпингом. Этот скрипт слушает на определённому порту команды на удаление и добавление нового клиента . При добавлении клиента например с ip 192.168.184.33, скоростью входящего трафика (downstream ) - 256 128 кбит/сек, скоростью исходящего трафика (upstream) - 128 256 кбит/сек, он добавляет для него следующие правила(eth0 - интерфейс для входящего трафика, eth1 для исходящего) :

Блок кода
languagejava
linenumbersfalse
/sbin/tc class add dev eth0 parent 1:0 classid 1:3 htb rate 

...

128kbit burst 4k prio 1

...

/sbin/tc qdisc add dev eth0 parent 1:3 handle 3: sfq perturb 10 quantum 1500

...

/sbin/tc class add dev 

...

eth1 parent 1:0 classid 1:

...

3 htb rate 

...

256kbit burst 4k prio 1

...

/sbin/tc qdisc add dev 

...

eth1 parent 1:

...

3 handle 

...

3: sfq perturb 10 quantum 1500

...

/sbin/tc filter add dev eth0 parent 1:0 protocol ip prio 3 u32 match ip dst 192.168.184.33  flowid 1:3

...

/sbin/tc filter add dev 

...

eth1 parent 1:0 protocol ip prio 

...

3 u32 match ip src 192.168.184.33 flowid 1:

...

3

А при удалении клиента 192.168.184.33 скрипт выполняет следующие команды:

 

Блок кода
languagejava
linenumbersfalse
/sbin/tc filter del dev eth0 parent 1:0 protocol ip prio 3
/sbin/tc filter del dev 

...

eth1 parent 1:0 protocol ip prio 

...

3

...

/sbin/tc class del dev eth0 parent 1:0 classid 1:3 htb rate 

...

128kbit burst 4k prio 1
/sbin/tc class del dev 

...

eth1 parent 1:0 classid 1:

...

3 htb rate 

...

256kbit burst 4k prio 1

Для правильной работы данного скрипта нужно настроить RADIUS-атрибуты, которые мы хотим получить из Accept-пакета от Access-сервера . В данном случае нас интересует два атрибута: ограничение входящей скорости (downstream) и значение исходящей скорости (upstream). Для этих атрибутов в файл в inet_wifi_agent нужно добавить следующие настройки:

 

Блок кода
languagejava
linenumbersfalse
wifi.agent.radius.atrubute.1.vendor.code=1111
wifi.agent.radius.atrubute.1.attr.code=1
wifi.agent.radius.atrubute.1.type=integer
wifi.agent.radius.atrubute.2.vendor.code=1111
wifi.agent.radius.atrubute.2.attr.code=2
wifi.agent.radius.atrubute.2.type=integer

 

Формат добавления атрибутов следующий:

agent.radius.atrubute.X. - общий вид

X - это код атрибута. Нумерация должна идти по порядку - 1, 2 и т.д . vendor.code - код производителя, attr.code - код атрибута, type - тип атрибута. RADIUS-атрибуты настраиваются в файле dictionary.xml Access-сервера и WiFi-портала (там тоже есть такой файл), и для данного примера можно добавить, например, такие атрибуты:

 

Блок кода
languageruby
linenumbersfalse
<vendor code="1111" name="linuxWiFi">
  <attribute add="no" name="WiFi-Downstream-Speed-Limit" type="integer" code="1"/>
  <attribute add="no" name="WiFi-Upstream-Speed-Limit" type="integer" code="2"/>
</vendor>

 

Для задания атрибутов возможны 2 варианта

1)Привязка атрибутов к realm'у. Например для realm'а default в конфигурации устройства можно указать:

 

Блок кода
languageruby
linenumbersfalse
radius.realm.default.attributes=WiFi-Downstream-Speed-Limit=256;WiFi-Upstream-Speed-Limit=128

 

2) Привязка атрибутов к опциям модуля Inet в конфигурации устройства:

...