![]() |
Kea 3.1.1
|
Radius accounting class. More...
#include <radius_accounting.h>
Public Member Functions | |
RadiusAccounting () | |
Constructor. | |
virtual | ~RadiusAccounting ()=default |
Destructor. | |
RadiusAcctHandlerPtr | buildAcct (const dhcp::Lease4Ptr &lease, Event event) |
Build RadiusAcct handler for Accounting-Request - IPv4. | |
RadiusAcctHandlerPtr | buildAcct (const dhcp::Lease6Ptr &lease, Event event) |
Build RadiusAcct handler for Accounting-Request - IPv6. | |
RadiusAcctHandlerPtr | buildAcct4 (const data::ConstElementPtr &arguments, Event event) |
Build RadiusAcct handler for Accounting-Request. | |
RadiusAcctHandlerPtr | buildAcct6 (const data::ConstElementPtr &arguments, Event event) |
Build RadiusAcct handler for Accounting-Request. | |
void | eraseCreateTimestamp (const asiolink::IOAddress &addr) |
Erase create-timestamp entry to session history. | |
boost::posix_time::ptime | getCreateTimestamp (const asiolink::IOAddress &addr, bool generate) |
Get lease create-timestamp entry from session history. | |
void | init (const std::string &filename) |
Initialize. | |
bool | loadFromFile () |
Load create-timestamp entries from file. | |
void | storeToFile () |
Store create-timestamp entries to a file. | |
![]() | |
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 void | runAsync (RadiusAcctHandlerPtr handler) |
Run asynchronously. | |
static void | terminate (RadiusAcctEnv env, int result) |
Termination callback. | |
Protected Attributes | |
TMContainer | container_ |
The Create timestamp container which holds session history. | |
const boost::posix_time::ptime | epoch_ |
Epoch to avoid too long values. | |
CSVFilePtr | file_ |
Pointer to the CSVFile. | |
std::string | filename_ |
Create timestamps file name. | |
std::mutex | mutex_ |
Mutex to protect access to container_ and file_. | |
size_t | record_count_ |
New record counter. | |
Additional Inherited Members | |
![]() | |
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 accounting class.
Definition at line 180 of file radius_accounting.h.
isc::radius::RadiusAccounting::RadiusAccounting | ( | ) |
Constructor.
Definition at line 97 of file radius_accounting.cc.
References isc::radius::RadiusService::RadiusService(), epoch_, and record_count_.
|
virtualdefault |
Destructor.
RadiusAcctHandlerPtr isc::radius::RadiusAccounting::buildAcct | ( | const dhcp::Lease4Ptr & | lease, |
Event | event ) |
Build RadiusAcct handler for Accounting-Request - IPv4.
This method is called when appropriate DHCPv4 packet is received or IPv4 lease expires.
This method will prepare Accounting-Request with the following attributes:
lease | DHCPv4 lease of the event. |
event | the type of event. |
Definition at line 130 of file radius_accounting.cc.
References isc::radius::canonize(), epoch_, eraseCreateTimestamp(), isc::radius::EVENT_ADD, isc::radius::EVENT_CREATE, isc::radius::EVENT_DECLINE, isc::radius::EVENT_DEL, isc::radius::EVENT_EXPIRE, isc::radius::EVENT_RELEASE, isc::radius::extractDuid(), isc::radius::Attributes::fromElement(), isc::radius::Attribute::fromInt(), isc::radius::Attribute::fromIpAddr(), isc::radius::Attribute::fromString(), isc::radius::Attributes::get(), isc::dhcp::HostMgr::get4Any(), getCreateTimestamp(), isc::dhcp::CfgMgr::getCurrentCfg(), isc::radius::RadiusImpl::id_type4_, isc::dhcp::Host::IDENT_CLIENT_ID, isc::dhcp::Host::IDENT_DUID, isc::dhcp::Host::IDENT_FLEX, isc::dhcp::Host::IDENT_HWADDR, isc::dhcp::CfgMgr::instance(), isc::dhcp::HostMgr::instance(), isc::radius::RadiusImpl::instance(), Element::map, isc::radius::pop0(), isc::radius::PW_ACCT_SESSION_ID, isc::radius::PW_ACCT_STATUS_TYPE, isc::radius::PW_CALLING_STATION_ID, isc::radius::PW_CLASS, isc::radius::PW_FRAMED_IP_ADDRESS, isc::radius::PW_STATUS_ALIVE, isc::radius::PW_STATUS_START, isc::radius::PW_STATUS_STOP, isc::radius::PW_USER_NAME, terminate(), isc::radius::toHex(), and isc::radius::toPrintable().
RadiusAcctHandlerPtr isc::radius::RadiusAccounting::buildAcct | ( | const dhcp::Lease6Ptr & | lease, |
Event | event ) |
Build RadiusAcct handler for Accounting-Request - IPv6.
This method is called when appropriate DHCPv6 packet is received or IPv6 lease expires.
This method will prepare Accounting-Request with the following attributes:
lease | DHCPv6 lease of the event. |
event | the type of event. |
Definition at line 274 of file radius_accounting.cc.
References isc::radius::canonize(), epoch_, eraseCreateTimestamp(), isc::radius::EVENT_ADD, isc::radius::EVENT_CREATE, isc::radius::EVENT_DECLINE, isc::radius::EVENT_DEL, isc::radius::EVENT_EXPIRE, isc::radius::EVENT_RELEASE, isc::radius::Attributes::fromElement(), isc::radius::Attribute::fromInt(), isc::radius::Attribute::fromIpv6Addr(), isc::radius::Attribute::fromIpv6Prefix(), isc::radius::Attribute::fromString(), isc::radius::Attributes::get(), isc::dhcp::HostMgr::get6Any(), getCreateTimestamp(), isc::dhcp::CfgMgr::getCurrentCfg(), isc::radius::RadiusImpl::id_type6_, isc::dhcp::Host::IDENT_DUID, isc::dhcp::Host::IDENT_FLEX, isc::dhcp::Host::IDENT_HWADDR, isc::dhcp::CfgMgr::instance(), isc::dhcp::HostMgr::instance(), isc::radius::RadiusImpl::instance(), Element::map, isc::radius::pop0(), isc::radius::PW_ACCT_SESSION_ID, isc::radius::PW_ACCT_STATUS_TYPE, isc::radius::PW_CALLING_STATION_ID, isc::radius::PW_CLASS, isc::radius::PW_DELEGATED_IPV6_PREFIX, isc::radius::PW_FRAMED_IPV6_ADDRESS, isc::radius::PW_STATUS_ALIVE, isc::radius::PW_STATUS_START, isc::radius::PW_STATUS_STOP, isc::radius::PW_USER_NAME, terminate(), isc::radius::toHex(), isc::radius::toPrintable(), and isc::dhcp::Lease::TYPE_PD.
RadiusAcctHandlerPtr isc::radius::RadiusAccounting::buildAcct4 | ( | const data::ConstElementPtr & | arguments, |
Event | event ) |
Build RadiusAcct handler for Accounting-Request.
This method is called when lease4-X commands are received.
arguments | lease command arguments. |
event | the type of event. |
Definition at line 402 of file radius_accounting.cc.
References isc::radius::canonize(), epoch_, eraseCreateTimestamp(), isc::radius::EVENT_ADD, isc::radius::EVENT_DEL, isc::radius::extractDuid(), isc::radius::Attributes::fromElement(), isc::radius::Attribute::fromInt(), isc::radius::Attribute::fromIpAddr(), isc::radius::Attribute::fromString(), isc::dhcp::ClientId::fromText(), isc::dhcp::HWAddr::fromText(), isc::radius::Attributes::get(), isc::dhcp::HostMgr::get4Any(), isc::data::SimpleParser::getAddress(), isc::data::SimpleParser::getBoolean(), getCreateTimestamp(), isc::dhcp::CfgMgr::getCurrentCfg(), isc::data::SimpleParser::getInteger(), isc::data::SimpleParser::getString(), isc::radius::RadiusImpl::id_type4_, isc::dhcp::Host::IDENT_CLIENT_ID, isc::dhcp::Host::IDENT_DUID, isc::dhcp::Host::IDENT_FLEX, isc::dhcp::Host::IDENT_HWADDR, isc::dhcp::CfgMgr::instance(), isc::dhcp::HostMgr::instance(), isc::radius::RadiusImpl::instance(), isc::asiolink::IOAddress::isV4(), Element::map, isc::radius::pop0(), isc::radius::PW_ACCT_SESSION_ID, isc::radius::PW_ACCT_STATUS_TYPE, isc::radius::PW_CALLING_STATION_ID, isc::radius::PW_CLASS, isc::radius::PW_FRAMED_IP_ADDRESS, isc::radius::PW_STATUS_ALIVE, isc::radius::PW_STATUS_START, isc::radius::PW_STATUS_STOP, isc::radius::PW_USER_NAME, terminate(), isc::radius::toHex(), and isc::radius::toPrintable().
RadiusAcctHandlerPtr isc::radius::RadiusAccounting::buildAcct6 | ( | const data::ConstElementPtr & | arguments, |
Event | event ) |
Build RadiusAcct handler for Accounting-Request.
This method is called when lease6-X commands are received.
arguments | lease command arguments. |
event | the type of event. |
Definition at line 570 of file radius_accounting.cc.
References isc::radius::canonize(), epoch_, eraseCreateTimestamp(), isc::radius::EVENT_ADD, isc::radius::EVENT_DEL, isc::asiolink::firstAddrInPrefix(), isc::radius::Attributes::fromElement(), isc::radius::Attribute::fromInt(), isc::radius::Attribute::fromIpv6Addr(), isc::radius::Attribute::fromIpv6Prefix(), isc::radius::Attribute::fromString(), DUID::fromText(), isc::dhcp::HWAddr::fromText(), isc::radius::Attributes::get(), isc::dhcp::HostMgr::get6Any(), isc::data::SimpleParser::getAddress(), isc::data::SimpleParser::getBoolean(), getCreateTimestamp(), isc::dhcp::CfgMgr::getCurrentCfg(), isc::data::SimpleParser::getInteger(), isc::data::SimpleParser::getString(), isc::radius::RadiusImpl::id_type6_, isc::dhcp::Host::IDENT_DUID, isc::dhcp::Host::IDENT_FLEX, isc::dhcp::Host::IDENT_HWADDR, isc::dhcp::CfgMgr::instance(), isc::dhcp::HostMgr::instance(), isc::radius::RadiusImpl::instance(), isc_throw, isc::asiolink::IOAddress::isV6(), Element::map, isc::radius::pop0(), isc::radius::PW_ACCT_SESSION_ID, isc::radius::PW_ACCT_STATUS_TYPE, isc::radius::PW_CALLING_STATION_ID, isc::radius::PW_CLASS, isc::radius::PW_DELEGATED_IPV6_PREFIX, isc::radius::PW_FRAMED_IPV6_ADDRESS, isc::radius::PW_STATUS_ALIVE, isc::radius::PW_STATUS_START, isc::radius::PW_STATUS_STOP, isc::radius::PW_USER_NAME, terminate(), isc::radius::toHex(), isc::radius::toPrintable(), isc::dhcp::Lease::TYPE_NA, isc::dhcp::Lease::TYPE_PD, and isc::dhcp::Lease::TYPE_TA.
void isc::radius::RadiusAccounting::eraseCreateTimestamp | ( | const asiolink::IOAddress & | addr | ) |
Erase create-timestamp entry to session history.
addr | lease address. |
Definition at line 824 of file radius_accounting.cc.
References container_, file_, LOG_WARN, mutex_, isc::radius::radius_logger, isc::radius::RADIUS_SESSION_HISTORY_APPEND_FAILED, record_count_, isc::asiolink::IOAddress::toText(), and isc::util::CSVRow::writeAt().
Referenced by buildAcct(), buildAcct(), buildAcct4(), and buildAcct6().
ptime isc::radius::RadiusAccounting::getCreateTimestamp | ( | const asiolink::IOAddress & | addr, |
bool | generate ) |
Get lease create-timestamp entry from session history.
addr | lease address. |
generate | true if it is a new lease. |
Definition at line 771 of file radius_accounting.cc.
References container_, epoch_, file_, LOG_DEBUG, LOG_ERROR, LOG_WARN, mutex_, isc::radius::RADIUS_ACCOUNTING_HISTORY_UPDATE_FAILED, isc::radius::RADIUS_ACCOUNTING_NO_HISTORY, isc::radius::RADIUS_DBG_TRACE, isc::radius::radius_logger, isc::radius::RADIUS_SESSION_HISTORY_APPEND_FAILED, record_count_, isc::asiolink::IOAddress::toText(), and isc::util::CSVRow::writeAt().
Referenced by buildAcct(), buildAcct(), buildAcct4(), and buildAcct6().
void isc::radius::RadiusAccounting::init | ( | const std::string & | filename | ) |
Initialize.
To keep session history between reconfiguration and rebooting the history is saved in a file which provides stable storage.
filename | Name of the file. |
Definition at line 102 of file radius_accounting.cc.
References container_, file_, filename_, loadFromFile(), LOG_ERROR, LOG_INFO, isc::radius::radius_logger, isc::radius::RADIUS_SESSION_HISTORY_OPEN_FAILED, isc::radius::RADIUS_SESSION_HISTORY_OPENED, and storeToFile().
bool isc::radius::RadiusAccounting::loadFromFile | ( | ) |
Load create-timestamp entries from file.
Definition at line 854 of file radius_accounting.cc.
References container_, isc::util::CSVFile::EMPTY_ROW(), epoch_, file_, isc_throw, LOG_ERROR, LOG_INFO, isc::radius::radius_logger, isc::radius::RADIUS_SESSION_HISTORY_LOAD_FAILED, isc::radius::RADIUS_SESSION_HISTORY_LOADED, isc::util::CSVRow::readAndConvertAt(), and isc::util::CSVRow::readAt().
Referenced by init().
|
static |
Run asynchronously.
handler | The communication handler. |
Definition at line 753 of file radius_accounting.cc.
Referenced by command_processed(), lease4_decline(), lease4_expire(), lease4_release(), lease4_renew(), lease4_select(), lease6_decline(), lease6_expire(), lease6_rebind(), lease6_release(), lease6_renew(), and lease6_select().
void isc::radius::RadiusAccounting::storeToFile | ( | ) |
Store create-timestamp entries to a file.
Content of the create timestamp container is written to a file in the increasing timestamp order.
Definition at line 923 of file radius_accounting.cc.
References isc::util::CSVFile::addColumn(), isc::util::CSVFile::append(), isc::util::CSVFile::close(), container_, epoch_, isc::util::CSVFile::exists(), filename_, isc::util::CSVFile::getColumnCount(), isc::util::CSVFile::getColumnIndex(), LOG_ERROR, LOG_INFO, isc::util::CSVFile::open(), isc::radius::radius_logger, isc::radius::RADIUS_SESSION_HISTORY_STORE_FAILED, isc::radius::RADIUS_SESSION_HISTORY_STORED, record_count_, and isc::util::CSVRow::writeAt().
Referenced by init().
|
static |
Termination callback.
env | Communication environment. |
result | return code. |
Definition at line 758 of file radius_accounting.cc.
References isc::radius::RadiusAcctEnv::event_, isc::radius::eventToText(), isc::radius::exchangeRCtoText(), isc::radius::RadiusAcctEnv::finished_, LOG_ERROR, isc::radius::OK_RC, isc::radius::RADIUS_ACCOUNTING_ERROR, isc::radius::radius_logger, and isc::radius::RadiusAcctEnv::session_id_.
Referenced by buildAcct(), buildAcct(), buildAcct4(), and buildAcct6().
|
protected |
The Create timestamp container which holds session history.
Definition at line 295 of file radius_accounting.h.
Referenced by eraseCreateTimestamp(), getCreateTimestamp(), init(), loadFromFile(), and storeToFile().
|
protected |
Epoch to avoid too long values.
Initialized to date at which feature was introduced.
Definition at line 300 of file radius_accounting.h.
Referenced by RadiusAccounting(), buildAcct(), buildAcct(), buildAcct4(), buildAcct6(), getCreateTimestamp(), loadFromFile(), and storeToFile().
|
protected |
Pointer to the CSVFile.
Definition at line 303 of file radius_accounting.h.
Referenced by eraseCreateTimestamp(), getCreateTimestamp(), init(), and loadFromFile().
|
protected |
Create timestamps file name.
Definition at line 292 of file radius_accounting.h.
Referenced by init(), and storeToFile().
|
protected |
Mutex to protect access to container_ and file_.
Definition at line 312 of file radius_accounting.h.
Referenced by eraseCreateTimestamp(), and getCreateTimestamp().
|
protected |
New record counter.
This counter is incremented each time a record is added to the file. It could be used to trigger a cleanup file tool.
Definition at line 309 of file radius_accounting.h.
Referenced by RadiusAccounting(), eraseCreateTimestamp(), getCreateTimestamp(), and storeToFile().