Повторно модифицированный 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?