|
@@ -0,0 +1,61 @@
|
|
|
+// Copyright (C) 2014 Internet Systems Consortium, Inc. ("ISC")
|
|
|
+//
|
|
|
+// Permission to use, copy, modify, and/or distribute this software for any
|
|
|
+// purpose with or without fee is hereby granted, provided that the above
|
|
|
+// copyright notice and this permission notice appear in all copies.
|
|
|
+//
|
|
|
+// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
|
|
|
+// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
|
+// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
|
+// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
|
+// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
|
|
+// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
+// PERFORMANCE OF THIS SOFTWARE.
|
|
|
+
|
|
|
+#include <asiolink/io_address.h>
|
|
|
+#include <dhcpsrv/host_reservation_parser.h>
|
|
|
+#include <boost/foreach.hpp>
|
|
|
+#include <string>
|
|
|
+
|
|
|
+using namespace isc::asiolink;
|
|
|
+
|
|
|
+namespace isc {
|
|
|
+namespace dhcp {
|
|
|
+
|
|
|
+HostReservationParser::HostReservationParser()
|
|
|
+ : DhcpConfigParser() {
|
|
|
+}
|
|
|
+
|
|
|
+void
|
|
|
+HostReservationParser::build(isc::data::ConstElementPtr reservation_data) {
|
|
|
+ std::string identifier;
|
|
|
+ std::string identifier_name;
|
|
|
+ std::string hostname;
|
|
|
+
|
|
|
+ BOOST_FOREACH(ConfigPair element, reservation_data->mapValue()) {
|
|
|
+ try {
|
|
|
+ if (element.first == "hw-address" || element.first == "duid") {
|
|
|
+ if (!identifier_name.empty()) {
|
|
|
+ isc_throw(DhcpConfigError, "the 'hw-address' and 'duid'"
|
|
|
+ " parameters are mutually exclusive");
|
|
|
+ }
|
|
|
+ identifier = element.second->stringValue();
|
|
|
+ identifier_name = element.first;
|
|
|
+
|
|
|
+ } else if (element.first == "hostname") {
|
|
|
+ hostname = element.second->stringValue();
|
|
|
+
|
|
|
+ }
|
|
|
+ } catch (const std::exception& ex) {
|
|
|
+ // Append line number where the error occurred.
|
|
|
+ isc_throw(DhcpConfigError, ex.what() << " ("
|
|
|
+ << element.second->getPosition() << ")");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ host_.reset(new Host(identifier, identifier_name, SubnetID(0), SubnetID(0),
|
|
|
+ IOAddress("0.0.0.0"), hostname));
|
|
|
+}
|
|
|
+
|
|
|
+} // end of namespace isc::dhcp
|
|
|
+} // end of namespace isc
|