From: Lorenzo Colitti Date: Wed, 3 Sep 2014 09:14:15 +0000 (+0000) Subject: am a47ea0b4: am 667c4771: Add a socket mark parameter to tethering DNS commands. X-Git-Tag: android-x86-7.1-r1~183 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0537152145e8fa081913b75ec5648b83766c30f2;hp=4aa79fa7f79c029b04a0dc026039617a6c0dcc65;p=android-x86%2Fsystem-netd.git am a47ea0b4: am 667c4771: Add a socket mark parameter to tethering DNS commands. * commit 'a47ea0b4e4e40c8ee184fe1b53faf255bee29b44': Add a socket mark parameter to tethering DNS commands. --- diff --git a/server/CommandListener.cpp b/server/CommandListener.cpp index b946492..e03a5fc 100644 --- a/server/CommandListener.cpp +++ b/server/CommandListener.cpp @@ -536,6 +536,10 @@ int CommandListener::TetherCmd::runCommand(SocketClient *cli, cli->sendMsg(ResponseCode::TetherInterfaceListResult, *it, false); } } else if (!strcmp(argv[1], "dns") && !strcmp(argv[2], "list")) { + char netIdStr[UINT32_STRLEN]; + snprintf(netIdStr, sizeof(netIdStr), "%u", sTetherCtrl->getDnsNetId()); + cli->sendMsg(ResponseCode::TetherDnsFwdNetIdResult, netIdStr, false); + NetAddressCollection *dlist = sTetherCtrl->getDnsForwarders(); NetAddressCollection::iterator it; @@ -584,7 +588,12 @@ int CommandListener::TetherCmd::runCommand(SocketClient *cli, } } else if (!strcmp(argv[1], "dns")) { if (!strcmp(argv[2], "set")) { - rc = sTetherCtrl->setDnsForwarders(&argv[3], argc - 3); + if (argc < 5) { + cli->sendMsg(ResponseCode::CommandSyntaxError, "Missing argument", false); + return 0; + } + unsigned netId = stringToNetId(argv[3]); + rc = sTetherCtrl->setDnsForwarders(netId, &argv[4], argc - 4); /* else if (!strcmp(argv[2], "list")) handled above */ } else { cli->sendMsg(ResponseCode::CommandParameterError, diff --git a/server/ResponseCode.h b/server/ResponseCode.h index c623acd..6a0c22c 100644 --- a/server/ResponseCode.h +++ b/server/ResponseCode.h @@ -29,6 +29,7 @@ public: static const int TetherDnsFwdTgtListResult = 112; static const int TtyListResult = 113; static const int TetheringStatsListResult = 114; + static const int TetherDnsFwdNetIdResult = 115; // 200 series - Requested action has been successfully completed static const int CommandOkay = 200; 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 #include +#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 @@ bool TetherController::isTetheringStarted() { #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 @@ int TetherController::setDnsForwarders(char **servers, int numServers) { 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 @@ int TetherController::setDnsForwarders(char **servers, int numServers) { return 0; } +unsigned TetherController::getDnsNetId() { + return mDnsNetId; +} + NetAddressCollection *TetherController::getDnsForwarders() { return mDnsForwarders; } diff --git a/server/TetherController.h b/server/TetherController.h index 4da10b0..1c32627 100644 --- a/server/TetherController.h +++ b/server/TetherController.h @@ -26,6 +26,9 @@ typedef android::netd::List NetAddressCollection; class TetherController { InterfaceCollection *mInterfaces; + // NetId to use for forwarded DNS queries. This may not be the default + // network, e.g., in the case where we are tethering to a DUN APN. + unsigned mDnsNetId; NetAddressCollection *mDnsForwarders; pid_t mDaemonPid; int mDaemonFd; @@ -42,7 +45,8 @@ public: int stopTethering(); bool isTetheringStarted(); - int setDnsForwarders(char **servers, int numServers); + unsigned getDnsNetId(); + int setDnsForwarders(unsigned netId, char **servers, int numServers); NetAddressCollection *getDnsForwarders(); int tetherInterface(const char *interface);