LINUX.ORG.RU
ФорумAdmin

Автомапинг имен eth? с реальными интерфейсами


0

0

Возникла проблема: написать скрипт для машины с 6 проводными сетевыми интерфейсами, размещенными на двух разных карточках, так чтобы он однозначно мапил интерфейсы к именам eth?

Вопрос: в каком направлении необходимо двигаться и решаема ли эта задача в принципе? я посмотред man iftab - он может привязывать имена к макам или прерываниям. но так как скрипт должен работать на заранее неизвестной конфигурации, маки нам неизвестны, как распределяются IRQ и как их узнать, кроме как используя костыли типа ifconfig eth0 up && udevinfo -a -p /sys/class/net/eth0 - для меня загадка :)

Обычно такие вещи делаются правилами udev'а.

marsijanin ★★
()

В большинстве дистров udev по дефолту запоминает маки.

INFOMAN ★★★★★
()

В Slackware это сами автоматически делают загрузочные скрипты через udev... Думаю можно их отдельно скачать и подсмотреть что там и как.

anonymous
()

Пишу из Слаки:

$ cat /etc/udev/rules.d/90-network.rules
# This file will be overwritten in next upgrade.  Please put your
# custom rules somewhere else (90-local.rules is a good idea)

SUBSYSTEM=="net", NAME=="?*", ACTION=="add", RUN+="nethelper.sh $env{INTERFACE} start"
SUBSYSTEM=="net", NAME=="?*", ACTION=="remove", RUN+="nethelper.sh $env{INTERFACE} stop"

И интерфейсы перестают меняться местами.

$ cat /lib/udev/nethelper.sh
#!/bin/sh
DEVNAME="$1"
COMMAND="$2"

testwrite() {
        if touch /var/run/checkrw 2>/dev/null ; then
                rm -rf /var/run/checkrw
                RW=1
        fi
}

case $DEVNAME in
        eth*|ath*|wlan*|ra*|sta*|ctc*|lcs*|hsi*)
                case $COMMAND in
                        'start')
                                testwrite

                                if [ $RW ]; then
                                        if [ -x /etc/rc.d/rc.inet1 ]; then
                                                if ! /sbin/ifconfig | /bin/grep -q "^${DEVNAME} "; then
                                                        /etc/rc.d/rc.inet1 ${DEVNAME}_start
                                                fi
                                        fi
                                        exit 0
                                else
                                        exit 1
                                fi
                                ;;
                        'stop')
                                if [ -x /etc/rc.d/rc.inet1 ]; then
                                     if /sbin/ifconfig | /bin/grep -q "^${DEVNAME} "; then
                                        /etc/rc.d/rc.inet1 ${DEVNAME}_stop
                                     fi
                                fi
                                # Does dhcpcd appear to still be running on the
                                # interface?  If so, try to stop it.
                                if [ -r /etc/dhcpc/dhcpcd-$DEVNAME.pid -o -r /var/run/dhcpcd-$DEVNAME.pid ]; then
                                  /sbin/dhcpcd -k -d $DEVNAME
                                  # Force garbage removal, if needed:
                                  if [ -r /etc/dhcpc/dhcpcd-$DEVNAME.pid ]; then
                                     /bin/rm -f /etc/dhcpc/dhcpcd-$DEVNAME.pid
                                  elif [ -r /var/run/dhcpcd-$DEVNAME.pid ]; then
                                     /bin/rm -f /var/run/dhcpcd-$DEVNAME.pid
                                  fi
                                fi
                                # If the interface is now down, exit with a status of 0:
                                if /sbin/ifconfig | /bin/grep -q "^${DEVNAME} " ; then
                                  exit 0
                                fi
                                ;;
                        *)
                                echo "usage $0 interface start|stop"
                                exit 1
                                ;;
                esac
        ;;
        *)
                echo "Interface $DEVNAME not supported."
                exit 1
        ;;
esac
exit 0

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

спасибо большое всем! покурю скрипты udev

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