#!/bin/bash

SWs="sdn_sw1 sdn_sw2"


function up {

    # Create switches
    for sw in $SWs; do
        sudo ovs-vsctl add-br $sw
        sudo ovs-vsctl set-controller $sw tcp:127.0.0.1:6653
        sudo ovs-vsctl set-fail-mode $sw secure
    done;

    # Connecting switches to each other
    sudo ovs-vsctl add-port sdn_sw1 up1 -- set interface up1 type=patch options:peer=up2
    sudo ovs-vsctl add-port sdn_sw2 up2 -- set interface up2 type=patch options:peer=up1

    # Create hosts/containers
    sudo docker-compose up -d

    # Connect containers to switches
    sudo ovs-docker add-port sdn_sw1 eth0 h1
    sudo ovs-docker add-port sdn_sw1 eth0 h2

    sudo ovs-docker add-port sdn_sw2 eth0 h3
    sudo ovs-docker add-port sdn_sw2 eth0 h4

    # # Host 1
    sudo docker exec h1 ip addr add 2001:db8::1/64 dev eth0
    sudo docker exec h1 ip addr add 10.0.0.1/24 dev eth0

    # # Host 2
    sudo docker exec h2 ip addr add 2001:db8::2/64 dev eth0
    sudo docker exec h2 ip addr add 10.0.0.2/24 dev eth0

    # # Host 3
    sudo docker exec h3 ip addr add 2001:db8::3/64 dev eth0
    sudo docker exec h3 ip addr add 10.0.0.3/24 dev eth0

    # # Host 4
    sudo docker exec h4 ip addr add 2001:db8::4/64 dev eth0
    sudo docker exec h4 ip addr add 10.0.0.4/24 dev eth0
}

function down {

    for sw in $SWs; do
        sudo ovs-vsctl del-br $sw
    done;

    sudo docker-compose down
}


# MAIN

if [ "$1" == 'up' ]; then
    echo '> Starting lab'
    up
    echo '> Done.'
    echo

elif [ "$1" == 'down' ]; then
    echo '> Stopping lab'
    down
    echo '> Done.'
    echo

else
    echo
    echo '> USAGE:'
    echo "> #/bin/bash $0 [up|dow]"
    echo
fi
