| 7 |
# Christian Fischer <spaetzle@freewrt.org> |
# Christian Fischer <spaetzle@freewrt.org> |
| 8 |
# |
# |
| 9 |
|
|
| 10 |
RT_PREUP_IFUP_CHECK_OFF=1 |
IFACE_LOGICAL=1 |
|
RT_UP_IFUP_CHECK_OFF=1 |
|
|
RT_UP_PRINTING_OFF=1 |
|
| 11 |
|
|
| 12 |
iface_type() { |
iface_type() { |
| 13 |
[ "$(echo $IFACE | sed 's/[^:]*//g')" = ":" ] |
[[ $(echo $IFACE | sed 's/[^:]*//g') = : ]] |
| 14 |
} |
} |
| 15 |
|
|
| 16 |
alias_exists() { |
alias_exists() { |
| 17 |
[ "$(ip a 2>&- | grep $IFACE | sed "s/.*[^${IFACE}]//")" = "$IFACE" ] |
[[ $(ip a 2>&- | grep $IFACE | sed "s/.*[^${IFACE}]//") = $IFACE ]] |
| 18 |
} |
} |
| 19 |
|
|
| 20 |
get_primary() { |
alias_get_primary() { |
| 21 |
echo $IFACE | sed 's/:.*$//' |
echo $IFACE | sed 's/:.*$//' |
| 22 |
} |
} |
| 23 |
|
|
| 24 |
if_preup() { |
alias_is_up() { |
| 25 |
if [ x"$METHOD" != x"static" ] |
alias_exists && is_up $(alias_get_primary) |
| 26 |
then |
} |
|
mup |
|
|
mstate 1 |
|
|
merr "Methods other than static makes no sense for alias ifaces" |
|
|
# bypass execution of further busybox ifupdown.c code |
|
|
built_in exit 1 |
|
|
fi |
|
| 27 |
|
|
| 28 |
if alias_exists |
prereq_preup() { |
| 29 |
then |
if [[ $METHOD != static ]]; then |
| 30 |
|
mup |
| 31 |
mstate 1 |
mstate 1 |
| 32 |
merr "Alias already up" |
merr "Unsupported method $METHOD" |
| 33 |
return 1 |
return 1 |
| 34 |
fi |
fi |
|
is_up $(get_primary) || ifup $(get_primary) |
|
|
return $? |
|
|
} |
|
| 35 |
|
|
| 36 |
if_up() { |
alias_is_up || return 0 |
| 37 |
alias_exists && is_up $(get_primary) |
mup |
| 38 |
mstate $? |
mstate 1 |
| 39 |
|
minfo "Interface already up" |
| 40 |
|
return 1 |
| 41 |
} |
} |
| 42 |
|
|
| 43 |
if_down() { |
if_preup() { |
| 44 |
if ! alias_exists |
local baseif=$(alias_get_primary) |
| 45 |
then |
is_up $baseif || ifup $baseif |
| 46 |
mdown |
} |
|
mstate 1 |
|
|
merr "Alias already down" |
|
|
return 1 |
|
|
fi |
|
| 47 |
|
|
| 48 |
### busybox ifdown workaround ### |
prereq_up() { |
| 49 |
# running busybox ifdown <alias interface name> causes primary interface shutdown |
alias_is_up |
| 50 |
|
mstate $? || return |
| 51 |
|
} |
| 52 |
|
|
| 53 |
|
prereq_down() { |
| 54 |
|
alias_exists && return |
| 55 |
mdown |
mdown |
| 56 |
ip link set down $IFACE >/dev/null 2>&1 |
mstate 1 |
| 57 |
mstate $? |
merr "No such device" |
| 58 |
|
return 1 |
| 59 |
|
} |
| 60 |
|
|
| 61 |
# break here because all things are done and bypass execution of further busybox ifupdown.c code |
if_down() { |
| 62 |
built_in exit 1 |
alias_is_up || alias_ifstate=down |
| 63 |
|
# running busybox ifdown <alias interface name> causes primary |
| 64 |
|
# interface shutdown |
| 65 |
|
# overwrite main method to override busybox ifupdown.c code |
| 66 |
|
main_bb_methods_override() { |
| 67 |
|
eval $IF_DOWN |
| 68 |
|
ip link set down $IFACE 1>&- || { mstate 1; exit;} |
| 69 |
|
eval $IF_POST_DOWN |
| 70 |
|
main_postdown |
| 71 |
|
RT_BB_NOEXEC=1 |
| 72 |
|
} |
| 73 |
|
} |
| 74 |
|
|
| 75 |
|
prereq_postdown() { |
| 76 |
|
alias_exists |
| 77 |
|
mstate $((!$?)) || exit |
| 78 |
|
[[ $alias_ifstate = down ]] && minfo "Interface already down" |
| 79 |
|
return 0 |
| 80 |
} |
} |
| 81 |
|
|
| 82 |
# vim:ts=4 |
# vim:ts=4 |