diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d6e7b4..97ca234 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,15 +15,18 @@ TODO ### Fixed -- Fixed error handling for additional rounds. Cleanup. - [#32](https://github.com/netsec-ethz/scion-java-multiping/pull/32) - -### Fixed - - Fixed mangled output with mode SHOW_SCMP_ONLY [#31](https://github.com/netsec-ethz/scion-java-multiping/pull/31) - Fixed occurrence of ISD=0 / "AS not listed" [#32](https://github.com/netsec-ethz/scion-java-multiping/pull/32) +- Fixed error handling for additional rounds. Cleanup. + [#33](https://github.com/netsec-ethz/scion-java-multiping/pull/33) + +### Changed + +- Refactored for JPAN 1.6.2 and Use new endhost API. + [#34](https://github.com/netsec-ethz/scion-java-multiping/pull/34) + ## [0.6.1] - 2025-12-12 diff --git a/pom.xml b/pom.xml index 3d0e51a..94151d0 100644 --- a/pom.xml +++ b/pom.xml @@ -12,8 +12,8 @@ UTF-8 2.0.17 - 2.23 - 3.5.0 + 2.29 + 3.6.2 SCION Java API Examples @@ -70,20 +70,20 @@ org.junit.jupiter junit-jupiter - 5.14.1 + 5.14.4 test com.google.googlejavaformat google-java-format - 1.33.0 + 1.35.0 org.scion jpan - 0.6.1 + 0.7.0 @@ -95,13 +95,13 @@ org.jsoup jsoup - 1.21.2 + 1.22.2 com.google.code.gson gson - 2.13.2 + 2.14.0 @@ -109,7 +109,7 @@ maven-compiler-plugin - 3.13.0 + 3.15.0 1.8 1.8 @@ -141,12 +141,12 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.2 + 3.5.5 org.jacoco jacoco-maven-plugin - 0.8.12 + 0.8.14 prepare-agent @@ -273,7 +273,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.6.0 + 3.6.2 package diff --git a/src/main/java/org/scion/multiping/PingAll.java b/src/main/java/org/scion/multiping/PingAll.java index 985dbbc..616990c 100644 --- a/src/main/java/org/scion/multiping/PingAll.java +++ b/src/main/java/org/scion/multiping/PingAll.java @@ -27,8 +27,8 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import org.scion.jpan.*; -import org.scion.jpan.internal.PathRawParser; import org.scion.jpan.internal.Shim; +import org.scion.jpan.internal.header.PathRawParser; import org.scion.multiping.util.*; /** @@ -96,7 +96,8 @@ public static void main(String[] argsArray) throws IOException { localPort = config.getLocalPortOr30041(); Policy policy = parseArgs(argsArray); - System.setProperty(Constants.PROPERTY_SHIM, startShim ? "true" : "false"); // disable SHIM + System.setProperty(Constants.PROPERTY_BOOTSTRAP_PATH_SERVICE, "192.168.53.19:48080"); + System.setProperty(Constants.PROPERTY_SHIM, Boolean.toString(startShim)); // disable SHIM println("Settings:"); println(" Path policy = " + policy); @@ -212,18 +213,13 @@ private void runAS(ParseAssignments.HostEntry remote) throws IOException { if (msgs[0] != null && bestPath.get() != null && REPEAT > 1) { try (ScionProvider.Sync sender = service.getSync()) { for (int i = 1; i < msgs.length; i++) { - try { - List messages = sender.sendTracerouteRequest(bestPath.get()); - msgs[i] = messages.get(messages.size() - 1); - } catch (IOException e) { - msgs[i] = Scmp.TracerouteMessage.createEmpty(bestPath.get()); - msgs[i].setTimedOut(1_000_000_000); - } + List messages = sender.sendTracerouteRequest(bestPath.get()); + msgs[i] = messages.get(messages.size() - 1); } } } } catch (ScionRuntimeException e) { - println("ERROR: " + e.getMessage()); + printlnERROR(e.getMessage()); summary.incAsError(remote.getIsdAs()); summary.add(new Result(remote, Result.State.ERROR)); return; @@ -315,7 +311,7 @@ private Scmp.EchoMessage findShortestEcho(List paths, Ref refBest, l summary.incPathSuccess(); return msg; } catch (IOException e) { - println("ERROR: " + e.getMessage()); + printlnERROR(e.getMessage()); summary.incAsError(isdAs); return null; } @@ -341,7 +337,7 @@ private Scmp.TracerouteMessage findShortestTR(List paths, Ref refBes summary.incPathSuccess(); return msg; } catch (IOException e) { - println("ERROR: " + e.getMessage()); + printlnERROR(e.getMessage()); summary.incAsError(isdAs); return null; } @@ -373,7 +369,7 @@ private Scmp.TracerouteMessage findFastestTR(List paths, Ref refBest } return best; } catch (IOException e) { - println("ERROR: " + e.getMessage()); + printlnERROR(e.getMessage()); summary.incAsError(isdAs); return null; } @@ -393,7 +389,7 @@ private Scmp.TracerouteMessage findFastestTraceAsync( // Wait for all messages to be received, BEFORE closing the "sender". handler.await(); } catch (IOException e) { - println("ERROR: " + e.getMessage()); + printlnERROR(e.getMessage()); summary.incAsError(isdAs); return null; } diff --git a/src/main/java/org/scion/multiping/PingRepeat.java b/src/main/java/org/scion/multiping/PingRepeat.java index a6a5747..56bbf35 100644 --- a/src/main/java/org/scion/multiping/PingRepeat.java +++ b/src/main/java/org/scion/multiping/PingRepeat.java @@ -26,8 +26,8 @@ import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; import org.scion.jpan.*; -import org.scion.jpan.internal.PathRawParser; import org.scion.jpan.internal.Shim; +import org.scion.jpan.internal.header.PathRawParser; import org.scion.multiping.util.*; import org.scion.multiping.util.Record; @@ -121,7 +121,7 @@ private void runRepeat(ParseAssignments.HostEntry remote) { try { List paths = service.getPaths(remote.getIsdAs(), dstIP); if (paths.isEmpty()) { - String src = ScionUtil.toStringIA(service.getLocalIsdAs()); + String src = ScionUtil.toStringIA(service.getLocalIsdAses().iterator().next()); String dst = ScionUtil.toStringIA(remote.getIsdAs()); println("WARNING: No path found from " + src + " to " + dst); Record.createNoPathRecord(remote.getIsdAs(), fileWriter); diff --git a/src/main/java/org/scion/multiping/PingRepeatBlocking.java b/src/main/java/org/scion/multiping/PingRepeatBlocking.java index 5aa8bb1..b530062 100644 --- a/src/main/java/org/scion/multiping/PingRepeatBlocking.java +++ b/src/main/java/org/scion/multiping/PingRepeatBlocking.java @@ -25,7 +25,7 @@ import java.util.Comparator; import java.util.List; import org.scion.jpan.*; -import org.scion.jpan.internal.PathRawParser; +import org.scion.jpan.internal.header.PathRawParser; import org.scion.multiping.util.*; import org.scion.multiping.util.Record; diff --git a/src/main/java/org/scion/multiping/util/Record.java b/src/main/java/org/scion/multiping/util/Record.java index 42ca66a..6a1ed39 100644 --- a/src/main/java/org/scion/multiping/util/Record.java +++ b/src/main/java/org/scion/multiping/util/Record.java @@ -23,7 +23,7 @@ import org.scion.jpan.Path; import org.scion.jpan.ScionUtil; import org.scion.jpan.Scmp; -import org.scion.jpan.internal.PathRawParser; +import org.scion.jpan.internal.header.PathRawParser; public class Record { /** diff --git a/src/main/java/org/scion/multiping/util/Result.java b/src/main/java/org/scion/multiping/util/Result.java index 0a548c7..68092fc 100644 --- a/src/main/java/org/scion/multiping/util/Result.java +++ b/src/main/java/org/scion/multiping/util/Result.java @@ -17,7 +17,7 @@ import org.scion.jpan.Path; import org.scion.jpan.ScionUtil; import org.scion.jpan.Scmp; -import org.scion.jpan.internal.PathRawParser; +import org.scion.jpan.internal.header.PathRawParser; public class Result { public enum State { diff --git a/src/main/java/org/scion/multiping/util/ResultSummary.java b/src/main/java/org/scion/multiping/util/ResultSummary.java index 3d3d430..3c5630f 100644 --- a/src/main/java/org/scion/multiping/util/ResultSummary.java +++ b/src/main/java/org/scion/multiping/util/ResultSummary.java @@ -24,7 +24,7 @@ import java.util.stream.Collectors; import org.scion.jpan.ScionUtil; import org.scion.jpan.Scmp; -import org.scion.jpan.internal.PathRawParser; +import org.scion.jpan.internal.header.PathRawParser; public class ResultSummary { diff --git a/src/main/java/org/scion/multiping/util/Util.java b/src/main/java/org/scion/multiping/util/Util.java index eecdf0a..814182d 100644 --- a/src/main/java/org/scion/multiping/util/Util.java +++ b/src/main/java/org/scion/multiping/util/Util.java @@ -20,6 +20,8 @@ public class Util { public static boolean DELAYED_PRINT = false; // print only at newlines private static final StringBuilder sb = new StringBuilder(); + private Util() {} + public static void sleep(long millis) { try { Thread.sleep(millis); @@ -44,6 +46,10 @@ public static void println(String msg) { println(); } + public static void printlnERROR(String msg) { + println("ERROR: " + msg); + } + public static void println() { if (PRINT) { if (DELAYED_PRINT) { diff --git a/src/test/java/org/scion/jpan/PathHelper.java b/src/test/java/org/scion/jpan/PathHelper.java index d80ab14..08b11fd 100644 --- a/src/test/java/org/scion/jpan/PathHelper.java +++ b/src/test/java/org/scion/jpan/PathHelper.java @@ -14,12 +14,10 @@ package org.scion.jpan; -import com.google.protobuf.ByteString; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; -import org.scion.jpan.proto.daemon.Daemon; public class PathHelper { @@ -28,11 +26,13 @@ private PathHelper() {} public static List createPaths(int n) { List paths = new ArrayList<>(); for (int i = 0; i < n; i++) { - Daemon.Path.Builder builder = Daemon.Path.newBuilder(); - builder.setRaw(ByteString.copyFrom(new byte[] {})); + PathMetadata.Builder builder = PathMetadata.newBuilder(); + builder.setRaw(new byte[] {}); + builder.setSrcIsdAs(1000); + builder.setDstIsdAs(n + 1); try { InetAddress dst = InetAddress.getByAddress(new byte[] {123, 123, 123, 123}); - paths.add(RequestPath.create(builder.build(), n + 1, dst, 12345)); + paths.add(RequestPath.create(builder.build(), dst, 12345)); } catch (UnknownHostException e) { throw new ScionRuntimeException("Unable to create test path", e); } diff --git a/src/test/java/org/scion/multiping/PingAllTest.java b/src/test/java/org/scion/multiping/PingAllTest.java index 18c61f0..d8e9064 100644 --- a/src/test/java/org/scion/multiping/PingAllTest.java +++ b/src/test/java/org/scion/multiping/PingAllTest.java @@ -78,8 +78,7 @@ static class MySync implements ScionProvider.Sync { @Override public Scmp.EchoMessage sendEchoRequest(Path path, ByteBuffer bb) throws IOException { - Scmp.EchoMessage msg = Scmp.EchoMessage.createEmpty(path); - msg.setMessageArgs(Scmp.TypeCode.TYPE_129, seqId++, seqId); + Scmp.EchoMessage msg = Scmp.EchoMessage.create(Scmp.TypeCode.TYPE_129, seqId++, seqId, path); msg.assignRequest(msg, 1_000_000); // Hack: assign to itself return msg; } @@ -98,7 +97,9 @@ public List sendTracerouteRequest(Path path) throws IOEx } @Override - public void close() {} + public void close() { + /* Nothing to do */ + } } @Test @@ -110,9 +111,9 @@ class MyWithHandler extends WithHandler { handler, hdl -> { for (int i = 0; i < 3; i++) { - Scmp.TimedMessage req = Scmp.TracerouteMessage.createRequest(i, paths.get(i)); - Scmp.TimedMessage msg = Scmp.TracerouteMessage.createEmpty(paths.get(i)); - msg.setMessageArgs(Scmp.TypeCode.TYPE_131, i, i); + Scmp.TracerouteMessage req = Scmp.TracerouteMessage.createRequest(i, paths.get(i)); + Scmp.TracerouteMessage msg = + Scmp.TracerouteMessage.create(Scmp.TypeCode.TYPE_131, i, i, paths.get(i)); msg.assignRequest(req, 1_000_000); // Hack: assign to itself msg.setTimedOut(1000 * 1000 * 1000); hdl.onTimeout(msg); @@ -144,7 +145,7 @@ class MyWithHandler extends WithHandler { hdl -> { for (int i = 0; i < 3; i++) { Scmp.ErrorMessage msg = - Scmp.ErrorMessage.createEmpty(Scmp.TypeCode.TYPE_5, paths.get(i)); + Scmp.ErrorMessage.create(Scmp.TypeCode.TYPE_5, paths.get(i)); hdl.onError(msg); } });