net: Add up_before_preup variable for CAN devices

Historically, we have tried to up interfaces before running preup, so
that the kernel setups up the device and makes things like ethtool work
(some hardware cannot be correct probed until then). However this ends
up breaking other hardware, so a variable has been introduced to allow
the up prior to preup to be disabled: up_before_preup_IFVAR=no

X-Gentoo-Bug: 389475
X-Gentoo-Bug-URL: https://bugs.gentoo.org/show_bug.cgi?id=389475
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
This commit is contained in:
Robin H. Johnson 2011-12-26 16:27:38 -08:00
parent 7b1c1e1623
commit 9a01f68515
2 changed files with 14 additions and 2 deletions

View File

@ -1102,6 +1102,16 @@
# #
# ${IFACE} is set to the interface being brought up/down # ${IFACE} is set to the interface being brought up/down
# ${IFVAR} is ${IFACE} converted to variable name bash allows # ${IFVAR} is ${IFACE} converted to variable name bash allows
#
# For historical & compatbility reasons, preup is actually normally called in
# the follow sequence: up ; preup ; up
# In that case, the first up causes the kernel to initialize the device, so
# that it is available for use in the preup function. However, for some other
# hardware, eg CAN devices, some configuration is needed before trying to up
# the interface will actually work. For such harware, there are the
# 'up_before_preup' variables, that skips the first up call.
#up_before_preup_IFVAR=no
#up_before_preup=no
#preup() { #preup() {
# # Test for link on the interface prior to bringing it up. This # # Test for link on the interface prior to bringing it up. This

View File

@ -488,7 +488,9 @@ start()
{ {
local IFACE=${RC_SVCNAME#*.} oneworked=false fallback=false module= local IFACE=${RC_SVCNAME#*.} oneworked=false fallback=false module=
local IFVAR=$(shell_var "${IFACE}") cmd= our_metric= local IFVAR=$(shell_var "${IFACE}") cmd= our_metric=
local metric=0 local metric=0 _up_before_preup
eval _up_before_preup="\$up_before_preup_${IFVAR}"
[ -z "${_up_before_preup}" ] && _up_before_preup=$up_before_preup
einfo "Bringing up interface ${IFACE}" einfo "Bringing up interface ${IFACE}"
eindent eindent
@ -502,7 +504,7 @@ start()
# available in preup and afterwards incase the user inadvertently # available in preup and afterwards incase the user inadvertently
# brings it down # brings it down
if [ "$(command -v preup)" = "preup" ]; then if [ "$(command -v preup)" = "preup" ]; then
_up 2>/dev/null [ "${_up_before_preup}" = "no" ] || _up 2>/dev/null
ebegin "Running preup" ebegin "Running preup"
eindent eindent
preup || return 1 preup || return 1