summaryrefslogtreecommitdiff
path: root/server/ClatdController.cpp
diff options
context:
space:
mode:
authorLorenzo Colitti <lorenzo@google.com>2014-06-09 14:09:20 +0900
committerLorenzo Colitti <lorenzo@google.com>2014-06-13 11:34:18 +0900
commit45d3dd0ad99d566ea589d9d5d37102ef35ca8fb2 (patch)
treeaf2530021374b327dd6fe0f5d27f29edce316970 /server/ClatdController.cpp
parent3fea54b4de8b09f299fe8f2b184997f560986738 (diff)
downloadnetd-45d3dd0ad99d566ea589d9d5d37102ef35ca8fb2.tar.gz
Pass a socket mark to clatd so it can bind to its network.
Bug: 15340961 Change-Id: If15e90cbd5526f6c8fd839d4d009846d64d9e77a
Diffstat (limited to 'server/ClatdController.cpp')
-rw-r--r--server/ClatdController.cpp22
1 files changed, 16 insertions, 6 deletions
diff --git a/server/ClatdController.cpp b/server/ClatdController.cpp
index 46834c64..b91b69aa 100644
--- a/server/ClatdController.cpp
+++ b/server/ClatdController.cpp
@@ -22,6 +22,7 @@
#include <cutils/log.h>
#include "ClatdController.h"
+#include "Fwmark.h"
#include "NetdConstants.h"
#include "NetworkController.h"
@@ -49,14 +50,23 @@ int ClatdController::startClatd(char *interface) {
}
if (!pid) {
- char netId[UINT32_STRLEN];
- snprintf(netId, sizeof(netId), "%u", mNetCtrl->getNetworkId(interface));
+ // Pass in the interface, a netid to use for DNS lookups, and a fwmark for outgoing packets.
+ unsigned netId = mNetCtrl->getNetworkId(interface);
+ char netIdString[UINT32_STRLEN];
+ snprintf(netIdString, sizeof(netIdString), "%u", netId);
+
+ Fwmark fwmark = { netId, true, true, PERMISSION_CONNECTIVITY_INTERNAL };
+ char fwmarkString[UINT32_HEX_STRLEN];
+ snprintf(fwmarkString, sizeof(fwmarkString), "0x%x", fwmark.intValue);
+
char *args[] = {
- (char*)"/system/bin/clatd",
- (char*)"-i",
+ (char *) "/system/bin/clatd",
+ (char *) "-i",
interface,
- (char*)"-n",
- netId,
+ (char *) "-n",
+ netIdString,
+ (char *) "-m",
+ fwmarkString,
NULL
};