Назад | Перейти на главную страницу

Linux HTB количество уровней

Повторно модифицированный Linux HTB добавив одно сообщение printk в htb_dequeue функция.

static struct sk_buff *htb_dequeue(struct Qdisc *sch)
{
    ... original code
    ... original code
    for (level = 0; level < TC_HTB_MAXDEPTH; level++) {
        printk("Current level in loop is: %d\n", level);
        ... original code
    }
}

В официальной документации сказано:

Каждому классу присваивается уровень. Leaf ВСЕГДА имеет уровень 0, а корневые классы имеют уровень TC_HTB_MAXDEPTH-1. Внутренние узлы имеют уровень на один меньше, чем их родительский.

Я провел следующий пример:

tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps
tc class add dev eth0 parent 1:1 classid 1:10 htb rate 40kbps ceil 100kbps

             root
               |
               |
             class rate 100kbps ceil 100kbps
               |
             Leaf  rate 40kbps ceil 100kbps

Высота должна быть 2 или 3, не более 3

Однако после запуска я проверяю вывод в dmesg и получаю следующее:

Current level in loop is: 0
Current level in loop is: 1
Current level in loop is: 2
Current level in loop is: 3
Current level in loop is: 4
Current level in loop is: 5
Current level in loop is: 6
Current level in loop is: 7

Я понятия не имел, почему этот результат, поэтому я снова запустил его со следующей диаграммой

             root
               |
               |
             class rate 100kbps ceil 100kbps
               |
             class rate 70kbps ceil 100kbps
               |
             Leaf rate 40kbps ceil 100kbps 

И у меня такой же вывод был в dmesg ...

Я убедился, что правильно скомпилировал ядро ​​после добавления printk

make
make modules_install
make install
update-initramfs -c -k 4.17.0+
update-grub

перезапустил машину, и ядро ​​было обновлено, так как я получил вывод printk.

У меня вопрос: почему рост 7, а не 2?