Implementando simultaneamente o controle de tráfego HTB, NetEM e TBF

2

Estou trabalhando em um utilitário bash que usará vários aspectos do utilitário de linha de comando Linux tc para emular várias condições de rede. Eu construí várias hierarquias qdisc com sucesso, uma para controle de largura de banda HTB, atraso de NetEM e manipulação de pacotes e controle de taxa de TBF, bem como manipuladores combinados para HTB-NetEM e TBF-NetEM onde estou lutando em combinar os três em uma estrutura única, para casos em que preciso controlar todos esses fatores em uma única conexão. Isso é o que eu tenho até agora:

  sudo tc qdisc add dev $interface root handle 1:0 htb

  sudo tc class add dev $interface parent 1:0 classid 1:1 htb  #htb args

  sudo tc qdisc add dev $interface parent 1:1 handle 10:0 tbf  #tbf args

  sudo tc qdisc add dev $interface parent 10:1 handle 101:0 netem  #netem args

Devido a meus casos de escopo menores, sei que o problema não está na sintaxe de minhas entradas, mas provavelmente na estrutura de meus qdiscs e classes tc. Quando eu tento executar esses comandos junto com argumentos de taxa e largura de banda (10 e 15 Mbit / s respectivamente) em ambas portas ethernet da minha bridge, nenhuma mudança na largura de banda de um teste iperf é mostrada, em TCP ou UDP. Qualquer conselho seria apreciado.

Aqui estão minhas outras estruturas working , caso elas possam ajudar:

HTB e NetEM:

  sudo tc qdisc add dev $interface root handle 1: htb

  sudo tc class add dev $interface parent 1:0 classid 1:1 htb  #htb args

  sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem  #netem args

TBF e NetEM:

  sudo tc qdisc add dev $interface root handle 1:0 tbf  #tbf args

  sudo tc qdisc add dev $interface parent 1:1 handle 10:0 netem  #netem args
    
por Ian 22.03.2014 / 00:59

1 resposta

2

O que você quer não é HTB / TBF, mas HFSC.

link

Você pode anexar netem às classes de folhas.

Aqui está um exemplo de script para você começar ..

#!/bin/bash
tc qdisc add dev veth1 parent root handle 1: hfsc default 11
tc class add dev veth1 parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
tc class add dev veth1 parent 1:1 classid 1:11 hfsc sc rate 50mbit
tc class add dev veth1 parent 1:1 classid 1:12 hfsc sc umax 1500 dmax 50ms rate 10mbit ul rate 10mbit
tc qdisc add dev veth1 parent 1:12 handle 12 netem delay 150ms
tc filter add dev veth1 parent 1: protocol ip u32 match ip sport 22 0xffff flowid 1:12

Isto cria uma classe de 100mbit, 50mbit que está na classe padrão (mas pode aumentar até 100mbit) enquanto a outra classe permite um requisito em tempo real para que pacotes de 1500 bytes saiam da fila dentro de 50ms, a taxa máxima deste classe é 10mbit em todos os momentos.

Finalmente adicionamos um qdisc de folha a essa classe, o que na verdade atrasa os pacotes deixando a fila por 150ms.

O tráfego na classe em tempo real é selecionado com base em um atributo de porta 22 de origem (portanto, todo o tráfego ssh).

    
por 22.03.2014 / 01:50