Merge "Guard against missing mac addresses in onWakeupEvent"
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user