![]() |
Kea 3.0.0
|
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. | |
| Public Member Functions inherited from isc::radius::RadiusService | |
| RadiusService (const std::string &name) | |
| Constructor. | |
| virtual | ~RadiusService ()=default |
| Default 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 | 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 | |
| Public Attributes inherited from isc::radius::RadiusService | |
| 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().