#!/bin/sh
########################################################################
# Begin /lib/services/ipv4-static
#
# Description : IPV4 Static Boot Script
#
# Authors     : Nathan Coulson - nathan@linuxfromscratch.org
#               Kevin P. Fleming - kpfleming@linuxfromscratch.org
# Update      : Bruce Dubbs - bdubbs@linuxfromscratch.org
#
# Version     : LFS 7.0
#
########################################################################

. /lib/lsb/init-functions

if [ -z ${1} ] ; then
  log_failure_msg "No ifconfig file specified"
  exit 1
fi
IFCONFIG=$1
. ${IFCONFIG}

if [ -z "${IP}" ]; then
  log_failure_msg "\nIP variable missing from ${IFCONFIG}, cannot continue."
  exit 1
fi

# If there are multiple ${PHYS}, then use the first.
test -z $IPV4_IF && IPV4_IF="$(echo ${PHYS} | awk '{print $1}')"

if [ -z "${PREFIX}" -a -z "${PEER}" ]; then
  log_warning_msg "\nPREFIX variable missing from ${IFCONFIG}, assuming 24."
  PREFIX=24
  args="${args} ${IP}/${PREFIX}"

elif [ -n "${PREFIX}" -a -n "${PEER}" ]; then
  log_failure_msg "\nPREFIX and PEER both specified in ${IFCONFIG}, cannot continue."
  exit 1

elif [ -n "${PREFIX}" ]; then
  args="${args} ${IP}/${PREFIX}"

elif [ -n "${PEER}" ]; then
  args="${args} ${IP} peer ${PEER}"
fi

if [ -n "${BROADCAST}" ]; then
  args="${args} broadcast ${BROADCAST}"
fi

case "${2}" in
  up)
     if [ "$(ip addr show ${IPV4_IF} 2>/dev/null | grep ${IP})" == "" ]; then

        # Cosmetic output not needed for multiple services
        if ! $(echo ${SERVICE} | grep -q " "); then 
          log_info_msg2 "\n" # Terminate the previous message
        fi

        log_info_msg "Adding IPv4 address ${IP} to the ${IPV4_IF} interface..."
        ip addr add ${args} dev ${IPV4_IF}
        evaluate_retval

        if [ -n "${GATEWAY}" ]; then
           if ip route | grep -q default; then
              log_warning_msg "\nGateway already setup; skipping."
           else
              log_info_msg "Setting up default gateway..."
              ip route add default via ${GATEWAY} dev ${IPV4_IF}
              evaluate_retval
            fi
        fi
     else
        msg="Cannot add IPv4 address ${IP} to ${IPV4_IF}.  Already present."
        log_warning_msg "$msg"
     fi
  ;;

  down)
     if [ "$(ip addr show ${IPV4_IF} 2>/dev/null | grep ${IP})" != "" ]; then
        log_info_msg "Removing IPv4 address ${IP} from the ${IPV4_IF} interface..."
        ip addr del ${args} dev ${IPV4_IF}
        evaluate_retval
     fi

     if [ -n "${GATEWAY}" ]; then
        # Only remove the gateway if ther are no remaining ipv4 addresses
        if [ "$(ip addr show ${IPV4_IF} 2>/dev/null | grep 'inet ')" != "" ]; then
           log_info_msg "Removing default gateway..."
           ip route del default
           evaluate_retval
        fi
     fi
  ;;

  *)
     echo "Usage: ${0} <interface> {up|down}"
     exit 1
  ;;
esac

# End /lib/services/ipv4-static
