Kea 1.5.0
network_state.cc
Go to the documentation of this file.
1// Copyright (C) 2017-2018 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#include <config.h>
8
11#include <dhcpsrv/timer_mgr.h>
12#include <boost/bind.hpp>
13#include <boost/enable_shared_from_this.hpp>
14#include <string>
15
16namespace {
17
19const std::string NETWORK_STATE_TIMER_NAME = "network-state-timer";
20
21} // end of anonymous namespace
22
23namespace isc {
24namespace dhcp {
25
27class NetworkStateImpl : public boost::enable_shared_from_this<NetworkStateImpl> {
28public:
29
32 : server_type_(server_type), globally_disabled_(false), disabled_subnets_(),
33 disabled_networks_(), timer_mgr_(TimerMgr::instance()) {
34 }
35
39 }
40
42 void setDisableService(const bool disable) {
43 globally_disabled_ = disable;
44 }
45
49 void enableAll() {
50 setDisableService(false);
51
53
55 }
56
65 void createTimer(const unsigned int seconds) {
67 timer_mgr_->registerTimer(NETWORK_STATE_TIMER_NAME,
68 boost::bind(&NetworkStateImpl::enableAll,
69 shared_from_this()),
70 seconds * 1000,
72 timer_mgr_->setup(NETWORK_STATE_TIMER_NAME);
73 }
74
76 void destroyTimer() {
77 if (timer_mgr_->isTimerRegistered(NETWORK_STATE_TIMER_NAME)) {
78 timer_mgr_->unregisterTimer(NETWORK_STATE_TIMER_NAME);
79 }
80 }
81
84
87
90
93
99};
100
102 : impl_(new NetworkStateImpl(server_type)) {
103}
104
105void
107 impl_->setDisableService(true);
108}
109
110void
112 impl_->setDisableService(false);
113}
114
115void
117 impl_->enableAll();
118}
119
120void
121NetworkState::delayedEnableAll(const unsigned int seconds) {
122 impl_->createTimer(seconds);
123}
124
125bool
127 return (!impl_->globally_disabled_);
128}
129
130bool
132 return (TimerMgr::instance()->isTimerRegistered(NETWORK_STATE_TIMER_NAME));
133}
134
135void
137 isc_throw(NotImplemented, "selectiveDisableService is not implemented");
138}
139
140void
142 isc_throw(NotImplemented, "selectiveDisableService is not implemented");
143}
144
145void
147 isc_throw(NotImplemented, "selectiveEnableService is not implemented");
148}
149
150void
152 isc_throw(NotImplemented, "selectiveEnableService is not implemented");
153}
154
155
156} // end of namespace isc::dhcp
157} // end of namespace isc
A generic exception that is thrown when a function is not implemented.
Implementation of the NetworkState class.
void setDisableService(const bool disable)
Globally disables or enables DHCP service.
NetworkState::ServerType server_type_
Server type.
NetworkState::Subnets disabled_subnets_
A list of subnets for which the DHCP service has been disabled.
NetworkStateImpl(const NetworkState::ServerType &server_type)
Constructor.
bool globally_disabled_
A flag indicating if DHCP service is globally disabled.
TimerMgrPtr timer_mgr_
A pointer to the common timer manager.
void createTimer(const unsigned int seconds)
Creates a timer counting the time when enableAll should be automatically called.
void destroyTimer()
Destroys a timer if present.
NetworkState::Networks disabled_networks_
A list of networks for which the DHCP service has been disabled.
void enableAll()
Enables DHCP service globally and per scopes.
void selectiveDisable(const NetworkState::Subnets &subnets)
Disable DHCP service for selected subnets.
std::set< SubnetID > Subnets
Type of the container holding collection of subnet identifiers.
Definition: network_state.h:67
void disableService()
Globally disables DHCP service.
std::set< std::string > Networks
Type of the container holding collection of shared network names.
Definition: network_state.h:70
void enableService()
Globally enables DHCP service.
bool isDelayedEnableAll() const
Checks if delayed enabling of DHCP services is scheduled.
void selectiveEnable(const NetworkState::Subnets &subnets)
Enable DHCP service for selected subnets.
NetworkState(const ServerType &server_type)
Constructor.
void delayedEnableAll(const unsigned int seconds)
Schedules enabling DHCP service in the future.
void enableAll()
Enables DHCP service globally and for scopes which have been disabled as a result of control command.
ServerType
DHCP server type.
Definition: network_state.h:61
bool isServiceEnabled() const
Checks if the DHCP service is globally enabled.
Manages a pool of asynchronous interval timers.
Definition: timer_mgr.h:54
static const TimerMgrPtr & instance()
Returns pointer to the sole instance of the TimerMgr.
Definition: timer_mgr.cc:319
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
boost::shared_ptr< TimerMgr > TimerMgrPtr
Type definition of the shared pointer to TimerMgr.
Definition: timer_mgr.h:25
Defines the logger used by the top-level component of kea-dhcp-ddns.