summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Quattlebaum <rquattle@google.com>2017-07-12 17:07:53 -0700
committerRobert Quattlebaum <rquattle@google.com>2017-07-17 19:39:55 -0700
commit41641f3e0d7ebccbb18ef1e03898688b50ae3e30 (patch)
tree4a4130af00b06fb39d1ccf0929ebf552154e0ec2
parent49de520a96e39d96e2fdc041b2feaddaab8ee1d5 (diff)
downloadlowpan-41641f3e0d7ebccbb18ef1e03898688b50ae3e30.tar.gz
lowpanctl: Stop using properties.
This commit updates the `lowpanctl` tool to no longer use properties for fetching information about the interface, since this is no longer possible. Bug: b/63708348 Test: Compiled and tested manually by forming and scanning Change-Id: I8147b9e35780cf2114952cd59c384e5e3cead1aa
-rw-r--r--command/java/com/android/commands/lowpan/LowpanCtl.java180
1 files changed, 84 insertions, 96 deletions
diff --git a/command/java/com/android/commands/lowpan/LowpanCtl.java b/command/java/com/android/commands/lowpan/LowpanCtl.java
index e23c094..8e36841 100644
--- a/command/java/com/android/commands/lowpan/LowpanCtl.java
+++ b/command/java/com/android/commands/lowpan/LowpanCtl.java
@@ -26,7 +26,7 @@ import android.net.lowpan.LowpanInterface;
import android.net.lowpan.LowpanManager;
import android.net.lowpan.LowpanProvision;
import android.net.lowpan.LowpanScanner;
-import android.os.IBinder;
+import android.net.LinkAddress;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.util.AndroidRuntimeException;
@@ -57,18 +57,35 @@ public class LowpanCtl extends BaseCommand {
public void onShowUsage(PrintStream out) {
out.println(
"usage: lowpanctl [options] [subcommand] [subcommand-options]\n"
+ + "options:\n"
+ + " -I / --interface <iface-name> ..... Interface Name\n"
+ + "subcommands:\n"
+ " lowpanctl status\n"
+ " lowpanctl form\n"
+ " lowpanctl join\n"
+ + " lowpanctl attach\n"
+ " lowpanctl leave\n"
- + " lowpanctl up\n"
- + " lowpanctl down\n"
- + " lowpanctl get [property-name]\n"
- + " lowpanctl set [property-name]\n"
+ + " lowpanctl enable\n"
+ + " lowpanctl disable\n"
+ + " lowpanctl show-credential\n"
+ " lowpanctl scan\n"
+ " lowpanctl reset\n"
+ " lowpanctl list\n"
+ + "\n"
+ + "usage: lowpanctl [options] join/form/attach [network-name]\n"
+ + "subcommand-options:\n"
+ + " --name <network-name> ............. Network Name\n"
+ + " -p / --panid <panid> .............. PANID\n"
+ + " -c / --channel <channel> .......... Channel Index\n"
+ + " -x / --xpanid <xpanid> ............ XPANID\n"
+ + " -k / --master-key <master-key> .... Master Key\n"
+ + " --master-key-index <key-index> .... Key Index\n"
+ + "\n"
+ + "usage: lowpanctl [options] show-credential\n"
+ + "subcommand-options:\n"
+ + " -r / --raw ........................ Print only key contents\n"
+ "\n");
+
}
private class CommandErrorException extends AndroidRuntimeException {
@@ -129,11 +146,17 @@ public class LowpanCtl extends BaseCommand {
} else if (op.equals("scan") || op.equals("netscan") || op.equals("ns")) {
runNetScan();
break;
- } else if (op.equals("attach") || op.equals("up")) {
+ } else if (op.equals("attach")) {
runAttach();
break;
- } else if (op.equals("detach") || op.equals("down")) {
- runDetach();
+ } else if (op.equals("enable")) {
+ runEnable();
+ break;
+ } else if (op.equals("disable")) {
+ runDisable();
+ break;
+ } else if (op.equals("show-credential")) {
+ runShowCredential();
break;
} else if (op.equals("join")) {
runJoin();
@@ -144,12 +167,6 @@ public class LowpanCtl extends BaseCommand {
} else if (op.equals("leave")) {
runLeave();
break;
- } else if (op.equals("get") || op.equals("getprop")) {
- runGetProp();
- break;
- } else if (op.equals("set") || op.equals("setprop")) {
- runSetProp();
- break;
} else if (op.equals("energyscan") || op.equals("energy") || op.equals("es")) {
runEnergyScan();
break;
@@ -176,6 +193,14 @@ public class LowpanCtl extends BaseCommand {
getLowpanInterface().reset();
}
+ private void runEnable() throws LowpanException {
+ getLowpanInterface().setEnabled(true);
+ }
+
+ private void runDisable() throws LowpanException {
+ getLowpanInterface().setEnabled(false);
+ }
+
private LowpanProvision getProvisionFromArgs(boolean credentialRequired) {
LowpanProvision.Builder builder = new LowpanProvision.Builder();
Map<String, Object> properties = new HashMap();
@@ -200,6 +225,8 @@ public class LowpanCtl extends BaseCommand {
masterKey = HexDump.hexStringToByteArray(nextArgRequired());
} else if (arg.equals("--master-key-index")) {
masterKeyIndex = Integer.decode(nextArgRequired());
+ } else if (arg.equals("--help")) {
+ throwCommandError("");
} else if (arg.startsWith("-") || hasName) {
throwCommandError("Unrecognized argument \"" + arg + "\"");
} else {
@@ -237,10 +264,6 @@ public class LowpanCtl extends BaseCommand {
System.out.println("Attached.");
}
- private void runDetach() throws LowpanException {
- getLowpanInterface().setUp(false);
- }
-
private void runLeave() throws LowpanException {
getLowpanInterface().leave();
}
@@ -262,10 +285,10 @@ public class LowpanCtl extends BaseCommand {
if (provision.getLowpanCredential() != null) {
System.out.println(
"Forming "
- + provision.getLowpanIdentity().toString()
+ + provision.getLowpanIdentity()
+ " with provided credential");
} else {
- System.out.println("Forming " + provision.getLowpanIdentity().toString());
+ System.out.println("Forming " + provision.getLowpanIdentity());
}
getLowpanInterface().form(provision);
@@ -273,92 +296,57 @@ public class LowpanCtl extends BaseCommand {
System.out.println("Formed.");
}
- private String propAsString(String key, Object value) {
- if (value instanceof byte[]) {
- value = HexDump.toHexString((byte[]) value);
- } else if (value instanceof String[]) {
- if (((String[]) value).length == 0) {
- value = "{ }";
- } else {
- String renderedValue = "{\n";
- for (String row : (String[]) value) {
- renderedValue += "\t\"" + row + "\"\n";
- }
- value = renderedValue + "}";
- }
- } else if (value instanceof int[]) {
- if (((int[]) value).length == 0) {
- value = "{ }";
- } else {
- String renderedValue = "{\n";
- for (int row : (int[]) value) {
- renderedValue += "\t" + Integer.toString(row) + "\n";
- }
- value = renderedValue + "}";
- }
- } else if ((value instanceof Long) && (key.equals(ILowpanInterface.KEY_NETWORK_XPANID))) {
- value = "0x" + Long.toHexString((Long) value);
- } else if ((value instanceof Integer)
- && (key.equals(ILowpanInterface.KEY_NETWORK_PANID)
- || key.equals("Thread:RLOC16"))) {
- value = String.format("0x%04X", (Integer) value & 0xFFFF);
+ private void runStatus() throws LowpanException, RemoteException {
+ LowpanInterface iface = getLowpanInterface();
+ StringBuffer sb = new StringBuffer();
+
+ sb.append(iface.getName())
+ .append("\t")
+ .append(iface.getState() + " (" + iface.getRole() + ")");
+
+ if (iface.isUp()) {
+ sb.append(" UP");
}
- return value.toString();
- }
- private void runGetProp() throws LowpanException, RemoteException {
- String key = nextArg();
+ if (iface.isConnected()) {
+ sb.append(" CONNECTED");
+ }
- if (key == null) {
- try {
- String key_list[] = getILowpanInterface().getPropertyKeys();
+ if (iface.isCommissioned()) {
+ sb.append(" COMMISSIONED");
+ }
- for (String subkey : key_list) {
- Object value;
- try {
- value = getILowpanInterface().getPropertyAsString(subkey);
- } catch (Exception x) {
- value = x;
- }
- System.out.println(subkey + " => " + propAsString(subkey, value));
- }
- } catch (RemoteException x) {
- x.rethrowAsRuntimeException();
- }
- } else {
- Object value = getILowpanInterface().getPropertyAsString(key);
- System.out.println(propAsString(key, value));
+ sb
+ .append("\n\t")
+ .append(getLowpanInterface().getLowpanIdentity());
+
+ for (LinkAddress addr : iface.getLinkAddresses()) {
+ sb.append("\n\t").append(addr);
}
- }
- private void runSetProp() {
- System.out.println("Command not implemented");
+ sb.append("\n");
+ System.out.println(sb.toString());
}
- private void runStatus() throws LowpanException, RemoteException {
- String statusKeys[] = {
- ILowpanInterface.KEY_INTERFACE_ENABLED,
- ILowpanInterface.KEY_INTERFACE_STATE,
- "org.wpantund.Daemon:Version",
- "org.wpantund.NCP:Version",
- "org.wpantund.Config:NCP:DriverName",
- "org.wpantund.IPv6:LinkLocalAddress",
- "org.wpantund.IPv6:MeshLocalAddress",
- };
- System.out.println(
- "Current Network => " + getLowpanInterface().getLowpanIdentity().toString());
-
- for (String key : statusKeys) {
- Object value;
- try {
- value = getILowpanInterface().getPropertyAsString(key);
- if (value != null) {
- System.out.println(key + " => " + propAsString(key, value));
- }
- } catch (ServiceSpecificException x) {
- // Skip keys which cause remote exceptions.
+ private void runShowCredential() throws LowpanException, RemoteException {
+ LowpanInterface iface = getLowpanInterface();
+ boolean raw = false;
+ String arg;
+ while ((arg = nextArg()) != null) {
+ if (arg.equals("--raw") || arg.equals("-r")) {
+ raw = true;
+ } else {
+ throwCommandError("Unrecognized argument \"" + arg + "\"");
}
}
+
+ LowpanCredential credential = iface.getLowpanCredential();
+ if (raw) {
+ System.out.println(HexDump.toHexString(credential.getMasterKey()));
+ } else {
+ System.out.println(
+ iface.getName() + "\t" + credential.toSensitiveString());
+ }
}
private void runListInterfaces() {