blob: 0d9a13f48c6884bb29d6593a78b11e39f0a1d5f2 [file] [log] [blame]
Thomas Vachuskaa8e74772018-02-26 11:33:35 -08001#!/bin/bash
2# -----------------------------------------------------------------------------
3# Creates a spine-leaf fabric with large number of hosts using null providers
4#
5# Default setup as follows:
6# 2 spines, can potentially be few more
7# 12 leaves in total
8#     2 leaf pair
9#     8 non-paired
10# Host per leaf up to 1K
11#
12# -----------------------------------------------------------------------------
13
14function usage {
15 echo "usage: $(basename $0) [options] [onos-ip]"
16 echo ""
17 echo "Options:"
18 echo " -s spines"
19 echo " -l spineLinks"
20 echo " -S serviceHosts"
21 echo " -a accessLeaves"
22 echo " -A accessHosts"
23 exit 1
24}
25
26spines=2
27spineLinks=2
28serviceLeafGroups="A B"
29serviceHosts=10
30accessLeaves=8
31accessHosts=100
32
33# Scan arguments for user/password or other options...
34while getopts s:l:a:A:S:?h o; do
35 case "$o" in
36 s) spines=$OPTARG;;
37 l) spineLinks=$OPTARG;;
38 a) accessLeaves=$OPTARG;;
39 A) accessHosts=$OPTARG;;
40 S) serviceHosts=$OPTARG;;
41 *) usage $0;;
42 esac
43done
44
45spinePorts=48
46let leafPorts=serviceHosts+8 # derive service ports from service hosts
47let accessPorts=accessHosts+8 # derive access ports from access hosts
48
49let OPC=$OPTIND-1
50shift $OPC
51
52# config
53node=${1:-$OCI}
54
55
56# Create the script of ONOS commands first and then execute it all at once.
57export CMDS="/tmp/fab-onos.cmds"
58rm $CMDS
59
60function sim {
61 echo "$@" >> $CMDS
62}
63
64# Create spines
65for spine in $(seq 1 $spines); do
66 sim "null-create-device switch Spine-${spine} ${spinePorts}"
67done
68
69# Create 2 leaf pairs with dual links to the spines and a link between the pair
70for pair in $serviceLeafGroups; do
71 sim "null-create-device switch Leaf-${pair}1 ${leafPorts}"
72 sim "null-create-device switch Leaf-${pair}2 ${leafPorts}"
73 sim "null-create-link direct Leaf-${pair}1 Leaf-${pair}2"
74
75 for spine in $(seq 1 $spines); do
76 for link in $(seq 1 $spineLinks); do
77 sim "null-create-link direct Spine-${spine} Leaf-${pair}1"
78 sim "null-create-link direct Spine-${spine} Leaf-${pair}2"
79 done
80 done
81
82 # Create hosts for each leaf group; multi-homed to each leaf in the pair
83 [ $pair = A ] && pn=1 || pn=2
84 for host in $(seq 1 $serviceHosts); do
85 sim "null-create-host Leaf-${pair}1,Leaf-${pair}2 10.${pn}.1.${host}"
86 done
87done
88
89# Create single access leafs with dual links to the spines
90for access in $(seq $accessLeaves); do
91 sim "null-create-device switch Access-${access} ${accessPorts}"
92
93 for spine in $(seq 1 $spines); do
94 for link in $(seq 1 $spineLinks); do
95 sim "null-create-link direct Spine-${spine} Access-${access}"
96 done
97 done
98
99 # Create hosts for each access single leaf
100 sim "null-create-hosts Access-${access} 10.1${access}.1.*" $accessHosts
101 # sim "null-create-hosts Access-${access} 10.1${access}.2.*" $accessHosts
102done
103
104
105# make sure null providers are activated and any running simulation is stopped
106onos ${node} app activate org.onosproject.null
107sleep 2
108onos ${node} null-simulation stop
109
110# wait until the masterships clear-out across the cluster
111while onos ${node} masters | grep -qv " 0 devices"; do sleep 1; done
112
113# clean-up
114onos ${node} wipe-out please
115sleep 1
116
117# start custom simulation..
118onos ${node} null-simulation start custom
119sleep 2
120
121# Add devices, links, and hosts
122cat $CMDS | onos ${node}
123