Содержание

Описание

QoS (Quality of Service) – это удобный и гибкий механизм для управления потоками данных, проходящими через устройство. Можно создать до 200 логических каналов QoS, характеризующихся различными свойствами (такими как уровень приоритета и скорость передачи данных), а затем назначать этим каналам потоки данных в соответствии со специальными правилами. Пакеты, проходя по разным каналам, изменяют свои свойства и свойства соответствующих им потоков данных.

Синтаксис:

option [no]rtp [no]dot1p [no]dscp [no]tos [no]tcpack [no]icmp
       [no]tunnel [no]pppoe [no]mpls [no]selfqos [no]auto [no]ipfw

classN {max=N} | {clear}

chN [max=N[%]|0] [classN] [ceil=N[%]|0] [ceilprio=N|0] [latency=N|0]
    [[add]pri=[N] | setpri=[N]] [[no]strict]] [pps=N|0] [to=ADDR]
    [vlan=[N|-1]] [dot1p=[N|-1]] [dscp=[N|-1]] [info="STRING"]
    clear

stat [full] [clear]
del  RULE_NUMBER
dump RULE_NUMBER
mov  RULE_A RULE_B
rearrange [STEP]
add[out] [NUM] [IFNAME] chN rules...

rules: [{setpri|addpri}=[N]] [pass]
   [vlan={N|any|$ACL}] [dot1p=N] [swg=N] [ether={X|any}] [dscp=N|tos=N] [prf]
   -f "pcap filter expression"
   |
   PROTO from [not] ADDR [PORTs] to [not] ADDR [PORTs]

   PROTO: [all] | tcp | udp | icmp | arp | proto NUMBER
   ADDR: IP | $LOCAL | $ROUTE | $ACL | mac x:x:x:x:x:x }
   PORTS: NUM[:NUM] [NUM] ...

Ключевые слова и значения параметров пишутся слитно, без пробелов до и после "=".

Параметры

ПараметрыОписание

option [no]rtp [no]dot1p [no]dscp [no]tos [no]tcpack [no]icmp [no]tunnel [no]pppoe [no]mpls [no]selfqos [no]auto [no]ipfw


С помощью данного параметра осуществляется управление автоматическим назначением приоритетов потокам данных в устройстве. На устройстве применяется политика взвешенной приоритизации "Weighted Fair Queuing" (используются весовые коэффициенты для каждой очереди интерфейса, что позволяет последовательно обрабатывать пакеты из различных очередей в определенном соотношении, зависящем от весовых коэффициентов). Например, 4 пакета из очереди с приоритетом 1, затем 1 пакет из очереди с приоритетом 2 и т.д.

  • "rtp" – включение/отключение автоматического назначения приоритетов пакетам реального времени.
  • "dot1p" – включение/отключение автоматического назначения приоритетов пакетам с меткой приоритета стандарта IEEE 802.1p.
  • "tos" – включение/отключение автоматического назначения приоритетов пакетам с меткой TOS. 
  • "dscp" – включение/отключение автоматического назначения приоритетов пакетам с меткой DiffServ.
  • "tcpack" – включение/отключение автоматического назначения приоритетов пакетам TCP ACK.
  • "icmp" – включение/отключение автоматического назначения приоритетов пакетам ICMP.
  • "tunnel" – включение/отключение автоматической приоритизации для туннелированного трафика. Разрешает приоритизацию внутри туннелей.
  • "pppoe" – включение/отключение автоматического назначения приоритетов пакетам внутри туннелей PPPoE.
  • "mpls" – включение/отключение автоматического назначения приоритетов пакетам с меткой MPLS.
  • "[no]selfqos" включение/отключение применения приоритетов к трафику предназначенному самому устройству.
  • "[no]auto" включение/отключение всего автоматического назначения приоритетов.
  • "[no]ipfw" включение/отключение обработки трафика IP Firewall и автоматического назначения приоритетов.

Схема соответствия приоритетов MINT и стандартов IEEE 802.1p/TOS/DSCP приведена ниже:

Например, на сетевом узле настроена автоматическая приоритизация пакетов с меткой приоритета стандарта IEEE 802.1p. На узел приходит пакет с меткой приоритета IEEE 802.1p "5", узел в этом случае назначит ему приоритет "VOICE".

classN {max=N} | {clear}

Создание класса обслуживания и определение его полосы пропускания. Используется для распределения пропускной способности между различными каналами.

  • "max=N" – значение полосы пропускания в Кбит/с.
  • "clear" – удаление класса обслуживания.

chN [max=N[%]|0] [ceil=N[%]|0] [ceilprio=N|0] [latency=N|0]
[[add]pri=[N] | setpri=[N]] [[no]strict]] [pps=N|0] [to=ADDR]
[vlan=[N|-1]] [dot1p=[N|-1]] [dscp=[N|-1]] [classN] [info="STRING"]
clear


Команда описывает один канал. На основе каналов "qm" осуществляется сквозная приоритизация в сети MINT:

  • "chN" номер канала (1...200).
  • "max=N[%]|0" максимальная скорость потока для данного канала в Кбит/с (от 10 до 100000) или в процентах от полосы пропускания класса, к которому привязан данный канал. При установке значения 0 (ноль) отменяет ограничение по скорости.
  • "ceil=N[%]|0" максимальная негарантированная скорость канала, привязанного к классу. Если пропускная способность класса, к которому привязан канал, используется не полностью, то скорость канала может увеличиться вплоть до заданного значения N. Значение данного параметра указывается в Кбит/с или в процентах от полосы пропускания класса. Для отключения параметра нужно установить значение 0.
  • "ceilprio=N|0" устанавливает приоритет перераспределения неиспользованной пропускной способности между каналами. Диапазон значений приоритета 1..10. Значение 0 (ноль) - отключает данный параметр.
  • "latency=N|0 максимальное время нахождения пакета в канале. Если время ожидания пакета в очереди канала превысит данное время, то пакет будет отброшен. Измеряется в миллисекундах. Для отключения параметра нужно поставить значение 0.При необходимости, на выходе из сети MINT можно назначить требуемые параметры.
  • "[add]pri=[N]" повышение приоритета пакета до указанного значения только в том случае, если новый приоритет выше, чем был установлен ранее.
  • "setpri=[N]" явно устанавливает новый приоритет независимо от того, какой приоритет он имел до этого.

Для всех функций автоматической приоритизации должен использоваться аргумент "addpri". Таким образом приоритеты будут устанавливаться в следующем порядке:

  1. приоритет dot1p ("addpri");
  2. приоритет, указанный в правиле "qm" ("addpri" или "setpri");
  3. приоритет "dscp"/"tos" и т.д., если он выше текущего ("addpri");
  4. значение, указанное в канале ("addpri" или "setpri")

После этого будет применен тот же порядок для исходящих пакетов, если существуют соответствующие правила.

  • "[no]strict" – включение/выключение политики строгой приоритизации трафика "Strict Priority" (пакеты из очереди с более низким приоритетом не обрабатываются до тех пор, пока не будут обработаны все пакеты из очереди с более высоким приоритетом). В противном случае (по умолчанию) применяется политика взвешенной приоритизации "Weighted Fair Queuing" (используются весовые коэффициенты для каждой очереди интерфейса, что позволяет последовательно обрабатывать пакеты из различных очередей в определенном соотношении, зависящем от весовых коэффициентов). Например, 4 пакета из очереди с приоритетом 1, затем 1 из очереди с приоритетом 2 и т.д.

  • "pps=N|0" – максимальное количество пакетов в секунду для данного потока. Для отключения нужно установить значение 0.
  • "to=ADDR" – перенаправление всего потока на другой адрес, вне зависимости от сложившихся условий маршрутизации. Адрес "ADDR" должен быть достижим непосредственно через один из интерфейсов устройства (без дополнительной маршрутизации). Данный аргумент можно применять, например, в случае использования устройства в качестве блока доступа к сети, когда два независимых клиента хотят пользоваться услугами разных провайдеров через один блок.
  • "vlan=[N|-1]" – VLAN ID (допустимые значения 0-4095). Значение "-1" удаляет аргумент.
  • "dot1p=N" – приоритизация для пакетов с меткой приоритета IEEE 802.1p (допустимые значения 0-7). Значение "-1" удаляет аргумент.
  • "dscp=N" – приоритизация для DSCP (допустимые значения 0-63). Значение "-1" удаляет аргумент.
  • "classN" – номер класса обслуживания. Можно указать этот аргумент, привязав данный канал к классу обслуживания "N". В этом случае ограничение скорости будет не жёстким: если пропускная способность интерфейса, указанного для класса "N", не используется полностью, то ограничение скорости канала может быть превышено, вплоть до полной загрузки класса. При одновременной работе нескольких каналов, связанных с данным классом, они поровну поделят всю полосу пропускания.

На платформе H02 при одновременной работе нескольких каналов, связанных с данным классом, вся полоса пропускания будет поделена пропорционально их начальным ограничениям по скорости потока.

  • "info="STRING" – краткое описание созданного канала.
  • "clear" – удаление всех установок и освобождение канала.

При одновременном указании нескольких аргументов, порядок обработки следующий: сначала отрабатывается ограничение по скорости, затем переадресация, потом приоритет. При одновременном указании аргументов "vlan" и "dot1p", сначала обрабатывается "vlan", затем "dot1p".

Каждому каналу может быть присвоен приоритет (0…16). Назначенный приоритет будет автоматически обрабатываться каждым узлом при перемещении пакета внутри сети MINT.


По умолчанию пакеты получают приоритет "REGULAR Best Effort=15" и обрабатываются соответственно.

Классификация пакетов может также выполняться с помощью фильтров "pcap".

Реальная приоритизация внутри сети MINT осуществляется по приоритету, заданному параметром "pri=N". Метка DSCP прозрачно передаётся через сеть MINT в любом режиме её работы. Приоритет 802.1p прозрачно передаётся только при работе в режиме коммутатора. При необходимости, для исходящих через определенный интерфейс устройства пакетов могут быть назначены требуемые параметры "dot1p" и "dscp", по желанию оператора.

stat [full] [clear]

Статистика работы конкретного канала (только для каналов с ограничением по скорости):

  • "full" – расширенная статистика работы канала.
  • "clear" – сброс статистики.
qm ch1 max=128 cur=127 packets=12345 (1234) bytes=1234567 (12345)

Числа в скобках отображают количество отброшенных единиц.

Команда "qm stat" показывает статистику по пакетам в секунду (PPS), только если для потока задано максимальное количество пакетов в секунду (qm chN pps=N).

del RULE_NUMBER

Удаление указанного правила из списка.
dump RULE_NUMBERОтображает скомплированный псевдо-код правила, заданного в формате PCAP. Позволяет визуально оценить сложность/оптимальность, либо корректность полученного правила. 

mov RULE_A RULE_B

Изменение правила с номера "A" на "B".

rearrange [STEP]

Перенумерация всех правил с шагом "[STEP]" (по умолчанию 5). Номера правил можно посмотреть командой "config show".

add[out] [NUM] [IFNAME] chN rules..

Команда позволяет добавить поступающий/исходящий на/с устройства пакет, удовлетворяющий правилу к каналу "N".

  • "add" - обработка входящих на устройство пакетов.
  • "out" –  обработка исходящих с устройства пакетов.
  • "num" –  указание порядкового номера правила в списке (необязательный параметр).
  • "IFNAME" – имя интерфейса, через который пакет попадает/покидает устройство (дополнительный параметр).

Все манипуляции с заголовками пакетов, например смена метки dscp или 802.1p, возможны только с помощью команды "qm addout", то есть, только для покидающих устройство пакетов.

rules: [{setpri|addpri}=[N]] [pass]
[vlan={N|any|$ACL}] [dot1p=N] [swg=N] [ether={X|any}] [dscp=N|tos=N] [prf]
-f "pcap filter expression"

Синтаксис правил полностью соответствует синтаксису команды "ipfw" (см. раздел "Команда ipfw (IP Firewall)").

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

  • "setpri=[N] назначение пакету нового приоритета независимо от того, какой приоритет он имел до этого.
  • "addpri=[N] повышение приоритета пакета до указанной величины, если он имел более низкий приоритет. С помощью параметра "addpri" приоритет можно только повысить.
  • "pass позволяет "пропустить" правило, выполнив связанные с ним действия, и продолжить просмотр других правил по списку.
  • "log включение записи действий фильтра в системный журнал (необязательный параметр).
  • "vlan= классификатор, позволяющий  анализировать VLAN ID ( (допустимые значения 0-4095):
    • "N– фильтр будет пропускать тегированные пакеты с указанной меткой N.
    • "any фильтр будет пропускать все тегированные пакеты с любым значением VLAN ID.
    • "$ACL фильтр будет пропускать тегированные пакеты с метками VLAN, указанными в виде списка "$ACL" (описание списков ACL см. в разделе «Списки контроля доступа (команда «acl»)).
  • "dot1p=N классификатор, позволяющий  анализировать приоритет 802.1p (допустимые значения 0-7).
  • "swg=N классификатор, позволяющий  анализировать номер группы коммутации.
  • "ether={X|any} классификатор, позволяющий  анализировать тип пакета. При выборе опции "any" фильтр будет пропускать пакеты любых типов.
  • "dscp=N классификатор, позволяющий  анализировать наличие метки DSCP (допустимые значения 0-63).
  • "tos=N классификатор, позволяющий  анализировать наличие метки TOS.
  • "prf включает фильтрацию трафика, формируемого интерфейсами PRF.
  • "-f "pcap filter expression"  позволяет использовать PCAP-фильтры.

PROTO from [not] ADDR [PORTs] to [not] ADDR [PORTs]

Классификаторы уточняют определенное направление передачи от и/или к:

  • "from указатель IP-адреса отправителя.
  • "to указатель IP-адреса получателя.
  • "not отрицательная приставка, может использоваться после ключевых слов "from" и "to", при этом её действие будет распространяться только на соответствующий адрес(а), но не на порты, если они используются в команде.
  • "ADDR адрес отправителя или получателя (endpoint). Синтаксис этого поля зависит от значения поля "proto". Если "proto" указан как "all" или "icmp", то "ADDR" содержит адресную информацию. Если "proto" задан как "udp" или "tcp", то "ADDR" содержит адресную информацию и необязательный список портов. Адресная информация задаётся как IP-адрес и необязательная маска. IP-адрес должен задаваться в традиционном числовом формате (nn.nn.nn.nn). Необязательная маска может быть задана как длиной маски в битах, так и числовым значением в формате (nnn.nnn.nnn.nnn). 

Возможные форматы :

nn.nn.nn.nn
nn.nn.nn.nn:xxx.xxx.xxx.xxx
nn.nn.nn.nn/NN

Запись "0/0"  описывает все возможные IP-адреса.

PROTO: [all] | tcp | udp | icmp | arp | proto NUMBER

Классификаторы ограничивают по признаку соответствия определенному протоколу. Возможные протоколы: TCP, UDP, ICMP, ARP, либо числовое значение номера протокола. ARP-пакеты будут всегда пропускаться для тех IP-адресов и диапазонов IP-адресов, которые указаны в разрешающих (accept) фильтрах, даже если эти фильтры созданы для других типов пакетов.

ADDR: IP | $LOCAL | $ROUTE | $ACL | mac x:x:x:x:x:x }

Если необходимо составить фильтр, который применяется к нескольким сетевым адресам или группам, то вместо повторения однотипных правил удобнее и эффективнее сгруппировать все фигурирующие адреса в соответствующий список доступа и указать имя списка в качестве IP-адреса ($ACLRULE). Существует несколько предопределённых динамических списков:

  • "$LOCAL список, включающий в себя все локальные адреса, принадлежащие данному маршрутизатору. Его можно использовать для удобной записи фильтров, ограничивающих/разрешающих доступ к самому устройству.
  • "$ROUTE список, содержащий текущую системную таблицу маршрутов, за исключением "default route". Совпадение адреса с этим списком означает, что для данного адреса существует точный маршрут и не будет использован маршрут по умолчанию.
  • "$ACL список IP-адресов или сетей, на которые будет распространяться это правило.
  • "mac x:x:x:x:x:x для интерфейсов, имеющих физические MAC-адреса в стандарте Ethernet, допускается использовать непосредственно цифровое значение MAC-адреса с предшествующим ключевым словом "mac". При этом для входящих фильтров можно указать только MAC-адрес отправителя, а для исходящих только адрес получателя. Кроме того, вместо числового значения, можно указывать ключевое слово "$BS". В этом случае в качестве числового значения будет использоваться реальный MAC-адрес сектора базовой станции, к которой подключен абонентский терминал (при наличии).


Следует иметь ввиду, что правила, использующие MAC-адреса для входящих пакетов будут обработаны раньше всех остальных правил, а правила для исходящих пакетов, напротив, будут обработаны в самую последнюю очередь.

PORTS: NUM[:NUM] [NUM] ...

Используется для фильтрации трафика по номерам портов. Можно использовать список портов для указания сразу нескольких портов в одной команде. Первый элемент списка портов может задавать диапазон номеров от меньшего к большему, разделённый двоеточием.


Примеры

Ограничим весь исходящий трафик клиента величиной 64 Кбит/с на абонентском терминале.

qm ch1 max=64
qm add eth0 ch1 all from 0/0 to 0/0

Назначим трафику сети "1.1.1.0/24" больший приоритет по отношению ко всем остальным потокам данных.

qm ch1 pri=5
qm add ch1 all from 1.1.1.0/24 to 0/0
qm add ch1 all from 0/0 to 1.1.1.0/24

Назначим трафику сети "1.1.1.0/24" меньший приоритет по отношению к всем остальным потокам данных. Обратите внимание на порядок правил. Последнее правило, которому удовлетворяет каждый пакет, должно стоять в конце списка.

qm ch1 pri=5
qm ch2 pri=10
qm add ch2 all from 1.1.1.0/24 to 0/0
qm add ch2 all from 0/0 to 1.1.1.0/24
qm add ch1 all from 0/0 to 0/0

Абоненты сети:

  • "1.1.1.0/24" должны работать через провайдера "10.10.10.10".
  • "2.2.2.0/24" через провайдера "20.20.20.20". 

В более сложном случае, когда маршрутизаторы провайдеров недостижимы непосредственно с данного узла, необходимо сначала организовать туннели до выбранных провайдеров, а уже потом выполнять переадресацию.

qm ch1 to=10.10.10.10
qm ch2 to=20.20.20.20
qm add ch1 all from 1.1.1.0/24 to 0/0
qm add ch2 all from 2.2.2.0/24 to 0/0

Отключим автоматическую приоритизацию пакетов реального времени и включим автоматическую приоритизацию TOS.

qm option –rtp tos

Увеличим приоритет всех пакетов до значения "N", но только в случае если "N" превышает текущий приоритет пакета.

qm ch1 addpri=N

Всем пакетам будет присвоен указанный приоритет.

qm ch1 setpri=N

Канал 1 сбрасывает метки DSCP и приоритеты 802.1p.

qm ch1 dscp=0 dot1p=-1

Канал 2 устанавливает приоритет "QM_PRIO_BUSINESS1" и метку DSCP 31.

qm ch2 pri=9 dscp=31

Для обнуления всех приоритетов пропустим весь трафик через канал 1.

qm add ch1 pass all from 0/0 to 0/0

Поместим часть трафика в канал 2.

qm add ch2 tcp from X.X.X.0/24 to 0/0

Другую часть трафика в канал 3.

qm add ch3 udp from X.X.X.0/24 PORT to 0/0

Оставшийся трафик будет обрабатываться как не приоритетный, либо назначить ему приоритет, поместив в канал 4.

qm add ch4 all from 0/0 to 0/0

Установим 802.1p приоритет пакетам в канале 25.

qm ch25 dot1p=5

Установим 802.1p приоритет и VLAN ID в канале 26. Заголовок VLAN будет добавлен автоматически в случае его отсутствия.

qm ch26 vlan=7 dot1p=4

Поместим исходящие пакеты, назначенные интерфейсу "eth0" и помеченные меткой DSCP 11, в канал 25.

qm addout eth0 ch25 dscp=11 from 0/0 to 0/0

Поместим исходящие пакеты UDP, назначенные интерфейсу "eth0", в канал 25 и промаркируем их меткой DSCP 51.

qm ch25 dscp=51
qm addout eth0 ch25 udp from 0/0 to 0/0

Пример использования pcap-фильтра для классификации пакетов: в канал 5 будет добавлен весь ICMP-трафик, направленный от или к сетевым узлам "1.1.1.1" и "1.1.1.5".

qm add ch5 –f “icmp and host (1.1.1.1 or 1.1.1.5)“

Пример использования класса обслуживания.

qm class1 max=1000
qm ch1 max=200 ceil=1000 class1 
qm ch2 max=400 ceil=1000 class1
qm ch3 max=100 ceil=300 class1
qm ch4 max=200 ceil=300 class1

Результатом выполнения этих команд будет следующая иерархия:

  • Родительскому классу "Class 1" назначается максимальная пропускная способность 1000 Кбит/с.
  • Пропускная способность "Class 1" распределяется между "Channel 1", "Channel 2", "Channel 3" и "Channel 4" с соответствующими значениями пропускной способности и максимальной негарантированной скоростью: в случае, если пропускная способность "Class 1" будет использоваться не полностью, то скорость "Channel 1" и "Channel 2" может увеличиться вплоть до значения 1000 Кбит/с, а "Channel 3" и "Channel 4" до 300 Кбит/с.