#!/bin/bash
#
# /etc/rc.d/net: start/stop network interface
#

# The rc.inet1 Slackware script is used as a basis.
# https://ftp.slackware.com/pub/slackware/slackware64-current/source/n/network-scripts/scripts/rc.inet1
#

DHCP_OPTS="-t 10 -b"

# If USE_DHCP[interface] is set to "yes", this overrides any other settings.
# If you don't have an interface, leave the settings null ("").

# ----------------------------------------

# ipv4 config options for eth0, eth0.10 or bond0
IFNAME[0]=""
IFADDRS[0]=""
USE_DHCP[0]=""
DHCP_HOSTNAME[0]=""

# ipv4 config options for eth1, eth1.10 or bond1
IFNAME[1]=""
IFADDRS[1]=""
USE_DHCP[1]=""
DHCP_HOSTNAME[1]=""

# ipv4 config options for eth2, eth2.10 or bond2
IFNAME[2]=""
IFADDRS[2]=""
USE_DHCP[2]=""
DHCP_HOSTNAME[2]=""

# ipv4 config options for eth3, eth3.10 or bond3
IFNAME[3]=""
IFADDRS[3]=""
USE_DHCP[3]=""
DHCP_HOSTNAME[3]=""

# ipv4 default gateway ip address
GW=""

# ----------------------------------------

case $1 in
	start)
		for i in ${!IFNAME[@]}; do
			if [ -d /sys/class/net/${IFNAME[$i]:-"empty"} ]; then
				IP="${IFADDRS[$i]%/*}"
				NM="${IFADDRS[$i]#*/}"
				if [ "${USE_DHCP[$i]}" = "yes" ]; then
					[ -n "${DHCP_HOSTNAME[$i]}" ] && DHCP_OPTS+=("-h" "${DHCP_HOSTNAME[$i]}")
					/sbin/dhcpcd ${DHCP_OPTS} ${IFNAME[$i]}
				elif [ ! -z "$IP" -a ! -z "$NM" ]; then
					/sbin/ip addr add $IP/$NM dev ${IFNAME[$i]} broadcast +
				fi
				/sbin/ip link set ${IFNAME[$i]} up
			fi
		done
		if [ ! -z $GW ] ; then
			/sbin/ip route add default via ${GW}
		fi
		;;
	stop)
		if [ ! -z $GW ] ; then
			/sbin/ip route del default
		fi
		for i in ${!IFNAME[@]}; do
			if [ -d /sys/class/net/${IFNAME[$i]:-"empty"} ]; then
				IP="${IFADDRS[$i]%/*}"
				NM="${IFADDRS[$i]#*/}"
				if [ "${USE_DHCP[$i]}" = "yes" ]; then
					/sbin/dhcpcd -k ${IFNAME[$i]}
				elif [ ! -z "$IP" -a ! -z "$NM" ]; then
					/sbin/ip addr del $IP/$NM dev ${IFNAME[$i]}
				fi
				/sbin/ip link set ${IFNAME[$i]} down
			fi
		done
		;;
	restart)
		$0 stop
		sleep 1
		$0 start
		;;
	*)
		echo "Usage: $0 [start|stop|restart]"
		;;
esac

# End of file
