The world of networking has undergone monumental shifts over the previous decade, significantly within the ongoing transfer from specialised into software program outlined network functions (NFV) for knowledge aircraft1 and packet processing. While the transition to software program has normal the rise of SDN (Software-defined networking) and programmable networks, new challenges have arisen in making these features versatile, environment friendly, simpler to make use of, and quick (i.e. little to no efficiency overhead). Our crew at Comcast wished to each leverage what the community does greatest, particularly with reference to its transport capability and routing mechanisms, whereas additionally with the ability to develop community packages by means of a contemporary software program lens—stressing testing, swift iteration, and deployment. So, with these targets in thoughts, we developed Capsule, a brand new framework for community perform improvement, written in Rust, impressed by Berkeley’s NetBricks analysis, and built-on Intel’s Data Plane Development Kit (DPDK).
Many networks right this moment are nonetheless programmed utilizing low-level languages which will lack safeguards towards logic errors. Studies have even shown that logic errors are probably the most generally discovered errors in packet-processing packages together with failing to examine anticipated branching situations, forgetting conditional checks or validations, and getting checksums flawed. While there’s been an inflow of higher-level language frameworks and programming fashions getting into the house, particularly from analysis and academia, many are typically tough for utility builders to get began with, prolong for their very own functions, unit-test, and/or run in a manufacturing setting.
With Capsule, we set out with a objective to supply an ergonomic framework for community perform improvement that historically has excessive obstacles of entry for builders. We’ve created a instrument to construct and run community features, effectively manipulating community packets whereas being type-safe, memory-safe, and thread-safe. Building on DPDK and Rust, Capsule supplies:
- a quick packet processor that makes use of minimal variety of CPU cycles.
- a wealthy packet sort system that ensures memory-safety and thread-safety.
- a declarative programming mannequin that emphasizes simplicity.
- an extensible and testable framework that’s simple to develop and keep.
Getting began
The best strategy to begin creating Capsule functions is to make use of Capsule’s Vagrant virtual machine (VM) and Docker sandbox. The sandbox is preconfigured with all the mandatory instruments and libraries for Capsule improvement, together with:
First, set up Vagrant and VirtualBox in your system. Also, set up the required Vagrant plugins with:
host$ vagrant plugin set up vagrant-reload vagrant-disksize vagrant-vbguest
Next, clone Capsule’s sandbox repository, then begin 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 you are contained in the created Debian VM with Docker put in, run the sandbox with:
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.1-1.43 /bin/bash
Remember to additionally mount the working listing of your undertaking as a quantity for the sandbox. Then you should utilize Rust Cargo instructions contained in the container as ordinary.
Finally, add Capsule as a dependency to your Cargo.toml
, and begin writing your utility:
[dependencies]
capsule = "0.1"
If you need to develop Capsule with out utilizing Docker in Vagrant, please take a look at the Capsule sandbox repo for directions on operating our Vagrant VM surroundings, in addition to different choices that don’t depend on both Vagrant or Docker. The Capsule Rust crate is offered on crates.io.
Getting concerned
The Capsule undertaking is searching for contributors to assist additional develop and improve the framework, together with new protocols, options, and optimizations. If you have an interest in collaborating, please see the contributing guide to become involved. We’d additionally like to see what use-cases and functions are explored with the framework. To see what Capsule packages seem like, take a look at our examples, together with a ping utility, and community features that train network address translation and forwarding, TCP SYN flood era with uncovered metrics, and our basic declarative approach to packet-processing.
The undertaking and everybody collaborating in it agrees to and is ruled by the Capsule Code Of Conduct.
The present maintainers with roles to merge pull requests are:
You can contact the crew by means of Discord or email.
1Refers to the forwarding and modifying of community visitors. Please learn Programmable Network Data Planes for a recent view on knowledge aircraft programmability business tasks and analysis.