Kea 3.1.1
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 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.
 

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

+ 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 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.

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

+ 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 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.

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

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

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

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

+ Here is the call graph for this function:

◆ runAsync()

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

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

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

+ 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 295 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 300 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 303 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 292 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 312 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 309 of file radius_accounting.h.

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


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