This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
Handbook:X86/Networking/Extending
Стандартные функции-обработчики
В /etc/conf.d/net можно определить четыре функции, которые вызываются при операциях запуска (start) и останова (stop). При вызове функциям передается название интерфейса, так что одна и та же функция может управлять несколькими адаптерами.
Для указания на то, что запуск или останов интерфейса может продолжаться, возвращаемое значение функций preup()
и predown()
должно быть 0 (успешным). Если preup()
возвращает ненулевое значение, запуск интерфейса прерывается. Если predown()
возвращает ненулевое значение, не допускается продолжение останова интерфейса.
Возвращаемое значение функций postup()
и postdown()
игнорируется, так как если в них произошла ошибка мы не можем ничего сделать.
${IFACE} присваивается название запускаемого или останавливаемого интерфейса. ${IFVAR} — это значение ${IFACE}, преобразованное в имя переменной, разрешенное в bash.
preup() { # Проверка соединения интерфейса перед его запуском. Она # работает лишь с некоторыми сетевыми адаптерами и требует наличия # установленного пакета ethtool. if ethtool ${IFACE} | grep -q 'Link detected: no'; then ewarn "Интерфейс ${IFACE} не подключен, прерывание запуска" return 1 fi # Не забываем вернуть 0 при успехе return 0 } predown() { # Основное в этом скрипте - проверить наличие корня NFS # и в этом случае предотвратить останов интерфейсов. Заметьте, что # определяя функцию predown(), вы отменяете существующую логику. # Вот она, на случай если все же понадобится... if is_net_fs /; then eerror "Корневая ФС смонтирована в сети - останов ${IFACE} невозможен" return 1 fi # Не забываем вернуть 0 при успехе return 0 } postup() { # Эту функцию можно использовать, например, для регистрации в # службе динамического DNS. Другой пример - отправка/прием почты после # запуска интерфейса. return 0 } postdown() { # Эта функция приводится в основном для полноты... Я не придумал, # что бы ценное в нее поместить. return 0 }
Для более подробной информации о написании своих собственных функций, прочитайте /usr/share/doc/netifrc-*/net.example.bz2.
Функции-обработчики wireless tools
Это не работает вместе с WPA Supplicant, но переменные ${ESSID} и ${ESSIDVAR} доступны в функции
postup()
.В /etc/conf.d/net можно определить две функции, вызываемые до и после функции подключения (associate). При вызове им сначала передается название интерфейса, так что одна и та же функция может управлять несколькими адаптерами.
Для указания на то, что запуск или останов интерфейса можно продолжать, возвращаемое значение функции preassociate()
должно быть нулевым (успешным). Если preassociate()
возвращает ненулевое значение, запуск интерфейса прерывается.
Возвращаемое значение функции postassociate()
игнорируется, так как мы не можем ничего сделать, если произошла ошибка.
${ESSID} присваивается точный ESSID точки доступа, к которой вы подключаетесь. ${ESSIDVAR} - это ${ESSID}, преобразованный в имя переменной, разрешенное в bash.
preassociate() { # Ниже добавляются две конфигурационных переменных, leap_user_ESSID # и leap_pass_ESSID. Когда они обе настроены на подключаемый ESSID, # мы запускаем скрипт CISCO LEAP local user pass eval user=\"\$\{leap_user_${ESSIDVAR}\}\" eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\" if [[ -n ${user} && -n ${pass} ]]; then if [[ ! -x /opt/cisco/bin/leapscript ]]; then eend "Для поддержки LEAP, выполните emerge net-misc/cisco-aironet-client-utils" return 1 fi einfo "Ожидание допуска LEAP на \"${ESSID//\\\\//}\"" if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then ewarn "Вход пользователя ${user} не удался" return 1 fi fi return 0 } postassociate() { # Эта функция приводится в основном для полноты... Я не придумал, # что бы ценное в нее поместить. return 0 }
${ESSID} и ${ESSIDVAR} недоступны в функциях
predown()
и postdown()
.Для более подробной информации о написании своих собственных функций, прочитайте /usr/share/doc/netifrc-*/net.example.bz2.