![]() |
Kea 3.1.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. | |
![]() | |
RadiusService (const std::string &name) | |
Constructor. | |
virtual | ~RadiusService ()=default |
Default destructor. | |
data::ElementPtr | toElement () const override |
Unparse service configuration. | |
![]() | |
virtual | ~CfgToElement () |
Destructor. | |
Static Public Member Functions | |
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. | |
![]() | |
CfgAttributes | attributes_ |
Attribute configurations. | |
bool | enabled_ |
Enable flag. | |
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. | |
Radius access class.
Definition at line 164 of file radius_access.h.
isc::radius::RadiusAccess::RadiusAccess | ( | ) |
Constructor.
Definition at line 71 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 295 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 340 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 75 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 208 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 |
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 385 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 438 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 491 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 525 of file radius_access.cc.
References isc::dhcp::CfgMgr::getCurrentCfg(), and isc::dhcp::CfgMgr::instance().
|
static |
Termination callback - IPv4.
All post response processing is done here.
env | Communication environment. |
result | return code. |
recv_attrs | received attributes. |
Definition at line 730 of file radius_access.cc.
References isc::hooks::HooksManager::drop(), 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 559 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 975 of file radius_access.cc.
References isc::hooks::HooksManager::drop(), 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 771 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.