Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f589899 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Guard against missing mac addresses in onWakeupEvent"

parents 2c2aced0 affd2a63
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -80,6 +80,7 @@ public class WakeupStats {
                break;
        }

        if (ev.dstHwAddr != null) {
            switch (ev.dstHwAddr.getAddressType()) {
                case MacAddress.TYPE_UNICAST:
                    l2UnicastCount++;
@@ -93,6 +94,7 @@ public class WakeupStats {
                default:
                    break;
            }
        }

        increment(ethertypes, ev.ethertype);
        if (ev.ipNextHeader >= 0) {
+18 −5
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import android.util.SparseArray;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.BitUtils;
import com.android.internal.util.FrameworkStatsLog;
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
    public synchronized void onWakeupEvent(String prefix, int uid, int ethertype, int ipNextHeader,
            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
                    + " required in format <nethandle>:<interface>");
        }
        final long netHandle = Long.parseLong(prefixParts[0]);
        final Network network = Network.fromNetworkHandle(netHandle);

        final WakeupEvent event = new WakeupEvent();
        event.iface = prefixParts[1];
        event.uid = uid;
        event.ethertype = ethertype;
        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.dstIp = dstIp;
        event.ipNextHeader = ipNextHeader;
@@ -306,14 +321,12 @@ public class NetdEventListenerService extends BaseNetdEventListener {

        final BatteryStatsInternal bsi = LocalServices.getService(BatteryStatsInternal.class);
        if (bsi != null) {
            final long netHandle = Long.parseLong(prefixParts[0]);
            final long elapsedMs = SystemClock.elapsedRealtime() + event.timestampMs
                    - System.currentTimeMillis();
            bsi.noteCpuWakingNetworkPacket(Network.fromNetworkHandle(netHandle), elapsedMs,
                    event.uid);
            bsi.noteCpuWakingNetworkPacket(network, elapsedMs, event.uid);
        }

        final String dstMac = event.dstHwAddr.toString();
        final String dstMac = String.valueOf(event.dstHwAddr);
        FrameworkStatsLog.write(FrameworkStatsLog.PACKET_WAKEUP_OCCURRED,
                uid, event.iface, ethertype, dstMac, srcIp, dstIp, ipNextHeader, srcPort, dstPort);
    }