В данной статье приведено описание создания HTB и TBF полисеров. Назначение полисеров на абонентов описано в разделе: Управление полисингом (тарифным планом). Именованные профили полисинга.
Для решения задач автоматизации более удобным может оказаться просмотр и задание настроек полисинга в формате JSON.
Вывод настроек полисинга тарифного плана TEST в формате json:
Профиль полисинга (тарифный план) можно задать не только файлом с разметкой, но и в формате JSON. Это удобно для автоматизации: JSON проще формировать из скриптов и биллинга, а текущие настройки профиля можно выгрузить в том же формате.
Чем именованный профиль отличается от анонимного и как назначить профиль абоненту, описано в разделе Управление полисингом (тарифным планом). Именованные профили полисинга.
--profile.json "$(cat tariff.json)".
Поддерживаются два формата:
| Формат | Параметр загрузки | Параметр вывода | Особенность |
|---|---|---|---|
json | --profile.json | --outformat json | Скорость задаётся одной строкой со значением и единицей: "20mbit" |
json2 | --profile.json2 | --outformat=json2 | Значение и единица измерения задаются отдельными ключами: "rate_value": "20", "rate_unit": "mbps" |
| Параметр | Описание |
|---|---|
type | Механизм полисинга: HTB или TBF |
outbound, inbound | Настройки для исходящего и входящего трафика |
root_rate | Общая полоса тарифа (корневой класс HTB), в рамках которой классы заимствуют полосу друг у друга |
root_ceil | Максимальная полоса корневого класса |
root_burst, root_cburst | Размер всплеска для root_rate и root_ceil. Если не заданы, вычисляются автоматически |
classes | Список классов трафика (0–7) |
class | Номер класса трафика |
rate | Для HTB — гарантированная (минимальная) полоса класса. Для TBF — ограничение полосы класса |
ceil | Только HTB: максимальная полоса, которую класс может занять, заимствуя свободную полосу корневого класса |
burst, cburst | Размер всплеска для rate и ceil. Если не заданы, вычисляются автоматически |
rate по классам должна быть меньше root_rate.
fdpi_ctrl list profile --policing --profile.name TEST --outformat json
Параметры burst и cburst вычисляются автоматически. В примере тариф 20 Мбит/с, все классы могут занимать всю полосу тарифа:
fdpi_ctrl load profile --policing --profile.name TEST --profile.json '{ "type": "HTB", "outbound": { "root_rate": "20mbit", "root_ceil": "20mbit", "classes": [ {"class": 0, "rate": "8bit", "ceil": "20mbit"}, {"class": 1, "rate": "8bit", "ceil": "20mbit"}, {"class": 2, "rate": "8bit", "ceil": "20mbit"}, {"class": 3, "rate": "8bit", "ceil": "20mbit"}, {"class": 4, "rate": "8bit", "ceil": "20mbit"}, {"class": 5, "rate": "8bit", "ceil": "20mbit"}, {"class": 6, "rate": "8bit", "ceil": "20mbit"}, {"class": 7, "rate": "8bit", "ceil": "20mbit"} ] }, "inbound": { "root_rate": "20mbit", "root_ceil": "20mbit", "classes": [ {"class": 0, "rate": "8bit", "ceil": "20mbit"}, {"class": 1, "rate": "8bit", "ceil": "20mbit"}, {"class": 2, "rate": "8bit", "ceil": "20mbit"}, {"class": 3, "rate": "8bit", "ceil": "20mbit"}, {"class": 4, "rate": "8bit", "ceil": "20mbit"}, {"class": 5, "rate": "8bit", "ceil": "20mbit"}, {"class": 6, "rate": "8bit", "ceil": "20mbit"}, {"class": 7, "rate": "8bit", "ceil": "20mbit"} ] } }'
Параметры burst и cburst задаются явно:
fdpi_ctrl load profile --policing --profile.name TEST --profile.json '{ "type": "HTB", "outbound": { "root_rate": "20mbit", "root_ceil": "20mbit", "root_burst": "10mbit", "root_cburst": "10mbit", "classes": [ {"class": 0, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 1, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 2, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 3, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 4, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 5, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 6, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 7, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"} ] }, "inbound": { "root_rate": "20mbit", "root_ceil": "20mbit", "root_burst": "10mbit", "root_cburst": "10mbit", "classes": [ {"class": 0, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 1, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 2, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 3, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 4, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 5, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 6, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"}, {"class": 7, "rate": "8bit", "ceil": "20mbit", "burst": "8bit", "cburst": "10mbit"} ] } }'
Ограничение 2 Мбит/с только для класса 1 (cs1). Остальные классы описываются по аналогии.
Анонимный профиль на IPv4-адрес:
fdpi_ctrl load --policing --profile.json '{ "type": "TBF", "outbound": { "classes": [ {"class": 1, "rate": "2mbit"} ] }, "inbound": { "classes": [ {"class": 1, "rate": "2mbit"} ] } }' --ip 192.168.0.10
Анонимный профиль на login, связанный с IPv4-адресом:
fdpi_ctrl load --bind --user test_ipv4:192.168.0.10 fdpi_ctrl load --policing --profile.json '{ "type": "TBF", "outbound": { "classes": [ {"class": 1, "rate": "2mbit"} ] }, "inbound": { "classes": [ {"class": 1, "rate": "2mbit"} ] } }' --login test_ipv4
Анонимный профиль на login, связанный с IPv6-подсетью:
fdpi_ctrl load --bind --user test_ipv6:2001:470:e5bf:dead::0/64 fdpi_ctrl load --policing --profile.json '{ "type": "TBF", "outbound": { "classes": [ {"class": 1, "rate": "2mbit"} ] }, "inbound": { "classes": [ {"class": 1, "rate": "2mbit"} ] } }' --login test_ipv6
Связывание IP с login описано в разделе Связывание IP-login (bind, bind_multi).
В формате json2 значение и единица измерения задаются отдельными ключами (например, root_rate_value и root_rate_unit). Это удобно, когда значения формируются программно и не нужно собирать строку вида "20mbit".
fdpi_ctrl list profile --policing --profile.name TEST2 --outformat=json2
Тариф 100 Мбит/с с явно заданными burst и cburst:
fdpi_ctrl load profile --policing --profile.name TEST2 --profile.json2 '{ "type": "HTB", "outbound": { "root_rate_value": "100", "root_rate_unit": "mbps", "root_ceil_value": "100", "root_ceil_unit": "mbps", "root_burst_value": "50", "root_burst_unit": "mbit", "root_cburst_value": "50", "root_cburst_unit": "mbit", "classes": [ {"class": 0, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 1, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 2, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 3, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 4, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 5, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 6, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 7, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"} ] }, "inbound": { "bw_rate_value": "0", "bw_rate_unit": "bps", "bw_ceil_value": "0", "bw_ceil_unit": "bps", "root_rate_value": "100", "root_rate_unit": "mbps", "root_ceil_value": "100", "root_ceil_unit": "mbps", "root_burst_value": "50", "root_burst_unit": "mbit", "root_cburst_value": "50", "root_cburst_unit": "mbit", "classes": [ {"class": 0, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 1, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 2, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 3, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 4, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 5, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 6, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"}, {"class": 7, "rate_value": "8", "rate_unit": "bps", "ceil_value": "100", "ceil_unit": "mbps", "burst_value": "8", "burst_unit": "bit", "cburst_value": "50", "cburst_unit": "mbit"} ] } }'
fdpi_ctrl list profile --policing --profile.name TEST --outformat json
Загрузка настроек полисера (тарифного плана) в формате json:
Сокращенный формат создания HTB полисера (burst, cburst вычисляются автоматически):
fdpi_ctrl load profile --policing --profile.name TEST --profile.json '{ "type":"HTB", "outbound":{ "root_rate":"20mbit","root_ceil":"20mbit", "classes" : [ {"class":0, "rate":"8bit", "ceil":"20mbit"},{"class":1, "rate":"8bit", "ceil":"20mbit"},{"class":2, "rate":"8bit", "ceil":"20mbit"},{"class":3, "rate":"8bit", "ceil":"20mbit"},{"class":4, "rate":"8bit", "ceil":"20mbit"},{"class":5, "rate":"8bit", "ceil":"20mbit"},{"class":6, "rate":"8bit", "ceil":"20mbit"},{"class":7, "rate":"8bit", "ceil":"20mbit"} ]}, "inbound":{ "root_rate":"20mbit","root_ceil":"20mbit", "classes" : [ {"class":0, "rate":"8bit", "ceil":"20mbit"},{"class":1, "rate":"8bit", "ceil":"20mbit"},{"class":2, "rate":"8bit", "ceil":"20mbit"},{"class":3, "rate":"8bit", "ceil":"20mbit"},{"class":4, "rate":"8bit", "ceil":"20mbit"},{"class":5, "rate":"8bit", "ceil":"20mbit"},{"class":6, "rate":"8bit", "ceil":"20mbit"},{"class":7, "rate":"8bit", "ceil":"20mbit"} ]}}'
Полный формат создания HTB полисера (burst, cburst явно задаются):
fdpi_ctrl load profile --policing --profile.name TEST --profile.json '{ "type":"HTB", "outbound":{ "root_rate":"20mbit","root_ceil":"20mbit","root_burst":"10mbit","root_cburst":"10mbit" , "classes" : [ {"class":0, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":1, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":2, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":3, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":4, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":5, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":6, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":7, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" } ]}, "inbound":{ "root_rate":"20mbit","root_ceil":"20mbit","root_burst":"10mbit","root_cburst":"10mbit" , "classes" : [ {"class":0, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":1, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":2, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":3, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":4, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":5, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":6, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" },{"class":7, "rate":"8bit", "ceil":"20mbit","burst":"8bit","cburst":"10mbit" } ]}}'
Пример назначения TBF полисера 2mbps на IPv4 только на cs1 (остальные классы можно описать по аналогии). Анонимный полисер назначается на IPv4.
fdpi_ctrl load --policing --profile.json '{ "type":"TBF", "outbound":{"classes" : [ {"class":1, "rate":"2mbit"}]}, "inbound":{"classes" : [ {"class":1, "rate":"2mbit"}]}}' --ip 192.168.0.10
Пример назначения TBF полисера 2mbps на IPv4 только на cs1 (остальные классы можно описать по аналогии). Создается bind IP-login и Анонимный Полисер назначается на login.
fdpi_ctrl load --bind --user test_ipv4:192.168.0.10 && fdpi_ctrl load --policing --profile.json '{ "type":"TBF", "outbound":{"classes" : [ {"class":1, "rate":"2mbit"}]}, "inbound":{"classes" : [ {"class":1, "rate":"2mbit"}]}}' --login test_ipv4
Пример назначения TBF полисера 2mbps на IPv6 только на cs1 (остальные классы можно описать по аналогии). Создается bind IP-login и Анонимный Полисер назначается на login.
fdpi_ctrl load --bind --user test_ipv6:2001:470:e5bf:dead::0/64 && fdpi_ctrl load --policing --profile.json '{ "type":"TBF", "outbound":{"classes" : [ {"class":1, "rate":"2mbit"}]}, "inbound":{"classes" : [ {"class":1, "rate":"2mbit"}]}}' --login test_ipv6
Формат json2 содержит более подробные настройки значений — здесь разделены единицы измерения и значения скорости по отдельным ключам
Вывод настроек полисинга в формате json2:
fdpi_ctrl list profile --policing --profile.name TEST2 --outformat=json2
Загрузка настроек полисинга тарифного плана TEST в формате json2:
fdpi_ctrl load profile --policing --profile.name TEST2 --profile.json2 '{ "type":"HTB", "outbound":{ "root_rate_value":"100","root_rate_unit":"mbps","root_ceil_value":"100","root_ceil_unit":"mbps","root_burst_value":"50","root_burst_unit":"mbit","root_cburst_value":"50" ,"root_cburst_unit":"mbit" , "classes" : [ {"class":0, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":1, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":2, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":3, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":4, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":5, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":6, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":7, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" } ]}, "inbound":{ "bw_rate_value":"0" , "bw_rate_unit":"bps" , "bw_ceil_value":"0" , "bw_ceil_unit":"bps" , "root_rate_value":"100","root_rate_unit":"mbps","root_ceil_value":"100","root_ceil_unit":"mbps","root_burst_value":"50","root_burst_unit":"mbit","root_cburst_value":"50" ,"root_cburst_unit":"mbit" , "classes" : [ {"class":0, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":1, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":2, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":3, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":4, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":5, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":6, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" },{"class":7, "rate_value":"8", "rate_unit":"bps", "ceil_value":"100", "ceil_unit":"mbps", "burst_value":"8", "burst_unit":"bit", "cburst_value":"50", "cburst_unit":"mbit" } ]}}'