onos/tools/test/topos/access-null
Thomas Vachuska c67a9912cc Added support for grid coordinates in the legacy topology view.
Change-Id: I48533f24eded919673af92a59cc5e2edefef46b3
2018-03-08 00:03:45 +00:00

131 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# -----------------------------------------------------------------------------
# Creates a spine-leaf fabric with large number of hosts using null providers
#
# Default setup as follows:
# 2 spines, can potentially be few more
# 12 leaves in total
#     2 leaf pair
#     8 non-paired
# Host per leaf up to 1K
#
# -----------------------------------------------------------------------------
function usage {
echo "usage: $(basename $0) [options] [onos-ip]"
echo ""
echo "Options:"
echo " -s spines"
echo " -l spineLinks"
echo " -S serviceHosts"
echo " -a accessLeaves"
echo " -A accessHosts"
exit 1
}
spines=2
spineLinks=2
serviceLeafGroups="A B"
serviceHosts=10
accessLeaves=8
accessHosts=100
# Scan arguments for user/password or other options...
while getopts s:l:a:A:S:?h o; do
case "$o" in
s) spines=$OPTARG;;
l) spineLinks=$OPTARG;;
a) accessLeaves=$OPTARG;;
A) accessHosts=$OPTARG;;
S) serviceHosts=$OPTARG;;
*) usage $0;;
esac
done
spinePorts=48
let leafPorts=serviceHosts+8 # derive service ports from service hosts
let accessPorts=accessHosts+8 # derive access ports from access hosts
let OPC=$OPTIND-1
shift $OPC
# 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
}
function y {
let p="${3:-300} * ($1 - 1) - (${3:-300} * ($2 - 1)) / 2"
echo $p
}
# Create spines
for spine in $(seq 1 $spines); do
sim "null-create-device switch Spine-${spine} ${spinePorts} 0 $(y $spine $spines) grid"
done
# Create 2 leaf pairs with dual links to the spines and a link between the pair
for pair in $serviceLeafGroups; do
[ $pair = A ] && l1=1 || l1=3
[ $pair = A ] && l2=2 || l2=4
sim "null-create-device switch Leaf-${pair}1 ${leafPorts} -200 $(y $l1 4) grid"
sim "null-create-device switch Leaf-${pair}2 ${leafPorts} -200 $(y $l2 4) grid"
sim "null-create-link direct Leaf-${pair}1 Leaf-${pair}2"
for spine in $(seq 1 $spines); do
for link in $(seq 1 $spineLinks); 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 $(seq 1 $serviceHosts); do
sim "null-create-host Leaf-${pair}1,Leaf-${pair}2 10.${pn}.1.${host}"
done
done
# Create single access leafs with dual links to the spines
for access in $(seq $accessLeaves); do
sim "null-create-device switch Access-${access} ${accessPorts} 200 $(y $access $accessLeaves) grid"
for spine in $(seq 1 $spines); do
for link in $(seq 1 $spineLinks); do
sim "null-create-link direct Spine-${spine} Access-${access}"
done
done
# Create hosts for each access single leaf
sim "null-create-hosts Access-${access} 10.1${access}.1.*" $accessHosts
# sim "null-create-hosts Access-${access} 10.1${access}.2.*" $accessHosts
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}