Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 6 Next »

Общие рекомендации

 

Словари

НаименованиеОписаниеСтруктураПример обращения к элементам
$rlm

Стандартные коды возврата модуля rlm_perl сервера FreeRADIUS:

  • REJECT — Немедленно отклонить запрос
  • FAIL В модуле возникла ошибка, ничего не отвечать на него
  • OK — Модуль успешно обработал запрос, следует передать запрос следующему модулю
  • HANDLED Модуль обработал запрос, следует прекратить обработку
  • INVALID Модуль считает запрос некорректным
  • USERLOCK — Отклонить запрос, поскольку пользователь заблокирован
  • NOTFOUND Пользователь не найден
  • NOOP Модуль успешно обработал запрос без выполнения каких-либо действий
  • UPDATED Модуль успешно обработал запрос, обновив атрибуты и значения
  • NUMCODES — Общее количество кодов возврата

Не зависит ни от конфигурации, ни от типа запроса — значения постоянны.

Словарь $rlm
{
    "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

Переменные, используемые для хранения промежуточных результатов вычислений в ходе обработки запроса. Сохраняют своё значение на всех этапах обработки: от получения запроса до отправки ответа.

Динамически формируется в процессе обработки каждого конкретного запроса в соответствии с конфигурацией используемых фильтров.

Пример словаря $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-ответа.
Пример словаря $request
{
    "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-запроса

Зависит от типа запроса и конфигурации плагина, может включать следующие элементы верхнего уровня:

  • result — код результата обработки запроса из словаря $rlm (обязателен);
  • RAD_CHECK — атрибуты для проверки;

  • RAD_REPLY — атрибуты RADIUS-ответа.

Пример словаря $response
{
    "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 кэша. При обработке пакета аккаунтинга подбор профиля выполняется только при отсутствии в кэше записи о сессии, то есть при обработке первого пакета аккаунтинга по сессии.

Пример словаря $customer_profile
{
    "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"
}

Если подбор профиля оборудования не выполнялся или завершился с пустым результатом, то элементы верхнего уровня в словаре всё равно присутствуют.

Пустой словарь $customer_profile
{
    "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 кэша. При обработке пакета аккаунтинга подбор профиля выполняется только при отсутствии в кэше записи о сессии, то есть при обработке первого пакета аккаунтинга по сессии.

Пример словаря $provider_profile
{
    "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": "||"
}

Если подбор профиля оборудования не выполнялся или завершился с пустым результатом, то элементы верхнего уровня в словаре всё равно присутствуют.

Пустой словарь $provider_profile
{
    "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

Идентификатор привязки абонентского оборудования к операторскому

Заполняется только при раздельном подборе абонентского и операторского профилей.

Пример словаря $bind_id
 
 
$contextВесь контекст обработки запроса, включающий в себя теги, переменные, данные запроса и ответа. В конфигурации в основном используется для проверки наличия тегов.
Пример словаря $context
{
    "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"
        }
    ],
    "request": {
        "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"
        },
        "req_type": "authorize",
        "RAD_CHECK": {
            "Auth-Type": "CHAP"
        }
    },
    "tags": {
        "authorize",
        "request_from_smartedge"
    },
    "response": {}
}

$context.has_tag?("new-session")

$context.has_tag?('simultaneous-limit-exceeded')

$sessionСессия, подобранная в кэше при обработке пакета аккаунтинга
Пример словаря $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
}

Если подходящая запись в кэше не найдена, значит обрабатывается первый пакет аккаунтинга по сессии — выполняется подбор профилей оборудования, а в словаре присутствуют только элементы верхнего уровня.

Пустой словарь $session
 {
    "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")

 

Операторы

ОбозначениеОписание
or, and, notЛогические операторы: дизъюнкция, конъюнкция, отрицание
<=, <, >=, >Операторы отношения: меньше или равно, меньше, больше или равно, больше
==, !=Операторы сравнения: равно, не равно
+, -, *, /, %Арифметические операторы: сложение, вычитание, умножение, деление, целочисленное деление

Методы

Перечисленные ниже методы могут применяться к стандартным словарям и их элементам, отделяясь от них точкой. Для последовательного применения нескольких методов необходимо указывать их друг за другом, разделяя точкой.

Формат вызоваОписаниеПример использования
coalesce(<list_of_values>)  

empty?()

  

ends_with?(<suffix>[, <start_position>[, <end_position>]])

  

extract(<code_type>, <start_position>[, <length>])

  

format_mac([<delimeter>][, <groups>])

  

gigabytes()

  

has_field?(<field_name>)

  

has_tag?(<tag_name>)

  

in?(<list_of_values>)

  

int([<base>])

  

ip4?()

  

ip4_and(<mask_string>)

  

ip4_mask?()

  

ip4_or(<mask_string>)

  

ip4_scan()

  

join(<delimeter>)

  

like?(<pattern>)

  

lower()

  

mac?()

  

map_join(<delimeter>)

  

merge(<list_of_values>)

  

mod(<divider>)

  

normalize_mac()

  

null?()

  

pad_left(<length>, <pad_string>)

  

pad_right(<length>, <pad_string>)

  

pairs()

  

present?()

  

private_ip4?()

  

regexp_replace(<regexp>[, <replacement_template>])

  

replace(<string_to_replace>[, <replacement])

  

reverse()

  

split([<separator>[, <maxsplit>]])

  

starts_with?(<prefix>[, <start_position>[, <end_position>]])

  

strip(<chars>)

  

substring(<from_position>[, <to_position>])

  

to_date(<format>)

  

to_days()

  

to_hours()

  

to_minutes()

  

to_s([<format>])

  

to_seconds()

  

to_subnet_suffix()

  

to_subnet_mask()

  

try(<field_name>[, <default_value>])

  

unhex()

  

upper()

  

 


  • No labels