From c86ebbaebcee107370c3b1e269862a52357af287 Mon Sep 17 00:00:00 2001 From: Valentin Iftime Date: Tue, 24 Sep 2019 13:32:13 +0200 Subject: [PATCH] API to detect which network interfaces support wake-on-lan Add a new method in LinkProperties, isWakeOnLanEnabled() which returns true if network interface is defined in config_wakeonlan_enabled_interfaces string-array (config.xml) Bug: 132705025 Test: atest LinkPropertiesTest & atest ConnectivityServiceTest Change-Id: I3f7803aafd2f8eaf8aa18419b21339e15d4b7a0b --- api/current.txt | 2 + core/java/android/net/LinkProperties.java | 47 ++++++++++++++++++- core/java/android/util/ArraySet.java | 13 +++++ core/res/res/values/config.xml | 8 ++++ core/res/res/values/symbols.xml | 1 + .../android/server/ConnectivityService.java | 13 +++++ .../java/android/net/LinkPropertiesTest.java | 14 ++++++ .../server/ConnectivityServiceTest.java | 25 ++++++++++ 8 files changed, 121 insertions(+), 2 deletions(-) diff --git a/api/current.txt b/api/current.txt index 436ebdc35b6c..35e2acaf278b 100644 --- a/api/current.txt +++ b/api/current.txt @@ -28695,6 +28695,7 @@ package android.net { method @Nullable public String getPrivateDnsServerName(); method @NonNull public java.util.List getRoutes(); method public boolean isPrivateDnsActive(); + method public boolean isWakeOnLanSupported(); method public void setDnsServers(@NonNull java.util.Collection); method public void setDomains(@Nullable String); method public void setHttpProxy(@Nullable android.net.ProxyInfo); @@ -47777,6 +47778,7 @@ package android.util { ctor public ArraySet(int); ctor public ArraySet(android.util.ArraySet); ctor public ArraySet(java.util.Collection); + ctor public ArraySet(@Nullable E[]); method public boolean add(E); method public void addAll(android.util.ArraySet); method public boolean addAll(java.util.Collection); diff --git a/core/java/android/net/LinkProperties.java b/core/java/android/net/LinkProperties.java index d3f48acdd40e..3ec0aeac472b 100644 --- a/core/java/android/net/LinkProperties.java +++ b/core/java/android/net/LinkProperties.java @@ -68,6 +68,7 @@ public final class LinkProperties implements Parcelable { // in the format "rmem_min,rmem_def,rmem_max,wmem_min,wmem_def,wmem_max" private String mTcpBufferSizes; private IpPrefix mNat64Prefix; + private boolean mWakeOnLanSupported; private static final int MIN_MTU = 68; private static final int MIN_MTU_V6 = 1280; @@ -193,6 +194,7 @@ public final class LinkProperties implements Parcelable { setMtu(source.mMtu); mTcpBufferSizes = source.mTcpBufferSizes; mNat64Prefix = source.mNat64Prefix; + mWakeOnLanSupported = source.mWakeOnLanSupported; } } @@ -852,6 +854,7 @@ public final class LinkProperties implements Parcelable { mMtu = 0; mTcpBufferSizes = null; mNat64Prefix = null; + mWakeOnLanSupported = false; } /** @@ -913,6 +916,10 @@ public final class LinkProperties implements Parcelable { resultJoiner.add("MTU:"); resultJoiner.add(Integer.toString(mMtu)); + if (mWakeOnLanSupported) { + resultJoiner.add("WakeOnLanSupported: true"); + } + if (mTcpBufferSizes != null) { resultJoiner.add("TcpBufferSizes:"); resultJoiner.add(mTcpBufferSizes); @@ -1424,6 +1431,37 @@ public final class LinkProperties implements Parcelable { return Objects.equals(mNat64Prefix, target.mNat64Prefix); } + /** + * Compares this {@code LinkProperties} WakeOnLan supported against the target. + * + * @param target LinkProperties to compare. + * @return {@code true} if both are identical, {@code false} otherwise. + * @hide + */ + public boolean isIdenticalWakeOnLan(LinkProperties target) { + return isWakeOnLanSupported() == target.isWakeOnLanSupported(); + } + + /** + * Set whether the network interface supports WakeOnLAN + * + * @param supported WakeOnLAN supported value + * + * @hide + */ + public void setWakeOnLanSupported(boolean supported) { + mWakeOnLanSupported = supported; + } + + /** + * Returns whether the network interface supports WakeOnLAN + * + * @return {@code true} if interface supports WakeOnLAN, {@code false} otherwise. + */ + public boolean isWakeOnLanSupported() { + return mWakeOnLanSupported; + } + /** * Compares this {@code LinkProperties} instance against the target * LinkProperties in {@code obj}. Two LinkPropertieses are equal if @@ -1461,7 +1499,8 @@ public final class LinkProperties implements Parcelable { && isIdenticalStackedLinks(target) && isIdenticalMtu(target) && isIdenticalTcpBufferSizes(target) - && isIdenticalNat64Prefix(target); + && isIdenticalNat64Prefix(target) + && isIdenticalWakeOnLan(target); } /** @@ -1577,7 +1616,8 @@ public final class LinkProperties implements Parcelable { + (mUsePrivateDns ? 57 : 0) + mPcscfs.size() * 67 + ((null == mPrivateDnsServerName) ? 0 : mPrivateDnsServerName.hashCode()) - + Objects.hash(mNat64Prefix); + + Objects.hash(mNat64Prefix) + + (mWakeOnLanSupported ? 71 : 0); } /** @@ -1622,6 +1662,8 @@ public final class LinkProperties implements Parcelable { ArrayList stackedLinks = new ArrayList<>(mStackedLinks.values()); dest.writeList(stackedLinks); + + dest.writeBoolean(mWakeOnLanSupported); } /** @@ -1677,6 +1719,7 @@ public final class LinkProperties implements Parcelable { for (LinkProperties stackedLink: stackedLinks) { netProp.addStackedLink(stackedLink); } + netProp.setWakeOnLanSupported(in.readBoolean()); return netProp; } diff --git a/core/java/android/util/ArraySet.java b/core/java/android/util/ArraySet.java index 3fa914f9ad02..d6a35e1b96fc 100644 --- a/core/java/android/util/ArraySet.java +++ b/core/java/android/util/ArraySet.java @@ -16,6 +16,7 @@ package android.util; +import android.annotation.Nullable; import android.annotation.TestApi; import android.annotation.UnsupportedAppUsage; @@ -302,6 +303,18 @@ public final class ArraySet implements Collection, Set { } } + /** + * Create a new ArraySet with items from the given array + */ + public ArraySet(@Nullable E[] array) { + this(); + if (array != null) { + for (E value : array) { + add(value); + } + } + } + /** * Make the array map empty. All storage is released. */ diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 06503bd31ac8..8336f54dbad4 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -433,6 +433,14 @@ --> + + + + +