Наименование | Описание | Структура | Пример обращения к элементам |
---|
$rlm | Стандартные коды возврата модуля rlm_perl сервера FreeRADIUS: REJECT — Немедленно отклонить запросFAIL — В модуле возникла ошибка, ничего не отвечать на негоOK — Модуль успешно обработал запрос, следует передать запрос следующему модулюHANDLED — Модуль обработал запрос, следует прекратить обработкуINVALID — Модуль считает запрос некорректнымUSERLOCK — Отклонить запрос, поскольку пользователь заблокированNOTFOUND — Пользователь не найденNOOP — Модуль успешно обработал запрос без выполнения каких-либо действийUPDATED — Модуль успешно обработал запрос, обновив атрибуты и значенияNUMCODES — Общее количество кодов возврата
| Не зависит ни от конфигурации, ни от типа запроса — значения постоянны.
{
"REJECT": 0,
"FAIL": 1,
"OK": 2,
"HANDLED": 3,
"INVALID": 4,
"USERLOCK": 5,
"NOTFOUND": 6,
"NOOP": 7,
"UPDATED": 8,
"NUMCODES": 9
}
| $rlm.NOTFOUND
$rlm.OK
|
$var
| Переменные, используемые для хранения промежуточных результатов вычислений в ходе обработки запроса. Сохраняют своё значение на всех этапах обработки: от получения запроса до отправки ответа. | Динамически формируется в процессе обработки каждого конкретного запроса в соответствии с конфигурацией используемых фильтров.
{
"Remote-Circuit-Ids": {
"Remote_Id": "10.70.12.117",
"Circuit_Id": 12
},
"Actual-MAC-Address": "93-AA-4A-B1-D6-79",
"Customer-VLAN": "114"
}
| $var.Remote-Circuit-Ids.Remote_Id
$var.Customer-VLAN
|
$request | Атрибуты RADIUS-запроса, полученные от модуля rlm_perl | Зависит от типа запроса и может включать следующие элементы верхнего уровня: req_type — тип запроса: authorize , authenticate , accounting , post_auth ;RAD_REQUEST — атрибуты RADIUS-запроса;RAD_CHECK — атрибуты для проверки;RAD_REPLY — атрибуты RADIUS-ответа.
{
"req_type": "authorize",
"RAD_REQUEST": {
"NAS-Port-Type": "Virtual",
"CHAP-Password": "0x01375c12a4c1bf31a195bfb74ca2ab9329",
"Service-Type": "Framed-User",
"Tunnel-Type": "L2TP",
"Tunnel-Client-Endpoint": "192.168.2.1",
"CHAP-Challenge": "0x5502e459b4e20784bf0003b25021488a",
"NAS-IP-Address": "192.168.10.110",
"NAS-Port-Id": "L2TP LNS 33",
"Framed-Protocol": "PPP",
"User-Name": "admin-test",
"NAS-Identifier": "bras2",
"NAS-Port": "2432696353"
},
"RAD_CHECK": {
"Auth-Type": "CHAP"
}
}
| $request.RAD_CHECK.Auth-Type
$request.RAD_REQUEST.User-Name
|
$response | Атрибуты RADIUS-ответа, которые будут отданы модулю rlm_perl в качестве результата обработки RADIUS-запроса | Зависит от типа запроса и конфигурации плагина, может включать следующие элементы верхнего уровня:
{
"RAD_CHECK": {
"Cleartext-Password": "password",
"Auth-Type": "CHAP"
},
"result": 2
}
| $response.try("RAD_REPLY").try("DHCP-Classless-Static-Route")
$response.Cleartext-Password
$response.try("RAD_REPLY").present?()
|
$customer_profile | Профиль абонентского оборудования, подобранный в кэше при обработке запроса | Заполняется при успешном подборе абонентского профиля, структура соответствует записи в коллекции profiles кэша. При обработке пакета аккаунтинга подбор профиля выполняется только при отсутствии в кэше записи о сессии, то есть при обработке первого пакета аккаунтинга по сессии.
{
"nested_profiles": [],
"dynamic_attributes": [],
"equipment_id": "50983201",
"_id": ObjectId('5631d972336b5557b82ea627'),
"active": True,
"attributes": {
"Simultaneous-Use": "1",
"Username": "admin-test",
"Static-IP": None,
"Service-State-Code": "SERV_STATE_InsufficientFunds",
"Password": "password",
"Speed-Upload-bps": "6291456",
"Speed-Download-bps": "6291456"
},
"child_profiles": [],
"context": "C70158719E376FC509318E242C521F5B873A8B437",
"firm_id": "100",
"signature": "||||||||0051596501|0051596501",
"profile_id": "1615601",
"template_id": "20101",
"profile_type": "C"
}
Если подбор профиля оборудования не выполнялся или завершился с пустым результатом, то элементы верхнего уровня в словаре всё равно присутствуют.
{
"nested_profiles": None,
"dynamic_attributes": None,
"equipment_id": None,
"_id": None,
"active": None,
"attributes": {},
"child_profiles": [],
"context": None,
"firm_id": None,
"signature": None,
"profile_id": None,
"template_id": None,
"profile_type": None
}
| $customer_profile.null?()
$customer_profile.attributes.L2TP-Password
|
$provider_profile | Профиль операторского оборудования, подобранный в кэше при обработке запроса | Заполняется при успешном подборе операторского профиля, структура соответствует записи в коллекции profiles кэша. При обработке пакета аккаунтинга подбор профиля выполняется только при отсутствии в кэше записи о сессии, то есть при обработке первого пакета аккаунтинга по сессии.
{
"dynamic_attributes": [],
"template_id": "42801",
"profile_id": "459859701",
"nested_profiles": [
{
"dynamic_attributes": [],
"template_id": "40501",
"profile_id": "920732301",
"bind_type": "network_connection",
"signature": "|||||||1130457991|1130457991",
"attributes": {
"IP-Address": "10.242.119.11",
"L2TP-Password": "qwerty",
"Simultaneous-Use": "1",
"Subnet-Mask": "255.255.255.0",
"Gateway-IP": "10.242.119.1",
"L2TP-Login": "test-login"
},
"active": True,
"firm_id": "100",
"equipment_id": "1130577491",
"profile_type": "C",
"child_profiles": [],
"bind_id": "15805201",
"context": "C82B0D4273F886E1720C3812AC82AE961285AC2AD"
}
],
"context": "P3129D3A086862F2BEEA34929D1C3670C31224948",
"attributes": {
"Switch-IP": "10.70.12.117",
"Switch-Port-Code": "12"
},
"active": True,
"_id": ObjectId('55f9662d72099a106d77893f'),
"firm_id": "100",
"equipment_id": "392626801",
"profile_type": "P",
"child_profiles": [],
"signature": "||"
}
Если подбор профиля оборудования не выполнялся или завершился с пустым результатом, то элементы верхнего уровня в словаре всё равно присутствуют.
{
"nested_profiles": None,
"dynamic_attributes": None,
"equipment_id": None,
"_id": None,
"active": None,
"attributes": {},
"child_profiles": [],
"context": None,
"firm_id": None,
"signature": None,
"profile_id": None,
"template_id": None,
"profile_type": None
}
| $provider_profile.present?()
$provider_profile.customer_profiles
$provider_profile.attributes.PE-Switch-Id
|
$bind_id
| Идентификатор привязки абонентского оборудования к операторскому | Заполняется только при раздельном подборе абонентского и операторского профилей. | |
$context | Весь контекст обработки запроса, включающий в себя теги, данные запроса и ответа и все остальные словари. В конфигурации в основном используется для проверки наличия тегов. | | $context.has_tag?("new-session")
$context.has_tag?('simultaneous-limit-exceeded')
|
$session | Сессия, подобранная в кэше при обработке пакета аккаунтинга |
{
"bind_id": None,
"load_to_hydra": True,
"services": [
{
"service_id": 50546901,
"value": 0,
"unit": "bytes"
},
{
"service_id": 50547101,
"value": 0,
"unit": "bytes"
}
],
"services_loaded": False,
"last_load_at": None,
"start_at": datetime.datetime(2015, 11, 4, 8, 28, 20, 801000),
"last_event_timestamp": datetime.datetime(2015, 11, 4, 8, 28, 21),
"provider_profile_id": None,
"_id": ObjectId('56399774336b5557aa2ea629'),
"duration_sec": 0,
"plugin_instance_name": "l2tp-login",
"customer_equipment_id": "50983201",
"session_id": "FF10FFFF58000021-56399774",
"customer_template_id": "20101",
"state": "Started",
"session_unique_id": "9c2f51c907674a2f0d63bf4717a5f6d7",
"customer_context": "C70158719E376FC509318E242C521F5B873A8B437",
"termination_cause": None,
"plugin_name": "base",
"finish_at": None,
"provider_equipment_id": None,
"customer_child_profiles": [],
"provider_context": None,
"archived_at": None,
"active": True,
"attributes": {
"Speedup-Service-State-Code": None,
"Acct-Interim-Interval": "600",
"User-Name": "admin-test",
"NAS-Port": "2432696353",
"NAS-Identifier": "bras2",
"NAS-Port-Id": "L2TP LNS 33",
"Qos-Policing-Profile-Name": "5120-in",
"Filter-Id": [
"in:acl_default_subscriber_in",
"out:acl_default_subscriber_out"
],
"Framed-IP-Address": "10.242.119.11",
"NAS-IP-Address": "192.168.10.110",
"Qos-Metering-Profile-Name": "5120-out"
},
"provider_signature": None,
"customer_signature": "||||||||0051596501|0051596501",
"session_loaded": False,
"service_profile_id": "1615601",
"firm_id": "100",
"customer_profile_id": "1615601",
"provider_template_id": None
}
Если подходящая запись в кэше не найдена, значит обрабатывается первый пакет аккаунтинга по сессии — выполняется подбор профилей оборудования, а в словаре присутствуют только элементы верхнего уровня.
{
"bind_id": None,
"load_to_hydra": None,
"services": [],
"services_loaded": False,
"last_load_at": None,
"start_at": None,
"last_event_timestamp": None,
"provider_profile_id": None,
"_id": None,
"duration_sec": 0,
"plugin_instance_name": None,
"customer_equipment_id": None,
"session_id": None,
"customer_template_id": None,
"state": None,
"session_unique_id": None,
"customer_context": None,
"termination_cause": None,
"plugin_name": None,
"session_duplicate_protection": None,
"finish_at": None,
"provider_equipment_id": None,
"customer_child_profiles": None,
"provider_context": None,
"archived_at": None,
"active": True,
"attributes": None,
"provider_signature": None,
"customer_signature": None,
"session_loaded": False,
"service_profile_id": None,
"firm_id": None,
"customer_profile_id": None,
"provider_template_id": None
}
| $session.attributes.try("Speedup-Service-State-Code")
|