#!/bin/bash
# -----------------------------------------------------------------------------
# Creates a spine-leaf fabric with large number of hosts using null providers
# -----------------------------------------------------------------------------

# config
node=${1:-$OCI}

# Create the script of ONOS commands first and then execute it all at once.
export CMDS="/tmp/fab-onos.cmds"
rm $CMDS

function sim {
    echo "$@" >> $CMDS
}

# Generate the recipe using the following:
# 2 spines, can potentially be few more
# 12 leaves in total
#     2 leaf pair
#     8 non-paired
# Host per leaf up to 1K

spinePorts=48
leafPorts=64
accessPorts=128

# Create spines
for spine in {1..2}; do
    sim "null-create-device switch Spine-${spine} ${spinePorts}"
done

# Create 2 leaf pairs with dual links to the spines and a link between the pair
for pair in A B; do
    sim "null-create-device switch Leaf-${pair}1 ${leafPorts}"
    sim "null-create-device switch Leaf-${pair}2 ${leafPorts}"
    sim "null-create-link direct Leaf-${pair}1 Leaf-${pair}2"

    for spine in {1..2}; do
        for link in {1..2}; do
            sim "null-create-link direct Spine-${spine} Leaf-${pair}1"
            sim "null-create-link direct Spine-${spine} Leaf-${pair}2"
        done
    done

    # Create hosts for each leaf group; multi-homed to each leaf in the pair
    [ $pair = A ] && pn=1 || pn=2
    for host in {1..10}; do
        sim "null-create-host Leaf-${pair}1,Leaf-${pair}2 10.${pn}.1.${host}"
    done
done

# Create 8 single leafs with dual links to the spines
for access in {1..8}; do
    sim "null-create-device switch Access-${access} ${accessPorts}"

    for spine in {1..2}; do
        for link in {1..2}; do
            sim "null-create-link direct Spine-${spine} Access-${access}"
        done
    done

    # Create hosts for each single leaf
    for host in {1..50}; do
        sim "null-create-host Access-${access} 10.0.${access}.${host}"
    done
done


# make sure null providers are activated and any running simulation is stopped
onos ${node} app activate org.onosproject.null
sleep 2
onos ${node} null-simulation stop

# wait until the masterships clear-out across the cluster
while onos ${node} masters | grep -qv " 0 devices"; do sleep 1; done

# clean-up
onos ${node} wipe-out please
sleep 1

# start custom simulation..
onos ${node} null-simulation start custom
sleep 2

# Add devices, links, and hosts
cat $CMDS | onos ${node}

