#!/bin/bash

# taken directly from net-scripts
check_eth_link ()
{
	local NAME=${1:?missing 1st argument to $FUNCNAME}
	local res
	[ -x "${IFPLUGSTATUS:=$DEFAULT_IFPLUGSTATUS}" ] || {
		print_error "$IFPLUGSTATUS does not exist or is not executable. Try installing ifplugd RPM."
		return 1
	}
	$IFPLUGSTATUS -q $NAME
	res=$?
	[ "$res" = 3 ] && return 1
	return 0
}

# see ifaces/default/options-eth
wait_for_macaddr()
{
	local TARGET="${1:?missing 1st arg to $FUNCNAME}"
	[ -z "$MACADDR_WAITTIME" ] && return
	[ "$MACADDR_WAITTIME" -gt "0" -a "$MACADDR_WAITTIME" -le "1000" ] || {
		print_error "MACADDR_WAITTIME exceeds 1000 (100 seconds)"
		return
	}
	local i
	for i in `seq 1 $MACADDR_WAITTIME`; do
		if $IP li sh dev $TARGET 2>/dev/null | fgrep -q 'link/ether 00:00:00:00:00:00'; then
			usleep 100000
		else
			break
		fi
	done
}

stop_dhcp_client()
{
	local PIDFILE=/var/run/dhcpcd-$NAME.pid
	if [ -s $PIDFILE ]; then
		kill -SIGHUP `cat $PIDFILE`
		# There probably should be a delay/wait loop here, dhcpcd doesn't die fast.
		sleep ${DHCPCD_GRACE_TIME:-0}
		# dhcpcd will bring down the interface when stopping. To keep etcnet logics
		# to work (running shutdown scripts for example) we should bring it up again
		$IP link set dev $NAME up
	fi
}

need_detection()
{
	# Optional 1st arg is passed by ifup-common to handle USE_IFPLUGD=auto
	case "${1:-$LINKDETECT}" in
		[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|[Yy]|1)
			return 0
		;;
		[Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|[Nn]|0)
			return 1
		;;
		[Aa][Uu][Tt][Oo])
			# Sometimes we need not ifplugstatus, but ifplugd. Let's hope they are
			# packed in the same package.
			[ -x "${IFPLUGSTATUS:-$DEFAULT_IFPLUGSTATUS}" ] || return 2
			local driver pick
			if [ -n "$MODULE" ]; then
				driver=$MODULE
			else
				[ -x "${ETHTOOL:-$DEFAULT_ETHTOOL}" ] || return 1
				driver=`${ETHTOOL:-$DEFAULT_ETHTOOL} -i $NAME | grep ^driver: | cut -d' ' -f2 2>/dev/null`
			fi
			for pick in $GOOD_MODULE_LIST; do
				[ "$pick" = "$driver" ] && return 0
			done
		return 1
		;;
	esac
}

ifplugd_runs()
{
	$IFPLUGD --check-running --iface=${1:-$NAME} >/dev/null
}

start_ifplugd()
{
	$IFPLUGD --iface=${1:-$NAME} --no-shutdown --ignore-fail --ignore-retval \
		--run=$SCRIPTDIR/ifplugd.action $IFPLUGD_EXTRA_ARGS
}

stop_ifplugd()
{
	$IFPLUGD --kill --iface=${1:-$NAME}
}

resume_ifplugd()
{
	$IFPLUGD --resume --iface=${1:-$NAME}
}

suspend_ifplugd()
{
	$IFPLUGD --suspend --iface=${1:-$NAME}
}
