From ef71d9a38e0395bb7e71475ee02287795ec26b00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tilmann=20Z=C3=A4schke?= Date: Mon, 23 Feb 2026 10:54:01 +0100 Subject: [PATCH 1/4] TR error + cleanup --- CHANGELOG.md | 13 ++++++++----- pom.xml | 2 +- src/main/java/org/scion/multiping/PingAll.java | 5 +++-- src/main/java/org/scion/multiping/PingRepeat.java | 2 +- .../org/scion/multiping/PingRepeatBlocking.java | 2 +- src/main/java/org/scion/multiping/util/Record.java | 2 +- src/main/java/org/scion/multiping/util/Result.java | 2 +- .../org/scion/multiping/util/ResultSummary.java | 2 +- 8 files changed, 17 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d6e7b4..6520d5f 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. + [#33](https://github.com/netsec-ethz/scion-java-multiping/pull/33) + ## [0.6.1] - 2025-12-12 diff --git a/pom.xml b/pom.xml index 3d0e51a..93fcbb9 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ org.scion jpan - 0.6.1 + 0.6.2-SNAPSHOT diff --git a/src/main/java/org/scion/multiping/PingAll.java b/src/main/java/org/scion/multiping/PingAll.java index 985dbbc..5e293c8 100644 --- a/src/main/java/org/scion/multiping/PingAll.java +++ b/src/main/java/org/scion/multiping/PingAll.java @@ -27,7 +27,7 @@ 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.header.PathRawParser; import org.scion.jpan.internal.Shim; import org.scion.multiping.util.*; @@ -96,6 +96,7 @@ public static void main(String[] argsArray) throws IOException { localPort = config.getLocalPortOr30041(); Policy policy = parseArgs(argsArray); + System.setProperty(Constants.PROPERTY_BOOTSTRAP_PATH_SERVICE, "192.168.53.19:48080"); System.setProperty(Constants.PROPERTY_SHIM, startShim ? "true" : "false"); // disable SHIM println("Settings:"); @@ -216,7 +217,7 @@ private void runAS(ParseAssignments.HostEntry remote) throws IOException { 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] = Scmp.TracerouteMessage.createRequest(-1, bestPath.get()); msgs[i].setTimedOut(1_000_000_000); } } diff --git a/src/main/java/org/scion/multiping/PingRepeat.java b/src/main/java/org/scion/multiping/PingRepeat.java index a6a5747..fc52e18 100644 --- a/src/main/java/org/scion/multiping/PingRepeat.java +++ b/src/main/java/org/scion/multiping/PingRepeat.java @@ -26,7 +26,7 @@ import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; import org.scion.jpan.*; -import org.scion.jpan.internal.PathRawParser; +import org.scion.jpan.internal.header.PathRawParser; import org.scion.jpan.internal.Shim; import org.scion.multiping.util.*; import org.scion.multiping.util.Record; 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 { From 139a92c10ee94025b174aefef7cb39777b115a88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tilmann=20Z=C3=A4schke?= Date: Mon, 23 Feb 2026 13:25:53 +0100 Subject: [PATCH 2/4] New endhost API + JPAN refactoring --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6520d5f..97ca234 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ TODO ### Changed - Refactored for JPAN 1.6.2 and Use new endhost API. - [#33](https://github.com/netsec-ethz/scion-java-multiping/pull/33) + [#34](https://github.com/netsec-ethz/scion-java-multiping/pull/34) ## [0.6.1] - 2025-12-12 From 9e48c143dc0fddb835f869524ec169ad0566ab36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tilmann=20Z=C3=A4schke?= Date: Mon, 4 May 2026 12:50:24 +0200 Subject: [PATCH 3/4] New endhost API + JPAN refactoring --- pom.xml | 22 +++++++++--------- .../java/org/scion/multiping/PingAll.java | 23 ++++++++----------- .../java/org/scion/multiping/PingRepeat.java | 4 ++-- .../java/org/scion/multiping/util/Util.java | 6 +++++ src/test/java/org/scion/jpan/PathHelper.java | 10 ++++---- .../java/org/scion/multiping/PingAllTest.java | 21 +++++++++-------- 6 files changed, 44 insertions(+), 42 deletions(-) diff --git a/pom.xml b/pom.xml index 93fcbb9..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.2-SNAPSHOT + 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 5e293c8..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.header.PathRawParser; import org.scion.jpan.internal.Shim; +import org.scion.jpan.internal.header.PathRawParser; import org.scion.multiping.util.*; /** @@ -97,7 +97,7 @@ public static void main(String[] argsArray) throws IOException { Policy policy = parseArgs(argsArray); System.setProperty(Constants.PROPERTY_BOOTSTRAP_PATH_SERVICE, "192.168.53.19:48080"); - System.setProperty(Constants.PROPERTY_SHIM, startShim ? "true" : "false"); // disable SHIM + System.setProperty(Constants.PROPERTY_SHIM, Boolean.toString(startShim)); // disable SHIM println("Settings:"); println(" Path policy = " + policy); @@ -213,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.createRequest(-1, 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; @@ -316,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; } @@ -342,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; } @@ -374,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; } @@ -394,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 fc52e18..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.header.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/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..bfa6220 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); @@ -124,7 +125,7 @@ class MyWithHandler extends WithHandler { ScionProvider p = ScionProvider.createSync( () -> new MySync(3), - h -> new MyWithHandler(h), + MyWithHandler::new, Helper::isdAsList, () -> Long.valueOf(0), (ia, addr) -> PathHelper.createPaths(3)); @@ -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); } }); @@ -154,7 +155,7 @@ class MyWithHandler extends WithHandler { ScionProvider p = ScionProvider.createSync( () -> new MySync(3), - h -> new MyWithHandler(h), + MyWithHandler::new, Helper::isdAsList, () -> Long.valueOf(0), (ia, addr) -> PathHelper.createPaths(3)); @@ -175,7 +176,7 @@ class MyWithHandler extends WithIOError { ScionProvider p = ScionProvider.createSync( () -> new MySync(3), - h -> new MyWithHandler(h), + MyWithHandler::new, Helper::isdAsList, () -> Long.valueOf(0), (ia, addr) -> PathHelper.createPaths(3)); From d637a351f53b2d7889ac33f500c94a0c168fc7a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tilmann=20Z=C3=A4schke?= Date: Mon, 4 May 2026 12:58:40 +0200 Subject: [PATCH 4/4] New endhost API + JPAN refactoring --- src/test/java/org/scion/multiping/PingAllTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/org/scion/multiping/PingAllTest.java b/src/test/java/org/scion/multiping/PingAllTest.java index bfa6220..d8e9064 100644 --- a/src/test/java/org/scion/multiping/PingAllTest.java +++ b/src/test/java/org/scion/multiping/PingAllTest.java @@ -125,7 +125,7 @@ class MyWithHandler extends WithHandler { ScionProvider p = ScionProvider.createSync( () -> new MySync(3), - MyWithHandler::new, + h -> new MyWithHandler(h), Helper::isdAsList, () -> Long.valueOf(0), (ia, addr) -> PathHelper.createPaths(3)); @@ -155,7 +155,7 @@ class MyWithHandler extends WithHandler { ScionProvider p = ScionProvider.createSync( () -> new MySync(3), - MyWithHandler::new, + h -> new MyWithHandler(h), Helper::isdAsList, () -> Long.valueOf(0), (ia, addr) -> PathHelper.createPaths(3)); @@ -176,7 +176,7 @@ class MyWithHandler extends WithIOError { ScionProvider p = ScionProvider.createSync( () -> new MySync(3), - MyWithHandler::new, + h -> new MyWithHandler(h), Helper::isdAsList, () -> Long.valueOf(0), (ia, addr) -> PathHelper.createPaths(3));