tc를 사용하여 몇 개의 qdisc를 만들 수 있나요?

tc를 사용하여 몇 개의 qdisc를 만들 수 있나요?

여러 가상 머신 간의 트래픽을 시뮬레이션하려고 합니다. 각 연결에는 대기 시간이라는 서로 다른 매개변수가 있어야 합니다. 그래서 각 qdisc에 지연을 쉽게 추가할 수 있기 때문에 서로 다른 링크에 대해 서로 다른 qdisc 필터를 만들어 보았습니다. 오직 tc를 사용하여 16개 이상의 qdisc를 추가할 수 없다는 것을 깨달았습니다.
16개 이상의 qdisc를 추가할 수 있는 방법이 있습니까? 다른 핸들, 핸들 2를 만들 수 있나요?

또한 내 명령은 내가 추가한 10번째 qdisc(10(192.168.0.105 ~ 192.168.0.102)을 처리하기 위한 연결)에서 작동하지 않습니다. 이 연결은 30밀리초가 조금 넘는 대기 시간을 측정한 것으로 볼 때 핸들 20의 qdisc 규칙을 사용하는 것으로 보입니다.

bash에서 실행되는 명령은 다음과 같습니다.

/sbin/tc  qdisc add dev eth1 root handle 1: prio bands 11  
/sbin/tc  qdisc add dev eth1 parent 1:1 handle 10: netem  delay 200ms
/sbin/tc  qdisc add dev eth1 parent 1:2 handle 20: netem  delay 30ms
/sbin/tc  qdisc add dev eth1 parent 1:3 handle 30: netem  delay 300ms
/sbin/tc  qdisc add dev eth1 parent 1:4 handle 40: netem  delay 70ms
/sbin/tc  qdisc add dev eth1 parent 1:5 handle 50: netem  delay 80ms
/sbin/tc  qdisc add dev eth1 parent 1:6 handle 60: netem  delay 90ms
/sbin/tc  qdisc add dev eth1 parent 1:7 handle 70: netem  delay 110ms
/sbin/tc  qdisc add dev eth1 parent 1:8 handle 80: netem  delay 400ms
/sbin/tc  qdisc add dev eth1 parent 1:9 handle 90: netem  delay 110ms
/sbin/tc  qdisc add dev eth1 parent 1:a handle 100: netem  delay 250ms

/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio 1 u32  match ip dst 192.168.0.101/32 match ip src 192.168.0.102/32 flowid 10:1
/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio 2 u32  match ip dst 192.168.0.101/32 match ip src 192.168.0.103/32 flowid 20:2
/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio 3 u32  match ip dst 192.168.0.101/32 match ip src 192.168.0.104/32 flowid 30:3
/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio 4 u32  match ip dst 192.168.0.101/32 match ip src 192.168.0.105/32 flowid 40:4
/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio 5 u32  match ip dst 192.168.0.101/32 match ip src 192.168.0.106/32 flowid 50:5
/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio 6 u32  match ip dst 192.168.0.101/32 match ip src 192.168.0.108/32 flowid 60:6
/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio 7 u32  match ip dst 192.168.0.101/32 match ip src 192.168.0.109/32 flowid 70:7
/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio 8 u32  match ip dst 192.168.0.102/32 match ip src 192.168.0.103/32 flowid 80:8
/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio 9 u32  match ip dst 192.168.0.102/32 match ip src 192.168.0.104/32 flowid 90:9
/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio a u32  match ip dst 192.168.0.102/32 match ip src 192.168.0.105/32 flowid 100:a
/sbin/tc  qdisc add dev eth1 parent 1:b handle 110:  pfifo
/sbin/tc  filter add dev eth1 protocol ip parent 1:0 prio b u32 match ip src 0.0.0.0/0 match ip dst 0.0.0.0/0 flowid 110:b  

우분투 16.04.6 LTS를 사용하고 있습니다.

답변1

늦었다는 걸 알지만 같은 문제가 있어서 htb 및 tc 클래스를 사용하여 해결했습니다.

이 시도:

tc qdisc add dev eth0 root handle 1: htb

tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 flowid 1:1 match ip dst 192.168.0.101/32 match ip src 192.168.0.102/32
tc qdisc add dev eth0 parent 1:1 handle 10: netem delay 200ms

tc class add dev eth0 parent 1: classid 1:2 htb rate 100mbit
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 flowid 1:2 match ip dst 192.168.0.101/32 match ip src 192.168.0.103/32
tc qdisc add dev eth0 parent 1:2 handle 20: netem delay 30ms

등...

나는 이것을 통해 여러분이 9,999개의 다른 규칙을 만들 수 있다고 믿습니다. 비록 나 자신이 그렇게 많이 시도해 본 적은 없지만 말입니다.

이게 도움이 되길 바란다!

관련 정보