diff --git a/service/src/com/android/server/ConnectivityService.java b/service/src/com/android/server/ConnectivityService.java index e32ea8f7d5..e722f625f3 100755 --- a/service/src/com/android/server/ConnectivityService.java +++ b/service/src/com/android/server/ConnectivityService.java @@ -4427,7 +4427,7 @@ public class ConnectivityService extends IConnectivityManager.Stub mQosCallbackTracker.handleNetworkReleased(nai.network); for (String iface : nai.linkProperties.getAllInterfaceNames()) { // Disable wakeup packet monitoring for each interface. - wakeupModifyInterface(iface, nai.networkCapabilities, false); + wakeupModifyInterface(iface, nai, false); } nai.networkMonitor().notifyNetworkDisconnected(); mNetworkAgentInfos.remove(nai); @@ -7706,7 +7706,7 @@ public class ConnectivityService extends IConnectivityManager.Stub // the LinkProperties for the network are accurate. networkAgent.clatd.fixupLinkProperties(oldLp, newLp); - updateInterfaces(newLp, oldLp, netId, networkAgent.networkCapabilities); + updateInterfaces(newLp, oldLp, netId, networkAgent); // update filtering rules, need to happen after the interface update so netd knows about the // new interface (the interface name -> index map becomes initialized) @@ -7814,10 +7814,16 @@ public class ConnectivityService extends IConnectivityManager.Stub return captivePortalBuilder.build(); } - private void wakeupModifyInterface(String iface, NetworkCapabilities caps, boolean add) { + private String makeNflogPrefix(String iface, long networkHandle) { + // This needs to be kept in sync and backwards compatible with the decoding logic in + // NetdEventListenerService, which is non-mainline code. + return SdkLevel.isAtLeastU() ? (networkHandle + ":" + iface) : ("iface:" + iface); + } + + private void wakeupModifyInterface(String iface, NetworkAgentInfo nai, boolean add) { // Marks are only available on WiFi interfaces. Checking for // marks on unsupported interfaces is harmless. - if (!caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { + if (!nai.networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { return; } @@ -7830,7 +7836,7 @@ public class ConnectivityService extends IConnectivityManager.Stub return; } - final String prefix = "iface:" + iface; + final String prefix = makeNflogPrefix(iface, nai.network.getNetworkHandle()); try { if (add) { mNetd.wakeupAddInterface(iface, prefix, mark, mask); @@ -7840,12 +7846,11 @@ public class ConnectivityService extends IConnectivityManager.Stub } catch (Exception e) { loge("Exception modifying wakeup packet monitoring: " + e); } - } private void updateInterfaces(final @NonNull LinkProperties newLp, final @Nullable LinkProperties oldLp, final int netId, - final @NonNull NetworkCapabilities caps) { + final @NonNull NetworkAgentInfo nai) { final CompareResult interfaceDiff = new CompareResult<>( oldLp != null ? oldLp.getAllInterfaceNames() : null, newLp.getAllInterfaceNames()); if (!interfaceDiff.added.isEmpty()) { @@ -7853,9 +7858,9 @@ public class ConnectivityService extends IConnectivityManager.Stub try { if (DBG) log("Adding iface " + iface + " to network " + netId); mNetd.networkAddInterface(netId, iface); - wakeupModifyInterface(iface, caps, true); + wakeupModifyInterface(iface, nai, true); mDeps.reportNetworkInterfaceForTransports(mContext, iface, - caps.getTransportTypes()); + nai.networkCapabilities.getTransportTypes()); } catch (Exception e) { logw("Exception adding interface: " + e); } @@ -7864,7 +7869,7 @@ public class ConnectivityService extends IConnectivityManager.Stub for (final String iface : interfaceDiff.removed) { try { if (DBG) log("Removing iface " + iface + " from network " + netId); - wakeupModifyInterface(iface, caps, false); + wakeupModifyInterface(iface, nai, false); mNetd.networkRemoveInterface(netId, iface); } catch (Exception e) { loge("Exception removing interface: " + e); diff --git a/tests/unit/java/com/android/server/connectivity/IpConnectivityMetricsTest.java b/tests/unit/java/com/android/server/connectivity/IpConnectivityMetricsTest.java index 719314a18b..5881a8e760 100644 --- a/tests/unit/java/com/android/server/connectivity/IpConnectivityMetricsTest.java +++ b/tests/unit/java/com/android/server/connectivity/IpConnectivityMetricsTest.java @@ -80,6 +80,7 @@ public class IpConnectivityMetricsTest { private static final byte[] MAC_ADDR = {(byte)0x84, (byte)0xc9, (byte)0xb2, (byte)0x6a, (byte)0xed, (byte)0x4b}; + private static final long NET_HANDLE = new Network(4291).getNetworkHandle(); @Mock Context mCtx; @Mock IIpConnectivityMetrics mMockService; @@ -607,7 +608,7 @@ public class IpConnectivityMetricsTest { void wakeupEvent(String iface, int uid, int ether, int ip, byte[] mac, String srcIp, String dstIp, int sport, int dport, long now) throws Exception { - String prefix = NetdEventListenerService.WAKEUP_EVENT_IFACE_PREFIX + iface; + String prefix = NET_HANDLE + ":" + iface; mNetdListener.onWakeupEvent(prefix, uid, ether, ip, mac, srcIp, dstIp, sport, dport, now); } diff --git a/tests/unit/java/com/android/server/connectivity/NetdEventListenerServiceTest.java b/tests/unit/java/com/android/server/connectivity/NetdEventListenerServiceTest.java index 7d6c3ae4b5..f4b6464a0b 100644 --- a/tests/unit/java/com/android/server/connectivity/NetdEventListenerServiceTest.java +++ b/tests/unit/java/com/android/server/connectivity/NetdEventListenerServiceTest.java @@ -60,6 +60,8 @@ public class NetdEventListenerServiceTest { private static final String EXAMPLE_IPV4 = "192.0.2.1"; private static final String EXAMPLE_IPV6 = "2001:db8:1200::2:1"; + private static final long NET_HANDLE = new Network(5391).getNetworkHandle(); + private static final byte[] MAC_ADDR = {(byte)0x84, (byte)0xc9, (byte)0xb2, (byte)0x6a, (byte)0xed, (byte)0x4b}; @@ -498,7 +500,7 @@ public class NetdEventListenerServiceTest { void wakeupEvent(String iface, int uid, int ether, int ip, byte[] mac, String srcIp, String dstIp, int sport, int dport, long now) throws Exception { - String prefix = NetdEventListenerService.WAKEUP_EVENT_IFACE_PREFIX + iface; + String prefix = NET_HANDLE + ":" + iface; mService.onWakeupEvent(prefix, uid, ether, ip, mac, srcIp, dstIp, sport, dport, now); }