// 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 #include #include #include 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. } } }