apmanager: DHCP server support

Start a DHCP server for an AP service when it is configured in server
mode. The server address is configure as "192.168.x.254" where
x is the least significant byte of the service identifier. The DHCP
range is from 192.168.x.1 to 192.168.x.128.

BUG=chromium:438836
TEST=unittests and manual test
Manual test:
Start an AP service using apmanager and verify a DUT can connect
to it with an IP address
CQ-DEPEND=CL:233032,CL:233493

Change-Id: I16a0d03c8eac7f02722c8c8f5185ca75a1edebcb
Reviewed-on: https://chromium-review.googlesource.com/233047
Reviewed-by: Peter Qiu <zqiu@chromium.org>
Commit-Queue: Peter Qiu <zqiu@chromium.org>
Tested-by: Peter Qiu <zqiu@chromium.org>
diff --git a/service.h b/service.h
index feb2ceb..4bf8019 100644
--- a/service.h
+++ b/service.h
@@ -12,6 +12,7 @@
 
 #include "apmanager/config.h"
 #include "apmanager/dbus_adaptors/org.chromium.apmanager.Service.h"
+#include "apmanager/dhcp_server_factory.h"
 
 namespace apmanager {
 
@@ -53,6 +54,9 @@
   // a SIGKILL if failed to terminated with SIGTERM.
   void StopHostapdProcess();
 
+  // Release resources allocated to this service.
+  void ReleaseResources();
+
   Manager* manager_;
   int service_identifier_;
   std::string service_path_;
@@ -60,6 +64,8 @@
   std::unique_ptr<Config> config_;
   std::unique_ptr<chromeos::dbus_utils::DBusObject> dbus_object_;
   std::unique_ptr<chromeos::Process> hostapd_process_;
+  std::unique_ptr<DHCPServer> dhcp_server_;
+  DHCPServerFactory* dhcp_server_factory_;
 
   DISALLOW_COPY_AND_ASSIGN(Service);
 };