diff options
author | Lorenzo Colitti <lorenzo@google.com> | 2014-06-09 14:09:20 +0900 |
---|---|---|
committer | Lorenzo Colitti <lorenzo@google.com> | 2014-06-13 11:34:18 +0900 |
commit | 45d3dd0ad99d566ea589d9d5d37102ef35ca8fb2 (patch) | |
tree | af2530021374b327dd6fe0f5d27f29edce316970 /server/ClatdController.cpp | |
parent | 3fea54b4de8b09f299fe8f2b184997f560986738 (diff) | |
download | netd-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.cpp | 22 |
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 }; |