Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.

-- Nothing yet

### Added
- Support for --log.level
[#4](https://github.com/netsec-ethz/scion-java-multiping/pull/4)

### Changed
### Fixed

- Fixed showpaths issues.
[#2](https://github.com/netsec-ethz/scion-java-multiping/pull/2)
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ java -jar jpan-cli.jar help

* In JPAN 0.6.1, the SCMP Responder will always return packets to 30041, regardless of their
actual source port, see JPAN issue [#233](https://github.com/scionproto-contrib/jpan/issues/233).
* `showpaths` flags https://github.com/netsec-ethz/jpan-cli/issues/2
* jpan-cli should either start on 30041 or start a SHIM (if dispatcher portrange is limited)

# Troubleshooting

Expand Down
18 changes: 11 additions & 7 deletions src/main/java/org/scion/cli/Address.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import org.scion.cli.util.Errors;
import org.scion.cli.util.ExitCodeException;
import org.scion.jpan.*;
import org.scion.jpan.internal.IPHelper;
Expand All @@ -41,15 +42,15 @@
*/
public class Address {

private static long localIsdAs = 0;
private static InetAddress localIP = null;
private static InetSocketAddress daemon;
private long localIsdAs = 0;
private InetAddress localIP = null;
private InetSocketAddress daemon;

public static void main(String... args) {
handleExit(() -> run(args));
handleExit(() -> new Address().run(args));
}

public static void run(String... args) throws IOException {
public void run(String... args) throws IOException {
parseArgs(args);
if (daemon != null) {
System.setProperty(Constants.PROPERTY_DAEMON, daemon.toString());
Expand All @@ -61,7 +62,7 @@ public static void run(String... args) throws IOException {
}
}

private static void parseArgs(String[] argsArray) {
private void parseArgs(String[] argsArray) {
List<String> args = new ArrayList<>(Arrays.asList(argsArray));
while (!args.isEmpty()) {
switch (args.get(0)) {
Expand All @@ -77,11 +78,14 @@ private static void parseArgs(String[] argsArray) {
case "--local":
localIP = parseIP("local", args);
break;
case "--log.level":
parseAndSetLogLevel(args);
break;
case "--sciond":
daemon = parseAddress("sciond", args);
break;
default:
throw new ExitCodeException(2, "Unknown option: " + args.get(0));
throw new ExitCodeException(2, Errors.UNKNOWN_OPTION + args.get(0));
}
args.remove(0);
}
Expand Down
42 changes: 25 additions & 17 deletions src/main/java/org/scion/cli/Cli.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,60 +19,63 @@

import static org.scion.cli.util.Util.*;

import java.io.IOException;
import java.util.Arrays;
import java.util.Locale;
import org.scion.cli.util.ExitCodeException;

public class Cli {

private static final String VERSION = "0.1.0 (using JPAN 0.6.1)";

public static void main(String[] args) {
public static void main(String... args) {
System.setProperty(org.slf4j.simple.SimpleLogger.DEFAULT_LOG_LEVEL_KEY, "ERROR");
handleExit(() -> run(args));
// handleExit(() -> run(new String[] {"traceroute", "66-2:0:18,10.0.0.1"}));
}

public static void run(String[] args) {
public static void run(String... args) throws IOException {
checkArgs(args, 1, Integer.MAX_VALUE);
String mode = args[0].toLowerCase(Locale.ROOT);
String[] newArgs = Arrays.copyOfRange(args, 1, args.length);
switch (mode) {
case "address":
Address.main(newArgs);
new Address().run(newArgs);
return;
case "h":
case "help":
printHelp(args.length == 1 ? "" : args[1]);
return;
case "ping":
Ping.main(newArgs);
new Ping().run(newArgs);
return;
case "pr":
case "ping-responder":
PingResponder.main(newArgs);
new PingResponder().run(newArgs);
return;
case "sp":
case "showpaths":
Showpaths.main(newArgs);
new Showpaths().run(newArgs);
return;
case "tr":
case "traceroute":
Traceroute.main(newArgs);
new Traceroute().run(newArgs);
return;
case "v":
case "version":
printVersion();
return;
default:
printUsage();
System.exit(1);
throw new ExitCodeException(2, "Unknown command: \"" + mode + "\"");
}
}

private static void checkArgs(String[] args, int minArgs, int maxArgs) {
if (args.length < minArgs || args.length > maxArgs) {
println("Invalid number of arguments.");
printUsage();
System.exit(1);
throw new ExitCodeException(2, "Invalid number of arguments.");
}
}

Expand Down Expand Up @@ -138,11 +141,13 @@ private static void printUsageAddress() {
println(" jpan-cli address");
println("");
println("Flags:");
println(" -h, --help help for address");
println(" -h, --help help for address");
// println(" --isd-as isd-as The local ISD-AS to use. (default 0-0)");
// println(" --json Write the output as machine readable json");
println(" -l, --local ip Local IP address to listen on. (default invalid IP)");
println(" --sciond string SCION Daemon address. (default \"127.0.0.1:30255\")");
println(" -l, --local ip Local IP address to listen on. (default invalid IP)");
println(
" --log.level string Console logging level verbosity (debug|info|warn|error)");
println(" --sciond string SCION Daemon address. (default \"127.0.0.1:30255\")");
}

static void printUsagePing() {
Expand Down Expand Up @@ -180,7 +185,8 @@ static void printUsagePing() {
println(" --interval duration time between packets (default 1s)");
// println(" --isd-as isd-as The local ISD-AS to use. (default 0-0)");
println(" -l, --local ip Local IP address to listen on. (default invalid IP)");
// println(" --log.level string Console logging level verbosity (debug|info|error)");
println(
" --log.level string Console logging level verbosity (debug|info|warn|error)");
// println(" --max-mtu choose the payload size such that the sent SCION
// packet including the SCION Header,");
// println(" SCMP echo header and payload are equal to the MTU
Expand Down Expand Up @@ -231,8 +237,8 @@ static void printUsageTraceroute() {
// println(" --isd-as isd-as The local ISD-AS to use. (default 0-0)");
// println(" -l, --local ip Local IP address to listen on. (default invalid
// IP)");
// println(" --log.level string Console logging level verbosity
// (debug|info|error)");
println(
" --log.level string Console logging level verbosity (debug|info|warn|error)");
// println(" --no-color disable colored output");
println(" --port uint16 use specified local port");
// println(" --refresh set refresh flag for path request");
Expand Down Expand Up @@ -288,8 +294,8 @@ static void printUsageShowpaths() {
println(" -h, --help help for showpaths");
// println(" --isd-as isd-as The local ISD-AS to use. (default 0-0)");
println(" -l, --local ip Local IP address to listen on. (default invalid IP)");
// println(" --log.level string Console logging level verbosity
// (debug|info|error)");
println(
" --log.level string Console logging level verbosity (debug|info|warn|error)");
println(
" -m, --maxpaths int maximum number of paths that are displayed (default 10)");
// println(" --no-color disable colored output");
Expand Down Expand Up @@ -320,6 +326,8 @@ static void printUsagePingResponder() {
println("Flags:");
// println(" -l, --local ip Local IP address to listen on. (default invalid
// IP)");
println(
" --log.level string Console logging level verbosity (debug|info|warn|error)");
println(" --port uint16 use specified local port.");
}

Expand Down
57 changes: 31 additions & 26 deletions src/main/java/org/scion/cli/Ping.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.scion.cli.util.Errors;
import org.scion.cli.util.ExitCodeException;
import org.scion.cli.util.Util;
import org.scion.jpan.*;
Expand All @@ -33,47 +34,55 @@
*/
public class Ping {

private static Integer localPort = -1;
private static int count = 10;
private static int intervalMs = 1000;
private static boolean startShim = false;
private static long localIsdAs = 0;
private static InetAddress localIP = null;
private static int payloadSize = 0;
private static ScionAddress dstAddress;
private static String dstUrl;
private static InetSocketAddress daemon;
private static int timeoutMs = 1000;
private Integer localPort = -1;
private int count = 10;
private int intervalMs = 1000;
private boolean startShim = false;
private long localIsdAs = 0;
private InetAddress localIP = null;
private int payloadSize = 0;
private ScionAddress dstAddress;
private String dstUrl;
private InetSocketAddress daemon;
private int timeoutMs = 1000;

public static void main(String... args) {
handleExit(() -> run(args));
handleExit(() -> new Ping().run(args));
}

public static void run(String... args) throws IOException {
public void run(String... args) throws IOException {
parseArgs(args);
System.setProperty(Constants.PROPERTY_SHIM, startShim ? "true" : "false"); // disable SHIM
if (daemon != null) {
System.setProperty(Constants.PROPERTY_DAEMON, daemon.toString());
}
if (dstUrl == null && dstAddress == null) {
throw new ExitCodeException(2, "Error: missing address or --url");
}
try {
ScionService service = Scion.defaultService();
if (dstUrl != null) {
run(service.lookupPaths(dstUrl, Constants.SCMP_PORT));
} else if (dstAddress != null) {
} else {
run(
service.getPaths(
dstAddress.getIsdAs(), dstAddress.getInetAddress(), Constants.SCMP_PORT));
} else {
throw new ExitCodeException(2, "Error: missing address or --url");
}
} finally {
Scion.closeDefault();
}
}

private static void parseArgs(String[] argsArray) {
private void parseArgs(String[] argsArray) {
List<String> args = new ArrayList<>(Arrays.asList(argsArray));
while (!args.isEmpty()) {
if (!args.get(0).startsWith("-")) {
if (dstAddress == null) {
dstAddress = parseScionAddress(args);
continue;
}
throw new ExitCodeException(2, Errors.UNEXPECTED_NON_FLAG + args.get(0));
}
switch (args.get(0)) {
case "-c":
case "--count":
Expand All @@ -94,6 +103,9 @@ private static void parseArgs(String[] argsArray) {
case "--local":
localIP = parseIP("local", args);
break;
case "--log.level":
parseAndSetLogLevel(args);
break;
case "--port":
localPort = parseInt("port", args);
break;
Expand All @@ -114,20 +126,13 @@ private static void parseArgs(String[] argsArray) {
dstUrl = parseString("url", args);
break;
default:
if (dstAddress == null) {
dstAddress = parseScionAddress(args);
if (dstAddress != null) {
args.remove(0);
continue;
}
}
throw new ExitCodeException(2, "Unknown option: " + args.get(0));
throw new ExitCodeException(2, Errors.UNKNOWN_OPTION + args.get(0));
}
args.remove(0);
}
}

private static void run(List<Path> paths) throws IOException {
private void run(List<Path> paths) throws IOException {
Path path = paths.get(0);
ByteBuffer data = ByteBuffer.allocate(payloadSize);
for (int i = 0; i < payloadSize; i++) {
Expand Down
22 changes: 12 additions & 10 deletions src/main/java/org/scion/cli/PingResponder.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,21 +21,22 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.scion.cli.util.Errors;
import org.scion.cli.util.ExitCodeException;
import org.scion.cli.util.Util;
import org.scion.jpan.*;

/** A simple echo responder that responds to SCMP echo requests. */
public class PingResponder {

private static int localPort = 30041;
private static InetAddress localIP = null;
private int localPort = 30041;
private InetAddress localIP = null;

public static void main(String[] args) {
handleExit(() -> run(args));
handleExit(() -> new PingResponder().run(args));
}

public static void run(String[] args) throws IOException {
public void run(String[] args) throws IOException {
parseArgs(args);
if (localPort == 30041) {
System.setProperty(Constants.PROPERTY_SHIM, "false"); // disable SHIM
Expand All @@ -51,25 +52,26 @@ public static void run(String[] args) throws IOException {
}
}

private static void parseArgs(String[] argsArray) {
private void parseArgs(String[] argsArray) {
List<String> args = new ArrayList<>(Arrays.asList(argsArray));
while (!args.isEmpty()) {
switch (args.get(0)) {
case "h":
case "-h":
case "--help":
Cli.printUsagePingResponder();
throw new ExitCodeException(0);
case "l":
case "-l":
case "--local":
localIP = parseIP("local", args);
break;
case "--log.level":
parseAndSetLogLevel(args);
break;
case "--port":
localPort = parseInt("port", args);
break;
default:
Util.println("Unknown option: " + args.get(0));
Cli.printUsagePing();
System.exit(1);
throw new ExitCodeException(2, Errors.UNKNOWN_OPTION + args.get(0));
}
args.remove(0);
}
Expand Down
Loading
Loading