diff options
Diffstat (limited to 'src/lib/dhcpsrv/parsers/sanity_checks_parser.cc')
-rw-r--r-- | src/lib/dhcpsrv/parsers/sanity_checks_parser.cc | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/lib/dhcpsrv/parsers/sanity_checks_parser.cc b/src/lib/dhcpsrv/parsers/sanity_checks_parser.cc new file mode 100644 index 0000000..e7c0b20 --- /dev/null +++ b/src/lib/dhcpsrv/parsers/sanity_checks_parser.cc @@ -0,0 +1,80 @@ +// Copyright (C) 2018-2022 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 <dhcpsrv/parsers/sanity_checks_parser.h> +#include <dhcpsrv/cfg_consistency.h> +#include <cc/data.h> + +using namespace isc::data; + +namespace isc { +namespace dhcp { + +void +SanityChecksParser::parse(SrvConfig& cfg, const ConstElementPtr& sanity_checks) { + + if (!sanity_checks) { + return; + } + if (sanity_checks->getType() != Element::map) { + isc_throw(DhcpConfigError, "sanity-checks is supposed to be a map"); + } + + // Subnet-id lease checker. + ConstElementPtr checks = sanity_checks->get("lease-checks"); + if (checks) { + if (checks->getType() != Element::string) { + isc_throw(DhcpConfigError, "lease-checks must be a string"); + } + std::string lc = checks->stringValue(); + CfgConsistency::LeaseSanity check; + if (lc == "none") { + check = CfgConsistency::LEASE_CHECK_NONE; + } else if (lc == "warn") { + check = CfgConsistency::LEASE_CHECK_WARN; + } else if (lc == "fix") { + check = CfgConsistency::LEASE_CHECK_FIX; + } else if (lc == "fix-del") { + check = CfgConsistency::LEASE_CHECK_FIX_DEL; + } else if (lc == "del") { + check = CfgConsistency::LEASE_CHECK_DEL; + } else { + isc_throw(DhcpConfigError, "Unsupported lease-checks value: " << lc + << ", supported values are: none, warn, fix, fix-del, del"); + } + cfg.getConsistency()->setLeaseSanityCheck(check); + } + + // Extended info lease checker. + checks = sanity_checks->get("extended-info-checks"); + if (checks) { + if (checks->getType() != Element::string) { + isc_throw(DhcpConfigError, "extended-info-checks must be a string"); + } + std::string exc = checks->stringValue(); + CfgConsistency::ExtendedInfoSanity check; + if (exc == "none") { + check = CfgConsistency::EXTENDED_INFO_CHECK_NONE; + } else if (exc == "fix") { + check = CfgConsistency::EXTENDED_INFO_CHECK_FIX; + } else if (exc == "strict") { + check = CfgConsistency::EXTENDED_INFO_CHECK_STRICT; + } else if (exc == "pedantic") { + check = CfgConsistency::EXTENDED_INFO_CHECK_PEDANTIC; + } else { + isc_throw(DhcpConfigError, + "Unsupported extended-info-checks value: " << exc + << ", supported values are: none, fix, strict, pedantic"); + } + cfg.getConsistency()->setExtendedInfoSanityCheck(check); + } + + // Additional sanity check fields will come in later here. +} + +} +} |