diff options
| author | Erik Kline <ek@google.com> | 2015-06-25 18:24:46 +0900 |
|---|---|---|
| committer | Erik Kline <ek@google.com> | 2015-07-06 09:18:12 +0900 |
| commit | cea2d3455eb7c0d9ad1430607cbe98cc09251c1f (patch) | |
| tree | 15f4c089c1edf5fe8210f81a999ef9eaf6c732ec /server/NetworkController.cpp | |
| parent | feb2b61d3010d52e530357116c3b22c6d77da3cf (diff) | |
Use struct android_net_context when interfacing with bionic
Add a new NetworkController::getNetworkContext() that builds the
contents of a struct net_context out of getNetworkForConnect()
and getNetworkForDns().
Bug: 19470192
Bug: 20733156
Bug: 21832279
Change-Id: I5a69b0413a83d33be28b78c0a99359b109517a8f
Diffstat (limited to 'server/NetworkController.cpp')
| -rw-r--r-- | server/NetworkController.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/server/NetworkController.cpp b/server/NetworkController.cpp index 76e4a6af..93a07638 100644 --- a/server/NetworkController.cpp +++ b/server/NetworkController.cpp @@ -237,6 +237,30 @@ unsigned NetworkController::getNetworkForConnect(uid_t uid) const { return mDefaultNetId; } +void NetworkController::getNetworkContext( + unsigned netId, uid_t uid, struct android_net_context* netcontext) const { + struct android_net_context nc = { + .app_netid = netId, + .app_mark = MARK_UNSET, + .dns_netid = netId, + .dns_mark = MARK_UNSET, + .uid = uid, + }; + + if (nc.app_netid == NETID_UNSET) { + nc.app_netid = getNetworkForConnect(uid); + } + Fwmark fwmark; + fwmark.netId = nc.app_netid; + nc.app_mark = fwmark.intValue; + + nc.dns_mark = getNetworkForDns(&(nc.dns_netid), uid); + + if (netcontext) { + *netcontext = nc; + } +} + unsigned NetworkController::getNetworkForInterface(const char* interface) const { android::RWLock::AutoRLock lock(mRWLock); for (const auto& entry : mNetworks) { |
