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

Commit b369bf5d authored by Joel Scherpelz's avatar Joel Scherpelz
Browse files

Support requesting and receiving wakeup events

Test: as follows
    - built
    - flashed
    - booted
    - ConnectivityServiceTest passes
Bug: 28806131

Change-Id: Ifc45260d5315479393da2c859ba4afed4e0e8c85
parent 39ce589f
Loading
Loading
Loading
Loading
+30 −2
Original line number Diff line number Diff line
@@ -214,6 +214,13 @@ public class ConnectivityService extends IConnectivityManager.Stub
    // See Settings.Secure.CONNECTIVITY_RELEASE_PENDING_INTENT_DELAY_MS
    private final int mReleasePendingIntentDelayMs;

    // Driver specific constants used to select packets received via
    // WiFi that caused the phone to exit sleep state. Currently there
    // is only one kernel implementation so we can get away with
    // constants.
    private static final int mWakeupPacketMark = 0x80000000;
    private static final int mWakeupPacketMask = 0x80000000;

    private MockableSystemProperties mSystemProperties;

    private Tethering mTethering;
@@ -4480,7 +4487,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            networkAgent.clatd.fixupLinkProperties(oldLp);
        }

        updateInterfaces(newLp, oldLp, netId);
        updateInterfaces(newLp, oldLp, netId, networkAgent.networkCapabilities);
        updateMtu(newLp, oldLp);
        // TODO - figure out what to do for clat
//        for (LinkProperties lp : newLp.getStackedLinks()) {
@@ -4518,7 +4525,26 @@ public class ConnectivityService extends IConnectivityManager.Stub
        }
    }

    private void updateInterfaces(LinkProperties newLp, LinkProperties oldLp, int netId) {
    private void wakeupAddInterface(String iface, NetworkCapabilities caps) throws RemoteException {
        // Marks are only available on WiFi interaces. Checking for
        // marks on unsupported interfaces is harmless.
        if (!caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
            return;
        }
        mNetd.getNetdService().wakeupAddInterface(
            iface, "iface:" + iface, mWakeupPacketMark, mWakeupPacketMask);
    }

    private void wakeupDelInterface(String iface, NetworkCapabilities caps) throws RemoteException {
        if (!caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
            return;
        }
        mNetd.getNetdService().wakeupDelInterface(
            iface, "iface:" + iface, mWakeupPacketMark, mWakeupPacketMask);
    }

    private void updateInterfaces(LinkProperties newLp, LinkProperties oldLp, int netId,
                                  NetworkCapabilities caps) {
        CompareResult<String> interfaceDiff = new CompareResult<String>();
        if (oldLp != null) {
            interfaceDiff = oldLp.compareAllInterfaceNames(newLp);
@@ -4529,6 +4555,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            try {
                if (DBG) log("Adding iface " + iface + " to network " + netId);
                mNetd.addInterfaceToNetwork(iface, netId);
                wakeupAddInterface(iface, caps);
            } catch (Exception e) {
                loge("Exception adding interface: " + e);
            }
@@ -4537,6 +4564,7 @@ public class ConnectivityService extends IConnectivityManager.Stub
            try {
                if (DBG) log("Removing iface " + iface + " from network " + netId);
                mNetd.removeInterfaceFromNetwork(iface, netId);
                wakeupDelInterface(iface, caps);
            } catch (Exception e) {
                loge("Exception removing interface: " + e);
            }
+4 −0
Original line number Diff line number Diff line
@@ -198,6 +198,10 @@ public class NetdEventListenerService extends INetdEventListener.Stub {
        }
    }

    @Override
    public synchronized void onWakeupEvent(String prefix, int uid, int gid, long timestampNs) {
    }

    public synchronized void flushStatistics(List<IpConnectivityEvent> events) {
        events.add(flushConnectStats());
        // TODO: migrate DnsEventBatch to IpConnectivityLogClass.DNSLatencies