Overwrite dnsmasq pid file path for Android
dnsmasq normally creates a pid file in /var/run/dnsmasq.pid, which
doesn't exist on Android. So specify the pid file to a valid file
path on Android.
Bug: 22828115
TEST=Manual test on dragonboard
Change-Id: Ibd1db2d4df71d2693204307ad6886132da4187b7
diff --git a/dhcp_server.cc b/dhcp_server.cc
index de54bdf..5531f0d 100644
--- a/dhcp_server.cc
+++ b/dhcp_server.cc
@@ -40,6 +40,8 @@
"/data/misc/apmanager/dnsmasq/dhcpd-%d.conf";
const char DHCPServer::kDHCPLeasesFilePathFormat[] =
"/data/misc/apmanager/dnsmasq/dhcpd-%d.leases";
+const char DHCPServer::kDnsmasqPidFilePath[] =
+ "/data/misc/apmanager/dnsmasq/dnsmasq.pid";
#endif // __ANDROID__
const char DHCPServer::kServerAddressFormat[] = "192.168.%d.254";
@@ -100,6 +102,12 @@
dnsmasq_process_->AddArg(kDnsmasqPath);
dnsmasq_process_->AddArg(base::StringPrintf("--conf-file=%s",
file_name.c_str()));
+#if defined(__ANDROID__)
+ // dnsmasq normally creates a pid file in /var/run/dnsmasq.pid. Overwrite
+ // this file path for Android.
+ dnsmasq_process_->AddArg(
+ base::StringPrintf("--pid-file=%s", kDnsmasqPidFilePath));
+#endif // __ANDROID__
if (!dnsmasq_process_->Start()) {
rtnl_handler_->RemoveInterfaceAddress(interface_index, server_address_);
dnsmasq_process_.reset();
diff --git a/dhcp_server.h b/dhcp_server.h
index 5a2320f..881edbb 100644
--- a/dhcp_server.h
+++ b/dhcp_server.h
@@ -50,6 +50,9 @@
static const char kAddressRangeHighFormat[];
static const int kServerAddressPrefix;
static const int kTerminationTimeoutSeconds;
+#if defined(__ANDROID__)
+ static const char kDnsmasqPidFilePath[];
+#endif // __ANDROID__
uint16_t server_address_index_;
std::string interface_name_;