Skip to content


Repository files navigation

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.

Acknowledgement: NDN-DPDK development and testing make use of public testbeds, including FABRIC, Cloudlab, Emulab, Virtual Wall, Grid'5000.


If you use NDN-DPDK in your research, please cite the NDN-DPDK paper instead of this GitHub repository.


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


  • Ethernet-based transports via DPDK: Ethernet, VLAN, UDP, VXLAN, GTP-U
  • 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


  • 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 file in most directories of this codebase that describes the corresponding module.