Linux HTB número de níveis

2

Re-modificado Linux HTB adicionando uma única mensagem printk em função 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
    }
}

Na documentação oficial, diz:

Each class is assigned level. Leaf has ALWAYS level 0 and root classes have level TC_HTB_MAXDEPTH-1. Interior nodes has level one less than their parent.

Eu corri o seguinte exemplo:

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

A altura deve ser 2 ou 3, não mais que 3

No entanto, depois de executar isso, eu inspecionar a saída no dmesg eu recebo o seguinte:

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

Eu não tinha ideia de por que essa saída, então eu a executei novamente com o seguinte diagrama

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

E eu tive a mesma saída no dmesg ...

Certifiquei-me de ter compilado o kernel corretamente após adicionar o printk

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

reiniciou a máquina e o kernel foi atualizado porque eu tinha a saída do printk.

Minha pergunta é: por que a altura é 7 e não 2?

    
por Tony Tannous 27.07.2018 / 18:39

0 respostas