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

Ограничение скорости с помощью openflow

Я пытаюсь выполнить ограничение скорости с помощью очередей в Openflow. Использую 3 файла. Один для создания топологии (top.py), один для создания политик (pol.py) и один для создания очередей (queue.py).

Топология состоит из 3 узлов (h1, h2, h3) и 3 коммутаторов (s1, s2, s3), причем каждый коммутатор может связываться с каждым узлом. Предел скорости по умолчанию установлен на 1 ГБ / с, но я пытаюсь ограничить его до 1 МБ / с с помощью очередей.

Top.py содержит политику по умолчанию между узлами, установленную на 1 Гбит / с, которая отлично работает между h1 и h2.

S1Staticflow1 ={'switch':"00:00:00:00:00:00:00:01","name":"S1h1toh2","cookie":"0", "priority":"1","in_port":"1","eth_type":"0x800","ipv4_src":"10.0.0.1", "ipv4_dst":"10.0.0.2","active":"true","actions":"output=2"}
S1Staticflow2 ={'switch':"00:00:00:00:00:00:00:01","name":"S1h2toh1","cookie":"0", "priority":"1","in_port":"2","eth_type":"0x800","ipv4_src":"10.0.0.2", "ipv4_dst":"10.0.0.1","active":"true","actions":"output=1"}
S2Staticflow1 ={'switch':"00:00:00:00:00:00:00:02","name":"S2h2toh1","cookie":"0", "priority":"1","in_port":"1","eth_type":"0x800","ipv4_src":"10.0.0.2", "ipv4_dst":"10.0.0.1","active":"true","actions":"output=2"}
S2Staticflow2 ={'switch':"00:00:00:00:00:00:00:02","name":"S2h1toh2","cookie":"0", "priority":"1","in_port":"2","eth_type":"0x800","ipv4_src":"10.0.0.1","ipv4_dst":"10.0.0.2","active":"true","actions":"output=1"}

Однако, когда я пытаюсь использовать очередь, используя set_queue, похоже, что она не работает.

S1H2 = {'switch': "00:00:00:00:00:00:00:01", "name": "S1H2", "cookie": "0", "priority": "256", "in_port": "1", "eth_type": "0x800", "ipv4_src": "10.0.0.1", "ipv4_dst": "10.0.0.2", "active": "true", "actions": "output=2, set_queue=1"}
S1H1 = {'switch':"00:00:00:00:00:00:00:01","name":"S1H1","cookie":"0", "priority":"256","in_port":"2","eth_type":"0x800","ipv4_src":"10.0.0.2", "ipv4_dst":"10.0.0.1","active":"true","actions":"output=1, set_queue=1"}
S2H1 = {'switch':"00:00:00:00:00:00:00:02","name":"S2H1","cookie":"0", "priority":"256","in_port":"1","eth_type":"0x800","ipv4_src":"10.0.0.2", "ipv4_dst":"10.0.0.1","active":"true","actions":"output=2,set_queue=1"}
S2H2 = {'switch':"00:00:00:00:00:00:00:02","name":"S2H2","cookie":"0", "priority":"256","in_port":"2","eth_type":"0x800","ipv4_src":"10.0.0.1", "ipv4_dst":"10.0.0.2","active":"true","actions":"output=1,set_queue=1"}

Вот моя реализация очереди:

queuecmd = "sudo ovs-vsctl %s -- --id=@defaultqos create qos type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1,2=@q2 -- --id=@q0 create queue other-config:max-rate=1000000000  other-config:min-rate=1000000000 -- --id=@q1 create queue other-config:max-rate=1000000 other-config:min-rate=1000000 -- --id=@q2 create queue other-config:max-rate=512000 other-config:min-rate=512000"

Я тестирую с помощью iperf3, но скорости кажутся одинаковыми с очередями или без них. Как это исправить?