#!/bin/sh
########################################################################
# Begin /lib/services/ipv46-static
#
# Description : IPV4 Static Boot Script
#
# Authors     : Nathan Coulson - nathan at linuxfromscratch.org
#               Kevin P. Fleming - kpfleming at linuxfromscratch.org
# Update      : Bruce Dubbs - bdubbs at linuxfromscratch.org
#             : Joel Bion - jpbipv6hint at gmail.com
#
# Version     : LFS 9.0
#
########################################################################

. /lib/lsb/init-functions
. ${IFCONFIG}

args6=""

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

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 "${LABEL}" ]; then
    args="${args} label ${LABEL}"
fi

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

if [ -n "${IP6}" ]; then
     if [ -z "${PREFIX6}" ]; then
         log_warning_msg = "\nPREFIX6 variable missing from {$IFCONFIG}, assuming 64."
         PREFIX6=64
     fi
     args6="${args6} ${IP6}/${PREFIX6}"
fi

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

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

          log_info_msg "Adding IPv4 address ${IP} to the ${1} interface..."
          ip addr add ${args} dev ${1}
          evaluate_retval
       else
          log_warning_msg "Cannot add IPv4 address ${IP} to ${1}.  Already present."
       fi

       if [ -n "${IP6}" ]; then
           if [ "$(ip -6 addr show ${1} 2>/dev/null | grep ${IP6}/)" = "" ]; then

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

              log_info_msg "Adding IPv6 address ${IP6} to the ${1} interface..."
              ip -6 addr add ${args6} dev ${1}
              evaluate_retval
           else
              log_warning_msg "Cannot add IPv6 address ${IP6} to ${1}.  Already present."
           fi
        fi
    ;;

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

       # This code is removed because removing the last address REMOVES the
       # default route from the routing table ALREADY
       # if [ -n "${GATEWAY}" ]; then
       #   # Only remove the gateway if there are no remaining ipv4 addresses
       #   if [ "$(ip addr show ${1} 2>/dev/null | grep 'inet ')" == "" ]; then
       #      log_info_msg "Removing IPv4 default gateway..."
       #      ip route del default
       #      evaluate_retval
       #   fi
       # fi
    ;;

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

# End /lib/services/ip46-static
