![]() |
Kea 3.3.1
|
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 76 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 300 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 345 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 80 of file radius_access.cc.
References isc::radius::canonize(), isc::dhcp::DHO_DHCP_AGENT_OPTIONS, isc::dhcp::DHO_DHCP_CLIENT_IDENTIFIER, isc::util::str::dumpAsHex(), 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, 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 213 of file radius_access.cc.
References isc::radius::canonize(), D6O_CLIENTID, isc::util::str::dumpAsHex(), 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, and isc::radius::toPrintable().
|
static |
Idle timer callback.
Definition at line 1046 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 390 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 443 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 496 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 530 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 1029 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 735 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 564 of file radius_access.cc.
References Element::create(), Element::createMap(), isc::util::str::dumpAsHex(), 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(), and isc::radius::RadiusAuthEnv::subnet_id_.
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 984 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 780 of file radius_access.cc.
References Element::create(), Element::createMap(), isc::util::str::dumpAsHex(), 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::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.