LINUX.ORG.RU
ФорумAdmin

Добавление к классу HTB подкласса приводит к «RTNETLINK answers: Invalid argument»


0

0

Добавление к классу HTB подкласса приводит к "RTNETLINK answers: Invalid argument"

иерархия классов и очередей показана на рис. http://www.tmf.rtu.lv/htb/01-htb-subclass.txt.png

к HTB классу 30:1 при добавление подкласса HTB для ограничения скорости выдается ошибка "RTNETLINK answers: Invalid argument"

Однако проблему можно решить создав еще одну дисциплину очереди
На рис. http://www.tmf.rtu.lv/htb/02-htb-subclass.txt.png

ВОПРОС можно это сделать поэлегантнее, без создания двух очередей HTB?

-----------------------------------
скрипт:
-----------------------------------
DEV=eth0
TC=/sbin/tc

$TC qdisc del dev $DEV root
$TC qdisc del dev $DEV ingress

$TC qdisc add dev $DEV root handle 1: htb default 1
$TC class add dev $DEV parent 1: classid 1:1 htb rate 100kbit
$TC qdisc add dev $DEV parent 1:1 handle 2: prio bands 3 priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
$TC qdisc add dev $DEV parent 2:1 handle 10: tbf rate 30kbit buffer 1600 limit 3000
$TC qdisc add dev $DEV parent 2:2 handle 20: sfq
$TC qdisc add dev $DEV parent 2:3 handle 30: htb
$TC class add dev $DEV parent 30: classid 30:1 htb rate 50kbit

# (RTNETLINK answers: Invalid argument) $TC class add dev $DEV parent 30:1 classid 1:1 htb rate 20kbit prio 0

# Проблему можно решить создав очередь htb
$TC qdisc add dev $DEV parent 30:1 handle 300: htb
$TC class add dev $DEV parent 300: classid 300:1 htb rate 10kbit
$TC qdisc add dev $DEV parent 300:1 sfq
$TC class add dev $DEV parent 300: classid 300:2 htb rate 20kbit
$TC qdisc add dev $DEV parent 300:2 tbf rate 30kbit buffer 1600 limit 3000
$TC class add dev $DEV parent 300: classid 300:3 htb rate 10kbit
$TC qdisc add dev $DEV parent 300:3 sfq

Дополненение

Интересно что в калсическом примере по htb, к HTB классу 1:1 (ограничивающему общую скорость) можно добавлять потомков

Рис. http://www.tmf.rtu.lv/htb/04-htb-example.txt.png


#!/bin/bash

DEV=eth0
TC=/sbin/tc

$TC qdisc del dev $DEV root
$TC qdisc del dev $DEV ingress

$TC qdisc add dev eth0 root handle 1: htb default 30
$TC class add dev eth0 parent 1: classid 1:1 htb rate 6mbit burst 15k
$TC class add dev eth0 parent 1:1 classid 1:10 htb rate 5mbit burst 15k
$TC class add dev eth0 parent 1:1 classid 1:20 htb rate 3mbit ceil 6mbit burst 15k
$TC class add dev eth0 parent 1:1 classid 1:30 htb rate 1kbit ceil 6mbit burst 15k

$TC qdisc add dev eth0 parent 1:10 handle 10: sfq perturb 10
$TC qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
$TC qdisc add dev eth0 parent 1:30 handle 30: sfq perturb 10


andyS1976
() автор топика

># (RTNETLINK answers: Invalid argument) $TC class add dev $DEV parent 30:1 classid 1:1 htb rate 20kbit prio 0

А разве можно писать "parent 30:1 classid 1:1" в данном случае?

fagot ★★★★★
()
Ответ на: комментарий от fagot

Спасибо за замечение
Я не обратил внимание на следующие правило
http://www.mgul.ac.ru/~t-alex/Linux/Traffic-Control-HOWTO/ch1.htm

Старшие номера дескрипторов классов всегда дублируют старший номер дескриптора своего "родителя".

Все как надо теперь: http://www.tmf.rtu.lv/htb/02-01-htb-subclass.txt.png

Спасибо за совет!

andyS1976
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.