Теперь создадим классы, через которые пойдет интерактивный и объемный трафик:
># tc class add dev eth1 parent 1:1 classid 1:2 cbq bandwidth 10Mbit \
> rate 1Mbit allot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 \
> avpkt 1000 split 1:0 defmap c0
># tc class add dev eth1 parent 1:1 classid 1:3 cbq bandwidth 10Mbit \
> rate 8Mbit allot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 \
> avpkt 1000 split 1:0 defmap 3f
В данном случае "узлом разбиения" назначается дисциплина 1:0, это та точка, где будет делаться выбор. Число 0xC0 в двоичном представлении имеет вид 11000000, а 0x3F — 00111111, таким образом оба класса перекрывают весь диапазон возможных приоритетов. Первому классу будут соответствовать пакеты, приоритеты которых имеют 6 и/или 7 биты в установленном состоянии, что соответствует интерактивному и управляющему трафику. Ко второму классу будут отнесены все остальные пакеты.
Таблица выбора для узла 1:0 теперь будет иметь следующий вид:
приоритет | класс |
---|
0 | 1:3 |
1 | 1:3 |
2 | 1:3 |
3 | 1:3 |
4 | 1:3 |
5 | 1:3 |
6 | 1:2 |
7 | 1:2 |
Кроме того, можно изменять приоритеты отдельных видов трафика. Для этого используется команда вида: tc class change, например, чтобы повысить приоритет трафика best effort и классифицировать его, как принадлежащий классу 1:2, нужно дать следующую команду:
># tc class change dev eth1 classid 1:2 cbq defmap 01/01
В этом случае, таблица выбора будет иметь следующий вид:
приоритет | класс |
---|
0 | 1:2 |
1 | 1:3 |
2 | 1:3 |
3 | 1:3 |
4 | 1:3 |
5 | 1:3 |
6 | 1:2 |
7 | 1:2 |
FIXME: Корректность работы команды tc class change не проверена. Выводы были сделаны исключительно на основе изучения исходных текстов.