#dpdk #packet-processing #nfv

capsule

A framework for network function development. Written in Rust, inspired by NetBricks and built on Intel's Data Plane Development Kit.

3 releases

0.1.5 Mar 11, 2021
0.1.4 May 11, 2020
0.1.3 Apr 4, 2020

#239 in FFI

36 downloads per month
Used in 2 crates

Apache-2.0

1.5MB
39K SLoC

Crates.io Documentation Apache-2.0 licensed CI-Github Actions Codecov Code of Conduct Discord

Capsule

A framework for network function development. Written in Rust, inspired by NetBricks and built on Intel's Data Plane Development Kit.

Table of Contents

Overview

The goal of Capsule is to offer an ergonomic framework for network function development that traditionally has high barriers of entry for developers. We've created a tool to efficiently manipulate network packets while being type-safe, memory-safe, and thread-safe. Building on DPDK and Rust, Capsule offers

  • a fast packet processor that uses minimum number of CPU cycles.
  • a rich packet type system that guarantees memory-safety and thread-safety.
  • a declarative programming model that emphasizes simplicity.
  • an extendable and testable framework that is easy to develop and maintain.

Quick Start

The easiest way to start developing Capsule applications is to use the Vagrant virtual machine and the Docker sandbox provided by our team. The sandbox is preconfigured with all the necessary tools and libraries for Capsule development, including:

First install Vagrant and VirtualBox on your system. Also install the following Vagrant plugins,

host$ vagrant plugin install vagrant-reload vagrant-disksize vagrant-vbguest

Then clone our sandbox repository, start and ssh into the Vagrant VM,

host$ git clone https://github.com/capsule-rs/sandbox.git
host$ cd sandbox
host$ vagrant up
host$ vagrant ssh

Once inside the created Debian VM with Docker installed, run the sandbox with the command,

vagrant$ docker run -it --rm \
    --privileged \
    --network=host \
    --name sandbox \
    --cap-add=SYS_PTRACE \
    --security-opt seccomp=unconfined \
    -v /lib/modules:/lib/modules \
    -v /dev/hugepages:/dev/hugepages \
    getcapsule/sandbox:19.11.6-1.50 /bin/bash

Remember to also mount the working directory of your project as a volume for the sandbox. Then you can use Cargo commands inside the container as normal.

Add Capsule as a dependency to your Cargo.toml and start writing your application,

[dependencies]
capsule = "0.1"

If you want to develop Capsule without using Docker in Vagrant, please check out our sandbox repo for instructions on running our Vagrant VM environment, as well as others options not using either Vagrant or Docker.

Contributing

Thanks for your help improving the project! We have a contributing guide to help you get involved with the Capsule project.

Code of Conduct

This project and everyone participating in it are governed by the Capsule Code Of Conduct. By participating, you agree to this Code. Please report any violations to the code of conduct to capsule-dev@googlegroups.com.

Contact

You can contact us either through Discord or email.

Maintainers

The current maintainers with roles to merge PRs are:

Read More About Capsule

License

This project is licensed under the Apache-2.0 license.

Dependencies

~14–27MB
~396K SLoC