#!/bin/sh
# vim: set tabstop=4 shiftwidth=4 expandtab:
#
# $Id$
#

# PROVIDE: ya-slb
# REQUIRE: ya-netif ya-routing
# KEYWORD: nojail
# BEFORE: NETWORKING

. /etc/ya.subr
_init_variables

name="ya_slb"
rcvar="${name}_enable"
start_cmd="ya_slb_start"
stop_cmd="ya_slb_stop"

: ${ya_slb_enable="NO"}
: ${ya_slb6_enable="NO"}
: ${ya_slb_mtu="8910"}

ya_slb_start()
{
    echo -n "Starting slb:"
    # Configure SLB
    ya_slb_common start
    echo "."
}

ya_slb_stop()
{
    echo -n "Stopping slb:"
    # Deconfigure SLB
    ya_slb_common stop
    echo "."
}

ya_slb_common()
{
    local _action _main_if _ip _ret _i _rule_number_incr _route_mtu

    if [ $# -ne 1 -o -z "$1" ]; then
        ya_err 1 "usage: ya_slb_common (start|stop)"
    fi

    _action="$1"
    _main_if=`ya_interface_get_active`
    _ip=`ya_get_ipaddr`

    eval `ya_slb_info ${_ip} ${_action}`
    if [ -z "${ya_slb_num:-}" ]; then
        echo -n " not configured"
        return 1
    fi

    _ret=0
    _i=0
    _rule_number_incr=0
    _route_mtu="${ya_slb_mtu}"
    while [ "${_i}" -lt "$ya_slb_num" ]; do
        eval _ip="\$ya_slb_ip_${_i}"
        eval _net="\$ya_slb_net_${_i}"
        eval _router="\$ya_slb_router_${_i}"
        eval _netmask="\$ya_slb_netmask_${_i}"

        if ! ya_pbr_manage "${_action}" "${_main_if}" "${_ip}" "${_net}" "${_router}" "${_netmask}" "${_rule_number_incr}" "${_route_mtu}"; then
            _ret=$((${_ret} + 1))
        fi
        _i=$((${_i} + 1))
        _rule_number_incr=$((${_rule_number_incr} + 1))
    done

    if [ "${_ret}" -eq 1 ]; then
        echo -n " with ${_ret} error"
    elif [ "${_ret}" -gt 1 ]; then
        echo -n " with ${_ret} errors"
    fi

    return ${_ret}
}

case "${ya_os}" in
FreeBSD)
    ya_load_config_files $name
    ;;
esac
ya_run_rc_command $*
