From a93b3cf922674a5a509b8fe0be9086e81d2ae7da Mon Sep 17 00:00:00 2001 From: Jimmy Chen Date: Tue, 7 Jan 2020 17:54:09 +0200 Subject: [PATCH 1/3] wifi: add support for GCMP_128 GCMP_128 is required for supporting 60GHz (WiGig) connections. Bug: 147495505 Test: Manual - enable wifi and connect to an access point Test: atest FrameworksWifiTests Test: atest FrameworksWifiApiTests Change-Id: Iea30338dc5a23b4c28b72c688346d35763dd0005 --- api/current.txt | 2 ++ wifi/api/current.txt | 2 ++ .../android/net/wifi/WifiConfiguration.java | 21 +++++++++++++++++-- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/api/current.txt b/api/current.txt index e678d1656fd46..5f32dec22de9c 100644 --- a/api/current.txt +++ b/api/current.txt @@ -31303,6 +31303,7 @@ package android.net.wifi { @Deprecated public static class WifiConfiguration.GroupCipher { field @Deprecated public static final int CCMP = 3; // 0x3 + field @Deprecated public static final int GCMP_128 = 7; // 0x7 field @Deprecated public static final int GCMP_256 = 5; // 0x5 field @Deprecated public static final int SMS4 = 6; // 0x6 field @Deprecated public static final int TKIP = 2; // 0x2 @@ -31332,6 +31333,7 @@ package android.net.wifi { @Deprecated public static class WifiConfiguration.PairwiseCipher { field @Deprecated public static final int CCMP = 2; // 0x2 + field @Deprecated public static final int GCMP_128 = 5; // 0x5 field @Deprecated public static final int GCMP_256 = 3; // 0x3 field @Deprecated public static final int NONE = 0; // 0x0 field @Deprecated public static final int SMS4 = 4; // 0x4 diff --git a/wifi/api/current.txt b/wifi/api/current.txt index d0742c7c61ade..3f5c673eeb81c 100644 --- a/wifi/api/current.txt +++ b/wifi/api/current.txt @@ -144,6 +144,7 @@ package android.net.wifi { @Deprecated public static class WifiConfiguration.GroupCipher { field @Deprecated public static final int CCMP = 3; // 0x3 + field @Deprecated public static final int GCMP_128 = 7; // 0x7 field @Deprecated public static final int GCMP_256 = 5; // 0x5 field @Deprecated public static final int SMS4 = 6; // 0x6 field @Deprecated public static final int TKIP = 2; // 0x2 @@ -173,6 +174,7 @@ package android.net.wifi { @Deprecated public static class WifiConfiguration.PairwiseCipher { field @Deprecated public static final int CCMP = 2; // 0x2 + field @Deprecated public static final int GCMP_128 = 5; // 0x5 field @Deprecated public static final int GCMP_256 = 3; // 0x3 field @Deprecated public static final int NONE = 0; // 0x0 field @Deprecated public static final int SMS4 = 4; // 0x4 diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java index 656444ea98db9..02b7a42d3878b 100644 --- a/wifi/java/android/net/wifi/WifiConfiguration.java +++ b/wifi/java/android/net/wifi/WifiConfiguration.java @@ -301,9 +301,16 @@ public class WifiConfiguration implements Parcelable { */ public static final int SMS4 = 4; + /** + * AES in Galois/Counter Mode with a 128-bit integrity key + */ + public static final int GCMP_128 = 5; + + public static final String varName = "pairwise"; - public static final String[] strings = { "NONE", "TKIP", "CCMP", "GCMP_256", "SMS4" }; + public static final String[] strings = { "NONE", "TKIP", "CCMP", "GCMP_256", "SMS4", + "GCMP_128" }; } /** @@ -345,13 +352,17 @@ public class WifiConfiguration implements Parcelable { * SMS4 cipher for WAPI */ public static final int SMS4 = 6; + /** + * AES in Galois/Counter Mode with a 128-bit integrity key + */ + public static final int GCMP_128 = 7; public static final String varName = "group"; public static final String[] strings = { /* deprecated */ "WEP40", /* deprecated */ "WEP104", "TKIP", "CCMP", "GTK_NOT_USED", "GCMP_256", - "SMS4" }; + "SMS4", "GCMP_128" }; } /** @@ -498,8 +509,10 @@ public class WifiConfiguration implements Parcelable { allowedProtocols.set(WifiConfiguration.Protocol.RSN); allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SAE); allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); + allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.GCMP_128); allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.GCMP_256); allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); + allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_128); allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256); requirePmf = true; break; @@ -508,7 +521,9 @@ public class WifiConfiguration implements Parcelable { allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_EAP); allowedKeyManagement.set(WifiConfiguration.KeyMgmt.IEEE8021X); allowedKeyManagement.set(WifiConfiguration.KeyMgmt.SUITE_B_192); + allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.GCMP_128); allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.GCMP_256); + allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_128); allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256); allowedGroupManagementCiphers.set(WifiConfiguration.GroupMgmtCipher.BIP_GMAC_256); // Note: allowedSuiteBCiphers bitset will be set by the service once the @@ -519,8 +534,10 @@ public class WifiConfiguration implements Parcelable { allowedProtocols.set(WifiConfiguration.Protocol.RSN); allowedKeyManagement.set(WifiConfiguration.KeyMgmt.OWE); allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); + allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.GCMP_128); allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.GCMP_256); allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); + allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_128); allowedGroupCiphers.set(WifiConfiguration.GroupCipher.GCMP_256); requirePmf = true; break; From 8cb836d0b57a6a1e5e1fe899abbcce9c8e740402 Mon Sep 17 00:00:00 2001 From: Jimmy Chen Date: Tue, 1 Sep 2020 17:33:34 +0800 Subject: [PATCH 2/3] wifi: add DMG BSS capability definition Bug: 155424211 Test: atest FrameworksWifiApiTests Change-Id: I309544fdebe351cf643ce21abcf5cad7b1995be6 --- api/system-current.txt | 2 ++ non-updatable-api/system-current.txt | 2 ++ wifi/java/android/net/wifi/nl80211/NativeScanResult.java | 9 +++++++++ 3 files changed, 13 insertions(+) diff --git a/api/system-current.txt b/api/system-current.txt index 01d0a897a63c0..be6cf6c966909 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7823,6 +7823,8 @@ package android.net.wifi.nl80211 { field public static final int BSS_CAPABILITY_CF_POLL_REQUEST = 8; // 0x8 field public static final int BSS_CAPABILITY_CHANNEL_AGILITY = 128; // 0x80 field public static final int BSS_CAPABILITY_DELAYED_BLOCK_ACK = 16384; // 0x4000 + field public static final int BSS_CAPABILITY_DMG_ESS = 3; // 0x3 + field public static final int BSS_CAPABILITY_DMG_IBSS = 1; // 0x1 field public static final int BSS_CAPABILITY_DSSS_OFDM = 8192; // 0x2000 field public static final int BSS_CAPABILITY_ESS = 1; // 0x1 field public static final int BSS_CAPABILITY_IBSS = 2; // 0x2 diff --git a/non-updatable-api/system-current.txt b/non-updatable-api/system-current.txt index 49cad8b587622..b807d1be6bf00 100644 --- a/non-updatable-api/system-current.txt +++ b/non-updatable-api/system-current.txt @@ -6813,6 +6813,8 @@ package android.net.wifi.nl80211 { field public static final int BSS_CAPABILITY_CF_POLL_REQUEST = 8; // 0x8 field public static final int BSS_CAPABILITY_CHANNEL_AGILITY = 128; // 0x80 field public static final int BSS_CAPABILITY_DELAYED_BLOCK_ACK = 16384; // 0x4000 + field public static final int BSS_CAPABILITY_DMG_ESS = 3; // 0x3 + field public static final int BSS_CAPABILITY_DMG_IBSS = 1; // 0x1 field public static final int BSS_CAPABILITY_DSSS_OFDM = 8192; // 0x2000 field public static final int BSS_CAPABILITY_ESS = 1; // 0x1 field public static final int BSS_CAPABILITY_IBSS = 2; // 0x2 diff --git a/wifi/java/android/net/wifi/nl80211/NativeScanResult.java b/wifi/java/android/net/wifi/nl80211/NativeScanResult.java index a8e999973fe8f..35cf45fe36edf 100644 --- a/wifi/java/android/net/wifi/nl80211/NativeScanResult.java +++ b/wifi/java/android/net/wifi/nl80211/NativeScanResult.java @@ -225,6 +225,15 @@ public final class NativeScanResult implements Parcelable { * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): Immediate Block Ack. */ public static final int BSS_CAPABILITY_IMMEDIATE_BLOCK_ACK = 0x1 << 15; + /** + * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): DMG ESS. + * In DMG bits 0 and 1 are parsed together, where ESS=0x3 and IBSS=0x1 + */ + public static final int BSS_CAPABILITY_DMG_ESS = 0x3; + /** + * BSS capability bit (see IEEE Std 802.11: 9.4.1.4): DMG IBSS. + */ + public static final int BSS_CAPABILITY_DMG_IBSS = 0x1; /** * Returns the capabilities of the AP repseresented by this scan result as advertised in the From 25d969e28c3756ce33d1eab1ca12b0a131a9aba3 Mon Sep 17 00:00:00 2001 From: Jimmy Chen Date: Mon, 23 Dec 2019 19:01:33 +0200 Subject: [PATCH 3/3] wifi: Add WifiMananger API is60GHzBandSupported New system API mostly for usage from Settings, to update the UI with features such as 60GHz band selection in case the device is configured with 60GHz support. Bug: 147469373 Test: Manual - enable wifi and connect to an access point Test: atest FrameworksWifiTests Test: atest FrameworksWifiApiTests Change-Id: Idb6b5350aaf1566df6a39fc0e3432f8464bf6df1 --- api/system-current.txt | 1 + wifi/api/system-current.txt | 1 + wifi/java/android/net/wifi/IWifiManager.aidl | 2 ++ wifi/java/android/net/wifi/WifiManager.java | 17 +++++++++++++++++ 4 files changed, 21 insertions(+) diff --git a/api/system-current.txt b/api/system-current.txt index be6cf6c966909..b908cae38ca1e 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -7344,6 +7344,7 @@ package android.net.wifi { method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.WifiConfiguration getWifiApConfiguration(); method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public int getWifiApState(); method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(@NonNull java.util.List); + method public boolean is60GHzBandSupported(); method public boolean isApMacRandomizationSupported(); method public boolean isConnectedMacRandomizationSupported(); method @Deprecated public boolean isDeviceToDeviceRttSupported(); diff --git a/wifi/api/system-current.txt b/wifi/api/system-current.txt index b2c960365e699..c3e573c311c2c 100644 --- a/wifi/api/system-current.txt +++ b/wifi/api/system-current.txt @@ -449,6 +449,7 @@ package android.net.wifi { method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public android.net.wifi.WifiConfiguration getWifiApConfiguration(); method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public int getWifiApState(); method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.NETWORK_SETTINGS, android.Manifest.permission.NETWORK_SETUP_WIZARD}) public java.util.List getWifiConfigForMatchedNetworkSuggestionsSharedWithUser(@NonNull java.util.List); + method public boolean is60GHzBandSupported(); method public boolean isApMacRandomizationSupported(); method public boolean isConnectedMacRandomizationSupported(); method @Deprecated public boolean isDeviceToDeviceRttSupported(); diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index e4937892e2f7a..b3ed8ac090346 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -118,6 +118,8 @@ interface IWifiManager boolean is6GHzBandSupported(); + boolean is60GHzBandSupported(); + boolean isWifiStandardSupported(int standard); DhcpInfo getDhcpInfo(); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index b28b902910bfe..c76f4a63a777c 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -2407,6 +2407,8 @@ public class WifiManager { public static final long WIFI_FEATURE_OCE = 0x1000000000L; // OCE Support /** @hide */ public static final long WIFI_FEATURE_WAPI = 0x2000000000L; // WAPI + /** @hide */ + public static final long WIFI_FEATURE_INFRA_60G = 0x4000000000L; // 60 GHz Band Support /** @hide */ public static final long WIFI_FEATURE_FILS_SHA256 = 0x4000000000L; // FILS-SHA256 @@ -2568,6 +2570,21 @@ public class WifiManager { } } + /** + * Check if the chipset supports the 60GHz frequency band. + * + * @return {@code true} if supported, {@code false} otherwise. + * @hide + */ + @SystemApi + public boolean is60GHzBandSupported() { + try { + return mService.is60GHzBandSupported(); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + /** * Check if the chipset supports 6GHz band. * @return {@code true} if supported, {@code false} otherwise.