Handbook:MIPS/Networking/Extending
Стандартные функции-обработчики
Four functions can be defined in /etc/conf.d/net:
preup()
, called before an interface is brought up;predown()
, called before an interface is brought down;postup()
, called after an interface is brought up; andpostdown()
, called after an interface is brought down.
Each of these these functions is called with the interface name, available within each function via the IFACE variable, so that one function can control multiple interfaces.
The return values for the preup()
and predown()
functions should be:
- 0 to indicate success, and that configuration or de-configuration of the interface can continue.
- A non-zero value otherwise.
If preup()
returns a non-zero value, interface configuration will be aborted. If predown()
returns a non-zero value, the interface will not be allowed to continue de-configuration.
Return values for the postup()
and postdown()
functions are ignored since there's nothing to do if they indicate failure.
${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()
.Two functions can be defined in /etc/conf.d/net:
preassociate()
, called before association.postassociate()
, called after association.
Each of these these functions is called with the interface name, available within each function via the IFACE variable, so that one function can control multiple interfaces.
The return values for the preassociate() function should be:
- 0 to indicate success, and to continue configuration.
- A non-zero value otherwise.
If preassociate()
returns a non-zero value, interface configuration will be aborted.
Возвращаемое значение функции 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.