Creating interface name to index tracking for Bpf Maps.
Adding mechanism to track interaface name to interface index, this map would be used by BpfNetMaps for storing interface index. Bug: 400681214 Test: atest ConnectivityCoverageTests:android.net.connectivity.com.android.server.connectivity.InterfaceTrackerTest Test: atest ConnectivityCoverageTests:android.net.connectivity.com.android.server.BpfNetMapsTest Change-Id: I2a65cac908d9c4d10714e3fe26be20322d4a1db3
This commit is contained in:
parent
a4b6164304
commit
53ecd95072
1 changed files with 357 additions and 45 deletions
|
|
@ -365,6 +365,7 @@ import com.android.server.connectivity.DnsManager;
|
|||
import com.android.server.connectivity.DnsManager.PrivateDnsValidationUpdate;
|
||||
import com.android.server.connectivity.DscpPolicyTracker;
|
||||
import com.android.server.connectivity.FullScore;
|
||||
import com.android.server.connectivity.InterfaceTracker;
|
||||
import com.android.server.connectivity.InvalidTagException;
|
||||
import com.android.server.connectivity.KeepaliveResourceUtil;
|
||||
import com.android.server.connectivity.KeepaliveTracker;
|
||||
|
|
@ -577,6 +578,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||
private final NetworkStatsManager mStatsManager;
|
||||
private final NetworkPolicyManager mPolicyManager;
|
||||
private final BpfNetMaps mBpfNetMaps;
|
||||
private final InterfaceTracker mInterfaceTracker;
|
||||
|
||||
/**
|
||||
* TestNetworkService (lazily) created upon first usage. Locked to prevent creation of multiple
|
||||
|
|
@ -1662,8 +1664,17 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||
* @param netd a netd binder
|
||||
* @return BpfNetMaps implementation.
|
||||
*/
|
||||
public BpfNetMaps getBpfNetMaps(Context context, INetd netd) {
|
||||
return new BpfNetMaps(context, netd);
|
||||
public BpfNetMaps getBpfNetMaps(Context context, INetd netd,
|
||||
InterfaceTracker interfaceTracker) {
|
||||
return new BpfNetMaps(context, netd, interfaceTracker);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the InterfaceTracker implementation to use in ConnectivityService.
|
||||
* @return InterfaceTracker implementation.
|
||||
*/
|
||||
public InterfaceTracker getInterfaceTracker(Context context) {
|
||||
return new InterfaceTracker(context);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -1886,7 +1897,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||
mWakeUpMask = mask;
|
||||
|
||||
mNetd = netd;
|
||||
mBpfNetMaps = mDeps.getBpfNetMaps(mContext, netd);
|
||||
mInterfaceTracker = mDeps.getInterfaceTracker(mContext);
|
||||
mBpfNetMaps = mDeps.getBpfNetMaps(mContext, netd, mInterfaceTracker);
|
||||
mHandlerThread = mDeps.makeHandlerThread("ConnectivityServiceThread");
|
||||
mPermissionMonitorDeps = mPermDeps;
|
||||
mPermissionMonitor =
|
||||
|
|
@ -9605,8 +9617,6 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||
|
||||
updateIngressToVpnAddressFiltering(newLp, oldLp, networkAgent);
|
||||
|
||||
updateLocalNetworkAddresses(newLp, oldLp);
|
||||
|
||||
updateMtu(newLp, oldLp);
|
||||
// TODO - figure out what to do for clat
|
||||
// for (LinkProperties lp : newLp.getStackedLinks()) {
|
||||
|
|
@ -9769,16 +9779,23 @@ public class ConnectivityService extends IConnectivityManager.Stub {
|
|||
wakeupModifyInterface(iface, nai, true);
|
||||
mDeps.reportNetworkInterfaceForTransports(mContext, iface,
|
||||
nai.networkCapabilities.getTransportTypes());
|
||||
mInterfaceTracker.addInterface(iface);
|
||||
} catch (Exception e) {
|
||||
logw("Exception adding interface: " + e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// The local network addresses needs to be updated before interfaces are removed because
|
||||
// modifying bpf map local_net_access requires mapping interface name to index.
|
||||
updateLocalNetworkAddresses(newLp, oldLp);
|
||||
|
||||
for (final String iface : interfaceDiff.removed) {
|
||||
try {
|
||||
if (DBG) log("Removing iface " + iface + " from network " + netId);
|
||||
wakeupModifyInterface(iface, nai, false);
|
||||
mRoutingCoordinatorService.removeInterfaceFromNetwork(netId, iface);
|
||||
mInterfaceTracker.removeInterface(iface);
|
||||
} catch (Exception e) {
|
||||
loge("Exception removing interface: " + e);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue