Correct tabs
This commit is contained in:
		
							
								
								
									
										482
									
								
								sh/net.sh
									
									
									
									
									
								
							
							
						
						
									
										482
									
								
								sh/net.sh
									
									
									
									
									
								
							@@ -9,13 +9,13 @@ _config_vars="config routes"
 | 
			
		||||
[ -z "${IN_BACKGROUND}" ] && IN_BACKGROUND=false
 | 
			
		||||
 | 
			
		||||
depend() {
 | 
			
		||||
    local IFACE=${SVCNAME#*.}
 | 
			
		||||
    local IFVAR=$(echo -n "${IFACE}" | sed -e 's/[^[:alnum:]]/_/g')
 | 
			
		||||
	local IFACE=${SVCNAME#*.}
 | 
			
		||||
	local IFVAR=$(echo -n "${IFACE}" | sed -e 's/[^[:alnum:]]/_/g')
 | 
			
		||||
 | 
			
		||||
    need localmount
 | 
			
		||||
	need localmount
 | 
			
		||||
	after bootmisc
 | 
			
		||||
    provide net
 | 
			
		||||
    case "${IFACE}" in
 | 
			
		||||
	provide net
 | 
			
		||||
	case "${IFACE}" in
 | 
			
		||||
		lo|lo0) ;;
 | 
			
		||||
		*)
 | 
			
		||||
			after net.lo net.lo0
 | 
			
		||||
@@ -31,189 +31,189 @@ depend() {
 | 
			
		||||
			eval prov=\$RC_PROVIDE_${IFVAR}
 | 
			
		||||
			[ -n "${prov}" ] && provide ${prov}
 | 
			
		||||
			;;
 | 
			
		||||
    esac
 | 
			
		||||
	esac
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_shell_var() {
 | 
			
		||||
    echo -n "$1" | sed -e 's/[^[:alnum:]]/_/g'
 | 
			
		||||
	echo -n "$1" | sed -e 's/[^[:alnum:]]/_/g'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Credit to David Leverton for this function which handily maps a bash array
 | 
			
		||||
# structure to positional parameters so existing configs work :)
 | 
			
		||||
# We'll deprecate arrays at some point though.
 | 
			
		||||
_get_array() {
 | 
			
		||||
    if [ -n "${BASH}" ] ; then
 | 
			
		||||
	if [ -n "${BASH}" ] ; then
 | 
			
		||||
		case "$(declare -p "$1" 2>/dev/null)" in
 | 
			
		||||
	    	"declare -a "*)
 | 
			
		||||
	    	echo "set -- \"\${$1[@]}\""
 | 
			
		||||
	    	return
 | 
			
		||||
	    	;;
 | 
			
		||||
			"declare -a "*)
 | 
			
		||||
				echo "set -- \"\${$1[@]}\""
 | 
			
		||||
				return
 | 
			
		||||
				;;
 | 
			
		||||
		esac
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    echo "eval set -- \"\$$1\""
 | 
			
		||||
	echo "eval set -- \"\$$1\""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_wait_for_carrier() {
 | 
			
		||||
    local timeout= efunc=einfon
 | 
			
		||||
	local timeout= efunc=einfon
 | 
			
		||||
 | 
			
		||||
    _has_carrier  && return 0
 | 
			
		||||
	_has_carrier  && return 0
 | 
			
		||||
 | 
			
		||||
    eval timeout=\$carrier_timeout_${IFVAR}
 | 
			
		||||
    timeout=${timeout:-${carrier_timeout:-5}}
 | 
			
		||||
	eval timeout=\$carrier_timeout_${IFVAR}
 | 
			
		||||
	timeout=${timeout:-${carrier_timeout:-5}}
 | 
			
		||||
 | 
			
		||||
	# Incase users don't want this nice feature ...
 | 
			
		||||
	[ ${timeout} -le 0 ] && return 0
 | 
			
		||||
 | 
			
		||||
    [ -n "${RC_EBUFFER}" -o "${RC_PREFIX}" = "yes" ] && efunc=einfo
 | 
			
		||||
    ${efunc} "Waiting for carrier (${timeout} seconds) "
 | 
			
		||||
    while [ ${timeout} -gt 0 ] ; do
 | 
			
		||||
	[ -n "${RC_EBUFFER}" -o "${RC_PREFIX}" = "yes" ] && efunc=einfo
 | 
			
		||||
	${efunc} "Waiting for carrier (${timeout} seconds) "
 | 
			
		||||
	while [ ${timeout} -gt 0 ] ; do
 | 
			
		||||
		sleep 1
 | 
			
		||||
		if _has_carrier ; then
 | 
			
		||||
	    	[ -z "${RC_EBUFFER}" ] && echo
 | 
			
		||||
			[ -z "${RC_EBUFFER}" ] && echo
 | 
			
		||||
			eend 0
 | 
			
		||||
	    	return 0
 | 
			
		||||
			return 0
 | 
			
		||||
		fi
 | 
			
		||||
		timeout=$((${timeout} - 1))
 | 
			
		||||
		[ -z "${RC_EBUFFER}" -a "${RC_PREFIX}" != "yes" ] && printf "."
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
    [ -z "${RC_EBUFFER}" -a "${RC_PREFIX}" != "yes" ] && echo
 | 
			
		||||
	[ -z "${RC_EBUFFER}" -a "${RC_PREFIX}" != "yes" ] && echo
 | 
			
		||||
	eend 1
 | 
			
		||||
    return 1
 | 
			
		||||
	return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_netmask2cidr() {
 | 
			
		||||
    local i= len=0
 | 
			
		||||
	local i= len=0
 | 
			
		||||
 | 
			
		||||
    local IFS=.
 | 
			
		||||
    for i in $1; do
 | 
			
		||||
	local IFS=.
 | 
			
		||||
	for i in $1; do
 | 
			
		||||
		while [ ${i} != "0" ] ; do
 | 
			
		||||
	    	len=$((${len} + ${i} % 2))
 | 
			
		||||
	    	i=$((${i} >> 1))
 | 
			
		||||
			len=$((${len} + ${i} % 2))
 | 
			
		||||
			i=$((${i} >> 1))
 | 
			
		||||
		done
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
    echo "${len}"
 | 
			
		||||
	echo "${len}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_configure_variables() {
 | 
			
		||||
    local var= v= t=
 | 
			
		||||
	local var= v= t=
 | 
			
		||||
 | 
			
		||||
    for var in ${_config_vars} ; do
 | 
			
		||||
	for var in ${_config_vars} ; do
 | 
			
		||||
		local v=
 | 
			
		||||
		for t in "$@" ; do
 | 
			
		||||
		    eval v=\$${var}_${t}
 | 
			
		||||
	    	if [ -n "${v}" ] ; then
 | 
			
		||||
			eval v=\$${var}_${t}
 | 
			
		||||
			if [ -n "${v}" ] ; then
 | 
			
		||||
				eval ${var}_${IFVAR}=\$${var}_${t}
 | 
			
		||||
				continue 2
 | 
			
		||||
			fi
 | 
			
		||||
		done
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_show_address() {
 | 
			
		||||
    einfo "received address $(_get_inet_address "${IFACE}")"
 | 
			
		||||
	einfo "received address $(_get_inet_address "${IFACE}")"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Basically sorts our modules into order and saves the list
 | 
			
		||||
_gen_module_list() {
 | 
			
		||||
    local x= f=
 | 
			
		||||
    if [ -s "${MODULESLIST}" -a "${MODULESLIST}" -nt "${MODULESDIR}" ] ; then
 | 
			
		||||
	local x= f=
 | 
			
		||||
	if [ -s "${MODULESLIST}" -a "${MODULESLIST}" -nt "${MODULESDIR}" ] ; then
 | 
			
		||||
		local update=false
 | 
			
		||||
		for x in "${MODULESDIR}"/* ; do
 | 
			
		||||
	    	[ -e "${x}" ] || continue
 | 
			
		||||
	    	if [ "${x}" -nt "${MODULESLIST}" ] ; then
 | 
			
		||||
			[ -e "${x}" ] || continue
 | 
			
		||||
			if [ "${x}" -nt "${MODULESLIST}" ] ; then
 | 
			
		||||
				update=true
 | 
			
		||||
				break
 | 
			
		||||
	    	fi
 | 
			
		||||
			fi
 | 
			
		||||
		done
 | 
			
		||||
		${update} || return 0
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    einfo "Caching network module dependencies" 
 | 
			
		||||
    # Run in a subshell to protect the main script
 | 
			
		||||
    (
 | 
			
		||||
    after() {
 | 
			
		||||
	einfo "Caching network module dependencies" 
 | 
			
		||||
	# Run in a subshell to protect the main script
 | 
			
		||||
	(
 | 
			
		||||
	after() {
 | 
			
		||||
		eval ${MODULE}_after="\"\${${MODULE}_after}\${${MODULE}_after:+ }$*\""
 | 
			
		||||
    }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    before() {
 | 
			
		||||
	before() {
 | 
			
		||||
		local mod=${MODULE}
 | 
			
		||||
		local MODULE=
 | 
			
		||||
		for MODULE in "$@" ; do
 | 
			
		||||
	    	after "${mod}"
 | 
			
		||||
			after "${mod}"
 | 
			
		||||
		done
 | 
			
		||||
    }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    program() {
 | 
			
		||||
	program() {
 | 
			
		||||
		if [ "$1" = "start" -o "$1" = "stop" ] ; then
 | 
			
		||||
	    	local s="$1"
 | 
			
		||||
	    	shift
 | 
			
		||||
	    	eval ${MODULE}_program_${s}="\"\${${MODULE}_program_${s}}\${${MODULE}_program_${s}:+ }$*\""
 | 
			
		||||
			local s="$1"
 | 
			
		||||
			shift
 | 
			
		||||
			eval ${MODULE}_program_${s}="\"\${${MODULE}_program_${s}}\${${MODULE}_program_${s}:+ }$*\""
 | 
			
		||||
		else
 | 
			
		||||
	    	eval ${MODULE}_program="\"\${${MODULE}_program}\${${MODULE}_program:+ }$*\""
 | 
			
		||||
			eval ${MODULE}_program="\"\${${MODULE}_program}\${${MODULE}_program:+ }$*\""
 | 
			
		||||
		fi
 | 
			
		||||
    }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    provide() {
 | 
			
		||||
	provide() {
 | 
			
		||||
		eval ${MODULE}_provide="\"\${${MODULE}_provide}\${${MODULE}_provide:+ }$*\""
 | 
			
		||||
		local x
 | 
			
		||||
		for x in $* ; do
 | 
			
		||||
	    	eval ${x}_providedby="\"\${${MODULE}_providedby}\${${MODULE}_providedby:+ }${MODULE}\""
 | 
			
		||||
			eval ${x}_providedby="\"\${${MODULE}_providedby}\${${MODULE}_providedby:+ }${MODULE}\""
 | 
			
		||||
		done
 | 
			
		||||
    }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    for MODULE in "${MODULESDIR}"/* ; do
 | 
			
		||||
	for MODULE in "${MODULESDIR}"/* ; do
 | 
			
		||||
		sh -n "${MODULE}" || continue
 | 
			
		||||
		. "${MODULE}" || continue 
 | 
			
		||||
		MODULE=${MODULE#${MODULESDIR}/}
 | 
			
		||||
		MODULE=${MODULE%.sh}
 | 
			
		||||
		eval ${MODULE}_depend
 | 
			
		||||
		MODULES="${MODULES} ${MODULE}"
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
    VISITED=
 | 
			
		||||
    SORTED=
 | 
			
		||||
    visit() {
 | 
			
		||||
	VISITED=
 | 
			
		||||
	SORTED=
 | 
			
		||||
	visit() {
 | 
			
		||||
		case " ${VISITED} " in
 | 
			
		||||
	    	*" $1 "*) return ;;
 | 
			
		||||
			*" $1 "*) return ;;
 | 
			
		||||
		esac
 | 
			
		||||
		VISITED="${VISITED} $1"
 | 
			
		||||
 | 
			
		||||
		eval AFTER=\$${1}_after
 | 
			
		||||
		for MODULE in ${AFTER} ; do
 | 
			
		||||
	    	eval PROVIDEDBY=\$${MODULE}_providedby
 | 
			
		||||
	    	if [ -n "${PROVIDEDBY}" ] ; then
 | 
			
		||||
			eval PROVIDEDBY=\$${MODULE}_providedby
 | 
			
		||||
			if [ -n "${PROVIDEDBY}" ] ; then
 | 
			
		||||
				for MODULE in ${PROVIDEDBY} ; do
 | 
			
		||||
		    		visit "${MODULE}"
 | 
			
		||||
					visit "${MODULE}"
 | 
			
		||||
				done
 | 
			
		||||
	    	else
 | 
			
		||||
			else
 | 
			
		||||
				visit "${MODULE}"
 | 
			
		||||
	    	fi
 | 
			
		||||
			fi
 | 
			
		||||
		done
 | 
			
		||||
 | 
			
		||||
		eval PROVIDE=\$${1}_provide
 | 
			
		||||
		for MODULE in ${PROVIDE} ; do
 | 
			
		||||
	    	visit "${MODULE}"
 | 
			
		||||
			visit "${MODULE}"
 | 
			
		||||
		done
 | 
			
		||||
 | 
			
		||||
		eval PROVIDEDBY=\$${1}_providedby
 | 
			
		||||
		[ -z "${PROVIDEDBY}" ] && SORTED="${SORTED} $1"
 | 
			
		||||
    }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
    for MODULE in ${MODULES} ; do
 | 
			
		||||
	for MODULE in ${MODULES} ; do
 | 
			
		||||
		visit "${MODULE}"
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
    > "${MODULESLIST}"
 | 
			
		||||
    i=0
 | 
			
		||||
    for MODULE in ${SORTED} ; do
 | 
			
		||||
	> "${MODULESLIST}"
 | 
			
		||||
	i=0
 | 
			
		||||
	for MODULE in ${SORTED} ; do
 | 
			
		||||
		eval PROGRAM=\$${MODULE}_program
 | 
			
		||||
		eval PROGRAM_START=\$${MODULE}_program_start
 | 
			
		||||
		eval PROGRAM_STOP=\$${MODULE}_program_stop
 | 
			
		||||
		#for x in ${PROGRAM} ; do
 | 
			
		||||
	    #	[ -x "${x}" ] || continue 2
 | 
			
		||||
		#	[ -x "${x}" ] || continue 2
 | 
			
		||||
		#done
 | 
			
		||||
		eval PROVIDE=\$${MODULE}_provide
 | 
			
		||||
		echo "module_${i}='${MODULE}'" >> "${MODULESLIST}"
 | 
			
		||||
@@ -222,41 +222,41 @@ _gen_module_list() {
 | 
			
		||||
		echo "module_${i}_program_stop='${PROGRAM_STOP}'" >> "${MODULESLIST}"
 | 
			
		||||
		echo "module_${i}_provide='${PROVIDE}'" >> "${MODULESLIST}"
 | 
			
		||||
		i=$((${i} + 1))
 | 
			
		||||
    done
 | 
			
		||||
    echo "module_${i}=" >> "${MODULESLIST}"
 | 
			
		||||
    )
 | 
			
		||||
	done
 | 
			
		||||
	echo "module_${i}=" >> "${MODULESLIST}"
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_load_modules() {
 | 
			
		||||
    # Ensure our list is up to date
 | 
			
		||||
    _gen_module_list
 | 
			
		||||
	# Ensure our list is up to date
 | 
			
		||||
	_gen_module_list
 | 
			
		||||
 | 
			
		||||
    local starting=$1 mymods=
 | 
			
		||||
	local starting=$1 mymods=
 | 
			
		||||
 | 
			
		||||
    MODULES=
 | 
			
		||||
    if [ "${IFACE}" != "lo" -a "${IFACE}" != "lo0" ] ; then
 | 
			
		||||
	MODULES=
 | 
			
		||||
	if [ "${IFACE}" != "lo" -a "${IFACE}" != "lo0" ] ; then
 | 
			
		||||
		eval mymods=\$modules_${IFVAR}
 | 
			
		||||
		[ -z "${mymods}" ] && mymods=${modules}
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    . "${MODULESLIST}"
 | 
			
		||||
    local i=-1 x= mod= f= provides=
 | 
			
		||||
    while true ; do
 | 
			
		||||
	. "${MODULESLIST}"
 | 
			
		||||
	local i=-1 x= mod= f= provides=
 | 
			
		||||
	while true ; do
 | 
			
		||||
		i=$((${i} + 1))
 | 
			
		||||
		eval mod=\$module_${i}
 | 
			
		||||
		[ -z "${mod}" ] && break
 | 
			
		||||
		[ -e "${MODULESDIR}/${mod}.sh" ] || continue
 | 
			
		||||
 | 
			
		||||
    	eval set -- \$module_${i}_program
 | 
			
		||||
		eval set -- \$module_${i}_program
 | 
			
		||||
		if [ -n "$1" ] ; then
 | 
			
		||||
			x=
 | 
			
		||||
			for x in "$@" ; do
 | 
			
		||||
				[ -x "${x}" ] && break
 | 
			
		||||
			done
 | 
			
		||||
			[ -x "${x}" ] || continue
 | 
			
		||||
    	fi
 | 
			
		||||
		fi
 | 
			
		||||
		if ${starting} ; then
 | 
			
		||||
			eval set -- \$module_${i}_program_start
 | 
			
		||||
		else
 | 
			
		||||
@@ -268,21 +268,21 @@ _load_modules() {
 | 
			
		||||
				[ -x "${x}" ] && break
 | 
			
		||||
			done
 | 
			
		||||
			[ -x "${x}" ] || continue
 | 
			
		||||
    	fi
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		eval provides=\$module_${i}_provide
 | 
			
		||||
		if ${starting} ; then
 | 
			
		||||
	    	case " ${mymods} " in
 | 
			
		||||
			case " ${mymods} " in
 | 
			
		||||
				*" !${mod} "*) continue ;;
 | 
			
		||||
				*" !${provides} "*) [ -n "${provides}" ] && continue ;;
 | 
			
		||||
	    	esac
 | 
			
		||||
			esac
 | 
			
		||||
		fi
 | 
			
		||||
		MODULES="${MODULES}${MODULES:+ }${mod}"
 | 
			
		||||
 | 
			
		||||
		# Now load and wrap our functions
 | 
			
		||||
		if ! . "${MODULESDIR}/${mod}.sh" ; then
 | 
			
		||||
	    	eend 1 "${SVCNAME}: error loading module \`${mod}'"
 | 
			
		||||
	    	exit 1
 | 
			
		||||
			eend 1 "${SVCNAME}: error loading module \`${mod}'"
 | 
			
		||||
			exit 1
 | 
			
		||||
		fi
 | 
			
		||||
 | 
			
		||||
		[ -z "${provides}" ] && continue
 | 
			
		||||
@@ -290,112 +290,112 @@ _load_modules() {
 | 
			
		||||
		# Wrap our provides
 | 
			
		||||
		local f=
 | 
			
		||||
		for f in pre_start start post_start ; do 
 | 
			
		||||
	    	eval "${provides}_${f}() { type ${mod}_${f} >/dev/null 2>/dev/null || return 0; ${mod}_${f} \"\$@\"; }"
 | 
			
		||||
			eval "${provides}_${f}() { type ${mod}_${f} >/dev/null 2>/dev/null || return 0; ${mod}_${f} \"\$@\"; }"
 | 
			
		||||
		done
 | 
			
		||||
 | 
			
		||||
		eval module_${mod}_provides="${provides}"
 | 
			
		||||
		eval module_${provides}_providedby="${mod}"
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
    # Wrap our preferred modules
 | 
			
		||||
    for mod in ${mymods} ; do
 | 
			
		||||
	# Wrap our preferred modules
 | 
			
		||||
	for mod in ${mymods} ; do
 | 
			
		||||
		case " ${MODULES} " in
 | 
			
		||||
	    	*" ${mod} "*)
 | 
			
		||||
	    		eval x=\$module_${mod}_provides
 | 
			
		||||
	    		[ -z "${x}" ] && continue
 | 
			
		||||
	    		for f in pre_start start post_start ; do 
 | 
			
		||||
					eval "${x}_${f}() { type ${mod}_${f} >/dev/null 2>/dev/null || return 0; ${mod}_${f} \"\$@\"; }"
 | 
			
		||||
	    		done
 | 
			
		||||
	    		eval module_${x}_providedby="${mod}"
 | 
			
		||||
	    		;;
 | 
			
		||||
			*" ${mod} "*)
 | 
			
		||||
			eval x=\$module_${mod}_provides
 | 
			
		||||
			[ -z "${x}" ] && continue
 | 
			
		||||
			for f in pre_start start post_start ; do 
 | 
			
		||||
				eval "${x}_${f}() { type ${mod}_${f} >/dev/null 2>/dev/null || return 0; ${mod}_${f} \"\$@\"; }"
 | 
			
		||||
			done
 | 
			
		||||
			eval module_${x}_providedby="${mod}"
 | 
			
		||||
			;;
 | 
			
		||||
		esac
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
    # Finally remove any duplicated provides from our list if we're starting
 | 
			
		||||
    # Otherwise reverse the list
 | 
			
		||||
    local LIST="${MODULES}" p=
 | 
			
		||||
    MODULES=
 | 
			
		||||
    if ${starting} ; then
 | 
			
		||||
	# Finally remove any duplicated provides from our list if we're starting
 | 
			
		||||
	# Otherwise reverse the list
 | 
			
		||||
	local LIST="${MODULES}" p=
 | 
			
		||||
	MODULES=
 | 
			
		||||
	if ${starting} ; then
 | 
			
		||||
		for mod in ${LIST} ; do
 | 
			
		||||
	    	eval x=\$module_${mod}_provides
 | 
			
		||||
	    	if [ -n "${x}" ] ; then
 | 
			
		||||
			eval x=\$module_${mod}_provides
 | 
			
		||||
			if [ -n "${x}" ] ; then
 | 
			
		||||
				eval p=\$module_${x}_providedby
 | 
			
		||||
				[ "${mod}" != "${p}" ] && continue
 | 
			
		||||
	    	fi
 | 
			
		||||
	    	MODULES="${MODULES}${MODULES:+ }${mod}"
 | 
			
		||||
			fi
 | 
			
		||||
			MODULES="${MODULES}${MODULES:+ }${mod}"
 | 
			
		||||
		done
 | 
			
		||||
    else
 | 
			
		||||
	else
 | 
			
		||||
		for mod in ${LIST} ; do 
 | 
			
		||||
	    	MODULES="${mod}${MODULES:+ }${MODULES}"
 | 
			
		||||
			MODULES="${mod}${MODULES:+ }${MODULES}"
 | 
			
		||||
		done
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    veinfo "Loaded modules: ${MODULES}"
 | 
			
		||||
	veinfo "Loaded modules: ${MODULES}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
_load_config() {
 | 
			
		||||
    eval "$(_get_array "config_${IFVAR}")"
 | 
			
		||||
    if [ "${IFACE}" = "lo" -o "${IFACE}" = "lo0" ] ; then
 | 
			
		||||
	eval "$(_get_array "config_${IFVAR}")"
 | 
			
		||||
	if [ "${IFACE}" = "lo" -o "${IFACE}" = "lo0" ] ; then
 | 
			
		||||
		set -- "127.0.0.1/8" "$@"
 | 
			
		||||
    else
 | 
			
		||||
	else
 | 
			
		||||
		if [ $# -eq 0 ] ; then
 | 
			
		||||
	    	ewarn "No configuration specified; defaulting to DHCP"
 | 
			
		||||
	    	set -- "dhcp"
 | 
			
		||||
			ewarn "No configuration specified; defaulting to DHCP"
 | 
			
		||||
			set -- "dhcp"
 | 
			
		||||
		fi
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    # We store our config in an array like vars
 | 
			
		||||
    # so modules can influence it
 | 
			
		||||
    config_index=0
 | 
			
		||||
    for cmd in "$@" ; do
 | 
			
		||||
	# We store our config in an array like vars
 | 
			
		||||
	# so modules can influence it
 | 
			
		||||
	config_index=0
 | 
			
		||||
	for cmd in "$@" ; do
 | 
			
		||||
		eval config_${config_index}="'${cmd}'"
 | 
			
		||||
		config_index=$((${config_index} + 1))
 | 
			
		||||
    done
 | 
			
		||||
    # Terminate the list
 | 
			
		||||
    eval config_${config_index}=
 | 
			
		||||
	done
 | 
			
		||||
	# Terminate the list
 | 
			
		||||
	eval config_${config_index}=
 | 
			
		||||
 | 
			
		||||
    config_index=0
 | 
			
		||||
    eval $(_get_array fallback_${IFVAR})
 | 
			
		||||
    for cmd in "$@" ; do
 | 
			
		||||
	config_index=0
 | 
			
		||||
	eval $(_get_array fallback_${IFVAR})
 | 
			
		||||
	for cmd in "$@" ; do
 | 
			
		||||
		eval fallback_${config_index}="'${cmd}'"
 | 
			
		||||
		config_index=$((${config_index} + 1))
 | 
			
		||||
    done
 | 
			
		||||
    # Terminate the list
 | 
			
		||||
    eval fallback_${config_index}=
 | 
			
		||||
	done
 | 
			
		||||
	# Terminate the list
 | 
			
		||||
	eval fallback_${config_index}=
 | 
			
		||||
 | 
			
		||||
	# Don't set to zero, so any net modules don't have to do anything extra
 | 
			
		||||
    config_index=-1
 | 
			
		||||
	config_index=-1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
start() {
 | 
			
		||||
    local IFACE=${SVCNAME#*.} oneworked=false module=
 | 
			
		||||
    local IFVAR=$(_shell_var "${IFACE}") cmd= metric=0 our_metric=$metric
 | 
			
		||||
	local IFACE=${SVCNAME#*.} oneworked=false module=
 | 
			
		||||
	local IFVAR=$(_shell_var "${IFACE}") cmd= metric=0 our_metric=$metric
 | 
			
		||||
 | 
			
		||||
    einfo "Bringing up interface ${IFACE}"
 | 
			
		||||
    eindent
 | 
			
		||||
	einfo "Bringing up interface ${IFACE}"
 | 
			
		||||
	eindent
 | 
			
		||||
 | 
			
		||||
    if [ -z "${MODULES}" ] ; then
 | 
			
		||||
	if [ -z "${MODULES}" ] ; then
 | 
			
		||||
		local MODULES=
 | 
			
		||||
		_load_modules true
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    _up 2>/dev/null
 | 
			
		||||
	_up 2>/dev/null
 | 
			
		||||
 | 
			
		||||
    if type preup >/dev/null 2>/dev/null ; then
 | 
			
		||||
	if type preup >/dev/null 2>/dev/null ; then
 | 
			
		||||
		ebegin "Running preup"
 | 
			
		||||
		eindent
 | 
			
		||||
		preup || return 1
 | 
			
		||||
		eoutdent
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    for module in ${MODULES} ; do
 | 
			
		||||
	for module in ${MODULES} ; do
 | 
			
		||||
		if type "${module}_pre_start" >/dev/null 2>/dev/null ; then
 | 
			
		||||
	    	if ! ${module}_pre_start ; then
 | 
			
		||||
			if ! ${module}_pre_start ; then
 | 
			
		||||
				eend 1
 | 
			
		||||
				exit 1
 | 
			
		||||
	    	fi
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	if ! _exists ; then
 | 
			
		||||
		eerror "ERROR: interface ${IFACE} does not exist"
 | 
			
		||||
@@ -413,17 +413,17 @@ start() {
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    local config= config_index=
 | 
			
		||||
    _load_config
 | 
			
		||||
	local config= config_index=
 | 
			
		||||
	_load_config
 | 
			
		||||
	config_index=0
 | 
			
		||||
 | 
			
		||||
    if [ -n "${our_metric}" ] ; then
 | 
			
		||||
	if [ -n "${our_metric}" ] ; then
 | 
			
		||||
		metric=${our_metric}
 | 
			
		||||
    elif [ "${IFACE}" != "lo" -a "${IFACE}" != "lo0" ] ; then
 | 
			
		||||
	elif [ "${IFACE}" != "lo" -a "${IFACE}" != "lo0" ] ; then
 | 
			
		||||
		metric=$((${metric} + $(_ifindex)))
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    while true ; do
 | 
			
		||||
	while true ; do
 | 
			
		||||
		eval config=\$config_${config_index}
 | 
			
		||||
		[ -z "${config}" ] && break 
 | 
			
		||||
 | 
			
		||||
@@ -431,160 +431,160 @@ start() {
 | 
			
		||||
		ebegin "$1"
 | 
			
		||||
		eindent
 | 
			
		||||
		case "$1" in
 | 
			
		||||
	    	noop)
 | 
			
		||||
	    		if [ -n "$(_get_inet_address)" ] ; then
 | 
			
		||||
			noop)
 | 
			
		||||
				if [ -n "$(_get_inet_address)" ] ; then
 | 
			
		||||
					oneworked=true
 | 
			
		||||
					break
 | 
			
		||||
	    		fi
 | 
			
		||||
	    		;;
 | 
			
		||||
	    	null) : ;;
 | 
			
		||||
	    	[0-9]*|*:*) _add_address ${config} ;;
 | 
			
		||||
	    	*)
 | 
			
		||||
	    		if type "${config}_start" >/dev/null 2>/dev/null ; then
 | 
			
		||||
				fi
 | 
			
		||||
				;;
 | 
			
		||||
			null) : ;;
 | 
			
		||||
			[0-9]*|*:*) _add_address ${config} ;;
 | 
			
		||||
			*)
 | 
			
		||||
				if type "${config}_start" >/dev/null 2>/dev/null ; then
 | 
			
		||||
					"${config}"_start
 | 
			
		||||
	    		else
 | 
			
		||||
				else
 | 
			
		||||
					eerror "nothing provides \`${config}'"
 | 
			
		||||
	    		fi
 | 
			
		||||
	    		;;
 | 
			
		||||
				fi
 | 
			
		||||
				;;
 | 
			
		||||
		esac
 | 
			
		||||
		if eend $? ; then
 | 
			
		||||
	    	oneworked=true
 | 
			
		||||
			oneworked=true
 | 
			
		||||
		else
 | 
			
		||||
	    	eval config=\$fallback_${IFVAR}
 | 
			
		||||
	    	if [ -n "${config}" ] ; then
 | 
			
		||||
			eval config=\$fallback_${IFVAR}
 | 
			
		||||
			if [ -n "${config}" ] ; then
 | 
			
		||||
				einfo "Trying fallback configuration"
 | 
			
		||||
				eval config_${config_index}=\$fallback_${IFVAR}
 | 
			
		||||
				eval fallback_${config_index}=
 | 
			
		||||
				config_index=$((${config_index} - 1))
 | 
			
		||||
	    	fi
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
		eoutdent
 | 
			
		||||
		config_index=$((${config_index} + 1))
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	if ! ${oneworked} ; then
 | 
			
		||||
    	if type failup >/dev/null 2>/dev/null ; then
 | 
			
		||||
		if type failup >/dev/null 2>/dev/null ; then
 | 
			
		||||
			ebegin "Running failup"
 | 
			
		||||
			eindent
 | 
			
		||||
			failup
 | 
			
		||||
			eoutdent
 | 
			
		||||
    	fi
 | 
			
		||||
		fi
 | 
			
		||||
		return 1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    local hidefirstroute=false first=true routes=
 | 
			
		||||
    eval "$(_get_array "routes_${IFVAR}")"
 | 
			
		||||
    if [ "${IFACE}" = "lo" -o "${IFACE}" = "lo0" ] ; then
 | 
			
		||||
	local hidefirstroute=false first=true routes=
 | 
			
		||||
	eval "$(_get_array "routes_${IFVAR}")"
 | 
			
		||||
	if [ "${IFACE}" = "lo" -o "${IFACE}" = "lo0" ] ; then
 | 
			
		||||
		set -- "127.0.0.0/8 via 127.0.0.1" "$@"
 | 
			
		||||
		hidefirstroute=true
 | 
			
		||||
    fi
 | 
			
		||||
    for cmd in "$@" ; do
 | 
			
		||||
	fi
 | 
			
		||||
	for cmd in "$@" ; do
 | 
			
		||||
		if ${first} ; then
 | 
			
		||||
	    	first=false
 | 
			
		||||
	    	einfo "Adding routes"
 | 
			
		||||
			first=false
 | 
			
		||||
			einfo "Adding routes"
 | 
			
		||||
		fi
 | 
			
		||||
		eindent
 | 
			
		||||
		ebegin "${cmd}"
 | 
			
		||||
		# Work out if we're a host or a net if not told
 | 
			
		||||
		case "${cmd}" in
 | 
			
		||||
	    	*" -net "*|*" -host "*) ;;
 | 
			
		||||
	    	*" netmask "*) cmd="-net ${cmd}" ;;
 | 
			
		||||
	    	*)
 | 
			
		||||
	    		case "${cmd%% *}" in
 | 
			
		||||
			*" -net "*|*" -host "*) ;;
 | 
			
		||||
			*" netmask "*) cmd="-net ${cmd}" ;;
 | 
			
		||||
			*)
 | 
			
		||||
				case "${cmd%% *}" in
 | 
			
		||||
					*.*.*.*/32) cmd="-host ${cmd}" ;;
 | 
			
		||||
					*.*.*.*/*|0.0.0.0|default) cmd="-net ${cmd}" ;;
 | 
			
		||||
					*) cmd="-host ${cmd}" ;;
 | 
			
		||||
	    		esac
 | 
			
		||||
	    		;;
 | 
			
		||||
				esac
 | 
			
		||||
				;;
 | 
			
		||||
		esac
 | 
			
		||||
		if ${hidefirstroute} ; then
 | 
			
		||||
	    	_add_route ${cmd} >/dev/null 2>/dev/null
 | 
			
		||||
	    	hidefirstroute=false
 | 
			
		||||
			_add_route ${cmd} >/dev/null 2>/dev/null
 | 
			
		||||
			hidefirstroute=false
 | 
			
		||||
		else
 | 
			
		||||
	    	_add_route ${cmd} >/dev/null
 | 
			
		||||
			_add_route ${cmd} >/dev/null
 | 
			
		||||
		fi
 | 
			
		||||
		eend $?
 | 
			
		||||
		eoutdent
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
    for module in ${MODULES} ; do
 | 
			
		||||
	for module in ${MODULES} ; do
 | 
			
		||||
		if type "${module}_post_start" >/dev/null 2>/dev/null ; then
 | 
			
		||||
	    	if ! ${module}_post_start ; then
 | 
			
		||||
			eend 1
 | 
			
		||||
			exit 1
 | 
			
		||||
	    	fi
 | 
			
		||||
			if ! ${module}_post_start ; then
 | 
			
		||||
				eend 1
 | 
			
		||||
				exit 1
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
    if type postup >/dev/null 2>/dev/null ; then
 | 
			
		||||
	if type postup >/dev/null 2>/dev/null ; then
 | 
			
		||||
		ebegin "Running postup"
 | 
			
		||||
		eindent
 | 
			
		||||
		postup 
 | 
			
		||||
		eoutdent
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
stop() {
 | 
			
		||||
    local IFACE=${SVCNAME#*.} module=
 | 
			
		||||
    local IFVAR=$(_shell_var "${IFACE}") opts=
 | 
			
		||||
	local IFACE=${SVCNAME#*.} module=
 | 
			
		||||
	local IFVAR=$(_shell_var "${IFACE}") opts=
 | 
			
		||||
 | 
			
		||||
    einfo "Bringing down interface ${IFACE}"
 | 
			
		||||
    eindent
 | 
			
		||||
	einfo "Bringing down interface ${IFACE}"
 | 
			
		||||
	eindent
 | 
			
		||||
 | 
			
		||||
    if [ -z "${MODULES}" ] ; then
 | 
			
		||||
	if [ -z "${MODULES}" ] ; then
 | 
			
		||||
		local MODULES=
 | 
			
		||||
		_load_modules false
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    if type predown >/dev/null 2>/dev/null ; then
 | 
			
		||||
	if type predown >/dev/null 2>/dev/null ; then
 | 
			
		||||
		ebegin "Running predown"
 | 
			
		||||
		eindent
 | 
			
		||||
		predown || return 1
 | 
			
		||||
		eoutdent
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    for module in ${MODULES} ; do
 | 
			
		||||
		if type "${module}_pre_stop" >/dev/null 2>/dev/null ; then
 | 
			
		||||
	    	if ! ${module}_pre_stop ; then
 | 
			
		||||
			eend 1
 | 
			
		||||
			exit 1
 | 
			
		||||
	    fi
 | 
			
		||||
	fi
 | 
			
		||||
    done
 | 
			
		||||
 | 
			
		||||
    for module in ${MODULES} ; do
 | 
			
		||||
		if type "${module}_stop" >/dev/null 2>/dev/null ; then
 | 
			
		||||
	    	${module}_stop
 | 
			
		||||
	for module in ${MODULES} ; do
 | 
			
		||||
		if type "${module}_pre_stop" >/dev/null 2>/dev/null ; then
 | 
			
		||||
			if ! ${module}_pre_stop ; then
 | 
			
		||||
				eend 1
 | 
			
		||||
				exit 1
 | 
			
		||||
			fi
 | 
			
		||||
		fi
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	for module in ${MODULES} ; do
 | 
			
		||||
		if type "${module}_stop" >/dev/null 2>/dev/null ; then
 | 
			
		||||
			${module}_stop
 | 
			
		||||
		fi
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	# Only delete addresses for non PPP interfaces
 | 
			
		||||
	if ! type is_ppp >/dev/null 2>/dev/null || ! is_ppp ; then
 | 
			
		||||
		_delete_addresses "${IFACE}"
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    for module in ${MODULES} ; do
 | 
			
		||||
	for module in ${MODULES} ; do
 | 
			
		||||
		if type "${module}_post_stop" >/dev/null 2>/dev/null ; then
 | 
			
		||||
	    	${module}_post_stop
 | 
			
		||||
			${module}_post_stop
 | 
			
		||||
		fi
 | 
			
		||||
    done
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
    [ "${IN_BACKGROUND}" != "true" ] && \
 | 
			
		||||
    [ "${IFACE}" != "lo" -a "${IFACE}" != "lo0" ] && \
 | 
			
		||||
    _down 2>/dev/null
 | 
			
		||||
	[ "${IN_BACKGROUND}" != "true" ] && \
 | 
			
		||||
	[ "${IFACE}" != "lo" -a "${IFACE}" != "lo0" ] && \
 | 
			
		||||
	_down 2>/dev/null
 | 
			
		||||
 | 
			
		||||
    [ -x /sbin/resolvconf ] && resolvconf -d "${IFACE}"
 | 
			
		||||
	[ -x /sbin/resolvconf ] && resolvconf -d "${IFACE}"
 | 
			
		||||
 | 
			
		||||
    if type postdown >/dev/null 2>/dev/null ; then
 | 
			
		||||
	if type postdown >/dev/null 2>/dev/null ; then
 | 
			
		||||
		ebegin "Running postdown"
 | 
			
		||||
		eindent
 | 
			
		||||
		postdown
 | 
			
		||||
		eoutdent
 | 
			
		||||
    fi
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
    return 0
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# vim: set ts=4 :
 | 
			
		||||
# vim: set ts=4 sw=4 :
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user