====== Создание 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" } ]}}'