В агенте HARD имеется возможность выполнения дополнительных действий по окончании обработки запросов. Данная функциональность может использоваться для отправки сведений об авторизации IPoE-порталу, или для уведомления шейпера Cisco SCE о начале новой сессии на BRAS'е другого производителя (например Ericsson SmartEdge 100).
Параметры экземпляров хуков настраивается в секции hooks
общей конфигурации агента, а списки вызова нужных хуков — в конфигурациях действий соответствующих экземпляров плагинов.
Конфигурация хуков
Параметры хуков определяются в секциях hooks
→ <hook_type>
→ <hook_name>
, где <hook_type>
— тип хука, а <hook_instance_name>
— наименование его экземпляра.
Ключ | Описание |
---|
host | IP-адрес сетевого интерфейса, на котором работает получатель. |
port | Номер TCP-порта, на котором получатель принимает сообщения по протоколу STOMP. |
destination | URL-путь, к которому необходимо выполнить запрос. При использовании в качестве получателя ActiveMQ, это может быть строка /queue/<queue_name> , где <queue_name> — наименование очереди, в которую брокер должен поместить сообщение. |
login | Логин пользователя STOMP-сервера. |
password | Логин пользователя STOMP-сервера. |
tags | Наименование тега, которым должен быть промаркирован запрос для выполнения хука. В данном параметре может быть указан список наименований тегов — в таком случае хук будет выполнен только если запрос промаркирован всеми указанными тегами. Параметр condition игнорируется, если задан tags . |
condition | Условие срабатывания хука: сообщение будет сформировано и отправлено, если вычисляемое выражение из данного ключа вернуло истину, либо не задано (и не используется tags ). |
body | Словарь (набор пар ключ-значение), определяющий тело сообщения. Значения в данном словаре — это вычисляемые выражения, которые обрабатываются непосредственно перед отправкой сообщения. Тело сообщения — словарь с вычисленными значениями, представленный в формате JSON. |
hooks:
send_stomp_request:
# Параметры подключения к ActiveMQ
default:
host: '192.168.26.47'
port: 61613
login: 'hard'
password: 'F9qqg1eDXo3h0dZnirYD'
# Уведомление IPoE-портала об авторизации гостевой сессии
notify_hap_about_auth_attempt:
condition: '$context.has_tag?("redirected_to_hap")'
destination: '/queue/hard_to_hap'
body:
## Данные для обновления параметров оборудования в Гидре
# Идентификатор подобранного абонентского оборудования
num_N_CPE_ID: '$customer_profile.attributes.try("CPE-Id", "none")'
# Актуальный MAC-адрес абонентского оборудования
vch_VC_CPE_ADDRESS: '$var.try("Actual-CPE-MAC-Address", "none")'
# IP-адрес, выданный абонентскому оборудованию
vch_VC_CPE_IP_ADDRESS: '$request.RAD_REQUEST.Framed-IP-Address'
# Подобранное операторское оборудование
num_N_OP_EQUIP_ID: '$provider_profile.attributes.try("PE-Switch-Id", "none")'
# Подобранный компонент операторского оборудования
num_N_OP_PORT_ID: '$provider_profile.attributes.try("PE-Switch-Port-Id", "none")'
# Абонентское оборудование, привязанное к подобранному операторскому
num_N_BOUND_CPE_ID: '$var.CPE-Bound-To-The-Port.try("equipment_id").coalesce("none")'
# Операторское оборудование, привязанное к подобранному абонентскому
num_N_BOUND_OP_EQUIP_ID: '$customer_profile.provider_profiles.try(0).try("attributes").try("PE-Switch-Id", "none")'
# Компонент операторского оборудования, привязанный к подобранному абонентскому
num_N_BOUND_OP_PORT_ID: '$customer_profile.provider_profiles.try(0).try("equipment_id", "none")'
# MAC-адрес абонентского оборудования, привязанного к подобранному операторскому
vch_VC_BOUND_CPE_ADDRESS: '$var.CPE-Bound-To-The-Port.try("CPE-MAC").coalesce("none")'
# Время поступления RADIUS-запроса в HARD
dt_D_OPER: '$request.generated_at.to_s("%d.%m.%Y %H:%M:%S")'
## Данные для завершения сессии после обновления параметров оборудования в Гидре
Session-Info:
# Внешний идентификатор сессии
Acct-Session-Id: '$request.RAD_REQUEST.Acct-Session-Id'
# User-Name
User-Name: '$request.RAD_REQUEST.User-Name'
# IP-адрес сервера доступа
NAS-IP-Address: '$request.RAD_REQUEST.NAS-IP-Address'
# Флаг нового оборудования
New-CPE-Flag: '$customer_profile.attributes.try("CPE-Id").empty?() and $var.CPE-Bound-To-The-Port.try("equipment_id").empty?()'
# Уведомление утилиты управления Cisco SCE о новой сессии с полным доступом, для которой нужно ограничить скорость
notify_sce_about_new_session_for_shaping:
condition: ' $context.has_tag?("new-session")
and $customer_profile.attributes.try("Service-State") == "SERV_STATE_Provision"
and not $customer_profile.attributes.Speed-Limit.empty?()'
destination: '/queue/hard_to_sce-control-tool'
body:
Action: '"Add policy"'
Session-Id: '$request.RAD_REQUEST.Acct-Session-Id'
IP-Address: '$request.RAD_REQUEST.Framed-IP-Address'
Speed-Limit: '$customer_profile.attributes.Speed-Limit'
# Уведомление приложения службы техподдержки об авторизации гостевой сессии на свободном порту коммутатора доступа
notify_support_team_about_guest_on_empty_port:
condition: ' $provider_profile.present?()
and $var.CPE-Bound-To-The-Port.try("equipment_id").empty?()
and $customer_profile.null?()'
destination: '/queue/hard_to_support-team-dashboard'
body:
Event-Name: '"Authorized guest session on unbound switch port"'
Switch-IP-Address: '$provider_profile.attributes.Switch-IP-Address'
Switch-Port-Number: '$provider_profile.attributes.Switch-Port-Number'
CPE-MAC-Address: '$var.try("Actual-CPE-MAC-Address")'
NAS-IP-Address: '$request.RAD_REQUEST.NAS-IP-Address'
User-Name: '$request.RAD_REQUEST.User-Name'
Конфигурация списков вызова
Списки вызова хуков задаются в ключах plugins
→ base
→ <plugin_instance_name>
→ actions
→ <action_name>
→ hooks
, где <plugin_instance_name>
— наименование экземпляра плагина, а <action_name>
— наименование соответствующего типу запроса от FreeRADIUS действия ядра плагина.
Каждый элемент таких списков — полное наименование хука в формате <hook_type>/<hook_instance_name>
, где <hook_type>
— тип хука, а <hook_instance_name>
— наименование его экземпляра.
plugins:
...
base:
se100-ipoe:
...
actions:
...
authenticate:
...
hooks:
- 'send_stomp_request/notify_hap_about_auth_attempt'
- 'send_stomp_request/notify_support_team_about_guest_on_empty_port'
...
accounting:
...
hooks:
- 'send_stomp_request/notify_sce_about_new_session_for_shaping'
...