LINUX.ORG.RU

Ответ на: комментарий от AITap

мне не очень понятно, как писаь условия в bash:

  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;
}

Здесь ни одно условие не срабатывает

StrongDollar
() автор топика
Ответ на: комментарий от StrongDollar

Хорошо. Потому что у меня он выводит «state UNKNOWN», хотя всё работает, а старые версии команды «ip» вобще не выводят state, видимо раньше считалось, что достаточно флага «UP».

mky ★★★★★
()
Ответ на: комментарий от StrongDollar

while ip route show | grep -q «default»
do
route del default
done

это реально может сработать много раз? жесть какая-то, я щитаю

zolden ★★★★★
()
Ответ на: комментарий от StrongDollar

Да, это готовая функция. Вам, как я понял, нужно это:

  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;
Minoru ★★★
()
Последнее исправление: Minoru (всего исправлений: 1)
Ответ на: комментарий от StrongDollar

ну либо один раз надо дефолт сбрасывать, либо для каждой таблицы отдельно
я просто не до конца понимаю что нужно в итоге

zolden ★★★★★
()
Ответ на: комментарий от StrongDollar

Странно. У меня UNKNOWN ещё выводится для lo. А для того ethernet-интерфейса я выдернул патч-корд, стало «state DOWN», потом вставил и стало «state UP».

Может лучше grep'ом искать строку-флаг «UP»?

ip link show dev eth1 | grep -q -E '(<|,)UP(>|,)'

А то, ещё в нужный момент там вместо «state UP» будет «state UNKNOWN» и скрипт отработает неправильно.

mky ★★★★★
()
Ответ на: комментарий от StrongDollar
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

sdio ★★★★★
()
Ответ на: комментарий от quantum-troll

Для криокамер не сработает, раньше (до 2008 года) LOWER_UP не было, было как то так:

eth1: <BROADCAST,MULTICAST,UP>

mky ★★★★★
()
Ответ на: комментарий от sdio

самое лучшее решение, но только если драйвер поддерживает апдейт этого файла

dyasny ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.