Giter VIP home page Giter VIP logo

ndn-dpdk's Introduction

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.12.9
  • clang-6.0 clang-format-6.0 curl doxygen git go-bindata libc6-dev-i386 libelf-dev libnuma-dev libssl-dev liburcu-dev socat sudo yamllint packages
  • DPDK 19.08 with CONFIG_RTE_BUILD_SHARED_LIB CONFIG_RTE_LIBRTE_BPF_ELF CONFIG_RTE_LIBRTE_PMD_OPENSSL enabled, and installed to /usr/local
  • SPDK 19.07 shared libraries installed to /usr/local
  • ubpf library, 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 go get -d -t ./... 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.

ndn-dpdk's People

Contributors

yoursunny avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.