diff --git a/.github/interop/required.json b/.github/interop/required.json index 628bc5b243..31f726c9e8 100644 --- a/.github/interop/required.json +++ b/.github/interop/required.json @@ -14,7 +14,10 @@ "client", "server" ], - "neqo": [], + "neqo": [ + "client", + "server" + ], "ngtcp2": [ "client", "server" @@ -57,7 +60,10 @@ "mvfst": [ "server" ], - "neqo": [], + "neqo": [ + "client", + "server" + ], "ngtcp2": [ "client", "server" @@ -100,7 +106,10 @@ "mvfst": [ "client" ], - "neqo": [], + "neqo": [ + "client", + "server" + ], "ngtcp2": [ "client", "server" @@ -141,7 +150,10 @@ "mvfst": [ "server" ], - "neqo": [], + "neqo": [ + "client", + "server" + ], "ngtcp2": [ "client", "server" @@ -178,7 +190,9 @@ "lsquic": [], "msquic": [], "mvfst": [], - "neqo": [], + "neqo": [ + "client" + ], "ngtcp2": [ "client" ], @@ -207,7 +221,10 @@ "client", "server" ], - "neqo": [], + "neqo": [ + "client", + "server" + ], "ngtcp2": [ "client", "server" @@ -246,7 +263,10 @@ ], "msquic": [], "mvfst": [], - "neqo": [], + "neqo": [ + "client", + "server" + ], "ngtcp2": [ "client", "server" @@ -285,7 +305,10 @@ ], "msquic": [], "mvfst": [], - "neqo": [], + "neqo": [ + "client", + "server" + ], "ngtcp2": [ "client", "server" @@ -318,7 +341,9 @@ "lsquic": [], "msquic": [], "mvfst": [], - "neqo": [], + "neqo": [ + "client" + ], "ngtcp2": [ "client" ], @@ -372,7 +397,9 @@ ], "msquic": [], "mvfst": [], - "neqo": [], + "neqo": [ + "client" + ], "ngtcp2": [ "client", "server" @@ -432,7 +459,10 @@ ], "msquic": [], "mvfst": [], - "neqo": [], + "neqo": [ + "client", + "server" + ], "ngtcp2": [ "client", "server" @@ -492,7 +522,10 @@ ], "msquic": [], "mvfst": [], - "neqo": [], + "neqo": [ + "client", + "server" + ], "ngtcp2": [ "client", "server" @@ -529,7 +562,9 @@ ], "msquic": [], "mvfst": [], - "neqo": [], + "neqo": [ + "client" + ], "ngtcp2": [], "picoquic": [ "client" @@ -611,7 +646,10 @@ "mvfst": [ "server" ], - "neqo": [], + "neqo": [ + "client", + "server" + ], "ngtcp2": [ "client", "server" diff --git a/.github/interop/runner.patch b/.github/interop/runner.patch index 09dec1bdae..73ddecb1df 100644 --- a/.github/interop/runner.patch +++ b/.github/interop/runner.patch @@ -11,11 +11,10 @@ index f7c19f5..4b5eccc 100755 done rm -f "$CERTDIR"/*.srl "$CERTDIR"/ca_0.key "$CERTDIR"/cert.csr diff --git a/docker-compose.yml b/docker-compose.yml -index 93664f0..f0fa93e 100644 +index 8646582..cd151ea 100644 --- a/docker-compose.yml +++ b/docker-compose.yml -@@ -2,7 +2,7 @@ version: "2.4" - +@@ -1,6 +1,6 @@ services: sim: - image: martenseemann/quic-network-simulator @@ -30,8 +29,8 @@ index 93664f0..f0fa93e 100644 + - TEST_TYPE=$TEST_TYPE depends_on: - sim - cap_add: -@@ -68,6 +69,7 @@ services: + cap_add: +@@ -72,6 +73,7 @@ services: - SSLKEYLOGFILE=/logs/keys.log - QLOGDIR=/logs/qlog/ - TESTCASE=$TESTCASE_CLIENT @@ -40,7 +39,7 @@ index 93664f0..f0fa93e 100644 depends_on: - sim diff --git a/implementations.json b/implementations.json -index 09e2fdd..72513c8 100644 +index 7df33f8..527d7ee 100644 --- a/implementations.json +++ b/implementations.json @@ -74,8 +74,13 @@ @@ -59,7 +58,7 @@ index 09e2fdd..72513c8 100644 "role": "both" }, diff --git a/interop.py b/interop.py -index d6b27ce..ac7a7b7 100644 +index d6b27ce..a17ab66 100644 --- a/interop.py +++ b/interop.py @@ -126,6 +126,7 @@ class InteropRunner: @@ -102,7 +101,7 @@ index d6b27ce..ac7a7b7 100644 + statistics.mean(values), statistics.stdev(values), test.unit() + ) return res - + def run(self): @@ -541,23 +549,26 @@ class InteropRunner: client, @@ -114,7 +113,7 @@ index d6b27ce..ac7a7b7 100644 - ): - logging.info("Not compliant, skipping") - continue - + + transfer_succeeded = True # run the test cases for testcase in self._tests: @@ -124,7 +123,7 @@ index d6b27ce..ac7a7b7 100644 nr_failed += 1 + if testcase == testcases.TestCaseTransfer: + transfer_succeeded = False - + # run the measurements for measurement in self._measurements: - res = self._run_measurement(server, client, measurement) @@ -136,7 +135,7 @@ index d6b27ce..ac7a7b7 100644 + res.result = TestResult.UNSUPPORTED + res.details = "Skipping measurements as Transfer testcase was unsuccessful" self.measurement_results[server][client][measurement] = res - + self._postprocess_results() diff --git a/pull.py b/pull.py index c2d6d1f..844bbd5 100644 @@ -164,23 +163,23 @@ index 131cf94..ce5960d 100644 +pyshark==0.5.2 \ No newline at end of file diff --git a/run.py b/run.py -index 4564681..3a28eec 100755 +index 462f8df..5eb0cbb 100755 --- a/run.py +++ b/run.py -@@ -165,4 +165,4 @@ def main(): +@@ -180,4 +180,4 @@ def main(): if __name__ == "__main__": - sys.exit(main()) + main() diff --git a/testcases.py b/testcases.py -index fc69e11..7dafb07 100644 +index bda5690..b5dd3f1 100644 --- a/testcases.py +++ b/testcases.py @@ -98,6 +98,10 @@ class TestCase(abc.ABC): """The name of testcase presented to the endpoint Docker images""" return self.name() - + + @staticmethod + def test_type() -> str: + return "TEST" @@ -191,7 +190,7 @@ index fc69e11..7dafb07 100644 @@ -1239,10 +1243,14 @@ class TestCasePortRebinding(TestCaseTransfer): ] return self._files - + + @staticmethod + def test_type() -> str: + return "TEST" @@ -201,66 +200,10 @@ index fc69e11..7dafb07 100644 """Scenario for the ns3 simulator""" - return "rebind --delay=15ms --bandwidth=10Mbps --queue=25 --first-rebind=1s --rebind-freq=5s" + return "rebind --delay=15ms --bandwidth=10Mbps --queue=25 --first-rebind=2s --rebind-freq=5s" - - def check(self) -> TestResult: - super().check() -@@ -1265,56 +1273,26 @@ class TestCasePortRebinding(TestCaseTransfer): - logging.info("Server saw only a single client port in use; test broken?") - return TestResult.FAILED - -- last = None -- num_migrations = 0 -- for p in tr_server: -- cur = ( -- ( -- getattr(p["ipv6"], "dst") -- if "IPV6" in str(p.layers) -- else getattr(p["ip"], "dst") -- ), -- int(getattr(p["udp"], "dstport")), -- ) -- if last is None: -- last = cur -- continue -- -- if last != cur: -- last = cur -- num_migrations += 1 -- # packet to different IP/port, should have a PATH_CHALLENGE frame -- if hasattr(p["quic"], "path_challenge.data") is False: -- logging.info( -- "First server packet to new client destination %s did not contain a PATH_CHALLENGE frame", -- cur, -- ) -- logging.info(p["quic"]) -- return TestResult.FAILED -- -- tr_client = self._client_trace()._get_packets( -- self._client_trace()._get_direction_filter(Direction.FROM_CLIENT) + " quic" -+ tr_server2client = self._client_trace()._get_packets( -+ self._client_trace()._get_direction_filter(Direction.FROM_SERVER) + " quic" - ) - - challenges = list( - set( - getattr(p["quic"], "path_challenge.data") -- for p in tr_server -+ for p in tr_server2client - if hasattr(p["quic"], "path_challenge.data") - ) - ) -- if len(challenges) < num_migrations: -- logging.info( -- "Saw %d migrations, but only %d unique PATH_CHALLENGE frames", -- len(challenges), -- num_migrations, -- ) -- return TestResult.FAILED -+ -+ tr_client2server = self._client_trace()._get_packets( -+ self._client_trace()._get_direction_filter(Direction.FROM_CLIENT) + " quic" -+ ) - + + @staticmethod + def _addr(p: List, which: str) -> str: +@@ -1310,7 +1318,7 @@ class TestCasePortRebinding(TestCaseTransfer): responses = list( set( getattr(p["quic"], "path_response.data") @@ -269,10 +212,10 @@ index fc69e11..7dafb07 100644 if hasattr(p["quic"], "path_response.data") ) ) -@@ -1332,6 +1310,10 @@ class TestCaseAddressRebinding(TestCasePortRebinding): +@@ -1328,6 +1336,10 @@ class TestCaseAddressRebinding(TestCasePortRebinding): def name(): return "rebind-addr" - + + @staticmethod + def test_type() -> str: + return "MEASUREMENT" @@ -280,16 +223,16 @@ index fc69e11..7dafb07 100644 @staticmethod def abbreviation(): return "BA" -@@ -1615,7 +1597,7 @@ class MeasurementGoodput(Measurement): - +@@ -1616,7 +1628,7 @@ class MeasurementGoodput(Measurement): + @staticmethod def repetitions() -> int: - return 5 + return 1 - + def get_paths(self): self._files = [self._generate_random_file(self.FILESIZE)] -@@ -1687,7 +1669,7 @@ TESTCASES = [ +@@ -1688,7 +1700,7 @@ TESTCASES = [ TestCaseMultiplexing, TestCaseRetry, TestCaseResumption, @@ -298,21 +241,13 @@ index fc69e11..7dafb07 100644 TestCaseHTTP3, TestCaseBlackhole, TestCaseKeyUpdate, -@@ -1698,12 +1680,11 @@ TESTCASES = [ +@@ -1699,7 +1711,8 @@ TESTCASES = [ TestCaseHandshakeCorruption, TestCaseTransferCorruption, TestCaseIPv6, - TestCaseV2, -- # The next three tests are disabled due to Wireshark not being able -- # to decrypt packets sent on the new path. -- # TestCasePortRebinding, -- # TestCaseAddressRebinding, -- # TestCaseConnectionMigration, + # s2n-quic doesn't currently support v2 + # TestCaseV2, -+ TestCasePortRebinding, -+ TestCaseAddressRebinding, -+ TestCaseConnectionMigration, - ] - - MEASUREMENTS = [ + TestCasePortRebinding, + TestCaseAddressRebinding, + TestCaseConnectionMigration, diff --git a/.github/workflows/qns.yml b/.github/workflows/qns.yml index 33189bc806..c93e065218 100644 --- a/.github/workflows/qns.yml +++ b/.github/workflows/qns.yml @@ -18,7 +18,7 @@ env: RUST_BACKTRACE: 1 # This kept breaking builds so we're pinning for now. We should do our best to keep # up with the changes, though. - INTEROP_RUNNER_REF: bda2d276de79cd016e4d90fd57ff2d863b05abe5 + INTEROP_RUNNER_REF: 793bce4298cc69e3cf12cdbcbb7dea92e72df26e # This should be updated when updating wesleyrosenblum/quic-network-simulator NETWORK_SIMULATOR_REF: sha256:e102cb0e4b9457f510faf4ca888b4f7f6211aa109b68bfaaa1aa639059fcfc96 IPERF_ENDPOINT_REF: sha256:cb50cc8019d45d9cad5faecbe46a3c21dd5e871949819a5175423755a9045106 @@ -132,7 +132,7 @@ jobs: - uses: docker/setup-docker-action@v4 with: - version: version=v26.1.3 + version: version=v28.3.0 - name: Setup dockerfile working-directory: s2n-quic-qns diff --git a/scripts/interop/run b/scripts/interop/run index d69edef82e..fe56a546ec 100755 --- a/scripts/interop/run +++ b/scripts/interop/run @@ -22,7 +22,7 @@ if [ ! -d $INTEROP_DIR ]; then git clone https://github.com/marten-seemann/quic-interop-runner $INTEROP_DIR # make sure to keep this up to date with the interop workflow cd $INTEROP_DIR - git checkout bda2d276de79cd016e4d90fd57ff2d863b05abe5 + git checkout 793bce4298cc69e3cf12cdbcbb7dea92e72df26e git apply --3way ../../.github/interop/runner.patch cd ../../ fi