ハンドブック:パート/ネットワーク/拡張
標準関数フック
開始/終了操作に関連して呼ばれる 4 個の関数を、/etc/conf.d/net で定義することができます。これらの関数は、ひとつの関数で複数のアダプタを制御できるように、まずインターフェース名とともに呼ばれます。
preup()
および predown()
関数の戻り値は、インターフェースの構成または解除を続行できることを示すためには、0 (成功) であるべきです。もし preup()
が 0 以外の値を返した場合は、インターフェースの構成は中止されます。もし predown()
が 0 以外の値を返した場合は、インターフェースの構成解除の続行は許可されません。
postup()
および postdown()
関数の戻り値は、それらが失敗を示してもすることが何も無いので、無視されます。
${IFACE} は、接続/切断されようとしているインターフェースに設定されます。${IFVAR} は bash が使用できる変数名に変換された ${IFACE} です。
/etc/conf.d/net
pre/post up/down 関数の例preup() { # 有効化する前にインターフェースのリンク状態をテストします。これは # 一部のネットワークアダプタでのみ機能し、ethtool パッケージが # インストールされている必要があります。 if ethtool ${IFACE} | grep -q 'Link detected: no'; then ewarn "No link on ${IFACE}, aborting configuration" return 1 fi # 成功時には 0 を忘れずに返します return 0 } predown() { # スクリプトのデフォルトでは NFS ルートであるかを確認し、その場合は # インターフェースの無効化を拒否します。predown() 関数を指定した場合、 # このロジックが上書きされることに注意してください。このロジックを以下に # 示します。残したい場合は使ってください……。 if is_net_fs /; then eerror "root filesystem is network mounted -- can't stop ${IFACE}" return 1 fi # 成功時には 0 を忘れずに返します return 0 } postup() { # この関数は例えば、動的 DNS サービスに登録するために使えます。 # 他の可能性としては、インターフェースが有効化したときにメールを # 送受信することがあるでしょう。 return 0 } postdown() { # この関数はほぼ完全性のためだけにここに書いています……。何か気の利いた # ことをすることはまだ思い付きません ;-) return 0 }
関数を書くためのさらなる情報いついては、/usr/share/doc/netifrc-*/net.example.bz2 をお読みください。
無線ツール関数フック
これは WPA サプリカントとともには動作しないでしょう - しかし ${ESSID} および ${ESSIDVAR} 変数は
postup()
関数で利用することができます。アソシエーション機能に関連して呼ばれる 2 個の関数を、/etc/conf.d/net で定義することができます。これらの関数は、ひとつの関数で複数のアダプタを制御できるように、まずインターフェース名とともに呼ばれます。
preassociate()
関数の戻り値は、インターフェースの構成または解除を続行できることを示すためには、0 (成功) であるべきです。もし preassociate()
が 0 以外の値を返した場合は、インターフェースの構成は中止されます。
postassociate()
関数の戻り値は、それが失敗を示してもすることが何も無いので、無視されます。
${ESSID} は、システムが接続しようとしている AP の ESSID に完全一致で設定されます。${ESSIDVAR} は bash が使用できる変数名に変換された ${ESSID} です。
/etc/conf.d/net
pre/post アソシエーション関数preassociate() { # 下のコードは leap_user_ESSID と leap_pass_ESSID の 2 個の変数を # 追加します。接続しようとしている 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 "For LEAP support, please emerge net-misc/cisco-aironet-client-utils" return 1 fi einfo "Waiting for LEAP Authentication on \"${ESSID//\\\\//}\"" if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then ewarn "Login Failed for ${user}" return 1 fi fi return 0 } postassociate() { # この関数はほぼ完全性のためだけにここに書いています……。何か気の利いた # ことをすることはまだ思い付きません ;-) return 0 }
${ESSID} および ${ESSIDVAR} は
predown()
および postdown()
関数では利用できません。カスタム関数を書くためのさらなる情報いついては、/usr/share/doc/netifrc-*/net.example.bz2 をお読みください。