blob: 3e59ef2b28a4e033c39913554f79ec796548be86 [file] [log] [blame]
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +09001# Trema Sliceable Switch
2# ----------------------
3
4# Trema is a Full-Stack OpenFlow Framework in Ruby and C
5# https://github.com/trema/trema
6#
7# Trema Sliceable Switch is an OpenFlow controller which provides
8# virtual layer-2 network slices.
9# https://github.com/trema/apps/wiki
10
11# Trema Sliceable Switch (OpenFlow Controller)
12TREMA_APPS_REPO=${TREMA_APPS_REPO:-https://github.com/trema/apps.git}
13TREMA_APPS_BRANCH=${TREMA_APPS_BRANCH:-master}
14
15# Save trace setting
Dean Troyere3a91602014-03-28 12:40:56 -050016TREMA3_XTRACE=$(set +o | grep xtrace)
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090017set +o xtrace
18
19TREMA_DIR=${TREMA_DIR:-$DEST/trema}
20TREMA_SS_DIR="$TREMA_DIR/apps/sliceable_switch"
21
22TREMA_DATA_DIR=${TREMA_DATA_DIR:-$DATA_DIR/trema}
23TREMA_SS_ETC_DIR=$TREMA_DATA_DIR/sliceable_switch/etc
24TREMA_SS_DB_DIR=$TREMA_DATA_DIR/sliceable_switch/db
25TREMA_SS_SCRIPT_DIR=$TREMA_DATA_DIR/sliceable_switch/script
26TREMA_TMP_DIR=$TREMA_DATA_DIR/trema
27
28TREMA_LOG_LEVEL=${TREMA_LOG_LEVEL:-info}
29
30TREMA_SS_CONFIG=$TREMA_SS_ETC_DIR/sliceable.conf
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +000031TREMA_SS_APACHE_CONFIG=$(apache_site_config_for sliceable_switch)
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090032
33# configure_trema - Set config files, create data dirs, etc
Ian Wienandaee18c72014-02-21 15:35:08 +110034function configure_trema {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090035 # prepare dir
36 for d in $TREMA_SS_ETC_DIR $TREMA_SS_DB_DIR $TREMA_SS_SCRIPT_DIR; do
37 sudo mkdir -p $d
38 sudo chown -R `whoami` $d
39 done
40 sudo mkdir -p $TREMA_TMP_DIR
41}
42
43# init_trema - Initialize databases, etc.
Ian Wienandaee18c72014-02-21 15:35:08 +110044function init_trema {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090045 local _pwd=$(pwd)
46
47 # Initialize databases for Sliceable Switch
48 cd $TREMA_SS_DIR
49 rm -f filter.db slice.db
50 ./create_tables.sh
51 mv filter.db slice.db $TREMA_SS_DB_DIR
52 # Make sure that apache cgi has write access to the databases
53 sudo chown -R www-data.www-data $TREMA_SS_DB_DIR
54 cd $_pwd
55
56 # Setup HTTP Server for sliceable_switch
57 cp $TREMA_SS_DIR/{Slice.pm,Filter.pm,config.cgi} $TREMA_SS_SCRIPT_DIR
58 sed -i -e "s|/home/sliceable_switch/db|$TREMA_SS_DB_DIR|" \
59 $TREMA_SS_SCRIPT_DIR/config.cgi
60
61 sudo cp $TREMA_SS_DIR/apache/sliceable_switch $TREMA_SS_APACHE_CONFIG
62 sudo sed -i -e "s|/home/sliceable_switch/script|$TREMA_SS_SCRIPT_DIR|" \
63 $TREMA_SS_APACHE_CONFIG
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +000064 # TODO(gabriel-bezerra): use some function from lib/apache to enable these modules
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090065 sudo a2enmod rewrite actions
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +000066 enable_apache_site sliceable_switch
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090067
68 cp $TREMA_SS_DIR/sliceable_switch_null.conf $TREMA_SS_CONFIG
69 sed -i -e "s|^\$apps_dir.*$|\$apps_dir = \"$TREMA_DIR/apps\"|" \
Sean Dague101b4242013-10-22 08:47:11 -040070 -e "s|^\$db_dir.*$|\$db_dir = \"$TREMA_SS_DB_DIR\"|" \
71 $TREMA_SS_CONFIG
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090072}
73
Ian Wienandaee18c72014-02-21 15:35:08 +110074function gem_install {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090075 [[ "$OFFLINE" = "True" ]] && return
76 [ -n "$RUBYGEMS_CMD" ] || get_gem_command
77
78 local pkg=$1
79 $RUBYGEMS_CMD list | grep "^${pkg} " && return
80 sudo $RUBYGEMS_CMD install $pkg
81}
82
Ian Wienandaee18c72014-02-21 15:35:08 +110083function get_gem_command {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090084 # Trema requires ruby 1.8, so gem1.8 is checked first
85 RUBYGEMS_CMD=$(which gem1.8 || which gem)
86 if [ -z "$RUBYGEMS_CMD" ]; then
87 echo "Warning: ruby gems command not found."
88 fi
89}
90
Ian Wienandaee18c72014-02-21 15:35:08 +110091function install_trema {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +090092 # Trema
93 gem_install trema
94 # Sliceable Switch
95 git_clone $TREMA_APPS_REPO $TREMA_DIR/apps $TREMA_APPS_BRANCH
96 make -C $TREMA_DIR/apps/topology
97 make -C $TREMA_DIR/apps/flow_manager
98 make -C $TREMA_DIR/apps/sliceable_switch
99}
100
Ian Wienandaee18c72014-02-21 15:35:08 +1100101function start_trema {
Gabriel Assis Bezerraa688bc62014-05-27 20:58:22 +0000102 restart_apache_server
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +0900103
104 sudo LOGGING_LEVEL=$TREMA_LOG_LEVEL TREMA_TMP=$TREMA_TMP_DIR \
105 trema run -d -c $TREMA_SS_CONFIG
106}
107
Ian Wienandaee18c72014-02-21 15:35:08 +1100108function stop_trema {
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +0900109 sudo TREMA_TMP=$TREMA_TMP_DIR trema killall
110}
111
Ian Wienandaee18c72014-02-21 15:35:08 +1100112function check_trema {
armando-migliaccioef1e0802014-01-02 16:33:53 -0800113 :
114}
115
Akihiro MOTOKIf85fa082013-01-13 05:01:08 +0900116# Restore xtrace
Dean Troyere3a91602014-03-28 12:40:56 -0500117$TREMA3_XTRACE