# Trema Sliceable Switch # ---------------------- # Trema is a Full-Stack OpenFlow Framework in Ruby and C # https://github.com/trema/trema # # Trema Sliceable Switch is an OpenFlow controller which provides # virtual layer-2 network slices. # https://github.com/trema/apps/wiki # Trema Sliceable Switch (OpenFlow Controller) TREMA_APPS_REPO=${TREMA_APPS_REPO:-https://github.com/trema/apps.git} TREMA_APPS_BRANCH=${TREMA_APPS_BRANCH:-master} # Save trace setting MY_XTRACE=$(set +o | grep xtrace) set +o xtrace TREMA_DIR=${TREMA_DIR:-$DEST/trema} TREMA_SS_DIR="$TREMA_DIR/apps/sliceable_switch" TREMA_DATA_DIR=${TREMA_DATA_DIR:-$DATA_DIR/trema} TREMA_SS_ETC_DIR=$TREMA_DATA_DIR/sliceable_switch/etc TREMA_SS_DB_DIR=$TREMA_DATA_DIR/sliceable_switch/db TREMA_SS_SCRIPT_DIR=$TREMA_DATA_DIR/sliceable_switch/script TREMA_TMP_DIR=$TREMA_DATA_DIR/trema TREMA_LOG_LEVEL=${TREMA_LOG_LEVEL:-info} TREMA_SS_CONFIG=$TREMA_SS_ETC_DIR/sliceable.conf TREMA_SS_APACHE_CONFIG=/etc/apache2/sites-available/sliceable_switch.conf # configure_trema - Set config files, create data dirs, etc function configure_trema { # prepare dir for d in $TREMA_SS_ETC_DIR $TREMA_SS_DB_DIR $TREMA_SS_SCRIPT_DIR; do sudo mkdir -p $d sudo chown -R `whoami` $d done sudo mkdir -p $TREMA_TMP_DIR } # init_trema - Initialize databases, etc. function init_trema { local _pwd=$(pwd) # Initialize databases for Sliceable Switch cd $TREMA_SS_DIR rm -f filter.db slice.db ./create_tables.sh mv filter.db slice.db $TREMA_SS_DB_DIR # Make sure that apache cgi has write access to the databases sudo chown -R www-data.www-data $TREMA_SS_DB_DIR cd $_pwd # Setup HTTP Server for sliceable_switch cp $TREMA_SS_DIR/{Slice.pm,Filter.pm,config.cgi} $TREMA_SS_SCRIPT_DIR sed -i -e "s|/home/sliceable_switch/db|$TREMA_SS_DB_DIR|" \ $TREMA_SS_SCRIPT_DIR/config.cgi sudo cp $TREMA_SS_DIR/apache/sliceable_switch $TREMA_SS_APACHE_CONFIG sudo sed -i -e "s|/home/sliceable_switch/script|$TREMA_SS_SCRIPT_DIR|" \ $TREMA_SS_APACHE_CONFIG sudo a2enmod rewrite actions sudo a2ensite sliceable_switch.conf cp $TREMA_SS_DIR/sliceable_switch_null.conf $TREMA_SS_CONFIG sed -i -e "s|^\$apps_dir.*$|\$apps_dir = \"$TREMA_DIR/apps\"|" \ -e "s|^\$db_dir.*$|\$db_dir = \"$TREMA_SS_DB_DIR\"|" \ $TREMA_SS_CONFIG } function gem_install { [[ "$OFFLINE" = "True" ]] && return [ -n "$RUBYGEMS_CMD" ] || get_gem_command local pkg=$1 $RUBYGEMS_CMD list | grep "^${pkg} " && return sudo $RUBYGEMS_CMD install $pkg } function get_gem_command { # Trema requires ruby 1.8, so gem1.8 is checked first RUBYGEMS_CMD=$(which gem1.8 || which gem) if [ -z "$RUBYGEMS_CMD" ]; then echo "Warning: ruby gems command not found." fi } function install_trema { # Trema gem_install trema # Sliceable Switch git_clone $TREMA_APPS_REPO $TREMA_DIR/apps $TREMA_APPS_BRANCH make -C $TREMA_DIR/apps/topology make -C $TREMA_DIR/apps/flow_manager make -C $TREMA_DIR/apps/sliceable_switch } function start_trema { # APACHE_NAME is defined in init_horizon (in lib/horizon) restart_service $APACHE_NAME sudo LOGGING_LEVEL=$TREMA_LOG_LEVEL TREMA_TMP=$TREMA_TMP_DIR \ trema run -d -c $TREMA_SS_CONFIG } function stop_trema { sudo TREMA_TMP=$TREMA_TMP_DIR trema killall } function check_trema { : } # Restore xtrace $MY_XTRACE