#!/bin/sh
#
# $Header$

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

# -----------------------------------------------------------------------------
#
# This script supports running multiple components of langnet.
# To run additional component link this script to something like
# % ln -s langnet foo
# and define additional foo_* variables in one of
# /etc/rc.conf, /etc/rc.conf.local or /etc/rc.conf.d/foo
#
# Below NAME should be substituted with the name of this script. By default
# it is langnet, so read as langnet_enable. If you linked the script to
# foo, then read as foo_enable etc.
#
# NAME_enable="NO"		# set to YES to enable component NAME
#

. /etc/ya.subr
_init_variables

case "$0" in
/etc/rc*)
	# during boot (shutdown) $0 is /etc/rc (/etc/rc.shutdown),
	# so get the name of the script from $_file
	name=$(basename "$_file" .sh)
	;;
*)
	name=$(basename "$0" .sh)
	;;
esac

rcvar=$(set_rcvar)

load_rc_config $name

eval ": \${${name}_enable=\"YES\"}"

langnet_ip=$(eval echo \${${name}_ip})

langnet_if=$(ya_interface_get_active)
langnet_netmask=$(eval $(ya_network_info ${langnet_ip}) && echo $ya_netmask)
langnet_vlan=$(eval $(ya_network_info ${langnet_ip}) && echo $ya_VLAN)
langnet_vlan_if="vlan${langnet_vlan}"
langnet_gw=$(eval $(ya_network_info ${langnet_ip}) && echo $ya_defrouter)
langnet_net=$(eval $(ya_network_info ${langnet_ip}) && echo $ya_net)
langnet_rule_num="${langnet_vlan}"

start_precmd="langnet_checkip"
start_cmd="langnet_start"
stop_precmd="langnet_checkip"
stop_cmd="langnet_stop"

langnet_checkip()
{
	if [ "$ipaddr" = "$langnet_ip" ]; then
		echo "${name} uses the main IP."
		exit 0
	fi
}

langnet_start()
{
	if netstat -rn | grep -qE "^${langnet_net} .*UGS"; then
		if ! ya_route_manage stop $langnet_net $langnet_gw; then
			return 1
		fi
	fi
	if ! ipfw add $langnet_rule_num fwd $langnet_gw ip \
		from $langnet_net to any out
	then
		return 1
	fi
	if ! ya_vlan_manage start $langnet_if $langnet_vlan; then
		return 1
	fi
	if ! ya_ip_manage start $langnet_vlan_if $langnet_ip $langnet_netmask
	then
		return 1
	fi
	echo "${name} started."
}

langnet_stop()
{
	if ! ipfw delete $langnet_rule_num; then
		return 1
	fi
	if ! ya_ip_manage stop $langnet_vlan_if $langnet_ip $langnet_netmask
	then
		return 1
	fi
	if ! ya_vlan_manage del $langnet_vlan_if; then
		return 1
	fi

	echo "${name} stopped."
}

run_rc_command "$1"
