Kea 3.1.9
isc::radius::RadiusAccounting Class Reference

Radius accounting class. More...

#include <radius_accounting.h>

Inheritance diagram for isc::radius::RadiusAccounting:

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 setIdleTimer ()
 Set idle timer.
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 ()
 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 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.
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.
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.

Detailed Description

Radius accounting class.

Definition at line 180 of file radius_accounting.h.

Constructor & Destructor Documentation

◆ RadiusAccounting()

isc::radius::RadiusAccounting::RadiusAccounting ( )

Constructor.

Definition at line 98 of file radius_accounting.cc.

References isc::radius::RadiusService::RadiusService(), epoch_, and record_count_.

Here is the call graph for this function:

◆ ~RadiusAccounting()

virtual isc::radius::RadiusAccounting::~RadiusAccounting ( )
virtualdefault

Destructor.

Member Function Documentation

◆ buildAcct() [1/2]

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:

  • User-Name = duid
  • Calling-Station-Id = hardware address (if available)
  • Framed-IPv6-Address = IPv6 address or
  • Delegated-IPv6-Prefix = IPv6 prefix
  • Acct-Status-Type = Start,Stop or Interim-Update
  • Acct-Session-Id = IPv4 address with a start of the lease assignment
Parameters
leaseDHCPv4 lease of the event.
eventthe type of event.
Returns
RadiusAcct handler.

Definition at line 131 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().

Here is the call graph for this function:

◆ buildAcct() [2/2]

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:

  • User-Name = client-id or duid (or hw-addr if client-id not specified)
  • Calling-Station-Id = hardware address
  • Framed-IP-Address = IPv4 address
  • Acct-Status-Type = Start,Stop or Interim-Update
  • Acct-Session-Id = IPv4 address with a start of the lease assignment
Parameters
leaseDHCPv6 lease of the event.
eventthe type of event.
Returns
RadiusAcct handler.

Definition at line 275 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.

Here is the call graph for this function:

◆ buildAcct4()

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.

Parameters
argumentslease command arguments.
eventthe type of event.
Returns
RadiusAcct handler.

Definition at line 403 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().

Here is the call graph for this function:

◆ buildAcct6()

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.

Parameters
argumentslease command arguments.
eventthe type of event.
Returns
RadiusAcct handler.

Definition at line 571 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, and isc::dhcp::Lease::TYPE_PD.

Here is the call graph for this function:

◆ eraseCreateTimestamp()

void isc::radius::RadiusAccounting::eraseCreateTimestamp ( const asiolink::IOAddress & addr)

Erase create-timestamp entry to session history.

Parameters
addrlease address.

Definition at line 823 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().

Here is the call graph for this function:

◆ getCreateTimestamp()

ptime isc::radius::RadiusAccounting::getCreateTimestamp ( const asiolink::IOAddress & addr,
bool generate )

Get lease create-timestamp entry from session history.

Parameters
addrlease address.
generatetrue if it is a new lease.
Returns
the create timestamp.

Definition at line 770 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().

Here is the call graph for this function:

◆ IdleTimerCallback()

void isc::radius::RadiusAccounting::IdleTimerCallback ( )
static

Idle timer callback.

Definition at line 1008 of file radius_accounting.cc.

References isc::radius::RadiusImpl::instance(), and isc::radius::RadiusImpl::registerExchange().

Referenced by setIdleTimer().

Here is the call graph for this function:

◆ init()

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.

Parameters
filenameName of the file.

Definition at line 103 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().

Here is the call graph for this function:

◆ loadFromFile()

bool isc::radius::RadiusAccounting::loadFromFile ( )

Load create-timestamp entries from file.

Returns
true if there was no error.

Definition at line 853 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().

Here is the call graph for this function:

◆ runAsync()

void isc::radius::RadiusAccounting::runAsync ( RadiusAcctHandlerPtr handler)
static

◆ setIdleTimer()

void isc::radius::RadiusAccounting::setIdleTimer ( )

Set idle timer.

Note
: The caller must hold the idle timer mutex.

Definition at line 991 of file radius_accounting.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.

Here is the call graph for this function:

◆ storeToFile()

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 922 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().

Here is the call graph for this function:

◆ terminate()

void isc::radius::RadiusAccounting::terminate ( RadiusAcctEnv env,
int result )
static

Termination callback.

Parameters
envCommunication environment.
resultreturn code.

Definition at line 757 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().

Here is the call graph for this function:

Member Data Documentation

◆ container_

TMContainer isc::radius::RadiusAccounting::container_
protected

The Create timestamp container which holds session history.

Definition at line 303 of file radius_accounting.h.

Referenced by eraseCreateTimestamp(), getCreateTimestamp(), init(), loadFromFile(), and storeToFile().

◆ epoch_

const boost::posix_time::ptime isc::radius::RadiusAccounting::epoch_
protected

Epoch to avoid too long values.

Initialized to date at which feature was introduced.

Definition at line 308 of file radius_accounting.h.

Referenced by RadiusAccounting(), buildAcct(), buildAcct(), buildAcct4(), buildAcct6(), getCreateTimestamp(), loadFromFile(), and storeToFile().

◆ file_

CSVFilePtr isc::radius::RadiusAccounting::file_
protected

Pointer to the CSVFile.

Definition at line 311 of file radius_accounting.h.

Referenced by eraseCreateTimestamp(), getCreateTimestamp(), init(), and loadFromFile().

◆ filename_

std::string isc::radius::RadiusAccounting::filename_
protected

Create timestamps file name.

Definition at line 300 of file radius_accounting.h.

Referenced by init(), and storeToFile().

◆ mutex_

std::mutex isc::radius::RadiusAccounting::mutex_
protected

Mutex to protect access to container_ and file_.

Definition at line 320 of file radius_accounting.h.

Referenced by eraseCreateTimestamp(), and getCreateTimestamp().

◆ record_count_

size_t isc::radius::RadiusAccounting::record_count_
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 317 of file radius_accounting.h.

Referenced by RadiusAccounting(), eraseCreateTimestamp(), getCreateTimestamp(), and storeToFile().


The documentation for this class was generated from the following files: