Merge "Guard against missing mac addresses in onWakeupEvent"

This commit is contained in:
Treehugger Robot
2023-04-28 05:14:46 +00:00
committed by Gerrit Code Review
2 changed files with 32 additions and 17 deletions

View File

@@ -80,18 +80,20 @@ public class WakeupStats {
break; break;
} }
switch (ev.dstHwAddr.getAddressType()) { if (ev.dstHwAddr != null) {
case MacAddress.TYPE_UNICAST: switch (ev.dstHwAddr.getAddressType()) {
l2UnicastCount++; case MacAddress.TYPE_UNICAST:
break; l2UnicastCount++;
case MacAddress.TYPE_MULTICAST: break;
l2MulticastCount++; case MacAddress.TYPE_MULTICAST:
break; l2MulticastCount++;
case MacAddress.TYPE_BROADCAST: break;
l2BroadcastCount++; case MacAddress.TYPE_BROADCAST:
break; l2BroadcastCount++;
default: break;
break; default:
break;
}
} }
increment(ethertypes, ev.ethertype); increment(ethertypes, ev.ethertype);

View File

@@ -41,6 +41,7 @@ import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.BitUtils; import com.android.internal.util.BitUtils;
import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.FrameworkStatsLog;
import com.android.internal.util.RingBuffer; import com.android.internal.util.RingBuffer;
@@ -278,6 +279,11 @@ public class NetdEventListenerService extends BaseNetdEventListener {
} }
} }
private boolean hasWifiTransport(Network network) {
final NetworkCapabilities nc = mCm.getNetworkCapabilities(network);
return nc.hasTransport(NetworkCapabilities.TRANSPORT_WIFI);
}
@Override @Override
public synchronized void onWakeupEvent(String prefix, int uid, int ethertype, int ipNextHeader, public synchronized void onWakeupEvent(String prefix, int uid, int ethertype, int ipNextHeader,
byte[] dstHw, String srcIp, String dstIp, int srcPort, int dstPort, long timestampNs) { byte[] dstHw, String srcIp, String dstIp, int srcPort, int dstPort, long timestampNs) {
@@ -286,12 +292,21 @@ public class NetdEventListenerService extends BaseNetdEventListener {
throw new IllegalArgumentException("Prefix " + prefix throw new IllegalArgumentException("Prefix " + prefix
+ " required in format <nethandle>:<interface>"); + " required in format <nethandle>:<interface>");
} }
final long netHandle = Long.parseLong(prefixParts[0]);
final Network network = Network.fromNetworkHandle(netHandle);
final WakeupEvent event = new WakeupEvent(); final WakeupEvent event = new WakeupEvent();
event.iface = prefixParts[1]; event.iface = prefixParts[1];
event.uid = uid; event.uid = uid;
event.ethertype = ethertype; event.ethertype = ethertype;
event.dstHwAddr = MacAddress.fromBytes(dstHw); if (ArrayUtils.isEmpty(dstHw)) {
if (hasWifiTransport(network)) {
Log.e(TAG, "Empty mac address on WiFi transport, network: " + network);
}
event.dstHwAddr = null;
} else {
event.dstHwAddr = MacAddress.fromBytes(dstHw);
}
event.srcIp = srcIp; event.srcIp = srcIp;
event.dstIp = dstIp; event.dstIp = dstIp;
event.ipNextHeader = ipNextHeader; event.ipNextHeader = ipNextHeader;
@@ -306,14 +321,12 @@ public class NetdEventListenerService extends BaseNetdEventListener {
final BatteryStatsInternal bsi = LocalServices.getService(BatteryStatsInternal.class); final BatteryStatsInternal bsi = LocalServices.getService(BatteryStatsInternal.class);
if (bsi != null) { if (bsi != null) {
final long netHandle = Long.parseLong(prefixParts[0]);
final long elapsedMs = SystemClock.elapsedRealtime() + event.timestampMs final long elapsedMs = SystemClock.elapsedRealtime() + event.timestampMs
- System.currentTimeMillis(); - System.currentTimeMillis();
bsi.noteCpuWakingNetworkPacket(Network.fromNetworkHandle(netHandle), elapsedMs, bsi.noteCpuWakingNetworkPacket(network, elapsedMs, event.uid);
event.uid);
} }
final String dstMac = event.dstHwAddr.toString(); final String dstMac = String.valueOf(event.dstHwAddr);
FrameworkStatsLog.write(FrameworkStatsLog.PACKET_WAKEUP_OCCURRED, FrameworkStatsLog.write(FrameworkStatsLog.PACKET_WAKEUP_OCCURRED,
uid, event.iface, ethertype, dstMac, srcIp, dstIp, ipNextHeader, srcPort, dstPort); uid, event.iface, ethertype, dstMac, srcIp, dstIp, ipNextHeader, srcPort, dstPort);
} }