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

Commit 0ddcfde8 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Guard against missing mac addresses in onWakeupEvent" am: 7f589899

parents 8937e79c 7f589899
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);
    }