NDP (Neighbor Discovery Protocol)#59
Conversation
Add dpdk-udp/src/ndp.rs implementing IPv6 Neighbor Discovery Protocol (RFC 4861) mirroring the existing ArpHandler pattern: - Neighbor Solicitation/Advertisement build and parse - NdpCache with atomic fast-path for single-peer steady state - NdpHandler: process NS/NA, resolve, make_solicitation, gratuitous NA - /proc/net/ipv6_neigh parsing and cache seeding - Synthetic performance tests for cache lookup, build, and parse 32 tests covering: roundtrip build/parse, validation edge cases, cache operations, handler behavior, proc parsing, and performance.
[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:
|
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
|
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
|
[Perf] Benchmark Diag:
|
[Perf] Stage: Benchmark (2/4)Running |
[CI] Stage: DeployInfrastructure ready.
|
[CI] Stage: DeployInfrastructure ready.
|
[Perf] Benchmark Diag:
|
[Perf] Benchmark Diag:
|
[Perf] Stage: Benchmark (3/4)Running |
[Perf] Benchmark Diag:
|
[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 26163443554)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] 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:42:46] 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 |
Performance test results from GH Actions run 26163492881 show no regression — NDP is a new standalone module with zero changes to the existing RX/TX hot path. Mark IPv6 task 6 (NDP) as complete in the README roadmap.
IPv6 task 6: NdpHandler mirroring ArpHandler with Neighbor Solicitation and Neighbor Advertisement (RFC 4861), atomic NDP cache with fast-path lookup, auto-resolution, gratuitous NA on bind, and /proc/net/ipv6_neigh cache seeding. - 32 unit tests (roundtrip, validation, cache, handler, proc parsing, perf) - Performance: no regression (Run #18 in docs/perf-test-log.md) - Integration tests: all passed on Graviton hardware
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
|
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
|
[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 26166574238)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 task 6: NDP (Neighbor Discovery Protocol) —
NdpHandlermirroringArpHandler: Neighbor Solicitation and Neighbor Advertisement message types, atomic NDP cache with fast-path lookup, auto-resolution on send, gratuitous NA on bind, and seeding the cache from/proc/net/ipv6_neighon Linux.What's implemented
dpdk-udp/src/ndp.rs: Full NDP module (RFC 4861 §4.3, §4.4)parse_ndp_packet()— validates hop limit=255, ICMPv6 type 135/136, extracts link-layer address optionsbuild_neighbor_solicitation(),build_neighbor_advertisement(),build_gratuitous_na()parse_proc_ipv6_neigh()+seed_cache_from_proc()for importing from/proc/net/ipv6_neighTests added
32 unit tests covering:
Tradeoffs