Skip to content
NDN-DPDK: High-Speed Named Data Networking Forwarder
C Go TypeScript C++ Shell Ruby Other
Branch: master
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app fib: merge FibEntryDyn into FibEntry Oct 9, 2019
appinit ndnping+ndn: DataGen optimized encoder Aug 1, 2019
cmd benchmark: write instructions Sep 16, 2019
container fib: more tests and bugfix for Fib.Erase Oct 11, 2019
core dpdk,etc: fix errors detected by goreportcard.com Sep 25, 2019
docs ndnping: configure QueueCapacity Aug 15, 2019
dpdk fib: cleanup update procedures Sep 30, 2019
iface all: rename __Foo to Foo_ Sep 13, 2019
mgmt fib: cleanup update procedures Sep 30, 2019
mk mk: upgrade to gcc-7 on Ubuntu 16.04 Oct 3, 2019
ndn ndn: delete unused functions in Name Sep 30, 2019
spdk build: upgrade to DPDK 19.05, SPDK 19.04, Node 12 May 21, 2019
strategy fib: merge FibEntryDyn into FibEntry Oct 9, 2019
.dockerignore build: upgrade to DPDK 19.08-rc2 Jul 25, 2019
.gitignore mk: move C dependency into Rakefile Sep 24, 2019
.markdownlint.json mk: enable markdownlint-cli Sep 13, 2019
.travis.yml travis: build with both gcc and clang Oct 3, 2019
Dockerfile mk: upgrade to gcc-7 on Ubuntu 16.04 Oct 3, 2019
LICENSE.md docs: download LICENSE.md from awesome-nist Aug 26, 2019
Makefile mk: upgrade to gcc-7 on Ubuntu 16.04 Oct 3, 2019
README.md mk: upgrade to gcc-7 on Ubuntu 16.04 Oct 3, 2019
Rakefile fib: consolidate Tsht into Fib Oct 8, 2019
package-lock.json
package.json mk: upgrade to jayson 3.1.1 Sep 25, 2019
tsconfig.json build: move package.json to top level Mar 20, 2019
tslint.json build: change tslint object-literal-sort-keys Jul 26, 2019

README.md

NDN-DPDK: High-Speed Named Data Networking Forwarder

NDN-DPDK is a set of high-speed Named Data Networking (NDN) programs developed with Data Plane Development Kit (DPDK). It includes a network forwarder and a traffic generator.

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

Installation

Requirements:

  • Ubuntu 16.04 or 18.04 on amd64 architecture
  • Go 1.13.1
  • clang-6.0 clang-format-6.0 curl doxygen gcc-7 git go-bindata libc6-dev-i386 libelf-dev libnuma-dev libssl-dev liburcu-dev rake socat sudo yamllint packages (add ppa:ubuntu-toolchain-r/test on Ubuntu 16.04)
  • DPDK 19.08 with CONFIG_RTE_BUILD_SHARED_LIB CONFIG_RTE_LIBRTE_BPF_ELF CONFIG_RTE_LIBRTE_PMD_OPENSSL enabled, compiled with gcc-7, and installed to /usr/local
  • SPDK 19.07 shared libraries, compiled with gcc-7, and installed to /usr/local
  • ubpf library, compiled with gcc-7, and installed to /usr/local/include/ubpf.h and /usr/local/lib/libubpf.a
  • Node.js 12.x and sudo npm install -g jayson
  • Note: see Dockerfile on how to install dependencies.

Build steps:

  1. Clone repository into $GOPATH/src/ndn-dpdk.
  2. Execute npm install to download NPM dependencies.
  3. Execute make godeps to compile C code and generate certain Go/TypeScript source files.
  4. Execute make goget to download Go dependencies.
  5. Execute make cmds to install Go commands to $GOPATH/bin.
  6. Execute make tsc to build TypeScript modules and commands.

Other build targets and commands:

  • Execute sudo make install to install commands to /usr/local, and sudo make uninstall to uninstall. You may prepend DESTDIR=/opt to choose a different location.
  • Execute make gopkg to build all Go packages.
  • Execute make test to run unit tests, or mk/gotest.sh PKG to run tests for a package.
  • Execute make doxygen to build C documentation. You may omit doxygen dependencies if this is not needed.
  • Execute make godoc to start godoc server at port 6060.
  • Execute make lint to fix code style before committing. You may omit clang-format-6.0 yamllint dependencies if this is not needed.
  • Prepend RELEASE=1 to any make command to select release mode that disables asserts and verbose logging.
  • Prepend CC=clang-6.0 to any make command to compile C code with clang-6.0. The programs compiled with clang are currently not working, but this is a good way to find potential code errors.

Docker packaging:

  1. Build the image: mk/build-docker.sh
  2. Launch a container in privileged mode: docker run --rm -it --privileged -v /sys/bus/pci/devices:/sys/bus/pci/devices -v /sys/kernel/mm/hugepages:/sys/kernel/mm/hugepages -v /sys/devices/system/node:/sys/devices/system/node -v /dev:/dev --network host ndn-dpdk
  3. Setup environment inside the container: mkdir /mnt/huge1G && mount -t hugetlbfs nodev /mnt/huge1G -o pagesize=1G && export PATH=$PATH:/usr/local/go/bin && export GOPATH=/root/go
  4. Only a subset of the programs would work in Docker container, unfortunately.

Code Organization

  • mk: build helper scripts.
  • core: common shared code.
  • dpdk: DPDK bindings and extensions.
  • spdk: SPDK bindings and extensions.
  • ndn: NDN packet representations.
  • iface: network interfaces.
  • container: data structures.
  • strategy: forwarding strategy BPF programs.
  • app: applications, including the forwarder dataplane.
  • mgmt: management interface.
  • appinit: initialization procedures.
  • cmd: executables.
You can’t perform that action at this time.