#include "ports.tc"
#define INTERFACE eth0 [2] Поддерживаются директивы CPP. Директива #define может использоваться для создания макросов или констант. За подробной информацией обращайтесь к руководству tcng, раздел переменных .
dev INTERFACE {
egress { [3] Ключ egress является синонимом dsmark . Приведенный пример использует class selection path . Для использования в конфигурации ключа egress необходима поддержка dsmark в ядре и tc .
/* при использовании алгоритма выбора класса, вначале указываются фильтры! DSmark */ [4] Алгоритм выбора класса (class selection path) — это один из подходов к ограничению трафика. При использовании алгоритма выбора класса, пакет маркируется (DiffServ mark) при поступлении в маршрутизатор. На основе этой маркировки маршрутизатор позднее может выполнять различные действия по ограничению, упорядочиванию и классифицированию трафика. За подробностями обращайтесь к разделу описания алгоритма выбора класса руководства по tcng .
class ( <$ssh> ) if tcp_sport == 22 && ip_tos_delay == 1 ;
class ( <$audio> ) if tcp_sport == 554 || tcp_dport == 7070 ;
class ( <$bulk> ) \
if tcp_sport == PORT_SSH || tcp_dport == PORT_HTTP ; [5] Этот пример показывает использование имен портов вместо их номеров. Это одно из удобств tcng , предоставляемых подключением ports.tc . Имена портов соответствуют названиям портов IANA. Узнать имена портов можно в списке зарегистрированных портов IANA или изучив файл ports.tc . Имена и номера портов одинаково допустимы.
class ( <$other> ) if 1 ; [6] Обратите внимание на эту специфическую конструкцию, которая классифицирует все ранее не классифицированные пакеты. Все пакеты, которые не были классифицированы вышеуказанными классификаторами, помещаются в класс "$other". Конструкция if 1 может применяться для классифицирования неклассифицированного трафика.
/* секция, в которой мы конфигурируем дисциплины обработки очередей и классы */
htb () { [7] Здесь создается корневая дисциплина обработки очереди устройства, в нашем случае eth0 . Проконсультируйтесь со справочными материалами tcng , дополнение по параметрам дисциплин обработки очереди . Любые параметры дисциплины очереди могут быть вставлены в круглые скобки, так же как и параметры класса далее в примере. Если параметры не указаны, скобки необязательны.
class ( rate 600kbps, ceil 600kbps ) { [8] Корневой класс в этом примере задает максимальную полосу пропускания для всего класса. Давайте предположим, что eth0 — это интерфейс, подключенный к локальной сети. Тогда скорость передачи данных в локальную сеть будет ограничена 600 килобитами. Параметры rate и ceil должны быть знакомы всем, кто пользовался HTB. Это специфические параметры HTB и соответствующим образом обрабатываются утилитой tcc . Обратитесь к таблице аббревиатур скоростей tcng .
$ssh = class ( rate 64kbps, ceil 128kbps ) { sfq; } ;
[9] Это присвоение класса переменной. Обычно выполняется как часть алгоритма выбора пути.
$audio = class ( rate 128kbps, ceil 128kbps ) { sfq; } ;
$bulk = class ( rate 256kbps, ceil 512kbps ) { sfq; } ;
$other = class ( rate 128kbps, ceil 384kbps ) { sfq; } ; [10] По совету Мартина Девера, приведенном на сайте HTB, каждому классу назначается дисциплина обработки очереди SFQ, которая позволяет эффективо разделять пропускную возможность класса, между сессиями. Обратите внимание на отсутствие параметров у этой дисциплины. Если для подклассов не указаны дисциплины обработки очереди, то они используют стандартную дисциплину pfifo_fast qdisc. Включение стохастической дисциплины (sfq) для подклассов позволяет избежать превалирования одного соединения над остальными внутри класса.
}
}
}
}
3.2. Использование двухскоростного трехцветного измерителя
Пример 3.
/etc/sysconfig/tcng/two-rate-three-color-meter.tcc
/*
* Простой пример с комментариями файла управления трафиком для tcng.
*
* Martin A. Brown < mabrown@securepipe.com>
*
* Пример: Использование измерителя.
*
*
*/
#define EXCEPTION 192.168.137.50
#define INTERFACE eth0
$meter = trTCM( cir 128kbps, cbs 10kB, pir 256kbps, pbs 10kB ); [11] В этой строке выполняется объявление измерителя (meter) для классификации трафика. Обратитесь к руководству по tcng, раздел измерителей за списком и примерами различных измерителей. Приведенный в этом примере измеритель является двухскоростным трехцветным измерителем, самым сложным измерителем, доступным в языке tcng . Этот измеритель возвращает цвет — зеленый, желтый и красный, в зависимости от скорости. Если измеренная скорость превышает гарантированную, измеритель возвращает желтый цвет, а если превышает пиковую скорость — возвращается красный цвет. С переменной $meter могут оперировать функции, работающие с типом измерителя. В нашем случае используются три функции, позволяющие проверить состояние $meter : trTCM_green , trTCM_yellow и trTCM_red . Для эффективности, обратите внимание на ускоренные аналоги .
Читать дальше