#!/usr/bin/env python

# This script starts routers in an virtul topology inside one or more servers.  Interface/vswitch values are hardcoded 
# into this script, so if your routers won't establish adjacencies, check for typoes (and please remember this repo's motto: "on the cheap"
# Note, this script calls util/qemu-xrv9k.py which will autopopulate parameters from start_node.py into the qemu launch VM command.

from os import getpid
from sys import argv, exit
import sys
import time
import subprocess

# example:  sudo ./start_node.py r00

#################################################################################

##### Routers 01 - 10 and router 16 run on UCS server 1

# R01 
if (sys.argv[1]) in ['r01']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r01.img', '01', 'r01'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr01mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr01xr0', 'tag=102'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr01xr1', 'tag=104'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr01xr2', 'tag=105'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr01xr3', 'tag=108'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr01xr4', 'tag=110'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr01xr5', 'tag=121'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr01xr6', 'tag=124'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr01xr7', 'tag=1012'])
    subprocess.call(['ovs-vsctl', 'add-port', 'gre-br1', 'rtr01xr8', 'tag=100'])
    subprocess.call(['ovs-vsctl', 'add-port', 'gre-br1', 'rtr01xr9', 'tag=102'])

# R02
if (sys.argv[1]) in ['r02']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r02.img', '02', 'r02'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr02mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr02xr0', 'tag=103'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr02xr1', 'tag=106'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr02xr2', 'tag=107'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr02xr3', 'tag=109'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr02xr4', 'tag=111'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr02xr5', 'tag=125'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr02xr6', 'tag=1012'])
    subprocess.call(['ovs-vsctl', 'add-port', 'scapy', 'rtr02xr7'])
    subprocess.call(['ovs-vsctl', 'add-port', 'gre-br1', 'rtr02xr8', 'tag=101'])
    subprocess.call(['ovs-vsctl', 'add-port', 'gre-br1', 'rtr02xr9', 'tag=103'])

# R03 
if (sys.argv[1]) in ['r03']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r03.img', '03', 'r03'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr03mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr03xr0', 'tag=111'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr03xr1', 'tag=110'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr03xr2', 'tag=112'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr03xr3', 'tag=363'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr03xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr03xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr03xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr03xr7', 'tag=999'])

# R04 
if (sys.argv[1]) in ['r04']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r04.img', '04', 'r04'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr04mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr04xr0', 'tag=112'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr04xr1', 'tag=113'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr04xr2', 'tag=74'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr04xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr04xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr04xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr04xr7', 'tag=999'])    

# R05
if (sys.argv[1]) in ['r05']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r05.img', '05', 'r05'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr05mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr05xr0', 'tag=113'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr05xr1', 'tag=114'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr05xr2', 'tag=364'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr05xr3', 'tag=365'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr05xr4', 'tag=516'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr05xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr05xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr05xr7', 'tag=999'])

# R06
if (sys.argv[1]) in ['r06']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r06.img', '06', 'r06'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr06mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr06xr0', 'tag=104'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr06xr1', 'tag=106'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr06xr2', 'tag=116'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr06xr3', 'tag=117'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr06xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr06xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr06xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr06xr7', 'tag=999'])
    
# R07
if (sys.argv[1]) in ['r07']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r07.img', '07', 'r07'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr07mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr07xr0', 'tag=105'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr07xr1', 'tag=107'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr07xr2', 'tag=118'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr07xr3', 'tag=119'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr07xr4', 'tag=366'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr07xr5', 'tag=367'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr07xr6', 'tag=130'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr07xr7', 'tag=999'])    
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr07xr8', 'tag=74'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr07xr9', 'tag=999'])    

# R08
if (sys.argv[1]) in ['r08']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r08.img', '08', 'r08'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr08mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr08xr0', 'tag=109'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr08xr1', 'tag=108'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr08xr2', 'tag=115'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr08xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr08xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr08xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr08xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr08xr7', 'tag=999'])

# R09
if (sys.argv[1]) in ['r09']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r09.img', '09', 'r09'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr09mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr09xr0', 'tag=115'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr09xr1', 'tag=114'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr09xr2', 'tag=369'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr09xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr09xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr09xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr09xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr09xr7', 'tag=999'])

# R10
if (sys.argv[1]) in ['r10']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r10.img', '10', 'r10'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr10mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr10xr0', 'tag=121'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr10xr1', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr10xr2', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr10xr3', 'tag=999'])

# R16
if (sys.argv[1]) in ['r16']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r16.img', '16', 'r16'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr16mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr16xr0', 'tag=516'])
    subprocess.call(['ovs-vsctl', 'add-port', 'gre-br2', 'rtr16xr1', 'tag=100'])
    subprocess.call(['ovs-vsctl', 'add-port', 'gre-br3', 'rtr16xr2', 'tag=102'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr16xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr16xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr16xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr16xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr16xr7', 'tag=999'])

##### Routers 17 - 24 run on UCS server 2

# R17
if (sys.argv[1]) in ['r17']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r17.img', '17', 'r17'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr17mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'gre-br23', 'rtr17xr0', 'tag=100'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr17xr1', 'tag=100'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr17xr2', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr17xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr17xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr17xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr17xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr17xr7', 'tag=999'])

# R18
if (sys.argv[1]) in ['r18']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r18.img', '18', 'r18'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr18mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr18xr0', 'tag=200'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr18xr1', 'tag=203'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr18xr2', 'tag=202'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr18xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr18xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr18xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr18xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr18xr7', 'tag=999'])

# R19
if (sys.argv[1]) in ['r19']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r19.img', '19', 'r19'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr19mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr19xr0', 'tag=203'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr19xr1', 'tag=204'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr19xr2', 'tag=205'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr19xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr19xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr19xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr19xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr19xr7', 'tag=999'])

# R20
if (sys.argv[1]) in ['r20']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r20.img', '20', 'r20'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr20mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr20xr0', 'tag=204'])
    subprocess.call(['ovs-vsctl', 'add-port', 'gre-br23', 'rtr20xr1', 'tag=103'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr20xr2', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr20xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr20xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr20xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr20xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr20xr7', 'tag=999'])

# R21
if (sys.argv[1]) in ['r21']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r21.img', '21', 'r21'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr21mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'gre-br23', 'rtr21xr0', 'tag=101'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr21xr1', 'tag=201'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr21xr2', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr21xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr21xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr21xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr21xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr21xr7', 'tag=999'])

# R22
if (sys.argv[1]) in ['r22']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r22.img', '22', 'r22'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr22mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr22xr0', 'tag=201'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr22xr1', 'tag=202'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr22xr2', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr22xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr22xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr22xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr22xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr22xr7', 'tag=999'])

# R23
if (sys.argv[1]) in ['r23']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r23.img', '23', 'r23'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr23mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr23xr0', 'tag=206'])
    subprocess.call(['ovs-vsctl', 'add-port', 'gre-br23', 'rtr23xr1', 'tag=104'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr23xr2', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr23xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr23xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr23xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr23xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr23xr7', 'tag=999'])=

# R24
if (sys.argv[1]) in ['r24']:
    subprocess.call(['python', 'util/qemu-xrv9k.py', 'r24.img', '24', 'r24'])
    subprocess.call(['ovs-vsctl', 'add-port', 'mgt_br', 'rtr24mgt1'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr24xr0', 'tag=206'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr24xr1', 'tag=205'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr24xr2', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr24xr3', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr24xr4', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr24xr5', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr24xr6', 'tag=999'])
    subprocess.call(['ovs-vsctl', 'add-port', 'rtr_br', 'rtr24xr7', 'tag=999'])

############################
print "node started"