IPv6 UDP checksum validation#61
Conversation
Add comprehensive tests for verify_udp6_checksum and udp6_pseudo_header_checksum: - VLAN-tagged IPv6 frame checksum verification - Extension header (Hop-by-Hop) checksum verification - Various payload sizes (empty, 1-byte, odd-length, max) - Corruption detection in src/dst IP, src/dst port, payload - Edge cases: truncated frames, non-IPv6 frames, too-short frames - Pseudo-header checksum properties (different lengths, addresses) - Zero-becomes-0xFFFF contract verification - RX path integration: process_frame_zerocopy accepts/rejects IPv6 UDP The RX path integration test (accepts_valid_ipv6_udp) is expected to fail until the implementation is added in the next commit.
Add IPv6 UDP packet handling to process_frame_zerocopy: - Parse incoming IPv6/UDP frames via parse_udp6_packet_ref - Validate mandatory UDP checksum via verify_udp6_checksum (RFC 8200 §8.1) - Reject frames with zero checksum (invalid for IPv6, unlike IPv4) - Deliver valid IPv6 UDP packets to the application with SocketAddrV6 The RX path now tries IPv4 parsing first, then falls back to IPv6. This completes IPv6 roadmap sub-task #2: UDP over IPv6 checksum. All 607 tests pass with no regressions.
Synthetic Performance Results (run)Commit: ✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01) Synthetic UDP Performance ResultsMeasures framework overhead: sync
Avg sync/async ratio: 0.9x, worst: 1.1x
|
Synthetic Performance Results — Graviton (run)Commit: ✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01) Synthetic UDP Performance ResultsMeasures framework overhead: sync
Avg sync/async ratio: 0.9x, worst: 1.1x
|
[CI] Stage: DeployInfrastructure ready.
|
[CI] Stage: DeployInfrastructure ready.
|
[CI] Stage: SummaryAll tests PASSED. ARP seeding: kernel /proc/net/arp (automatic)
|
1 similar comment
[CI] Stage: SummaryAll tests PASSED. ARP seeding: kernel /proc/net/arp (automatic)
|
✅ Integration Tests Passed — Graviton (run)Branch: Test Results
Application Logs (last 20 lines)receiver-echo-server.log sender-echo-server.log sender-test-client.log |
✅ Integration Tests Passed (Run 26225969665)Branch: Test Results
Application Logs (last 20 lines)receiver-echo-server.log sender-echo-server.log sender-test-client.log receiver-test-client-iperf.log sender-test-client-iperf.log Full Application Logs (last 200 lines each)receiver-echo-server.logsender-echo-server.logsender-test-client.logreceiver-test-client-iperf.logsender-test-client-iperf.log
|
[Perf] Stage: DeployDeploying |
[Perf] Stage: Instances Ready
|
[Perf] Stage: TRex ConfigStarting TRex configuration (MAC discovery + NIC binding)... |
[Perf] Stage: TRex Config OK
|
[Perf] Stage: TRex StartedTRex server running. Beginning benchmarks... |
[Perf] DUT ReadyDUT instance |
[Perf] Stage: Benchmark (1/4)Running |
[Perf] Benchmark Diag:
|
[Perf] Benchmark Diag:
|
[Perf] Stage: Benchmark (2/4)Running |
[Perf] Benchmark Diag:
|
[Perf] Benchmark Diag:
|
[Perf] Stage: Benchmark (3/4)Running |
[Perf] Benchmark Diag:
|
[Perf] Benchmark Diag:
|
[Perf] Stage: Benchmark (4/4)Running |
[Perf] Benchmark Diag:
|
[Perf] Benchmark Diag:
|
[Perf] Diag: testpmd logtestpmd output (last 30 lines) |
[Perf] Stage: Results[13:51:24] INFO Generating markdown summary... Performance Test Results — unknownCommit: 64B packets
512B packets
1400B packets
8500B packets
NIC Drops Instrumentation Self-CheckCompares
plain-rust Kernel NIC Drops (ethtool -S delta)ethtool snapshots not available — baseline or final file missing in |
Append performance test results from GH Actions run 26227356354 (Graviton, TRex). No regressions detected — IPv6 fallback path adds zero overhead to IPv4 traffic. Mark IPv6 sub-task #2 (UDP over IPv6 checksum) as complete in the README roadmap.
Synthetic Performance Results (run)Commit: ✅ synthetic UDP socket bound to 10.0.0.1:9000 (MAC: 02:00:00:00:00:01) Synthetic UDP Performance ResultsMeasures framework overhead: sync
Avg sync/async ratio: 0.9x, worst: 1.1x
|
[CI] Stage: DeployInfrastructure ready.
|
[CI] Stage: DeployInfrastructure ready.
|
[CI] Stage: SummaryAll tests PASSED. ARP seeding: kernel /proc/net/arp (automatic)
|
1 similar comment
[CI] Stage: SummaryAll tests PASSED. ARP seeding: kernel /proc/net/arp (automatic)
|
✅ Integration Tests Passed — Graviton (run)Branch: Test Results
Application Logs (last 20 lines)receiver-echo-server.log sender-echo-server.log sender-test-client.log |
✅ Integration Tests Passed (Run 26230326969)Branch: Test Results
Application Logs (last 20 lines)receiver-echo-server.log sender-echo-server.log sender-test-client.log receiver-test-client-iperf.log sender-test-client-iperf.log Full Application Logs (last 200 lines each)receiver-echo-server.logsender-echo-server.logsender-test-client.logreceiver-test-client-iperf.logsender-test-client-iperf.log
|
Roadmap item
IPv6 sub-task #2: UDP over IPv6 checksum — mandatory IPv6 pseudo-header checksum validation (RFC 8200 §8.1).
Changes
verify_udp6_checksuminto the RX path (process_frame_zerocopy)SocketAddrV6source addressesTests added (21 new tests)
Checksum verification (ipv6.rs):
RX path integration (lib.rs):
process_frame_zerocopy_accepts_valid_ipv6_udpprocess_frame_zerocopy_rejects_corrupted_ipv6_checksumprocess_frame_zerocopy_rejects_zero_ipv6_checksumTradeoffs
All 607 tests pass, no regressions.