# 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
