summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2020-06-04 17:11:51 -0700
committerRoshan Pius <rpius@google.com>2020-06-06 22:20:20 +0000
commit1c683f1d21fa429de706f2397293e815b98e1ea2 (patch)
tree8fc6662f0011215be48f79dabd2ab10a375f42a3
parentb387b81b64717c32de2fe0f6c0a5e86abfe0de9c (diff)
WifiShellCommand: Allow setting bssid for various API surfacs
Wrote this up for STA + STA demo, but this could be useful otherwise as well in rvc-dev. Bug: 148935691 Test: Manual verification of commands. Change-Id: Ifb5bb41e77c7ca889d8489245e3f448742b1d529
-rw-r--r--service/java/com/android/server/wifi/WifiShellCommand.java53
1 files changed, 39 insertions, 14 deletions
diff --git a/service/java/com/android/server/wifi/WifiShellCommand.java b/service/java/com/android/server/wifi/WifiShellCommand.java
index 41933abf0..a3cae7755 100644
--- a/service/java/com/android/server/wifi/WifiShellCommand.java
+++ b/service/java/com/android/server/wifi/WifiShellCommand.java
@@ -712,6 +712,8 @@ public class WifiShellCommand extends BasicShellCommandHandler {
configuration.meteredOverride = METERED_OVERRIDE_METERED;
} else if (option.equals("-d")) {
configuration.allowAutojoin = false;
+ } else if (option.equals("-b")) {
+ configuration.BSSID = getNextArgRequired();
} else {
pw.println("Ignoring unknown option " + option);
}
@@ -783,6 +785,8 @@ public class WifiShellCommand extends BasicShellCommandHandler {
suggestionBuilder.setCredentialSharedWithUser(true);
} else if (option.equals("-d")) {
suggestionBuilder.setIsInitialAutojoinEnabled(false);
+ } else if (option.equals("-b")) {
+ suggestionBuilder.setBssid(MacAddress.fromString(getNextArgRequired()));
} else {
pw.println("Ignoring unknown option " + option);
}
@@ -808,19 +812,33 @@ public class WifiShellCommand extends BasicShellCommandHandler {
} else {
throw new IllegalArgumentException("Unknown network type " + type);
}
+ String bssid = null;
+ String option = getNextOption();
+ while (option != null) {
+ if (option.equals("-b")) {
+ bssid = getNextArgRequired();
+ } else {
+ pw.println("Ignoring unknown option " + option);
+ }
+ option = getNextOption();
+ }
+
// Permission approval bypass is only available to requests with both ssid & bssid set.
// So, find scan result with the best rssi level to set in the request.
- ScanResult matchingScanResult =
- mWifiService.getScanResults(SHELL_PACKAGE_NAME, null)
- .stream()
- .filter(s -> s.SSID.equals(ssid))
- .max(Comparator.comparingInt(s -> s.level))
- .orElse(null);
- if (matchingScanResult != null) {
- specifierBuilder.setBssid(MacAddress.fromString(matchingScanResult.BSSID));
- } else {
- pw.println("No matching bssid found, request will need UI approval");
+ if (bssid == null) {
+ ScanResult matchingScanResult =
+ mWifiService.getScanResults(SHELL_PACKAGE_NAME, null)
+ .stream()
+ .filter(s -> s.SSID.equals(ssid))
+ .max(Comparator.comparingInt(s -> s.level))
+ .orElse(null);
+ if (matchingScanResult != null) {
+ bssid = matchingScanResult.BSSID;
+ } else {
+ pw.println("No matching bssid found, request will need UI approval");
+ }
}
+ if (bssid != null) specifierBuilder.setBssid(MacAddress.fromString(bssid));
return new NetworkRequest.Builder()
.addTransportType(TRANSPORT_WIFI)
.removeCapability(NET_CAPABILITY_INTERNET)
@@ -945,7 +963,8 @@ public class WifiShellCommand extends BasicShellCommandHandler {
pw.println(" Start a new scan");
pw.println(" list-networks");
pw.println(" Lists the saved networks");
- pw.println(" connect-network <ssid> open|owe|wpa2|wpa3 [<passphrase>] [-m] [-d]");
+ pw.println(" connect-network <ssid> open|owe|wpa2|wpa3 [<passphrase>] [-m] [-d] "
+ + "[-b <bssid>]");
pw.println(" Connect to a network with provided params and add to saved networks list");
pw.println(" <ssid> - SSID of the network");
pw.println(" open|owe|wpa2|wpa3 - Security type of the network.");
@@ -957,7 +976,9 @@ public class WifiShellCommand extends BasicShellCommandHandler {
pw.println(" - 'wpa3' - WPA-3 PSK networks");
pw.println(" -m - Mark the network metered.");
pw.println(" -d - Mark the network autojoin disabled.");
- pw.println(" add-network <ssid> open|owe|wpa2|wpa3 [<passphrase>] [-m] [-d]");
+ pw.println(" -b <bssid> - Set specific BSSID.");
+ pw.println(" add-network <ssid> open|owe|wpa2|wpa3 [<passphrase>] [-m] [-d] "
+ + "[-b <bssid>]");
pw.println(" Add/update saved network with provided params");
pw.println(" <ssid> - SSID of the network");
pw.println(" open|owe|wpa2|wpa3 - Security type of the network.");
@@ -969,6 +990,7 @@ public class WifiShellCommand extends BasicShellCommandHandler {
pw.println(" - 'wpa3' - WPA-3 PSK networks");
pw.println(" -m - Mark the network metered.");
pw.println(" -d - Mark the network autojoin disabled.");
+ pw.println(" -b <bssid> - Set specific BSSID.");
pw.println(" forget-network <networkId>");
pw.println(" Remove the network mentioned by <networkId>");
pw.println(" - Use list-networks to retrieve <networkId> for the network");
@@ -976,7 +998,8 @@ public class WifiShellCommand extends BasicShellCommandHandler {
pw.println(" Current wifi status");
pw.println(" set-verbose-logging enabled|disabled ");
pw.println(" Set the verbose logging enabled or disabled");
- pw.println(" add-suggestion <ssid> open|owe|wpa2|wpa3 [<passphrase>] [-u] [-m] [-s] [-d]");
+ pw.println(" add-suggestion <ssid> open|owe|wpa2|wpa3 [<passphrase>] [-u] [-m] [-s] [-d]"
+ + "[-b <bssid>]");
pw.println(" Add a network suggestion with provided params");
pw.println(" Use 'network-suggestions-set-user-approved " + SHELL_PACKAGE_NAME + " yes'"
+ " to approve suggestions added via shell (Needs root access)");
@@ -992,6 +1015,7 @@ public class WifiShellCommand extends BasicShellCommandHandler {
pw.println(" -m - Mark the suggestion metered.");
pw.println(" -s - Share the suggestion with user.");
pw.println(" -d - Mark the suggestion autojoin disabled.");
+ pw.println(" -b <bssid> - Set specific BSSID.");
pw.println(" remove-suggestion <ssid>");
pw.println(" Remove a network suggestion with provided SSID of the network");
pw.println(" remove-all-suggestions");
@@ -1073,7 +1097,7 @@ public class WifiShellCommand extends BasicShellCommandHandler {
pw.println(" and/or 'wifi_softap_wpa3_sae_supported', each on a separate line.");
pw.println(" settings-reset");
pw.println(" Initiates wifi settings reset");
- pw.println(" add-request <ssid> open|owe|wpa2|wpa3 [<passphrase>]");
+ pw.println(" add-request <ssid> open|owe|wpa2|wpa3 [<passphrase>] [-b <bssid>]");
pw.println(" Add a network request with provided params");
pw.println(" Use 'network-requests-set-user-approved android yes'"
+ " to pre-approve requests added via rooted shell (Not persisted)");
@@ -1085,6 +1109,7 @@ public class WifiShellCommand extends BasicShellCommandHandler {
pw.println(" - Use 'wpa2' or 'wpa3' for networks with passphrase");
pw.println(" - 'wpa2' - WPA-2 PSK networks (Most prevalent)");
pw.println(" - 'wpa3' - WPA-3 PSK networks");
+ pw.println(" -b <bssid> - Set specific BSSID.");
pw.println(" remove-request <ssid>");
pw.println(" Remove a network request with provided SSID of the network");
pw.println(" remove-all-requests");