#!/bin/bash
# **** License ****
# Version: VPL 1.0
#
# The contents of this file are subject to the Vyatta Public License
# Version 1.0 ("License"); you may not use this file except in
# compliance with the License. You may obtain a copy of the License at
# http://www.vyatta.com/vpl
#
# Software distributed under the License is distributed on an "AS IS"
# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
# the License for the specific language governing rights and limitations
# under the License.
#
# This code was originally developed by Vyatta, Inc.
# Portions created by Vyatta are Copyright (C) 2007 Vyatta, Inc.
# All Rights Reserved.
#
# Author:	Tom Grennan <tgrennan@vyatta.com>
# Description:	Vyatta Router system setup
#		this is an indirect init sub-script executed by ofr.init
#
# **** End License ****

ACTION=$1

source /etc/default/vyatta

: ${vyatta_prefix:=/opt/vyatta}
: ${vyatta_bindir:=${vyatta_prefix}/bin}
: ${vyatta_sbindir:=${vyatta_prefix}/sbin}
: ${vyatta_sysconfdir:=${vyatta_prefix}/etc}

[[ $PATH == *${vyatta_bindir}* ]] || PATH+=:${vyatta_bindir}
[[ $PATH == *${vyatta_sbindir}* ]] || PATH+=:${vyatta_sbindir}

export PATH

. /lib/lsb/init-functions

## BOOTFILE is provided by ofr.init
: ${BOOTFILE:=$prefix/etc/config/config.boot}

shopt -s extglob nullglob

search_config_if_wan () {
    grep "\<serial\>.*\<$1\>" $BOOTFILE >/dev/null
}

add_new_serial_if () {
    __config_additions=/tmp/__config_additions
    rm -f $__config_additions
    ip link show |
    sed -n '/^[0-9]*: wan[0-9]*:/ s/.* \([^:]*\):.*$/\1/p' |
    while read wan ; do
	if ! search_config_if_wan $wan ; then
	    echo "    serial $wan" >> $__config_additions
	fi
    done
    if [ -e $__config_additions ]; then
	rm -f /tmp/__bootfile
	sed '/^interfaces {$/ r '$__config_additions \
	    $BOOTFILE > /tmp/__bootfile
	mv /tmp/__bootfile $BOOTFILE
	rm -f $__config_additions
    fi
}

proc_flags ()
{
    # reset_promiscous_arp_response
    echo 1 > /proc/sys/net/ipv4/conf/default/arp_filter 
    # set_ip_forwarding
    echo 1 > /proc/sys/net/ipv4/ip_forward

    # if a primary address is removed from an interface promote and
    # secondary available
    echo 1 > /proc/sys/net/ipv4/conf/all/promote_secondaries
}

## Update the version information
update_version_info () {
    if [ -f ${vyatta_sysconfdir}/version.master ]; then
	cp ${vyatta_sysconfdir}/version.master ${vyatta_sysconfdir}/version
    fi
}

## Clear out apt config file--it will be filled in by rtrmgr
clear_apt_config()
{
    cat /dev/null >/etc/apt/sources.list || true
}

## snmp should be a separate package,
## but for now load the kernel module here
add_snmp_stats_module()
{
    modprobe ipt_rlsnmpstats || true
}

set_reboot_on_panic()
{
    echo 1 > /proc/sys/kernel/panic_on_oops
    echo 60 > /proc/sys/kernel/panic
}

clear_or_override_config_files ()
{
    for conf in motd.tail ntp.conf syslog.conf logrotate.d/messages \
        snmp/snmpd.conf snmp/snmptrapd.conf keepalived/keepalived.conf \
        ipvsadm.rules default/ipvsadm resolv.conf
    do
	if [ -f /etc/$conf ] ; then
	    cat /dev/null > /etc/$conf || true
	fi
    done
    for conf in motd.tail syslog.conf; do
	cp $vyatta_sysconfdir/$conf /etc/$conf
    done
    cp $vyatta_sysconfdir/logrotate_messages /etc/logrotate.d/messages
    cp $vyatta_sysconfdir/default_ssh /etc/default/ssh
    # ssh v1. remove the empty key file
    rm -f /etc/ssh/ssh_host_key
}

start () {
    clear_or_override_config_files || \
	log_failure_msg "can\'t reset config files"
    set_reboot_on_panic || \
	log_failure_msg "can\'t set reboot on panic"
    add_new_serial_if || \
	log_failure_msg "can\'t add serial interfaces"
    proc_flags  || \
	log_failure_msg "can\'t reset proc flags"
    update_version_info
    clear_apt_config
    add_snmp_stats_module
}

case "$ACTION" in
    start) start ;;
    stop|restart|force-reload) true ;; # nothing to stop/restart
    *)	log_failure_msg "action unknown: $ACTION" ;
	false ;;
esac

exit $?

# Local Variables:
# mode: shell-script
# sh-indentation: 4
# End: