Gentoo Logo

1.  Стандартные функции-обработчики

Можно определить четыре функции, которые вызываются при операциях запуска (start) и останова (stop). При вызове функциям передается название интерфейса, так что одна и та же функция может управлять несколькими адаптерами.

Для указания на то, что запуск или останов интерфейса может продолжаться, возвращаемое значение функций preup() и predown() должно быть нулевым (успешным). Если preup() возвращает ненулевое значение, запуск интерфейса прерывается. Если predown() возвращает ненулевое значение, не допускается продолжение останова интерфейса.

Возвращаемыое значение функций postup() и postdown() игнорируется, так как показываемая ими ошибка не обрабатывается.

${IFACE} присваивается название запускаемого/останавливаемого интерфейса. ${IFVAR} — это значение ${IFACE}, преобразованное в имя переменной, разрешенное в bash.

Листинг 1.1: Примеры функций до/после запуска/останова

preup() {
  # Проверка соединения интерфейса перед его запуском. Она
  # работает лишь с некоторыми сетевыми адаптерами и требует наличия
  # установленного пакета mii-diag.
  if mii-tool ${IFACE} 2> /dev/null | grep -q 'no link'; then
    ewarn "Интерфейс ${IFACE} не подключен, прерывание запуска"
    return 1
  fi

  # Проверка соединения интерфейса перед его запуском. Она
  # работает лишь с некоторыми сетевыми адаптерами и требует наличия
  # установленного пакета 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
}

1.  Функции-обработчики wireless tools

Примечание: Это не работает вместе с WPA Supplicant, но переменные ${ESSID} и ${ESSIDVAR} доступны в функции postup().

Можно определить две функции, вызываемые до и после функции подключения (associate). При вызове им сначала передается название интерфейса, так что одна и та же функция может управлять несколькими адаптерами.

Для указания на то, что запуск или останов интерфейса можно продолжать, возвращаемое значение функции preassociate() должно быть нулевым (успешным). Если preassociate() возвращает ненулевое значение, запуск интерфейса прерывается.

Возвращаемое значение функции postassociate() игнорируется, так как показываемая ей ошибка не обрабатывается.

${ESSID} присваивается точный ESSID точки доступа, к которой вы подключаетесь. ${ESSIDVAR} — это ${ESSID}, преобразованный в имя переменной, разрешенное в bash.

Листинг 1.1: Функции до/после соединения

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().

Обновлено 30 августа 2006

Исходный документ обновлен 30 октября 2011

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.