ndn-dpdk icon indicating copy to clipboard operation
ndn-dpdk copied to clipboard

NDN-DPDK: High-Speed Named Data Networking Forwarder

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.

NDN-DPDK logo

This software is developed at the Advanced Network Technologies Division of the National Institute of Standards and Technology. It is in pre-release stage and will continue to be updated.

Documentation

  • NDN-DPDK installation guide
  • NDN-DPDK Docker container
  • NDN-DPDK forwarder activation and usage
  • NDN-DPDK traffic generator activation and usage
  • NDN-DPDK file server activation and usage
  • hardware known to work with NDN-DPDK
  • NDN-DPDK face creation
  • NDN-DPDK performance tuning
  • NDN-DPDK interoperability with other NDN software
  • NDN-DPDK 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: no

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.

These is a README.md file in most directories of this codebase that explains the relevant module.