ndn-dpdk

module
v0.0.0-...-5d9ef32 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 29, 2024 License: NIST-PD-fallback

README

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 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.

Documentation

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, 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

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.

Directories

Path Synopsis
app
fetch
Package fetch retrieves segmented objects.
Package fetch retrieves segmented objects.
fileserver
Package fileserver implements a file server.
Package fileserver implements a file server.
fwdp
Package fwdp implements the forwarder's data plane.
Package fwdp implements the forwarder's data plane.
hrlog
Package hrlog writes high resolution tracing logs.
Package hrlog writes high resolution tracing logs.
hrlog/hrlogreader
Package hrlogreader reads high resolution tracing logs.
Package hrlogreader reads high resolution tracing logs.
pdump
Package pdump implements a packet dumper.
Package pdump implements a packet dumper.
tg
Package tg controls traffic generator elements.
Package tg controls traffic generator elements.
tg/tgdef
Package tgdef contains common definitions and helpers for traffic generator.
Package tgdef contains common definitions and helpers for traffic generator.
tg/tggql
Package tggql contains shared functions among traffic generator elements.
Package tggql contains shared functions among traffic generator elements.
tg/tgtestenv
Package tgtestenv provides facility to test the traffic generator.
Package tgtestenv provides facility to test the traffic generator.
tgconsumer
Package tgconsumer implements a traffic generator consumer.
Package tgconsumer implements a traffic generator consumer.
tgproducer
Package tgproducer implements a traffic generator producer.
Package tgproducer implements a traffic generator producer.
upf
Package upf provides a 5G User Plane Function that converts PFCP sessions to GTP-U faces.
Package upf provides a 5G User Plane Function that converts PFCP sessions to GTP-U faces.
Package bpf provides access to compiled eBPF ELF objects.
Package bpf provides access to compiled eBPF ELF objects.
cmd
ndndpdk-ctrl
Command ndndpdk-ctrl controls the NDN-DPDK service.
Command ndndpdk-ctrl controls the NDN-DPDK service.
ndndpdk-godemo
Command ndndpdk-godemo demonstrates NDNgo library features.
Command ndndpdk-godemo demonstrates NDNgo library features.
ndndpdk-hrlog2histogram
Command ndndpdk-hrlog2histogram extracts latency histograms from high resolution per-packet logs.
Command ndndpdk-hrlog2histogram extracts latency histograms from high resolution per-packet logs.
ndndpdk-jrproxy
Command ndndpdk-jrproxy exposes NDN-DPDK GraphQL API as JSON-RPC 2.0 management API (2019).
Command ndndpdk-jrproxy exposes NDN-DPDK GraphQL API as JSON-RPC 2.0 management API (2019).
ndndpdk-svc
Command ndndpdk-svc runs the NDN-DPDK service.
Command ndndpdk-svc runs the NDN-DPDK service.
ndndpdk-upf
Command ndndpdk-upf runs a PFCP server that turns NDN-DPDK forwarder into 5G UPF.
Command ndndpdk-upf runs a PFCP server that turns NDN-DPDK forwarder into 5G UPF.
container
cs
Package cs implements the Content Store.
Package cs implements the Content Store.
disk
Package disk provides a disk-based Data packet store.
Package disk provides a disk-based Data packet store.
fib
Package fib implements the Forwarding Information Base.
Package fib implements the Forwarding Information Base.
fib/fibdef
Package fibdef declares common data structures for FIB.
Package fibdef declares common data structures for FIB.
fib/fibreplica
Package fibreplica controls a FIB replica in C.Fib struct.
Package fibreplica controls a FIB replica in C.Fib struct.
fib/fibtestenv
Package fibtestenv provides utilities for FIB unit tests.
Package fibtestenv provides utilities for FIB unit tests.
fib/fibtree
Package fibtree organizes logical FIB entries in a name hierarchy.
Package fibtree organizes logical FIB entries in a name hierarchy.
ndt
Package ndt implements the Name Dispatch Table.
Package ndt implements the Name Dispatch Table.
pcct
Package pcct implements the PIT-CS Composite Table.
Package pcct implements the PIT-CS Composite Table.
pit
Package pit implements the Pending Interest Table.
Package pit implements the Pending Interest Table.
strategycode
Package strategycode manages forwarding strategy BPF programs.
Package strategycode manages forwarding strategy BPF programs.
core
cptr
Package cptr handles C void* pointers.
Package cptr handles C void* pointers.
dlopen
Package dlopen allows preloading dynamic libraries.
Package dlopen allows preloading dynamic libraries.
events
Package events provides a simple event emitter.
Package events provides a simple event emitter.
gqlclient
Package gqlclient provides a GraphQL client.
Package gqlclient provides a GraphQL client.
gqlserver
Package gqlserver provides a GraphQL server.
Package gqlserver provides a GraphQL server.
gqlserver/gqlsingleton
Package gqlsingleton provides singleton objects in GraphQL server.
Package gqlsingleton provides singleton objects in GraphQL server.
hwinfo
Package hwinfo gathers hardware information.
Package hwinfo gathers hardware information.
jsonhelper
Package jsonhelper provides JSON-related helper functions.
Package jsonhelper provides JSON-related helper functions.
logging
Package logging is a thin wrapper of zap logging library.
Package logging is a thin wrapper of zap logging library.
logging/logginggql
Package logginggql allows setting log levels via GraphQL.
Package logginggql allows setting log levels via GraphQL.
macaddr
Package macaddr validates MAC-48 addresses.
Package macaddr validates MAC-48 addresses.
nnduration
Package nnduration provides JSON-friendly non-negative duration types.
Package nnduration provides JSON-friendly non-negative duration types.
pcg32
Package pcg32 interacts with PCG random number generators.
Package pcg32 interacts with PCG random number generators.
pciaddr
Package pciaddr parses and validates PCI addresses.
Package pciaddr parses and validates PCI addresses.
rttest
Package rttest implements an RTT estimator.
Package rttest implements an RTT estimator.
runningstat
Package runningstat implements Knuth and Welford's method for computing the standard deviation.
Package runningstat implements Knuth and Welford's method for computing the standard deviation.
subtract
Package subtract computes struct numerical difference.
Package subtract computes struct numerical difference.
testenv
Package testenv provides general test utilities.
Package testenv provides general test utilities.
urcu
Package urcu is a thin wrapper of Userspace RCU library.
Package urcu is a thin wrapper of Userspace RCU library.
version
Package version returns NDN-DPDK version information.
Package version returns NDN-DPDK version information.
dpdk
bdev
Package bdev contains bindings of SPDK block device layer.
Package bdev contains bindings of SPDK block device layer.
cryptodev
Package cryptodev contains bindings of DPDK crypto device.
Package cryptodev contains bindings of DPDK crypto device.
eal
Package eal contains bindings of DPDK Environment Abstraction Layer.
Package eal contains bindings of DPDK Environment Abstraction Layer.
ealconfig
Package ealconfig prepares EAL parameters.
Package ealconfig prepares EAL parameters.
ealinit
Package ealinit initializes DPDK EAL and SPDK main thread.
Package ealinit initializes DPDK EAL and SPDK main thread.
ealtestenv
Package ealtestenv initializes EAL for unit testing.
Package ealtestenv initializes EAL for unit testing.
ealthread
Package ealthread provides a thread abstraction bound to an DPDK LCore.
Package ealthread provides a thread abstraction bound to an DPDK LCore.
ethdev
Package ethdev contains bindings of DPDK Ethernet device.
Package ethdev contains bindings of DPDK Ethernet device.
ethdev/ethnetif
Package ethnetif manages DPDK Ethernet devices associated with kernel network interfaces.
Package ethnetif manages DPDK Ethernet devices associated with kernel network interfaces.
ethdev/ethringdev
Package ethringdev contains bindings of DPDK net_eth_ring driver.
Package ethringdev contains bindings of DPDK net_eth_ring driver.
mempool
Package mempool contains bindings of DPDK memory pool.
Package mempool contains bindings of DPDK memory pool.
pktmbuf
Package pktmbuf contains bindings of DPDK mbuf library.
Package pktmbuf contains bindings of DPDK mbuf library.
pktmbuf/mbuftestenv
Package mbuftestenv contains helper functions to construct mbufs in test code.
Package mbuftestenv contains helper functions to construct mbufs in test code.
ringbuffer
Package ringbuffer contains bindings of DPDK ring library.
Package ringbuffer contains bindings of DPDK ring library.
spdkenv
Package spdkenv contains bindings of SPDK environment and threads.
Package spdkenv contains bindings of SPDK environment and threads.
Package iface implements basics of the face system.
Package iface implements basics of the face system.
ethface
Package ethface implements Ethernet-based faces.
Package ethface implements Ethernet-based faces.
ethport
Package ethport implements faces using DPDK Ethernet device as transport.
Package ethport implements faces using DPDK Ethernet device as transport.
ifacetestenv
Package ifacetestenv provides a test fixture for a face type.
Package ifacetestenv provides a test fixture for a face type.
intface
Package intface implements an internal face for internal applications.
Package intface implements an internal face for internal applications.
memifface
Package memifface implements memif faces.
Package memifface implements memif faces.
socketface
Package socketface implements UDP/TCP socket faces using Go net.Conn type.
Package socketface implements UDP/TCP socket faces using Go net.Conn type.
mk
enumgen
Command enumgen generates C headers from Go enum declarations.
Command enumgen generates C headers from Go enum declarations.
ndn
Package ndn implements Named Data Networking (NDN) packet semantics.
Package ndn implements Named Data Networking (NDN) packet semantics.
an
Package an exports Assigned Numbers in NDN.
Package an exports Assigned Numbers in NDN.
endpoint
Package endpoint implements basic consumer and producer functionality.
Package endpoint implements basic consumer and producer functionality.
fch
Package fch provides a simple NDN-FCH client.
Package fch provides a simple NDN-FCH client.
keychain
Package keychain implements signing and verification on NDN packets.
Package keychain implements signing and verification on NDN packets.
l3
Package l3 defines a network layer face abstraction.
Package l3 defines a network layer face abstraction.
memiftransport
Package memiftransport implements a transport over a shared memory packet interface (memif).
Package memiftransport implements a transport over a shared memory packet interface (memif).
mgmt
Package mgmt defines interface of forwarder management features.
Package mgmt defines interface of forwarder management features.
mgmt/gqlmgmt
Package gqlmgmt provides access to NDN-DPDK GraphQL API.
Package gqlmgmt provides access to NDN-DPDK GraphQL API.
mgmt/nfdmgmt
Package nfdmgmt provides access to NFD Management API.
Package nfdmgmt provides access to NFD Management API.
ndnlayer
Package ndnlayer provides a GoPacket layer for NDN.
Package ndnlayer provides a GoPacket layer for NDN.
ndntestenv
Package ndntestenv contains helper functions to validate NDN packets in test code.
Package ndntestenv contains helper functions to validate NDN packets in test code.
ndntestenv/tiny
Command tiny verifies that part of NDNgo library is compatible with TinyGo compiler.
Command tiny verifies that part of NDNgo library is compatible with TinyGo compiler.
ndntestvector
Package ndntestvector contains test vectors of NDN packets.
Package ndntestvector contains test vectors of NDN packets.
packettransport
Package packettransport implements a transport based on GoPacket library.
Package packettransport implements a transport based on GoPacket library.
packettransport/afpacket
Package afpacket implements a transport that communicates over AF_PACKET sockets.
Package afpacket implements a transport that communicates over AF_PACKET sockets.
rdr
Package rdr implements Realtime Data Retrieval (RDR) protocol.
Package rdr implements Realtime Data Retrieval (RDR) protocol.
rdr/ndn6file
Package ndn6file implements ndn6-file-server protocol.
Package ndn6file implements ndn6-file-server protocol.
segmented
Package segmented publishes and retrieves segmented objects.
Package segmented publishes and retrieves segmented objects.
sockettransport
Package sockettransport implements a transport based on stream or datagram sockets.
Package sockettransport implements a transport based on stream or datagram sockets.
tlv
Package tlv implements NDN Type-Length-Value (TLV) encoding.
Package tlv implements NDN Type-Length-Value (TLV) encoding.
wasmtransport
Package wasmtransport implements l3.Transport for WebAssembly.
Package wasmtransport implements l3.Transport for WebAssembly.
Package ndni implements NDN layer 2 and layer 3 packet representations for internal use.
Package ndni implements NDN layer 2 and layer 3 packet representations for internal use.
ndnitestenv
Package ndnitestenv contains helper functions to construct NDN packets in test code.
Package ndnitestenv contains helper functions to construct NDN packets in test code.
sample

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL