ndn-dpdk

module
Version: v0.0.0-...-ca31197 Latest Latest
Warning

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

Go to latest
Published: Jul 30, 2021 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 and a traffic generator.

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

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

  • DPDK-based high-speed transports: Ethernet, VLAN, UDP, VXLAN
    • Ethernet adapter must be dedicated to DPDK
  • 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: yes
  • 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: applications, including the forwarder dataplane.
  • cmd: executables.

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

Directories

Path Synopsis
app
fetch
Package fetch simulates bulk file transfer traffic patterns.
Package fetch simulates bulk file transfer traffic patterns.
fwdp
Package fwdp implements the forwarder's data plane.
Package fwdp implements the forwarder's data plane.
tg
Package tg controls traffic generator elements.
Package tg controls traffic generator elements.
tg/tggql
Package tggql contains shared functions among traffic generator elements.
Package tggql contains shared functions among traffic generator elements.
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.
tgtestenv
Package tgtestenv provides facility to test the traffic generator.
Package tgtestenv provides facility to test the traffic generator.
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 executes the NDN-DPDK service.
Command ndndpdk-svc executes the NDN-DPDK service.
container
cs
Package cs implements the Content Store.
Package cs implements the Content Store.
cs/cscnt
Package cscnt provides Content Store counters.
Package cscnt provides Content Store counters.
diskstore
Package diskstore provides a disk-based Data packet store.
Package diskstore 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/gqlsub
Package gqlsub provides GraphQL subscriptions functionality.
Package gqlsub provides GraphQL subscriptions functionality.
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 and classifies MAC-48 addresses.
Package macaddr validates and classifies MAC-48 addresses.
nnduration
Package nnduration provides JSON-friendly non-negative duration types.
Package nnduration provides JSON-friendly non-negative duration types.
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.
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.
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/ethringdev
Package ethringdev contains bindings of DPDK net_eth_ring driver.
Package ethringdev contains bindings of DPDK net_eth_ring driver.
ethdev/ethvdev
Package ethvdev facilitates virtual Ethernet devices.
Package ethvdev facilitates virtual Ethernet devices.
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 faces using DPDK Ethernet devices.
Package ethface implements Ethernet faces using DPDK Ethernet devices.
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.
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.
version
Package version records NDN-DPDK version information.
Package version records NDN-DPDK version information.
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.
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.
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 ensures part of NDNgo library is compatible with TinyGo compiler.
Command tiny ensures 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.
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.
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.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
t or T : Toggle theme light dark auto