blob: 075f013ded8066c754ad1f46e618f3b6cabc8c20 [file] [log] [blame]
Sean Daguee263c822014-12-05 14:25:28 -05001#!/bin/bash
2#
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +09003# Trema Sliceable Switch
4# ----------------------
5
6# Trema is a Full-Stack OpenFlow Framework in Ruby and C
7# https://github.com/trema/trema
8#
9# Trema Sliceable Switch is an OpenFlow controller which provides
10# virtual layer-2 network slices.
11# https://github.com/trema/apps/wiki
12
13# Trema Sliceable Switch (OpenFlow Controller)
14TREMA_APPS_REPO=${TREMA_APPS_REPO:-https://github.com/trema/apps.git}
15TREMA_APPS_BRANCH=${TREMA_APPS_BRANCH:-master}
16
17# Save trace setting
Dean Troyere3a91602014-03-28 12:40:56 -050018TREMA3_XTRACE=$(set +o | grep xtrace)
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090019set +o xtrace
20
21TREMA_DIR=${TREMA_DIR:-$DEST/trema}
22TREMA_SS_DIR="$TREMA_DIR/apps/sliceable_switch"
23
24TREMA_DATA_DIR=${TREMA_DATA_DIR:-$DATA_DIR/trema}
25TREMA_SS_ETC_DIR=$TREMA_DATA_DIR/sliceable_switch/etc
26TREMA_SS_DB_DIR=$TREMA_DATA_DIR/sliceable_switch/db
27TREMA_SS_SCRIPT_DIR=$TREMA_DATA_DIR/sliceable_switch/script
28TREMA_TMP_DIR=$TREMA_DATA_DIR/trema
29
30TREMA_LOG_LEVEL=${TREMA_LOG_LEVEL:-info}
31
32TREMA_SS_CONFIG=$TREMA_SS_ETC_DIR/sliceable.conf
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +000033TREMA_SS_APACHE_CONFIG=$(apache_site_config_for sliceable_switch)
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090034
35# configure_trema - Set config files, create data dirs, etc
Ian Wienandaee18c72014-02-21 15:35:08 +110036function configure_trema {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090037 # prepare dir
38 for d in $TREMA_SS_ETC_DIR $TREMA_SS_DB_DIR $TREMA_SS_SCRIPT_DIR; do
39 sudo mkdir -p $d
40 sudo chown -R `whoami` $d
41 done
42 sudo mkdir -p $TREMA_TMP_DIR
43}
44
45# init_trema - Initialize databases, etc.
Ian Wienandaee18c72014-02-21 15:35:08 +110046function init_trema {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090047 local _pwd=$(pwd)
48
49 # Initialize databases for Sliceable Switch
50 cd $TREMA_SS_DIR
51 rm -f filter.db slice.db
52 ./create_tables.sh
53 mv filter.db slice.db $TREMA_SS_DB_DIR
54 # Make sure that apache cgi has write access to the databases
55 sudo chown -R www-data.www-data $TREMA_SS_DB_DIR
56 cd $_pwd
57
58 # Setup HTTP Server for sliceable_switch
59 cp $TREMA_SS_DIR/{Slice.pm,Filter.pm,config.cgi} $TREMA_SS_SCRIPT_DIR
60 sed -i -e "s|/home/sliceable_switch/db|$TREMA_SS_DB_DIR|" \
61 $TREMA_SS_SCRIPT_DIR/config.cgi
62
63 sudo cp $TREMA_SS_DIR/apache/sliceable_switch $TREMA_SS_APACHE_CONFIG
64 sudo sed -i -e "s|/home/sliceable_switch/script|$TREMA_SS_SCRIPT_DIR|" \
65 $TREMA_SS_APACHE_CONFIG
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +000066 # TODO(gabriel-bezerra): use some function from lib/apache to enable these modules
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090067 sudo a2enmod rewrite actions
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +000068 enable_apache_site sliceable_switch
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090069
70 cp $TREMA_SS_DIR/sliceable_switch_null.conf $TREMA_SS_CONFIG
71 sed -i -e "s|^\$apps_dir.*$|\$apps_dir = \"$TREMA_DIR/apps\"|" \
Sean Dague101b4242013-10-22 08:47:11 -040072 -e "s|^\$db_dir.*$|\$db_dir = \"$TREMA_SS_DB_DIR\"|" \
73 $TREMA_SS_CONFIG
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090074}
75
Ian Wienandaee18c72014-02-21 15:35:08 +110076function gem_install {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090077 [[ "$OFFLINE" = "True" ]] && return
78 [ -n "$RUBYGEMS_CMD" ] || get_gem_command
79
80 local pkg=$1
81 $RUBYGEMS_CMD list | grep "^${pkg} " && return
82 sudo $RUBYGEMS_CMD install $pkg
83}
84
Ian Wienandaee18c72014-02-21 15:35:08 +110085function get_gem_command {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090086 # Trema requires ruby 1.8, so gem1.8 is checked first
87 RUBYGEMS_CMD=$(which gem1.8 || which gem)
88 if [ -z "$RUBYGEMS_CMD" ]; then
89 echo "Warning: ruby gems command not found."
90 fi
91}
92
Ian Wienandaee18c72014-02-21 15:35:08 +110093function install_trema {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090094 # Trema
95 gem_install trema
96 # Sliceable Switch
97 git_clone $TREMA_APPS_REPO $TREMA_DIR/apps $TREMA_APPS_BRANCH
98 make -C $TREMA_DIR/apps/topology
99 make -C $TREMA_DIR/apps/flow_manager
100 make -C $TREMA_DIR/apps/sliceable_switch
101}
102
Ian Wienandaee18c72014-02-21 15:35:08 +1100103function start_trema {
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +0000104 restart_apache_server
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +0900105
106 sudo LOGGING_LEVEL=$TREMA_LOG_LEVEL TREMA_TMP=$TREMA_TMP_DIR \
107 trema run -d -c $TREMA_SS_CONFIG
108}
109
Ian Wienandaee18c72014-02-21 15:35:08 +1100110function stop_trema {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +0900111 sudo TREMA_TMP=$TREMA_TMP_DIR trema killall
112}
113
Ian Wienandaee18c72014-02-21 15:35:08 +1100114function check_trema {
armando-migliaccioef1e0802014-01-02 16:33:53 -0800115 :
116}
117
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +0900118# Restore xtrace
Dean Troyere3a91602014-03-28 12:40:56 -0500119$TREMA3_XTRACE