====== Создание HTB, TBF полисера через JSON ====== {{indexmenu_n>3}} В данной статье приведено описание создания HTB и TBF полисеров. Назначение полисеров на абонентов описано в разделе: [[..:..:dpi_components:platform:subscriber_management:policing_mng|]]. \\ Для решения задач автоматизации более удобным может оказаться просмотр и задание настроек полисинга в формате JSON. ===== Первый вариант ===== Вывод настроек полисинга тарифного плана TEST в формате ''json'':====== Создание полисера через JSON ====== {{indexmenu_n>3}} Профиль полисинга (тарифный план) можно задать не только [[dpi:dpi_options:opt_bandwidth_mgmt:bandwidth_conf|файлом с разметкой]], но и в формате JSON. Это удобно для автоматизации: JSON проще формировать из скриптов и биллинга, а текущие настройки профиля можно выгрузить в том же формате. Чем именованный профиль отличается от анонимного и как назначить профиль абоненту, описано в разделе [[dpi:dpi_components:platform:subscriber_management:policing_mng|]]. 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''. Если не заданы, вычисляются автоматически | Для HTB необходимо описать все 8 классов. Сумма ''rate'' по классам должна быть меньше ''root_rate''. ===== Формат json ===== ==== Просмотр профиля ==== fdpi_ctrl list profile --policing --profile.name TEST --outformat json ==== HTB: сокращённая запись ==== Параметры 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"} ] } }' ==== 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 ==== Ограничение 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 описано в разделе [[dpi:dpi_components:platform:subscriber_management:dpi_dynamicip|]]. ===== Формат json2 ===== В формате ''json2'' значение и единица измерения задаются отдельными ключами (например, ''root_rate_value'' и ''root_rate_unit''). Это удобно, когда значения формируются программно и не нужно собирать строку вида ''"20mbit"''. ==== Просмотр профиля ==== fdpi_ctrl list profile --policing --profile.name TEST2 --outformat=json2 ==== HTB: загрузка профиля ==== Тариф 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" } ]}}'