Git Product home page Git Product logo

Vigor project continues here.

This repository is left for archival purposes.

VigNAT

This repository contains the VigNAT code together with the Vigor verification toolchain.

For the version of the code presented at SIGCOMM 2017, use this master branch.

For the version of the code submitted to SIGCOMM 2018 KBNets, use the kbnets18 branch.

Dependencies

Unconditional dependencies

  • DPDK-16.04

Verification dependencies

The Docker image

We gathered all the configuration instructions into a dockerfile verification.docker, that you can conveniently build with

$ docker build -f verification.docker -t vignat .

This file also serves as a reference if you want to configure your real machine such that it can build and run Vigor. Just look for the RUN instructions in verification.docker and execute them on your ubuntu 14.04 machine. Once you built the docker image you can run a container with

$ docker run -it vignat

Build the NAT

To build VigNAT, run

$ cd nf/vignat
$ make

This will compile and link VigNAT in the build directory. See nf/vignat/testbed for hints how to run it.

Verify the NAT

Vigor approach consists of three steps:

  1. Verification of the VigLib data structures with theorem proving by running VeriFast on the annotated code.
  2. Verification of the VigNAT safety with symbolic execution using KLEE.
  3. Validation of the symbolic models used in the previous step against the formal contracts, and verification against a semantic property formulated in validator/forwarding_property.tmpl.

First step relies only on the formal contracts for the data structures and can be performed at any time independently. The other two steps are dependent. The last step works with symbolic call traces produced in the second step, so they should be run in order.

Theorem proving

$ cd nf/vignat
$ make verifast

Symbolic execution

$ cd nf/vignat
$ make verify

Validation

$ cd validator
$ ./test_all.sh ../nf/vignat/klee-last aaa ../nf nat_fspec.cmo

Files

Here is a brief description of the contents of the project, which is essentially a collection of weakly connected artifacts. Please, look also for README.md files in the subdirectories.

  • verification.docker - A Docker config file that contains full instructions to setup proper build and verification environment for VigNAT
  • doc - contains all the documents/specs/justifications for Vigor approach
  • example - contains a small example that demonstrates the Vigor approach. It is a more complete version of the example used for our paper.
  • map-verification-attempts
  • nf - contains the library of the verified Vigor data structures and all the NF involved in the projects, some of them are verified some are not
  • validator - the validator, one of the steps in the Vigor approach.

VigNAT's Projects

klee icon klee

KLEE Symbolic Virtual Machine. patched for VNDS needs

klee-uclibc icon klee-uclibc

OBSOLETE fork of klee-uclibc, kept around for backwards compatibility with old artifacts.

vepc icon vepc

Project vEPC from M-CORD

verifast icon verifast

Research prototype tool for modular formal verification of C and Java programs

vignat icon vignat

[deprecated, see https://github.com/vigor-nf/vigor] VigNAT first repository. Includes VigNAT, libVig, Vigor Validator, and all the proofs.

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.