Four functions can be defined which will be called surrounding the
start/stop operations. The functions are called with the interface
name first so that one function can control multiple adapters.

The return values for the preup and predown functions should be 0
(success) to indicate that configuration or deconfiguration of the
interface can continue. If preup returns a non-zero value, then
interface configuration will be aborted. If predown returns a
non-zero value, then the interface will not be allowed to continue
deconfiguration.

The return values for the postup and postdown functions are ignored
since there's nothing to do if they indicate failure.

${IFACE} is set to the interface being brought up/down.
${IFVAR} is ${IFACE} converted to variable name bash allows

preup() {
# Test for link on the interface prior to bringing it up. This
# only works on some network adapters and requires the mii-diag
# package to be installed.
if mii-tool ${IFACE} 2> /dev/null | grep -q 'no link'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
# Test for link on the interface prior to bringing it up. This
# only works on some network adapters and requires the ethtool
# package to be installed.
if ethtool ${IFACE} | grep -q 'Link detected: no'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
# Remember to return 0 on success
return 0
}
predown() {
# The default in the script is to test for NFS root and disallow
# downing interfaces in that case. Note that if you specify a
# predown() function you will override that logic. Here it is, in
# case you still want it...
if is_net_fs /; then
eerror "root filesystem is network mounted -- can't stop ${IFACE}"
return 1
fi
# Remember to return 0 on success
return 0
}
postup() {
# This function could be used, for example, to register with a
# dynamic DNS service. Another possibility would be to
# send/receive mail once the interface is brought up.
return 0
}
postdown() {
# This function is mostly here for completeness... I haven't
# thought of anything nifty to do with it yet ;-)
return 0
}

Wireless Tools function hooks
This will not work with WPA Supplicant - but the ${ESSID} and
${ESSIDVAR} variables are available in the postup() function

Two functions can be defined which will be called surrounding the
associate function. The functions are called with the interface
name first so that one function can control multiple adapters.

The return values for the preassociate function should be 0
(success) to indicate that configuration or deconfiguration of the
interface can continue. If preassociate returns a non-zero value, then
interface configuration will be aborted.

The return value for the postassociate function is ignored
since there's nothing to do if it indicates failure.

${ESSID} is set to the exact ESSID of the AP you're connecting to.
${ESSIDVAR} is ${ESSID} converted to variable name bash allows