Kea 2.7.0
isc::ha::HAImpl Class Reference

High Availability hooks library implementation. More...

#include <ha_impl.h>

+ Inheritance diagram for isc::ha::HAImpl:

Public Member Functions

 HAImpl ()
 Constructor.
 
 ~HAImpl ()
 Destructor.
 
void buffer4Receive (hooks::CalloutHandle &callout_handle)
 Implementation of the "buffer4_receive" callout.
 
void buffer6Receive (hooks::CalloutHandle &callout_handle)
 Implementation of the "buffer6_receive" callout.
 
void commandProcessed (hooks::CalloutHandle &callout_handle)
 Implementation of the "command_processed" callout.
 
void configure (const data::ConstElementPtr &input_config)
 Parses configuration.
 
void continueHandler (hooks::CalloutHandle &callout_handle)
 Implements handler for the ha-continue command.
 
HAConfigPtr getConfig () const
 Returns a configuration for the first relationship.
 
HAConfigPtr getConfig (const std::string &partner_name) const
 Returns parsed configuration by partner name.
 
HAServicePtr getHAServiceByServerName (const std::string &command_name, data::ConstElementPtr args) const
 Attempts to get an HAService by server name.
 
isc::asiolink::IOServicePtr getIOService ()
 Get the hook I/O service.
 
void haResetHandler (hooks::CalloutHandle &callout_handle)
 Implements handler for the ha-reset command.
 
void heartbeatHandler (hooks::CalloutHandle &callout_handle)
 Implements handle for the heartbeat command.
 
void lease4ServerDecline (hooks::CalloutHandle &callout_handle)
 Implementation of the "lease4_server_decline" callout.
 
void leases4Committed (hooks::CalloutHandle &callout_handle)
 Implementation of the "leases4_committed" callout.
 
void leases6Committed (hooks::CalloutHandle &callout_handle)
 Implementation of the "leases6_committed" callout.
 
void maintenanceCancelHandler (hooks::CalloutHandle &callout_handle)
 Implements handler for the ha-maintenance-cancel command.
 
void maintenanceNotifyHandler (hooks::CalloutHandle &callout_handle)
 Implements handler for the ha-maintenance-notify command.
 
void maintenanceStartHandler (hooks::CalloutHandle &callout_handle)
 Implements handler for the ha-maintenance-start command.
 
void scopesHandler (hooks::CalloutHandle &callout_handle)
 Implements handler for the ha-scopes command.
 
void setIOService (isc::asiolink::IOServicePtr io_service)
 Set the hook I/O service.
 
void startServices (const dhcp::NetworkStatePtr &network_state, const HAServerType &server_type)
 Creates high availability services using current configuration.
 
void subnet4Select (hooks::CalloutHandle &callout_handle)
 Implementation of the "subnet4_select" callout.
 
void subnet6Select (hooks::CalloutHandle &callout_handle)
 Implementation of the "subnet6_select" callout.
 
void syncCompleteNotifyHandler (hooks::CalloutHandle &callout_handle)
 Implements handler for the ha-sync-complete-notify command.
 
void synchronizeHandler (hooks::CalloutHandle &callout_handle)
 Implements handler for the ha-sync command.
 

Protected Attributes

HAConfigMapperPtr config_
 Holds parsed configuration.
 
isc::asiolink::IOServicePtr io_service_
 The hook I/O service.
 
HAServiceMapperPtr services_
 Pointer to the high availability services (state machines).
 

Detailed Description

High Availability hooks library implementation.

This object provides an interface between the HA hook library callouts and the HA state model implemented in the HAService. Callouts invoke respective methods of the HAImpl to configure the service, generate lease updates etc. The HAImpl retrieves and validates the arguments provided within CalloutHandle object and then invokes appropriate methods of the HAService class.

Definition at line 31 of file ha_impl.h.

Constructor & Destructor Documentation

◆ HAImpl()

isc::ha::HAImpl::HAImpl ( )

Constructor.

Definition at line 33 of file ha_impl.cc.

◆ ~HAImpl()

isc::ha::HAImpl::~HAImpl ( )

Destructor.

Definition at line 63 of file ha_impl.cc.

References services_.

Member Function Documentation

◆ buffer4Receive()

void isc::ha::HAImpl::buffer4Receive ( hooks::CalloutHandle & callout_handle)

Implementation of the "buffer4_receive" callout.

This callout uses HA service to check if the query should be processed by this server or a partner. If the partner should process the query, this callout sets the status to CalloutHandle::NEXT_STEP_DROP to cause the server to drop the packet. Therefore it is important to note that, if multiple hook libraries implementing buffer4_receive hook are loaded, the order of loading the libraries may matter. If this library sets the status to CalloutHandle::NEXT_STEP_DROP and the other library overrides this status, the query will be processed by the server instead of being dropped. This problem may be mitigated by loading the HA library last, i.e. placing the library at the end of the "hooks-libraries" list within a Kea configuration file.

If the received query is to be processed by this server instance, the CalloutHabndle::NEXT_STEP_SKIP status is set to prevent the server from unpacking the query because the query is unpacked by the callout.

Parameters
callout_handleCallout handle provided to the callout.
Todo
Add unit tests to verify the behavior for different malformed packets.

Definition at line 72 of file ha_impl.cc.

References isc::log::DBGLVL_TRACE_BASIC, isc::ha::HA_BUFFER4_RECEIVE_NOT_FOR_US, isc::ha::HA_BUFFER4_RECEIVE_PACKET_OPTIONS_SKIPPED, isc::ha::HA_BUFFER4_RECEIVE_UNPACK_FAILED, isc::ha::ha_logger, isc::stats::StatsMgr::instance(), LOG_DEBUG, isc::hooks::CalloutHandle::NEXT_STEP_DROP, isc::hooks::CalloutHandle::NEXT_STEP_SKIP, and services_.

+ Here is the call graph for this function:

◆ buffer6Receive()

void isc::ha::HAImpl::buffer6Receive ( hooks::CalloutHandle & callout_handle)

Implementation of the "buffer6_receive" callout.

This callout uses HA service to check if the query should be processed by this server or a partner. If the partner should process the query, this callout sets the status to CalloutHandle::NEXT_STEP_DROP to cause the server to drop the packet. Therefore it is important to note that, if multiple hook libraries implementing buffer6_receive hook are loaded, the order of loading the libraries may matter. If this library sets the status to CalloutHandle::NEXT_STEP_DROP and the other library overrides this status, the query will be processed by the server instead of being dropped. This problem may be mitigated by loading the HA library last, i.e. placing the library at the end of the "hooks-libraries" list within a Kea configuration file.

If the received query is to be processed by this server instance, the CalloutHabndle::NEXT_STEP_SKIP status is set to prevent the server from unpacking the query because the query is unpacked by the callout.

Parameters
callout_handleCallout handle provided to the callout.
Todo
Add unit tests to verify the behavior for different malformed packets.

Definition at line 336 of file ha_impl.cc.

References isc::log::DBGLVL_TRACE_BASIC, isc::ha::HA_BUFFER6_RECEIVE_NOT_FOR_US, isc::ha::HA_BUFFER6_RECEIVE_PACKET_OPTIONS_SKIPPED, isc::ha::HA_BUFFER6_RECEIVE_UNPACK_FAILED, isc::ha::ha_logger, isc::stats::StatsMgr::instance(), LOG_DEBUG, isc::hooks::CalloutHandle::NEXT_STEP_DROP, isc::hooks::CalloutHandle::NEXT_STEP_SKIP, and services_.

+ Here is the call graph for this function:

◆ commandProcessed()

void isc::ha::HAImpl::commandProcessed ( hooks::CalloutHandle & callout_handle)

Implementation of the "command_processed" callout.

It adds the HA servers information to "status-get" command responses by calling HAService::commandProcessed.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 560 of file ha_impl.cc.

References config_, isc::data::Element::create(), isc::data::Element::createList(), isc::data::Element::createMap(), isc::ha::HAConfig::HAModeToString(), isc::data::Element::map, and services_.

+ Here is the call graph for this function:

◆ configure()

void isc::ha::HAImpl::configure ( const data::ConstElementPtr & input_config)

Parses configuration.

Parameters
input_configConfiguration specified for the hooks library.
Exceptions
ConfigErrorwhen configuration fails.

Definition at line 38 of file ha_impl.cc.

References config_, and isc::ha::HAConfigParser::parse().

+ Here is the call graph for this function:

◆ continueHandler()

void isc::ha::HAImpl::continueHandler ( hooks::CalloutHandle & callout_handle)

Implements handler for the ha-continue command.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 744 of file ha_impl.cc.

References isc::config::CONTROL_RESULT_ERROR, isc::config::createAnswer(), getHAServiceByServerName(), and isc::config::parseCommand().

+ Here is the call graph for this function:

◆ getConfig() [1/2]

HAConfigPtr isc::ha::HAImpl::getConfig ( ) const
inline

Returns a configuration for the first relationship.

This function is held here for historical reasons and it is currently only used in the unit tests for a single-relationship test cases. The production code should use the other variant of this function that includes a partner name as a parameter. It coveres both the cases when there is only one relationship and the hub-and-spoke case.

Returns
Configuration for the relationship to which the partner belongs.
Exceptions
InvalidOperationwhen there are no relationships.

Definition at line 68 of file ha_impl.h.

References config_.

◆ getConfig() [2/2]

HAConfigPtr isc::ha::HAImpl::getConfig ( const std::string & partner_name) const
inline

Returns parsed configuration by partner name.

Parameters
partner_namename of a partner belonging to the relationship for which the configuration should be retrieved.
Returns
Configuration for the relationship to which the partner belongs.

Definition at line 77 of file ha_impl.h.

References config_.

◆ getHAServiceByServerName()

HAServicePtr isc::ha::HAImpl::getHAServiceByServerName ( const std::string & command_name,
data::ConstElementPtr args ) const

Attempts to get an HAService by server name.

The function expects that the arguments contain the "server-name" parameter. If the parameter is not specified, a default HAService name is returned.

Parameters
command_namecommand name (used for logging purposes only).
argscommand arguments or null.
Returns
Pointer to an HAService instance.
Exceptions
BadValueif the specified server-name doesn't exist or if the server-name wasn't specified and more than one HAService exists.

Definition at line 898 of file ha_impl.cc.

References isc_throw, isc::data::Element::map, services_, and isc::data::Element::string.

Referenced by continueHandler(), haResetHandler(), heartbeatHandler(), maintenanceNotifyHandler(), scopesHandler(), syncCompleteNotifyHandler(), and synchronizeHandler().

◆ getIOService()

isc::asiolink::IOServicePtr isc::ha::HAImpl::getIOService ( )
inline

Get the hook I/O service.

Returns
the hook I/O service.

Definition at line 227 of file ha_impl.h.

References io_service_.

◆ haResetHandler()

void isc::ha::HAImpl::haResetHandler ( hooks::CalloutHandle & callout_handle)

Implements handler for the ha-reset command.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 826 of file ha_impl.cc.

References isc::config::CONTROL_RESULT_ERROR, isc::config::createAnswer(), getHAServiceByServerName(), and isc::config::parseCommand().

+ Here is the call graph for this function:

◆ heartbeatHandler()

void isc::ha::HAImpl::heartbeatHandler ( hooks::CalloutHandle & callout_handle)

Implements handle for the heartbeat command.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 593 of file ha_impl.cc.

References isc::config::CONTROL_RESULT_ERROR, isc::config::createAnswer(), getHAServiceByServerName(), and isc::config::parseCommand().

+ Here is the call graph for this function:

◆ lease4ServerDecline()

void isc::ha::HAImpl::lease4ServerDecline ( hooks::CalloutHandle & callout_handle)

Implementation of the "lease4_server_decline" callout.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 303 of file ha_impl.cc.

References config_, isc::hooks::CalloutHandle::NEXT_STEP_CONTINUE, and services_.

◆ leases4Committed()

void isc::ha::HAImpl::leases4Committed ( hooks::CalloutHandle & callout_handle)

Implementation of the "leases4_committed" callout.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 213 of file ha_impl.cc.

References config_, isc::log::DBGLVL_TRACE_BASIC, isc::ha::HA_LEASES4_COMMITTED_NO_RELATIONSHIP, isc::ha::HA_LEASES4_COMMITTED_NOTHING_TO_UPDATE, isc::ha::ha_logger, isc_throw, LOG_DEBUG, LOG_ERROR, isc::hooks::CalloutHandle::NEXT_STEP_DROP, isc::hooks::CalloutHandle::NEXT_STEP_PARK, and services_.

◆ leases6Committed()

void isc::ha::HAImpl::leases6Committed ( hooks::CalloutHandle & callout_handle)

Implementation of the "leases6_committed" callout.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 477 of file ha_impl.cc.

References config_, isc::log::DBGLVL_TRACE_BASIC, isc::ha::HA_LEASES6_COMMITTED_NO_RELATIONSHIP, isc::ha::HA_LEASES6_COMMITTED_NOTHING_TO_UPDATE, isc::ha::ha_logger, isc_throw, LOG_DEBUG, LOG_ERROR, isc::hooks::CalloutHandle::NEXT_STEP_DROP, isc::hooks::CalloutHandle::NEXT_STEP_PARK, and services_.

◆ maintenanceCancelHandler()

void isc::ha::HAImpl::maintenanceCancelHandler ( hooks::CalloutHandle & callout_handle)

Implements handler for the ha-maintenance-cancel command.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 817 of file ha_impl.cc.

References services_.

◆ maintenanceNotifyHandler()

void isc::ha::HAImpl::maintenanceNotifyHandler ( hooks::CalloutHandle & callout_handle)

Implements handler for the ha-maintenance-notify command.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 769 of file ha_impl.cc.

References isc::data::Element::boolean, isc::config::CONTROL_RESULT_ERROR, isc::config::createAnswer(), getHAServiceByServerName(), isc_throw, and isc::config::parseCommandWithArgs().

+ Here is the call graph for this function:

◆ maintenanceStartHandler()

void isc::ha::HAImpl::maintenanceStartHandler ( hooks::CalloutHandle & callout_handle)

Implements handler for the ha-maintenance-start command.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 803 of file ha_impl.cc.

References isc::config::CONTROL_RESULT_SUCCESS, isc::config::parseAnswer(), and services_.

+ Here is the call graph for this function:

◆ scopesHandler()

void isc::ha::HAImpl::scopesHandler ( hooks::CalloutHandle & callout_handle)

Implements handler for the ha-scopes command.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 685 of file ha_impl.cc.

References isc::config::CONTROL_RESULT_ERROR, isc::config::createAnswer(), getHAServiceByServerName(), isc_throw, isc::data::Element::list, isc::data::Element::map, isc::config::parseCommand(), and isc::data::Element::string.

+ Here is the call graph for this function:

◆ setIOService()

void isc::ha::HAImpl::setIOService ( isc::asiolink::IOServicePtr io_service)
inline

Set the hook I/O service.

Parameters
io_servicethe hook I/O service.

Definition at line 234 of file ha_impl.h.

References io_service_.

◆ startServices()

void isc::ha::HAImpl::startServices ( const dhcp::NetworkStatePtr & network_state,
const HAServerType & server_type )

Creates high availability services using current configuration.

The caller must ensure that the HA configuration is valid before calling this function.

Parameters
network_statepointer to the object holding a state of the DHCP service (enabled/disabled).
server_typeDHCP server type for which the HA service should be created.

Definition at line 43 of file ha_impl.cc.

References config_, io_service_, and services_.

◆ subnet4Select()

void isc::ha::HAImpl::subnet4Select ( hooks::CalloutHandle & callout_handle)

Implementation of the "subnet4_select" callout.

This callout decides whether the received packet should be processed by the server when the server has multiple HA relationships. The relationship selection is based on the selected subnet.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 129 of file ha_impl.cc.

References isc::log::DBGLVL_TRACE_BASIC, isc::ha::HAConfig::getSubnetServerName(), isc::ha::ha_logger, isc::ha::HA_SUBNET4_SELECT_INVALID_HA_SERVER_NAME, isc::ha::HA_SUBNET4_SELECT_NO_RELATIONSHIP_FOR_SUBNET, isc::ha::HA_SUBNET4_SELECT_NO_RELATIONSHIP_SELECTOR_FOR_SUBNET, isc::ha::HA_SUBNET4_SELECT_NO_SUBNET_SELECTED, isc::ha::HA_SUBNET4_SELECT_NOT_FOR_US, isc::stats::StatsMgr::instance(), LOG_DEBUG, LOG_ERROR, isc::hooks::CalloutHandle::NEXT_STEP_DROP, and services_.

+ Here is the call graph for this function:

◆ subnet6Select()

void isc::ha::HAImpl::subnet6Select ( hooks::CalloutHandle & callout_handle)

Implementation of the "subnet6_select" callout.

This callout decides whether the received packet should be processed by the server when the server has multiple HA relationships. The relationship selection is based on the selected subnet.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 393 of file ha_impl.cc.

References isc::log::DBGLVL_TRACE_BASIC, isc::ha::HAConfig::getSubnetServerName(), isc::ha::ha_logger, isc::ha::HA_SUBNET6_SELECT_INVALID_HA_SERVER_NAME, isc::ha::HA_SUBNET6_SELECT_NO_RELATIONSHIP_FOR_SUBNET, isc::ha::HA_SUBNET6_SELECT_NO_RELATIONSHIP_SELECTOR_FOR_SUBNET, isc::ha::HA_SUBNET6_SELECT_NO_SUBNET_SELECTED, isc::ha::HA_SUBNET6_SELECT_NOT_FOR_US, isc::stats::StatsMgr::instance(), LOG_DEBUG, LOG_ERROR, isc::hooks::CalloutHandle::NEXT_STEP_DROP, and services_.

+ Here is the call graph for this function:

◆ syncCompleteNotifyHandler()

void isc::ha::HAImpl::syncCompleteNotifyHandler ( hooks::CalloutHandle & callout_handle)

Implements handler for the ha-sync-complete-notify command.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 852 of file ha_impl.cc.

References isc::config::CONTROL_RESULT_ERROR, isc::config::createAnswer(), getHAServiceByServerName(), isc::dhcp::NetworkState::HA_REMOTE_COMMAND, isc::data::Element::integer, isc_throw, and isc::config::parseCommand().

+ Here is the call graph for this function:

◆ synchronizeHandler()

void isc::ha::HAImpl::synchronizeHandler ( hooks::CalloutHandle & callout_handle)

Implements handler for the ha-sync command.

Parameters
callout_handleCallout handle provided to the callout.

Definition at line 620 of file ha_impl.cc.

References isc::config::CONTROL_RESULT_ERROR, isc::config::createAnswer(), getHAServiceByServerName(), isc::data::Element::integer, isc_throw, isc::data::Element::map, isc::config::parseCommand(), and isc::data::Element::string.

+ Here is the call graph for this function:

Member Data Documentation

◆ config_

HAConfigMapperPtr isc::ha::HAImpl::config_
protected

Holds parsed configuration.

Definition at line 244 of file ha_impl.h.

Referenced by commandProcessed(), configure(), getConfig(), getConfig(), lease4ServerDecline(), leases4Committed(), leases6Committed(), and startServices().

◆ io_service_

isc::asiolink::IOServicePtr isc::ha::HAImpl::io_service_
protected

The hook I/O service.

Definition at line 241 of file ha_impl.h.

Referenced by getIOService(), setIOService(), and startServices().

◆ services_


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