GNU nano 2.3.1 File: /etc/init.d/routing Modified
#!/sbin/runscript
# Copyright 1999-2012 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: $
depend() {
use net.eth1 net.eth2
before net
}
function test_if {
ip link show $1 | grep -q 'state $2'
}
start() {
while ip route show | grep -q "default"
do
route del default
done
if test_if eth1 DOWN && test_if eth2 DOWN ; then
echo "No internet connection"
fi;
if test_if eth1 UP && test_if eth2 DOWN ; then
ebegin "Default route eth1"
ip route add default scope global \
nexthop via 192.168.1.1 dev eth1 weight 1
eend $?
fi;
if test_if eth1 DOWN && test_if eth2 UP ; then
ebegin "Default route eth2"
ip route add default scope global \
nexthop via 192.168.2.1 dev eth2 weight 1
eend $?
fi;
if test_if eth1 UP && test_if eth2 UP ; then
ebegin "Default route: eth1 and eth2"
ip route add default scope global \
nexthop via 192.168.1.1 dev eth1 weight 1 \
nexthop via 192.168.2.1 dev eth2 weight 1
eend $?
fi;
}
Хорошо. Потому что у меня он выводит «state UNKNOWN», хотя всё работает, а старые версии команды «ip» вобще не выводят state, видимо раньше считалось, что достаточно флага «UP».
Да, это готовая функция. Вам, как я понял, нужно это:
if is_interface_up eth1 && ! is_interface_up eth2 ; then
ebegin "Default route eth1"
ip route add default scope global \
nexthop via 192.168.1.1 dev eth1 weight 1
eend $?
fi;
Странно. У меня UNKNOWN ещё выводится для lo. А для того ethernet-интерфейса я выдернул патч-корд, стало «state DOWN», потом вставил и стало «state UP».
Может лучше grep'ом искать строку-флаг «UP»?
ip link show dev eth1 | grep -q -E '(<|,)UP(>|,)'
А то, ещё в нужный момент там вместо «state UP» будет «state UNKNOWN» и скрипт отработает неправильно.
You want to look at the nodes in
/sys/class/net/
I experimented with mine:
Wire Plugged in:
eth0/carrier:1
eth0/operstate:unknown
Wire Removed:
eth0/carrier:0
eth0/operstate:down
Wire Plugged in Again:
eth0/operstate:up
eth0/carrier:1