Add a socket mark parameter to tethering DNS commands.
This allows the framework to pass down to dnsmasq the socket mark
to use for DNS queries.
Bug: 16357676
Change-Id: I8933b6de198a92c2aaf0291931ace8966ddba275
diff --git a/server/TetherController.cpp b/server/TetherController.cpp
index fbee5a2..fb51c06 100644
--- a/server/TetherController.cpp
+++ b/server/TetherController.cpp
@@ -31,11 +31,14 @@
#include <cutils/log.h>
#include <cutils/properties.h>
+#include "Fwmark.h"
#include "NetdConstants.h"
+#include "Permission.h"
#include "TetherController.h"
TetherController::TetherController() {
mInterfaces = new InterfaceCollection();
+ mDnsNetId = 0;
mDnsForwarders = new NetAddressCollection();
mDaemonFd = -1;
mDaemonPid = 0;
@@ -197,16 +200,22 @@
#define MAX_CMD_SIZE 1024
-int TetherController::setDnsForwarders(char **servers, int numServers) {
+int TetherController::setDnsForwarders(unsigned netId, char **servers, int numServers) {
int i;
char daemonCmd[MAX_CMD_SIZE];
- strcpy(daemonCmd, "update_dns");
+ Fwmark fwmark;
+ fwmark.netId = netId;
+ fwmark.explicitlySelected = true;
+ fwmark.protectedFromVpn = true;
+ fwmark.permission = PERMISSION_SYSTEM;
+
+ snprintf(daemonCmd, sizeof(daemonCmd), "update_dns:0x%x", fwmark.intValue);
int cmdLen = strlen(daemonCmd);
mDnsForwarders->clear();
for (i = 0; i < numServers; i++) {
- ALOGD("setDnsForwarders(%d = '%s')", i, servers[i]);
+ ALOGD("setDnsForwarders(0x%x %d = '%s')", fwmark.intValue, i, servers[i]);
struct in_addr a;
@@ -227,6 +236,7 @@
mDnsForwarders->push_back(a);
}
+ mDnsNetId = netId;
if (mDaemonFd != -1) {
ALOGD("Sending update msg to dnsmasq [%s]", daemonCmd);
if (write(mDaemonFd, daemonCmd, strlen(daemonCmd) +1) < 0) {
@@ -238,6 +248,10 @@
return 0;
}
+unsigned TetherController::getDnsNetId() {
+ return mDnsNetId;
+}
+
NetAddressCollection *TetherController::getDnsForwarders() {
return mDnsForwarders;
}