#!/bin/sh
########################################################################
# Begin /lib/services/bridge
#
# Description : Bridge Boot Script
#
# Authors     : Nathan Coulson - nathan@linuxfromscratch.org
#               Bruce Dubbs - bdubbs@linuxfromscratch.org
#
# Version     : LFS-7.2
#
########################################################################

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

# Make compatible with older versions of init-functions
unset is_true

is_true()
{
   [ "$1" = "1" ] || [ "$1" = "yes" ] || [ "$1" = "true" ] || \
   [ "$1" = "y" ] || [ "$1" = "t"   ]
}

if [ -z "${INTERFACE_COMPONENTS}" ]; then
   log_warning_msg "INTERFACE_COMPONENTS variable missing from ${IFCONFIG}"
   exit 1
fi

case "${2}" in
   up)
      log_info_msg "Creating the ${1} interface..."
      brctl addbr ${1}
      evaluate_retval

      if [  -n "${INTERFACE_COMPONENTS}" ]; then
         for I in ${INTERFACE_COMPONENTS}; do
            log_info_msg "Adding ${I} to ${1}..."
            brctl addif ${1} ${I}
            evaluate_retval
         done
      fi

      if is_true ${STP}; then
        brctl stp ${1} on
        log_success_msg "Enabling spanning tree protocol..."
      fi

      if is_true ${IP_FORWARD}; then
        sysctl -w net.ipv4.ip_forward=1 > /dev/null
        log_success_msg "Enabling IP forwarding..."
      fi
   ;;

   down)
      if [  -n "${INTERFACE_COMPONENTS}" ]; then
         for I in ${INTERFACE_COMPONENTS}; do
            log_info_msg "Removing ${I} from ${1}..."
            ip link set ${I} down &&
            brctl delif ${1} ${I}
            evaluate_retval
         done
      fi

      log_info_msg "Bringing down the ${1} interface..."
      ip link set ${1} down
      brctl delbr ${1}
      evaluate_retval
   ;;

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

# End /lib/services/bridge
