#!/bin/bash

########################################################################
# Begin localnet
#
# Description : Loopback device
#
# Authors     : Gerard Beekmans  - gerard@linuxfromscratch.org
#               DJ Lucas - dj@linuxfromscratch.org
# Update      : Bruce Dubbs - bdubbs@linuxfromscratch.org
#
# Version     : LFS 7.0
#
# Adapted by  : CacheGuard Technologies for CacheGuard-OS
#
########################################################################

### BEGIN INIT INFO
# Provides:            localnet
# Required-Start:      mountvirtfs
# Should-Start:        modules
# Required-Stop:
# Should-Stop:
# Default-Start:       S
# Default-Stop:        0 6
# Short-Description:   Starts the local network.
# Description:         Sets the hostname of the machine and starts the
#                      loopback interface.
# X-LFS-Provided-By:   LFS
### END INIT INFO

. /lib/lsb/init-functions
[ -r /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -r /etc/hostname ] && HOSTNAME=`cat /etc/hostname`

LOOPBACK_FILE=/etc/sysconfig/network.lo

loopback()
{
    test -n "${1}" || return 1
    action=${1}

    test -f ${LOOPBACK_FILE} || return 0
    local address label

    while read address label
    do
	test -n "${address}" || continue
	test "${address:0:1}" != "#" || continue
	
	case ${action} in
	    start)
		ip address add ${address} label ${label} dev lo
		;;
	    
	    status)
		echo "Hostname is: $(hostname)"
		ip link show lo
		;;
	    
	    stop)
		ip address del ${address} dev lo
		;;
	    *)
		return 1
	esac
	
    done < ${LOOPBACK_FILE}
}

case "${1}" in
   start)
      log_info_msg "Bringing up the loopback interface..."
      ip addr add 127.0.0.1/8 label lo dev lo
      ip addr add 127.0.0.2/8 label lo dev lo
      ip addr add 127.0.0.3/8 label lo dev lo
      loopback start
      sysctl -q -w "net.ipv4.conf.lo.arp_ignore=1" 2> /dev/null

      ip link set lo up
      evaluate_retval

      log_info_msg "Setting hostname to ${HOSTNAME}..."
      hostname ${HOSTNAME}
      evaluate_retval
      ;;

   stop)
      log_info_msg "Bringing down the loopback interface..."
      loopback stop
      ip addr del 127.0.0.3/8 label lo dev lo
      ip addr del 127.0.0.2/8 label lo dev lo
      ip addr del 127.0.0.1/8 label lo dev lo

      ip link set lo down
      evaluate_retval
      ;;

   restart)
      ${0} stop
      sleep 1
      ${0} start
      ;;

   status)
      echo "Hostname is: $(hostname)"
      ip link show lo
      ;;

   *)
      echo "Usage: ${0} {start|stop|restart|status}"
      exit 1
      ;;
esac

exit 0

# End localnet
