В агенте 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' ... |