NDN-DPDK: High-Speed Named Data Networking Forwarder
NDN-DPDK is a set of high-speed Named Data Networking (NDN) programs developed with the Data Plane Development Kit (DPDK). Included are a network forwarder, a traffic generator, and a file server.
This software is developed at the Smart Connected Systems Division of the National Institute of Standards and Technology. It is in beta stage and will continue to be updated.
Documentation
- Installation guide
- Docker container
- Forwarder activation and usage
- Traffic generator activation and usage
- File server activation and usage
- Hardware known to work
- Face creation
- Performance tuning
- Interoperability with other NDN software
- Related publications and presentations
- Doxygen reference
- Go reference
If you use NDN-DPDK in your research, please cite the NDN-DPDK paper instead of this GitHub repository.
Features
Packet encoding and decoding
- Interest and Data: v0.3 format only
- TLV evolvability: yes
- Forwarding hint: yes
- NDNLPv2
- Fragmentation and reassembly: yes
- Nack: yes
- PIT token: yes
- Congestion mark: yes
- Link layer reliability: no
Transports
- Ethernet-based transports via DPDK: Ethernet, VLAN, UDP, VXLAN
- Socket-based transports via kernel: UDP, TCP
- Local application transports: memif, Unix sockets
Forwarding plane
- Multi-threaded architecture
- Forwarding strategies: eBPF programs
- FIB: includes strategy choice and statistics
- PIT-CS Composite Table (PCCT): includes PIT and CS
Management
- GraphQL endpoint: HTTP POST, WebSocket "graphql-transport-ws", WebSocket "graphql-ws"
- Configuration file: none
- Routing: none
Code Organization
- ndn: NDN library in pure Go.
- mk: build helper scripts.
- csrc: C source code.
- js: TypeScript source code.
- bpf: eBPF programs, such as forwarding strategies.
- core: common shared code.
- dpdk: Go bindings for DPDK and SPDK.
- ndni: NDN packet representation for internal use.
- iface: network interfaces.
- container: data structures.
- app: application level modules, such as the forwarder data plane.
- cmd: executables.
- sample: control plane samples.
- docs: documentation.
There is a README.md
file in most directories of this codebase that describes the corresponding module.