![]() |
Kea 3.1.9
|
Radius access class. More...
#include <radius_access.h>
Public Member Functions | |
| RadiusAccess () | |
| Constructor. | |
| virtual | ~RadiusAccess ()=default |
| Destructor. | |
| RadiusAuthHandlerPtr | buildAuth (dhcp::Pkt4 &query, uint32_t subnet_id, const std::vector< uint8_t > &id, const std::string &text) |
| Build RadiusAuth handler for Access-Request - IPv4. | |
| RadiusAuthHandlerPtr | buildAuth (dhcp::Pkt6 &query, uint32_t subnet_id, const std::vector< uint8_t > &id, const std::string &text) |
| Build RadiusAuth handler for Access-Request - IPv6. | |
| bool | getIdentifier (dhcp::Pkt4 &query, std::vector< uint8_t > &id, std::string &text) |
| Get Identifier – IPv4. | |
| bool | getIdentifier (dhcp::Pkt6 &query, std::vector< uint8_t > &id, std::string &text) |
| Get Identifier – IPv6. | |
| void | setIdleTimer () |
| Set idle timer. | |
| Public Member Functions inherited from isc::radius::RadiusService | |
| RadiusService (const std::string &name) | |
| Constructor. | |
| virtual | ~RadiusService () |
| Destructor. | |
| data::ElementPtr | toElement () const override |
| Unparse service configuration. | |
| Public Member Functions inherited from isc::data::CfgToElement | |
| virtual | ~CfgToElement () |
| Destructor. | |
Static Public Member Functions | |
| static void | IdleTimerCallback () |
| Idle timer callback. | |
| static bool | reselectSubnet (const dhcp::Pkt4Ptr &query, uint32_t &subnet_id, bool &both_global, const std::string &cclass) |
| Subnet reselect - class/pool IPv4. | |
| static bool | reselectSubnet (const dhcp::Pkt6Ptr &query, uint32_t &subnet_id, bool &both_global, const std::string &cclass) |
| Subnet reselect - class/pool IPv6. | |
| static bool | reselectSubnet (const isc::dhcp::Pkt4Ptr &query, uint32_t &subnet_id, bool &both_global, const asiolink::IOAddress &address) |
| Subnet reselect - reserved address IPv4. | |
| static bool | reselectSubnet (const isc::dhcp::Pkt6Ptr &query, uint32_t &subnet_id, bool &both_global, const asiolink::IOAddress &address) |
| Subnet reselect - reserved address IPv6. | |
| static void | terminate4 (RadiusAuthEnv env, int result, AttributesPtr recv_attrs) |
| Termination callback - IPv4. | |
| static void | terminate4Internal (RadiusAuthEnv &env, int result, AttributesPtr recv_attrs, dhcp::Pkt4Ptr &query, bool &drop) |
| Termination callback body - IPv4. | |
| static void | terminate6 (RadiusAuthEnv env, int result, AttributesPtr recv_attrs) |
| Termination callback - IPv6. | |
| static void | terminate6Internal (RadiusAuthEnv &env, int result, AttributesPtr recv_attrs, dhcp::Pkt6Ptr &query, bool &drop) |
| Termination callback body - IPv6. | |
Public Attributes | |
| RadiusAuthPendingRequests< dhcp::Pkt4Ptr > | requests4_ |
| Pending RADIUS access requests - IPv4. | |
| RadiusAuthPendingRequests< dhcp::Pkt6Ptr > | requests6_ |
| Pending RADIUS access requests - IPv6. | |
| Public Attributes inherited from isc::radius::RadiusService | |
| CfgAttributes | attributes_ |
| Attribute configurations. | |
| bool | enabled_ |
| Enable flag. | |
| asiolink::IntervalTimerPtr | idle_timer_ |
| Idle timer. | |
| long | idle_timer_interval_ |
| Idle timer interval in seconds. | |
| size_t | max_pending_requests_ |
| Maximum number of pending requests. | |
| std::string | name_ |
| Name (access or accounting). | |
| bool | peer_updates_ |
| Peer updates flag. | |
| Servers | servers_ |
| Server list. | |
Additional Inherited Members | |
| Protected Member Functions inherited from isc::radius::RadiusService | |
| void | cancelIdleTimer () |
| Cancel idle timer. | |
| Static Protected Attributes inherited from isc::radius::RadiusService | |
| static std::mutex | idle_timer_mutex_ |
| Idle timer mutex. | |
Radius access class.
Definition at line 164 of file radius_access.h.
| isc::radius::RadiusAccess::RadiusAccess | ( | ) |
Constructor.
Definition at line 74 of file radius_access.cc.
References isc::radius::RadiusService::RadiusService().
|
virtualdefault |
Destructor.
| RadiusAuthHandlerPtr isc::radius::RadiusAccess::buildAuth | ( | dhcp::Pkt4 & | query, |
| uint32_t | subnet_id, | ||
| const std::vector< uint8_t > & | id, | ||
| const std::string & | text ) |
Build RadiusAuth handler for Access-Request - IPv4.
| query | The query packet. |
| subnet_id | The subnet ID. |
| id | The identifier. |
| text | The User Name. |
Definition at line 298 of file radius_access.cc.
References isc::radius::RadiusService::attributes_, isc::radius::canonize(), isc::radius::Attribute::fromString(), isc::dhcp::Pkt4::getHWAddr(), isc::dhcp::Pkt4::getLabel(), isc::dhcp::Host::IDENT_HWADDR, isc::radius::RadiusImpl::instance(), isc_throw, LOG_ERROR, isc::radius::PW_CALLING_STATION_ID, isc::radius::PW_USER_NAME, isc::radius::RADIUS_ACCESS_BUILD_FAILED, isc::radius::radius_logger, and terminate4().
| RadiusAuthHandlerPtr isc::radius::RadiusAccess::buildAuth | ( | dhcp::Pkt6 & | query, |
| uint32_t | subnet_id, | ||
| const std::vector< uint8_t > & | id, | ||
| const std::string & | text ) |
Build RadiusAuth handler for Access-Request - IPv6.
| query | The query packet. |
| subnet_id | The subnet ID. |
| id | The identifier. |
| text | The User Name. |
Definition at line 343 of file radius_access.cc.
References isc::radius::RadiusService::attributes_, isc::radius::canonize(), isc::radius::Attribute::fromString(), isc::dhcp::Pkt6::getLabel(), isc::dhcp::Host::IDENT_HWADDR, isc::radius::RadiusImpl::instance(), isc_throw, LOG_ERROR, isc::radius::PW_CALLING_STATION_ID, isc::radius::PW_USER_NAME, isc::radius::RADIUS_ACCESS_BUILD_FAILED, isc::radius::radius_logger, and terminate6().
| bool isc::radius::RadiusAccess::getIdentifier | ( | dhcp::Pkt4 & | query, |
| std::vector< uint8_t > & | id, | ||
| std::string & | text ) |
Get Identifier – IPv4.
| query | The query packet. | |
| [out] | id | A reference to the identifier. |
| [out] | text | A reference to the User Name. |
Definition at line 78 of file radius_access.cc.
References isc::radius::canonize(), isc::dhcp::DHO_DHCP_AGENT_OPTIONS, isc::dhcp::DHO_DHCP_CLIENT_IDENTIFIER, isc::radius::extractDuid(), isc::dhcp::Pkt4::getHWAddr(), isc::dhcp::Host::getIdentifierName(), isc::dhcp::Pkt4::getLabel(), isc::dhcp::Pkt::getOption(), isc::radius::RadiusImpl::id_type4_, isc::dhcp::Host::IDENT_CIRCUIT_ID, isc::dhcp::Host::IDENT_CLIENT_ID, isc::dhcp::Host::IDENT_DUID, isc::dhcp::Host::IDENT_FLEX, isc::dhcp::Host::IDENT_HWADDR, isc::radius::RadiusImpl::instance(), isc_throw, LOG_DEBUG, LOG_ERROR, isc::radius::pop0(), isc::radius::RADIUS_ACCESS_GET_IDENTIFIER, isc::radius::RADIUS_ACCESS_GET_IDENTIFIER_FAILED, isc::radius::RADIUS_DBG_TRACE, isc::radius::radius_logger, isc::dhcp::RAI_OPTION_AGENT_CIRCUIT_ID, isc::radius::toHex(), and isc::radius::toPrintable().
| bool isc::radius::RadiusAccess::getIdentifier | ( | dhcp::Pkt6 & | query, |
| std::vector< uint8_t > & | id, | ||
| std::string & | text ) |
Get Identifier – IPv6.
| query | The query packet. | |
| [out] | id | A reference to the identifier. |
| [out] | text | A reference to the User Name. |
Definition at line 211 of file radius_access.cc.
References isc::radius::canonize(), D6O_CLIENTID, isc::dhcp::Host::getIdentifierName(), isc::dhcp::Pkt6::getLabel(), isc::dhcp::Pkt::getOption(), isc::radius::RadiusImpl::id_type6_, isc::dhcp::Host::IDENT_DUID, isc::dhcp::Host::IDENT_FLEX, isc::dhcp::Host::IDENT_HWADDR, isc::radius::RadiusImpl::instance(), isc_throw, LOG_DEBUG, LOG_ERROR, isc::radius::pop0(), isc::radius::RADIUS_ACCESS_GET_IDENTIFIER, isc::radius::RADIUS_ACCESS_GET_IDENTIFIER_FAILED, isc::radius::RADIUS_DBG_TRACE, isc::radius::radius_logger, isc::radius::toHex(), and isc::radius::toPrintable().
|
static |
Idle timer callback.
Definition at line 1044 of file radius_access.cc.
References isc::radius::RadiusImpl::instance(), and isc::radius::RadiusImpl::registerExchange().
Referenced by setIdleTimer().
|
static |
Subnet reselect - class/pool IPv4.
First check if the subnet has a pool matching (no guard or a guard equal to the class) the class from Framed-Pool attribute. If not rerun the subnet selection process on the collection of subnets with such pool and update the subnet ID reference (can be updated to SUBNET_ID_UNUSED if no subnet can be reselected).
| query | The query packet. | |
| [out] | subnet_id | The selected subnet ID. |
| cclass | The client class name. | |
| [out] | both_global | True when both selected and reselected subnets use global reservations. |
Definition at line 388 of file radius_access.cc.
References isc::dhcp::CfgMgr::getCurrentCfg(), isc::dhcp::CfgSubnets4::initSelector(), isc::dhcp::CfgMgr::instance(), and isc::dhcp::Lease::TYPE_V4.
Referenced by terminate4Internal(), and terminate6Internal().
|
static |
Subnet reselect - class/pool IPv6.
First check if the subnet has a pool matching (no guard or a guard equal to the class) the class from Framed-Pool attribute. If not rerun the subnet selection process on the collection of subnets with such pool and update the subnet ID reference (can be updated to SUBNET_ID_UNUSED if no subnet can be reselected).
| query | The query packet. | |
| [out] | subnet_id | The selected subnet ID. |
| cclass | The client class name. | |
| [out] | both_global | True when both selected and reselected subnets use global reservations. |
Definition at line 441 of file radius_access.cc.
References isc::dhcp::CfgMgr::getCurrentCfg(), isc::dhcp::CfgSubnets6::initSelector(), isc::dhcp::CfgMgr::instance(), and isc::dhcp::Lease::TYPE_NA.
|
static |
Subnet reselect - reserved address IPv4.
First check if the reserved address matches the subnet range. If not rerun the subnet selection process on the collection of subnets with such range and update the subnet ID reference (can be updated to SUBNET_ID_UNUSED if no subnet can be reselected).
| query | The query packet. | |
| [out] | subnet_id | The selected subnet ID. |
| address | The reserved address. | |
| [out] | both_global | True when both selected and reselected subnets use global reservations. |
Definition at line 494 of file radius_access.cc.
References isc::dhcp::CfgMgr::getCurrentCfg(), and isc::dhcp::CfgMgr::instance().
|
static |
Subnet reselect - reserved address IPv6.
First check if the reserved address matches the subnet range. If not rerun the subnet selection process on the collection of subnets with such range and update the subnet ID reference (can be updated to SUBNET_ID_UNUSED if no subnet can be reselected).
| query | The query packet. | |
| [out] | subnet_id | The selected subnet ID. |
| address | The reserved address. | |
| [out] | both_global | True when both selected and reselected subnets use global reservations. |
Definition at line 528 of file radius_access.cc.
References isc::dhcp::CfgMgr::getCurrentCfg(), and isc::dhcp::CfgMgr::instance().
| void isc::radius::RadiusAccess::setIdleTimer | ( | ) |
Set idle timer.
Definition at line 1027 of file radius_access.cc.
References isc::radius::RadiusService::cancelIdleTimer(), isc::radius::RadiusService::idle_timer_, isc::radius::RadiusService::idle_timer_interval_, isc::radius::RadiusService::idle_timer_mutex_, IdleTimerCallback(), isc::radius::RadiusImpl::instance(), and isc::asiolink::IntervalTimer::REPEATING.
|
static |
Termination callback - IPv4.
All post response processing is done here.
| env | Communication environment. |
| result | return code. |
| recv_attrs | received attributes. |
Definition at line 733 of file radius_access.cc.
References isc::stats::StatsMgr::addValue(), isc::hooks::HooksManager::drop(), isc::stats::StatsMgr::instance(), LOG_DEBUG, LOG_ERROR, isc::radius::RADIUS_ACCESS_DROP_PARKED_QUERY, isc::radius::RADIUS_ACCESS_RESUME_PARKED_QUERY, isc::radius::RADIUS_ACCESS_TERMINATE_ERROR, isc::radius::RADIUS_DBG_TRACE, isc::radius::radius_logger, isc::radius::RadiusAuthEnv::subnet_id_, terminate4Internal(), and isc::hooks::HooksManager::unpark().
Referenced by buildAuth().
|
static |
Termination callback body - IPv4.
| env | Communication environment. | |
| result | return code. | |
| recv_attrs | received attributes. | |
| [out] | query | the query. |
| [out] | drop | the drop flag. |
Definition at line 562 of file radius_access.cc.
References Element::create(), Element::createMap(), isc::radius::exchangeRCtoText(), isc::dhcp::getCalloutHandle(), isc::dhcp::CfgMgr::getCurrentCfg(), isc::radius::RadiusAuthEnv::id_, isc::dhcp::CfgMgr::instance(), isc::radius::RadiusImpl::instance(), isc::asiolink::IOAddress::IPV4_ZERO_ADDRESS(), isc_throw, isc::asiolink::IOAddress::isV4Zero(), LOG_DEBUG, LOG_ERROR, isc::radius::OK_RC, isc::radius::PW_CLASS, isc::radius::PW_FRAMED_IP_ADDRESS, isc::radius::PW_FRAMED_POOL, isc::radius::PW_TYPE_IPADDR, isc::radius::PW_TYPE_STRING, isc::radius::RADIUS_ACCESS_CACHE_INSERT, isc::radius::RADIUS_ACCESS_ERROR, isc::radius::RADIUS_ACCESS_ORPHAN, isc::radius::RADIUS_DBG_TRACE, isc::radius::radius_logger, isc::radius::REJECT_RC, reselectSubnet(), isc::radius::RadiusAuthEnv::subnet_id_, and isc::radius::toHex().
Referenced by terminate4().
|
static |
Termination callback - IPv6.
All post response processing is done here.
| env | Communication environment. |
| result | return code. |
| recv_attrs | received attributes. |
Definition at line 982 of file radius_access.cc.
References isc::stats::StatsMgr::addValue(), isc::hooks::HooksManager::drop(), isc::stats::StatsMgr::instance(), LOG_DEBUG, LOG_ERROR, isc::radius::RADIUS_ACCESS_DROP_PARKED_QUERY, isc::radius::RADIUS_ACCESS_RESUME_PARKED_QUERY, isc::radius::RADIUS_ACCESS_TERMINATE_ERROR, isc::radius::RADIUS_DBG_TRACE, isc::radius::radius_logger, isc::radius::RadiusAuthEnv::subnet_id_, terminate6Internal(), and isc::hooks::HooksManager::unpark().
Referenced by buildAuth().
|
static |
Termination callback body - IPv6.
| env | Communication environment. | |
| result | return code. | |
| recv_attrs | received attributes. | |
| [out] | query | the query. |
| [out] | drop | the drop flag. |
Definition at line 778 of file radius_access.cc.
References Element::create(), Element::createMap(), isc::radius::exchangeRCtoText(), isc::dhcp::getCalloutHandle(), isc::dhcp::CfgMgr::getCurrentCfg(), isc::radius::RadiusAuthEnv::id_, isc::dhcp::CfgMgr::instance(), isc::radius::RadiusImpl::instance(), isc::asiolink::IOAddress::IPV4_ZERO_ADDRESS(), isc::asiolink::IOAddress::IPV6_ZERO_ADDRESS(), isc_throw, isc::asiolink::IOAddress::isV6Zero(), LOG_DEBUG, LOG_ERROR, isc::radius::OK_RC, isc::radius::PW_CLASS, isc::radius::PW_DELEGATED_IPV6_PREFIX, isc::radius::PW_FRAMED_IPV6_ADDRESS, isc::radius::PW_FRAMED_POOL, isc::radius::PW_TYPE_IPV6ADDR, isc::radius::PW_TYPE_IPV6PREFIX, isc::radius::PW_TYPE_STRING, isc::radius::RADIUS_ACCESS_CACHE_INSERT, isc::radius::RADIUS_ACCESS_ERROR, isc::radius::RADIUS_ACCESS_ORPHAN, isc::radius::RADIUS_DBG_TRACE, isc::radius::radius_logger, isc::radius::REJECT_RC, reselectSubnet(), isc::radius::RadiusAuthEnv::subnet_id_, isc::radius::toHex(), isc::dhcp::IPv6Resrv::TYPE_NA, and isc::dhcp::IPv6Resrv::TYPE_PD.
Referenced by terminate6().
| RadiusAuthPendingRequests<dhcp::Pkt4Ptr> isc::radius::RadiusAccess::requests4_ |
Pending RADIUS access requests - IPv4.
Definition at line 326 of file radius_access.h.
| RadiusAuthPendingRequests<dhcp::Pkt6Ptr> isc::radius::RadiusAccess::requests6_ |
Pending RADIUS access requests - IPv6.
Definition at line 329 of file radius_access.h.