Encap: IPv6 outer#60
Conversation
Add IPv6 outer encapsulation to all three tunnel protocols, closing out dual-stack encap as described in the roadmap. For each protocol (GUE, VXLAN, GENEVE): - Config6 struct with Ipv6Addr for remote tunnel endpoint - build_*_frame_into_v6() using outer IPv6 header + mandatory UDP6 checksum (RFC 8200 §8.1) - try_decap_*_v6() for decapsulating IPv6-outer frames - *DecapResult6 with Ipv6Addr for outer source - *_ENCAP_OVERHEAD_V6 constant Wire format: [Outer Eth 14B][Outer IPv6 40B][Outer UDP 8B][Protocol Header][Inner frame] The outer UDP checksum is always computed (mandatory for IPv6), using the existing udp6_checksum() helper from ipv6.rs. 41 new unit tests including synthetic PPS benchmarks for each protocol. Dependencies satisfied: IPv6 header build/parse (PR #49), UDP6 checksum (same PR), IPv6 offload flags (PR #55).
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.0x
|
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 26203824751)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[04:58:23] 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 |
…dmap Performance test results from GH Actions run 26204734648 show no regression from the IPv6 outer encap feature: - rust-dpdk 64B/700K: 699,000 RX (0.1% drop) — identical to Run #18 - rust-dpdk 512B/700K: 699,000 RX (0.1% drop) — identical to Run #18 - NIC instrumentation self-check: OK (zero drift) README roadmap updated to move 'Encap: IPv6 outer' from Planned to Done.
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: 1.0x, 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.0x
|
[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 (Run 26206433609)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
|
✅ 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 |
Roadmap item
Encap: IPv6 outer — Adds IPv6 outer support to all three encapsulation protocols (VXLAN, GENEVE, GUE), closing out dual-stack encap in a single PR.
Changes
For each protocol (GUE, VXLAN, GENEVE), adds:
*Config6struct withIpv6Addrfor remote tunnel endpointbuild_*_frame_into_v6()— frame builder using outer IPv6 header + mandatory UDP6 checksum (RFC 8200 §8.1)try_decap_*_v6()— decapsulation for IPv6-outer frames*DecapResult6withIpv6Addrfor outer source IP*_ENCAP_OVERHEAD_V6constantWire format:
[Outer Eth 14B][Outer IPv6 40B][Outer UDP 8B][Protocol Header][Inner frame]Tests added
41 new unit tests (total: 654, up from 613):
All synthetic PPS benchmarks assert < 10µs/op.
Tradeoffs
Dependencies satisfied