]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[experiments/get-config] Experimental implementation
authorTomek Mrugalski <tomasz@isc.org>
Thu, 9 Mar 2017 15:54:09 +0000 (16:54 +0100)
committerTomek Mrugalski <tomasz@isc.org>
Mon, 13 Mar 2017 14:11:59 +0000 (15:11 +0100)
src/bin/dhcp4/ctrl_dhcp4_srv.cc
src/bin/dhcp4/ctrl_dhcp4_srv.h
src/bin/dhcp6/ctrl_dhcp6_srv.cc
src/bin/dhcp6/ctrl_dhcp6_srv.h

index 4eac126187dc95f70d8ae2fa6b56d078530a1093..c6c902936b50023b8e3013f52cd71bc40386101e 100644 (file)
@@ -66,6 +66,14 @@ ControlledDhcpv4Srv::commandConfigReloadHandler(const string&,
     return (commandSetConfigHandler("set-config", args));
 }
 
+ConstElementPtr
+ControlledDhcpv4Srv::commandGetConfigHandler(const string&,
+                                             ConstElementPtr /*args*/) {
+    ConstElementPtr config = CfgMgr::instance().getCurrentCfg()->toElement();
+
+    return (createAnswer(0, config));
+}
+
 ConstElementPtr
 ControlledDhcpv4Srv::commandSetConfigHandler(const string&,
                                              ConstElementPtr args) {
@@ -181,6 +189,9 @@ ControlledDhcpv4Srv::processCommand(const string& command,
         } else if (command == "set-config") {
             return (srv->commandSetConfigHandler(command, args));
 
+        } else if (command == "get-config") {
+            return (srv->commandGetConfigHandler(command, args));
+
         } else if (command == "leases-reclaim") {
             return (srv->commandLeasesReclaimHandler(command, args));
         }
@@ -323,6 +334,9 @@ ControlledDhcpv4Srv::ControlledDhcpv4Srv(uint16_t port /*= DHCP4_SERVER_PORT*/)
     CommandMgr::instance().registerCommand("set-config",
         boost::bind(&ControlledDhcpv4Srv::commandSetConfigHandler, this, _1, _2));
 
+    CommandMgr::instance().registerCommand("get-config",
+        boost::bind(&ControlledDhcpv4Srv::commandGetConfigHandler, this, _1, _2));
+
     CommandMgr::instance().registerCommand("leases-reclaim",
         boost::bind(&ControlledDhcpv4Srv::commandLeasesReclaimHandler, this, _1, _2));
 
@@ -364,6 +378,7 @@ ControlledDhcpv4Srv::~ControlledDhcpv4Srv() {
         CommandMgr::instance().closeCommandSocket();
 
         // Deregister any registered commands
+        CommandMgr::instance().deregisterCommand("get-config");
         CommandMgr::instance().deregisterCommand("shutdown");
         CommandMgr::instance().deregisterCommand("libreload");
         CommandMgr::instance().deregisterCommand("set-config");
index 169c869043b0616321b366a1e7e52974b84300c0..719b7a135909289d02a8ca79848aa85b72bb8d95 100644 (file)
@@ -144,6 +144,10 @@ private:
     commandConfigReloadHandler(const std::string& command,
                                isc::data::ConstElementPtr args);
 
+    isc::data::ConstElementPtr
+    commandGetConfigHandler(const std::string& command,
+                            isc::data::ConstElementPtr args);
+
     /// @brief handler for processing 'set-config' command
     ///
     /// This handler processes set-config command, which processes
index 11c2122a0e8f798f842e4f0d73e7c8a84a183247..9d169fa8b63e4b9038ed8a6fef81db9f7f02cbe6 100644 (file)
@@ -71,6 +71,14 @@ ControlledDhcpv6Srv::commandConfigReloadHandler(const string&, ConstElementPtr a
     return (commandSetConfigHandler("set-config", args));
 }
 
+ConstElementPtr
+ControlledDhcpv6Srv::commandGetConfigHandler(const string&,
+                                             ConstElementPtr /*args*/) {
+    ConstElementPtr config = CfgMgr::instance().getCurrentCfg()->toElement();
+
+    return (createAnswer(0, config));
+}
+
 ConstElementPtr
 ControlledDhcpv6Srv::commandSetConfigHandler(const string&,
                                              ConstElementPtr args) {
@@ -189,6 +197,9 @@ ControlledDhcpv6Srv::processCommand(const std::string& command,
         } else if (command == "set-config") {
             return (srv->commandSetConfigHandler(command, args));
 
+        } else if (command == "get-config") {
+            return (srv->commandGetConfigHandler(command, args));
+
         } else if (command == "leases-reclaim") {
             return (srv->commandLeasesReclaimHandler(command, args));
         }
@@ -352,6 +363,9 @@ ControlledDhcpv6Srv::ControlledDhcpv6Srv(uint16_t port)
     CommandMgr::instance().registerCommand("set-config",
         boost::bind(&ControlledDhcpv6Srv::commandSetConfigHandler, this, _1, _2));
 
+    CommandMgr::instance().registerCommand("get-config",
+        boost::bind(&ControlledDhcpv6Srv::commandGetConfigHandler, this, _1, _2));
+
     CommandMgr::instance().registerCommand("leases-reclaim",
         boost::bind(&ControlledDhcpv6Srv::commandLeasesReclaimHandler, this, _1, _2));
 
@@ -393,6 +407,7 @@ ControlledDhcpv6Srv::~ControlledDhcpv6Srv() {
         CommandMgr::instance().closeCommandSocket();
 
         // Deregister any registered commands
+        CommandMgr::instance().deregisterCommand("get-config");
         CommandMgr::instance().deregisterCommand("shutdown");
         CommandMgr::instance().deregisterCommand("libreload");
         CommandMgr::instance().deregisterCommand("set-config");
index 76bc1a181b1644b9702ac20c67d9714e9103bc4b..d05383e208aced1db6f45951ab06c31f5942152a 100644 (file)
@@ -144,6 +144,10 @@ private:
     commandConfigReloadHandler(const std::string& command,
                                isc::data::ConstElementPtr args);
 
+    isc::data::ConstElementPtr
+    commandGetConfigHandler(const std::string& command,
+                            isc::data::ConstElementPtr args);
+
     /// @brief handler for processing 'set-config' command
     ///
     /// This handler processes set-config command, which processes