John-Lin / tinynet

A lightweight instant virtual network for rapid prototyping SDN
Apache License 2.0
45 stars 4 forks source link

tinynet

Build Status codecov GoDoc

A lightweight instant virtual network for rapid prototyping SDN

Tinynet provides a simple network library with Go and uses for emulating any network to prototype Software Defined Networks.

Prerequisite

Open vSwitch

Installation from Debian Packages

$ sudo apt-get install openvswitch-switch

or installation from source

Install

$ go get -u github.com/John-Lin/tinynet

API Reference

https://godoc.org/github.com/John-Lin/tinynet

Features

Example

package main

import (
    tn "github.com/John-Lin/tinynet"
    log "github.com/sirupsen/logrus"
)

// Custom topology example
// Host1 --- Switch1 --- Host2

func main() {
    // add a switch as a Switch1
    sw1, err := tn.AddSwitch("br0")
    if err != nil {
        log.Fatal("failed to AddSwitch:", err)
    }
    // setup Host1 network configuration through NewHostConfig constructor
    // parameters: name, address, interface name, MTU, isDocker, docker image
    hc1 := tn.NewHostConfig("h1", "10.0.0.102/24", "eth2", 1500, true, "library/busybox")
    // add a docker container host as a Host1
    h1, err := tn.AddHostWithConf(hc1)
    if err != nil {
        log.Fatal("failed to AddHost:", err)
    }
    // setup Host2 network configuration
    hc2 := tn.NewHostConfig("h2", "10.0.0.101/24", "eth1", 1500, true, "library/busybox")
    // add a docker container host as a Host2
    h2, err := tn.AddHostWithConf(hc2)
    if err != nil {
        log.Fatal("failed to AddHost:", err)
    }

    // add Link for Switch1 - Host1
    if err := tn.AddLink(sw1, h1); err != nil {
        log.Fatal("failed to AddLink:", err)
    }
    // add Link for Host2 - Switch1
    if err := tn.AddLink(h2, sw1); err != nil {
        log.Fatal("failed to AddLink:", err)
    }
}

more complicated example that you might see in a examples folder

Cleanup command

cleanup command to remove interfaces, network namespaces and bridges.

$ sudo python clean.py