summaryrefslogtreecommitdiffstats
path: root/src/lib/dhcpsrv/cfg_host_operations.cc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 11:36:04 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 11:36:04 +0000
commit040eee1aa49b49df4698d83a05af57c220127fd1 (patch)
treef635435954e6ccde5eee9893889e24f30ca68346 /src/lib/dhcpsrv/cfg_host_operations.cc
parentInitial commit. (diff)
downloadisc-kea-040eee1aa49b49df4698d83a05af57c220127fd1.tar.xz
isc-kea-040eee1aa49b49df4698d83a05af57c220127fd1.zip
Adding upstream version 2.2.0.upstream/2.2.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/lib/dhcpsrv/cfg_host_operations.cc')
-rw-r--r--src/lib/dhcpsrv/cfg_host_operations.cc73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/lib/dhcpsrv/cfg_host_operations.cc b/src/lib/dhcpsrv/cfg_host_operations.cc
new file mode 100644
index 0000000..f588b9d
--- /dev/null
+++ b/src/lib/dhcpsrv/cfg_host_operations.cc
@@ -0,0 +1,73 @@
+// Copyright (C) 2016-2017 Internet Systems Consortium, Inc. ("ISC")
+//
+// 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/.
+
+#include <config.h>
+
+#include <exceptions/exceptions.h>
+#include <dhcpsrv/cfg_host_operations.h>
+#include <algorithm>
+#include <string>
+
+using namespace isc::data;
+
+namespace isc {
+namespace dhcp {
+
+CfgHostOperations::CfgHostOperations()
+ : identifier_types_() {
+}
+
+CfgHostOperationsPtr
+CfgHostOperations::createConfig4() {
+ // If this list is modified, please update reservations4-tuning section in
+ // doc/guide/dhcp4-srv.xml
+ CfgHostOperationsPtr cfg(new CfgHostOperations());
+ cfg->addIdentifierType("hw-address");
+ cfg->addIdentifierType("duid");
+ cfg->addIdentifierType("circuit-id");
+ cfg->addIdentifierType("client-id");
+ return (cfg);
+}
+
+CfgHostOperationsPtr
+CfgHostOperations::createConfig6() {
+ // If this list is modified, please update reservations6-tuning section in
+ // doc/guide/dhcp6-srv.xml
+ CfgHostOperationsPtr cfg(new CfgHostOperations());
+ cfg->addIdentifierType("hw-address");
+ cfg->addIdentifierType("duid");
+ return (cfg);
+}
+
+void
+CfgHostOperations::addIdentifierType(const std::string& identifier_name) {
+ Host::IdentifierType identifier_type = Host::getIdentifierType(identifier_name);
+ if (std::find(identifier_types_.begin(), identifier_types_.end(),
+ identifier_type) != identifier_types_.end()) {
+ isc_throw(isc::BadValue, "duplicate host identifier '"
+ << identifier_name << "'");
+ }
+ identifier_types_.push_back(identifier_type);
+}
+
+void
+CfgHostOperations::clearIdentifierTypes() {
+ identifier_types_.clear();
+}
+
+ElementPtr
+CfgHostOperations::toElement() const {
+ ElementPtr result = Element::createList();
+ for (IdentifierTypes::const_iterator id = identifier_types_.begin();
+ id != identifier_types_.end(); ++id) {
+ const std::string& name = Host::getIdentifierName(*id);
+ result->add(Element::create(name));
+ }
+ return (result);
+}
+
+}
+}