srv_config.h 24.3 KB
Newer Older
1
// Copyright (C) 2014-2018 Internet Systems Consortium, Inc. ("ISC")
2
//
3 4 5
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6

7 8
#ifndef DHCPSRV_CONFIG_H
#define DHCPSRV_CONFIG_H
9

10
#include <cc/cfg_to_element.h>
11
#include <dhcpsrv/cfg_db_access.h>
12
#include <dhcpsrv/cfg_duid.h>
13
#include <dhcpsrv/cfg_expiration.h>
14
#include <dhcpsrv/cfg_host_operations.h>
15
#include <dhcpsrv/cfg_hosts.h>
16
#include <dhcpsrv/cfg_iface.h>
17
#include <dhcpsrv/cfg_option.h>
18
#include <dhcpsrv/cfg_option_def.h>
19
#include <dhcpsrv/cfg_rsoo.h>
20
#include <dhcpsrv/cfg_shared_networks.h>
21
#include <dhcpsrv/cfg_subnets4.h>
22
#include <dhcpsrv/cfg_subnets6.h>
23
#include <dhcpsrv/cfg_mac_source.h>
24
#include <dhcpsrv/cfg_consistency.h>
25
#include <dhcpsrv/client_class_def.h>
26
#include <dhcpsrv/d2_client_cfg.h>
27
#include <process/config_base.h>
28
#include <hooks/hooks_config.h>
29
#include <cc/data.h>
30
#include <cc/user_context.h>
31
#include <boost/shared_ptr.hpp>
32 33
#include <vector>
#include <stdint.h>
34 35 36 37

namespace isc {
namespace dhcp {

38 39
class CfgMgr;

40 41 42 43

/// @brief Specifies current DHCP configuration
///
/// @todo Migrate all other configuration parameters from cfgmgr.h here
44
class SrvConfig : public process::ConfigBase {
45
public:
46 47 48
    /// @name Constants for selection of parameters returned by @c getConfigSummary
    ///
    //@{
49 50 51 52 53 54 55 56 57 58 59 60 61 62
    /// Nothing selected
    static const uint32_t CFGSEL_NONE    = 0x00000000;
    /// Number of IPv4 subnets
    static const uint32_t CFGSEL_SUBNET4 = 0x00000001;
    /// Number of IPv6 subnets
    static const uint32_t CFGSEL_SUBNET6 = 0x00000002;
    /// Number of enabled ifaces
    static const uint32_t CFGSEL_IFACE4  = 0x00000004;
    /// Number of v6 ifaces
    static const uint32_t CFGSEL_IFACE6  = 0x00000008;
    /// DDNS enabled/disabled
    static const uint32_t CFGSEL_DDNS    = 0x00000010;
    /// Number of all subnets
    static const uint32_t CFGSEL_SUBNET  = 0x00000003;
63 64
    /// Configured globals
    static const uint32_t CFGSEL_GLOBALS = 0x00000020;
65 66
    /// Config control info
    static const uint32_t CFGSEL_CFG_CTL = 0x00000040;
67
    /// IPv4 related config
68
    static const uint32_t CFGSEL_ALL4    = 0x00000035;
69
    /// IPv6 related config
70
    static const uint32_t CFGSEL_ALL6    = 0x0000003A;
71 72
    /// Whole config
    static const uint32_t CFGSEL_ALL     = 0xFFFFFFFF;
73
    //@}
74

75
    /// @brief Default constructor.
76
    ///
77
    /// This constructor sets configuration sequence number to 0.
78
    SrvConfig();
79 80 81 82

    /// @brief Constructor.
    ///
    /// Sets arbitrary configuration sequence number.
83
    SrvConfig(const uint32_t sequence);
84

85 86 87
    /// @brief Returns summary of the configuration in the textual format.
    ///
    /// This method returns the brief text describing the current configuration.
88
    /// It may be used for logging purposes, e.g. when the new configuration is
89 90 91 92 93 94
    /// committed to notify a user about the changes in configuration.
    ///
    /// @todo Currently this method uses @c CfgMgr accessors to get the
    /// configuration parameters. Once these parameters are migrated from the
    /// @c CfgMgr this method will have to be modified accordingly.
    ///
95 96 97 98
    /// @todo Implement reporting a summary of interfaces being used for
    /// receiving and sending DHCP messages. This will be implemented with
    /// ticket #3512.
    ///
99 100 101 102 103
    /// @param selection Is a bitfield which describes the parts of the
    /// configuration to be returned.
    ///
    /// @return Summary of the configuration in the textual format.
    std::string getConfigSummary(const uint32_t selection) const;
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119

    /// @brief Returns configuration sequence number.
    uint32_t getSequence() const {
        return (sequence_);
    }

    /// @brief Compares configuration sequence with other sequence.
    ///
    /// This method compares sequence numbers of two configurations for
    /// equality. The sequence numbers are meant to be unique, so if
    /// they are equal it means that they point to the same configuration.
    ///
    /// @param other Configuration which sequence number should be
    /// compared with the sequence number of this configuration.
    ///
    /// @return true if sequence numbers are equal.
120
    bool sequenceEquals(const SrvConfig& other);
121

122
    /// @brief Returns non-const pointer to interface configuration.
123
    ///
124 125
    /// This function returns a non-const pointer to the interface
    /// configuration.
126
    ///
127 128
    /// @return Object representing configuration of interfaces.
    CfgIfacePtr getCfgIface() {
129 130 131
        return (cfg_iface_);
    }

132
    /// @brief Returns const pointer to interface configuration.
133
    ///
134 135 136 137 138 139
    /// This function returns a const pointer to the interface
    /// configuration.
    ///
    /// @return Object representing configuration of interfaces.
    ConstCfgIfacePtr getCfgIface() const {
        return (cfg_iface_);
140 141
    }

142 143
    /// @brief Return pointer to non-const object representing user-defined
    /// option definitions.
144
    ///
145 146 147 148 149 150 151 152 153 154 155 156
    /// This function returns a pointer to the object which represents the
    /// user defined option definitions grouped by option space name.
    ///
    /// @return Pointer to an object holding option definitions.
    CfgOptionDefPtr getCfgOptionDef() {
        return (cfg_option_def_);
    }

    /// @brief Returns pointer to the const object representing user-defined
    /// option definitions.
    ///
    /// This function returns a pointer to the object which represents the
157 158
    /// user defined option definitions grouped by option space name.
    ///
159 160
    /// @return Pointer to an object holding option definitions.
    ConstCfgOptionDefPtr getCfgOptionDef() const {
161 162 163
        return (cfg_option_def_);
    }

164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
    /// @brief Returns pointer to the non-const object holding options.
    ///
    /// This method returns a pointer to the object which holds instances
    /// of the options to be returned to the clients belonging to any subnet.
    ///
    /// @return Pointer to the object holding options.
    CfgOptionPtr getCfgOption() {
        return (cfg_option_);
    }

    /// @brief Returns pointer to the const object holding options.
    ///
    /// This method returns a pointer to the object which holds instances
    /// of the options to be returned to the clients belonging to any subnet.
    ///
    /// @return Pointer to the object holding options.
    const ConstCfgOptionPtr getCfgOption() const {
        return (cfg_option_);
    }

184 185 186 187 188 189 190 191
    /// @brief Returns pointer to non-const object holding subnets configuration
    /// for DHCPv4.
    ///
    /// @return Pointer to the object holding subnets configuration for DHCPv4.
    CfgSubnets4Ptr getCfgSubnets4() {
        return (cfg_subnets4_);
    }

192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209
    /// @brief Returns pointer to non-const object holding configuration of
    /// shared networks in DHCPv4;
    ///
    /// @return Pointer to the object holding shared networks configuration
    /// for DHCPv4.
    CfgSharedNetworks4Ptr getCfgSharedNetworks4() const {
        return (cfg_shared_networks4_);
    }

    /// @brief Returns pointer to non-const object holding configuration of
    /// shared networks in DHCPv6.
    ///
    /// @return Pointer to the object holding shared networks configuration
    /// for DHCPv6.
    CfgSharedNetworks6Ptr getCfgSharedNetworks6() const {
        return (cfg_shared_networks6_);
    }

210 211 212 213 214 215 216 217
    /// @brief Returns pointer to const object holding subnets configuration for
    /// DHCPv4.
    ///
    /// @return Pointer to the object holding subnets configuration for DHCPv4.
    ConstCfgSubnets4Ptr getCfgSubnets4() const {
        return (cfg_subnets4_);
    }

218 219 220
    /// @brief Returns pointer to non-const object holding subnets configuration
    /// for DHCPv6.
    ///
221
    /// @return Pointer to the object holding subnets configuration for DHCPv6.
222 223 224 225 226
    CfgSubnets6Ptr getCfgSubnets6() {
        return (cfg_subnets6_);
    }

    /// @brief Returns pointer to const object holding subnets configuration for
227
    /// DHCPv6.
228 229 230 231 232 233
    ///
    /// @return Pointer to the object holding subnets configuration for DHCPv6.
    ConstCfgSubnets6Ptr getCfgSubnets6() const {
        return (cfg_subnets6_);
    }

234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249
    /// @brief Returns pointer to the non-const objects representing host
    /// reservations for different IPv4 and IPv6 subnets.
    ///
    /// @return Pointer to the non-const object holding host reservations.
    CfgHostsPtr getCfgHosts() {
        return (cfg_hosts_);
    }

    /// @brief Returns pointer to the const objects representing host
    /// reservations for different IPv4 and IPv6 subnets.
    ///
    /// @return Pointer to the const object holding host reservations.
    ConstCfgHostsPtr getCfgHosts() const {
        return (cfg_hosts_);
    }

250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267
    /// @brief Returns pointer to the non-const object representing
    /// set of RSOO-enabled options.
    ///
    /// @return Pointer to the non-const object holding RSOO-enabled
    /// options.
    CfgRSOOPtr getCfgRSOO() {
        return (cfg_rsoo_);
    }

    /// @brief Returns pointer to the const object representing set
    /// of RSOO-enabled options.
    ///
    /// @return Pointer to the const object holding RSOO-enabled
    /// options.
    ConstCfgRSOOPtr getCfgRSOO() const {
        return (cfg_rsoo_);
    }

268 269 270 271 272 273 274 275 276 277 278 279
    /// @brief Returns pointer to the object holding configuration pertaining
    /// to processing expired leases.
    CfgExpirationPtr getCfgExpiration() {
        return (cfg_expiration_);
    }

    /// @brief Returns pointer to the const object holding configuration
    /// pertaining to processing expired leases.
    ConstCfgExpirationPtr getCfgExpiration() const {
        return (cfg_expiration_);
    }

280 281 282 283 284 285 286 287 288 289 290 291
    /// @brief Returns pointer to the object holding configuration of the
    /// server identifier.
    CfgDUIDPtr getCfgDUID() {
        return (cfg_duid_);
    }

    /// @brief Returns const pointer to the object holding configuration
    /// of the server identifier.
    ConstCfgDUIDPtr getCfgDUID() const {
        return (cfg_duid_);
    }

292
    /// @brief Returns pointer to the object holding configuration of the
293 294 295 296 297 298 299 300 301 302 303
    /// lease and host database connection parameters.
    CfgDbAccessPtr getCfgDbAccess() {
        return (cfg_db_access_);
    }

    /// @brief Returns const pointer to the object holding configuration of
    /// the lease and host database connection parameters.
    ConstCfgDbAccessPtr getCfgDbAccess() const {
        return (cfg_db_access_);
    }

304 305
    /// @brief Returns pointer to the object holding general configuration
    /// for host reservations in DHCPv4.
306 307
    CfgHostOperationsPtr getCfgHostOperations4() {
        return (cfg_host_operations4_);
308 309 310 311
    }

    /// @brief Returns const pointer to the object holding general
    /// configuration for host reservations in DHCPv4
312 313
    ConstCfgHostOperationsPtr getCfgHostOperations4() const {
        return (cfg_host_operations4_);
314 315 316 317
    }

    /// @brief Returns pointer to the object holding general configuration
    /// for host reservations in DHCPv6.
318 319
    CfgHostOperationsPtr getCfgHostOperations6() {
        return (cfg_host_operations6_);
320 321 322 323
    }

    /// @brief Returns const pointer to the object holding general
    /// configuration for host reservations in DHCPv6
324 325
    ConstCfgHostOperationsPtr getCfgHostOperations6() const {
        return (cfg_host_operations6_);
326 327
    }

328 329 330 331 332
    /// @brief Returns const pointer to object holding sanity checks flags
    CfgConsistencyPtr getConsistency() {
        return (cfg_consist_);
    }

333
    //@}
334

335 336
    /// @brief Returns non-const reference to an array that stores
    ///        MAC/hardware address sources.
337
    ///
338 339 340
    /// @return non-const reference to MAC/hardware address sources
    CfgMACSource& getMACSources() {
        return (cfg_mac_source_);
341 342
    }

343 344 345 346 347 348
    /// @brief Returns const reference to an array that stores
    ///        MAC/hardware address sources.
    ///
    /// @return const reference to MAC/hardware address sources
    const CfgMACSource& getMACSources() const {
        return (cfg_mac_source_);
349 350
    }

351 352 353 354 355 356 357 358 359 360 361 362
    /// @brief Returns information about control socket
    /// @return pointer to the Element that holds control-socket map
    const isc::data::ConstElementPtr getControlSocketInfo() const {
        return (control_socket_);
    }

    /// @brief Sets information about the control socket
    /// @param control_socket Element that holds control-socket map
    void setControlSocketInfo(const isc::data::ConstElementPtr& control_socket) {
        control_socket_ = control_socket;
    }

363 364 365 366
    /// @brief Returns DHCP queue control information
    /// @return pointer to the DHCP queue control information
    const isc::data::ConstElementPtr getDHCPQueueControl() const {
        return (dhcp_queue_control_);
367 368
    }

369
    /// @brief Sets information about the dhcp queue control
370
    /// @param dhcp_queue_control new dhcp queue control information
371 372
    void setDHCPQueueControl(const isc::data::ConstElementPtr dhcp_queue_control) {
        dhcp_queue_control_ = dhcp_queue_control;
373 374
    }

375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
    /// @brief Returns pointer to the dictionary of global client
    /// class definitions
    ClientClassDictionaryPtr getClientClassDictionary() {
        return (class_dictionary_);
    }

    /// @brief Returns pointer to const dictionary of global client
    /// class definitions
    const ClientClassDictionaryPtr getClientClassDictionary() const {
        return (class_dictionary_);
    }

    /// @brief Sets the client class dictionary
    /// @param dictionary pointer to the new class dictionary
    void setClientClassDictionary(const ClientClassDictionaryPtr& dictionary) {
        class_dictionary_ = dictionary;
    }

393 394 395 396 397 398 399 400 401 402 403 404 405 406
    /// @brief Returns non-const reference to configured hooks libraries.
    ///
    /// @return non-const reference to configured hooks libraries.
    isc::hooks::HooksConfig& getHooksConfig() {
        return (hooks_config_);
    }

    /// @brief Returns const reference to configured hooks libraries.
    ///
    /// @return const reference to configured hooks libraries.
    const isc::hooks::HooksConfig& getHooksConfig() const {
        return (hooks_config_);
    }

407
    /// @brief Copies the current configuration to a new configuration.
408 409 410 411 412
    ///
    /// This method copies the parameters stored in the configuration to
    /// an object passed as parameter. The configuration sequence is not
    /// copied.
    ///
413 414 415 416 417 418
    /// @warning Some of the configuration objects are not copied at
    /// this point, e.g. subnets. This is because they contain quite complex
    /// data structures and they make use of pointers, so in many cases
    /// the default copy constructors can't be used. Implementing this
    /// requires quite a lot of time so this is left as is for now.
    /// The lack of ability to copy the entire configuration makes
Josh Soref's avatar
Josh Soref committed
419
    /// revert function of the @c CfgMgr unusable.
420
    ///
421 422
    /// @param [out] new_config An object to which the configuration will
    /// be copied.
423
    void copy(SrvConfig& new_config) const;
424

425 426 427 428 429 430 431 432 433 434 435 436
    /// @name Methods and operators used to compare configurations.
    ///
    //@{
    ///
    /// @brief Compares two objects for equality.
    ///
    /// It ignores the configuration sequence number when checking for
    /// equality of objects.
    ///
    /// @param other An object to be compared with this object.
    ///
    /// @return true if two objects are equal, false otherwise.
437
    bool equals(const SrvConfig& other) const;
438 439 440 441 442 443 444 445 446

    /// @brief Compares two objects for inequality.
    ///
    /// It ignores the configuration sequence number when checking for
    /// inequality of objects.
    ///
    /// @param other An object to be compared with this object.
    ///
    /// @return true if two objects are not equal, false otherwise.
447
    bool nequals(const SrvConfig& other) const {
448 449 450 451 452 453 454 455 456 457 458
        return (!equals(other));
    }

    /// @brief Equality operator.
    ///
    /// It ignores the configuration sequence number when checking for
    /// equality of objects.
    ///
    /// @param other An object to be compared with this object.
    ///
    /// @return true if two objects are equal, false otherwise.
459
    bool operator==(const SrvConfig& other) const {
460 461 462 463 464 465 466 467 468 469 470
        return (equals(other));
    }

    /// @param other An object to be compared with this object.
    ///
    /// It ignores the configuration sequence number when checking for
    /// inequality of objects.
    ///
    /// @param other An object to be compared with this object.
    ///
    /// @return true if two objects are not equal, false otherwise.
471
    bool operator!=(const SrvConfig& other) const {
472 473 474 475 476
        return (nequals(other));
    }

    //@}

477 478 479
    /// @brief Updates statistics.
    ///
    /// This method calls appropriate methods in child objects that update
480 481
    /// related statistics. See @ref CfgSubnets4::updateStatistics and
    /// @ref CfgSubnets6::updateStatistics for details.
482 483 484 485 486
    void updateStatistics();

    /// @brief Removes statistics.
    ///
    /// This method calls appropriate methods in child objects that remove
487 488
    /// related statistics. See @ref CfgSubnets4::removeStatistics and
    /// @ref CfgSubnets6::removeStatistics for details.
489
    void removeStatistics();
490

491
    /// @brief Sets decline probation-period
492 493 494 495
    ///
    /// Probation-period is the timer, expressed, in seconds, that specifies how
    /// long a lease is unavailable after reported as declined.
    ///
496
    /// @param decline_timer number of seconds after declined lease is restored
497
    void setDeclinePeriod(const uint32_t decline_timer) {
498 499 500
        decline_timer_ = decline_timer;
    }

501 502 503 504
    /// @brief Returns probation-period
    ///
    /// See @ref setDeclinePeriod for brief discussion.
    /// @return value of probation-period, expressed in seconds
505 506 507 508
    uint32_t getDeclinePeriod() const {
        return (decline_timer_);
    }

509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524
    /// @brief Sets whether server should send back client-id in DHCPv4
    ///
    /// This is a compatibility flag. The default (true) is compliant with
    /// RFC6842. False is for backward compatibility.
    ///
    /// @param echo should the client-id be sent or not
    void setEchoClientId(const bool echo) {
        echo_v4_client_id_ = echo;
    }

    /// @brief Returns whether server should send back client-id in DHCPv4.
    /// @return true if client-id should be returned, false otherwise.
    bool getEchoClientId() const {
        return (echo_v4_client_id_);
    }

525 526 527 528 529 530
    /// @brief Sets DHCP4o6 IPC port
    ///
    /// DHCPv4-over-DHCPv6 uses a UDP socket for interserver communication,
    /// this socket is bound and connected to this port and port + 1
    ///
    /// @param port port and port + 1 to use
531
    void setDhcp4o6Port(uint16_t port) {
532 533 534 535 536
        dhcp4o6_port_ = port;
    }

    /// @brief Returns DHCP4o6 IPC port
    ///
537
    /// See @ref setDhcp4o6Port for brief discussion.
538
    /// @return value of DHCP4o6 IPC port
539
    uint16_t getDhcp4o6Port() {
540 541 542
        return (dhcp4o6_port_);
    }

543 544 545 546 547 548 549 550 551 552 553
    /// @brief Returns pointer to the D2 client configuration
    D2ClientConfigPtr getD2ClientConfig() {
        return (d2_client_config_);
    }

    /// @brief Returns pointer to const D2 client configuration
    const D2ClientConfigPtr getD2ClientConfig() const {
        return (d2_client_config_);
    }

    /// @brief Sets the D2 client configuration
554
    /// @param d2_client_config pointer to the new D2 client configuration
555 556 557 558
    void setD2ClientConfig(const D2ClientConfigPtr& d2_client_config) {
        d2_client_config_ = d2_client_config;
    }

559 560 561 562 563 564 565 566 567 568 569 570 571 572 573
    /// @brief Returns pointer to configured global parameters
    isc::data::ConstElementPtr getConfiguredGlobals() const {
        return (isc::data::ConstElementPtr(configured_globals_));
    }

    /// @brief Saves scalar elements from the global scope of a configuration
    void extractConfiguredGlobals(isc::data::ConstElementPtr config);

    /// @brief Adds a parameter to the collection configured globals
    /// @param name std::string name of the global to add
    /// @param value ElementPtr containing the value of the global
    void addConfiguredGlobal(const std::string& name, isc::data::ConstElementPtr value) {
        configured_globals_->set(name, value);
    }

574 575 576 577 578 579 580 581 582 583 584 585 586 587 588
    /// @brief Sets the server's logical name
    ///
    /// @param server_tag a unique string name which identifies this server
    /// from any other configured servers
    void setServerTag(const std::string& server_tag) {
        server_tag_ = server_tag;
    }

    /// @brief Returns the server's logical name
    ///
    /// @return string containing the server's tag
    std::string getServerTag() const {
        return (server_tag_);
    }

589
    /// @brief Unparse a configuration object
590 591 592 593
    ///
    /// @return a pointer to unparsed configuration
    virtual isc::data::ElementPtr toElement() const;

594 595 596 597 598 599 600 601 602
private:

    /// @brief Sequence number identifying the configuration.
    uint32_t sequence_;

    /// @brief Interface configuration.
    ///
    /// Used to select interfaces on which the DHCP server will listen to
    /// queries.
603
    CfgIfacePtr cfg_iface_;
604

605
    /// @brief Pointer to option definitions configuration.
606 607 608
    ///
    /// This object holds the user-defined option definitions grouped
    /// by option space name.
609
    CfgOptionDefPtr cfg_option_def_;
610

611 612 613 614 615 616
    /// @brief Pointer to options (data) configuration.
    ///
    /// This object holds the instances of the options to be sent to clients
    /// connected to any subnet.
    CfgOptionPtr cfg_option_;

617 618 619
    /// @brief Pointer to subnets configuration for IPv4.
    CfgSubnets4Ptr cfg_subnets4_;

620
    /// @brief Pointer to subnets configuration for IPv6.
621 622
    CfgSubnets6Ptr cfg_subnets6_;

623 624 625 626 627 628
    /// @brief Pointer to IPv4 shared networks configuration.
    CfgSharedNetworks4Ptr cfg_shared_networks4_;

    /// @brief Pointer to IPv4 shared networks configuration.
    CfgSharedNetworks6Ptr cfg_shared_networks6_;

629 630 631 632 633 634
    /// @brief Pointer to the configuration for hosts reservation.
    ///
    /// This object holds a list of @c Host objects representing host
    /// reservations for different IPv4 and IPv6 subnets.
    CfgHostsPtr cfg_hosts_;

635
    /// @brief A list of configured MAC sources.
636
    CfgMACSource cfg_mac_source_;
637 638 639

    /// @brief Pointer to the configuration for RSOO-enabled options.
    ///
640 641
    /// This object holds a set of RSOO-enabled options. See
    /// RFC 6422 for the definition of the RSOO-enabled option.
642
    CfgRSOOPtr cfg_rsoo_;
643

644 645 646 647
    /// @brief Pointer to the configuration pertaining to processing of
    /// expired leases.
    CfgExpirationPtr cfg_expiration_;

648 649 650
    /// @brief Pointer to the configuration of the server identifier.
    CfgDUIDPtr cfg_duid_;

651 652 653 654
    /// @brief Pointer to the configuration of the lease and host database
    /// connection parameters.
    CfgDbAccessPtr cfg_db_access_;

655 656
    /// @brief Pointer to the general configuration for host reservations in
    /// DHCPv4.
657
    CfgHostOperationsPtr cfg_host_operations4_;
658 659 660

    /// @brief Pointer to the general configuration for host reservations in
    /// DHCPv6.
661
    CfgHostOperationsPtr cfg_host_operations6_;
662

663 664
    /// @brief Pointer to the control-socket information
    isc::data::ConstElementPtr control_socket_;
665

666 667
    /// @brief Pointer to the dhcp-queue-control information
    isc::data::ConstElementPtr dhcp_queue_control_;
668

669 670 671
    /// @brief Pointer to the dictionary of global client class definitions
    ClientClassDictionaryPtr class_dictionary_;

672 673 674
    /// @brief Configured hooks libraries.
    isc::hooks::HooksConfig hooks_config_;

675
    /// @brief Decline Period time
676 677 678
    ///
    /// This timer specifies decline probation period, the time after a declined
    /// lease is recovered back to available state. Expressed in seconds.
679
    uint32_t decline_timer_;
680

681 682 683
    /// @brief Indicates whether v4 server should send back client-id
    bool echo_v4_client_id_;

684 685 686 687
    /// @brief DHCP4o6 IPC port
    ///
    /// DHCPv4-over-DHCPv6 uses a UDP socket for interserver communication,
    /// this socket is bound and connected to this port and port + 1
688
    uint16_t dhcp4o6_port_;
689

690
    /// @brief Stores D2 client configuration
691
    D2ClientConfigPtr d2_client_config_;
692 693 694

    /// @brief Stores the global parameters specified via configuration
    isc::data::ElementPtr configured_globals_;
695 696 697

    /// @brief Pointer to the configuration consistency settings
    CfgConsistencyPtr cfg_consist_;
698 699 700

    /// @brief Logical name of the server
    std::string server_tag_;
701 702
};

703
/// @name Pointers to the @c SrvConfig object.
704 705
///
//@{
706 707
/// @brief Non-const pointer to the @c SrvConfig.
typedef boost::shared_ptr<SrvConfig> SrvConfigPtr;
708

709 710
/// @brief Const pointer to the @c SrvConfig.
typedef boost::shared_ptr<const SrvConfig> ConstSrvConfigPtr;
711 712
//@}

713 714 715
} // namespace isc::dhcp
} // namespace isc

716
#endif // DHCPSRV_CONFIG_H