ハンドブック:Alpha/ネットワーク/拡張
標準関数フック
開始/終了操作に関連して呼ばれる 4 個の関数を、/etc/conf.d/net で定義することができます。これらの関数は、ひとつの関数で複数のアダプタを制御できるように、まずインターフェース名とともに呼ばれます。
preup()
および predown()
関数の戻り値は、インターフェースの構成または解除を続行できることを示すためには、0 (成功) であるべきです。もし preup()
が 0 以外の値を返した場合は、インターフェースの構成は中止されます。もし predown()
が 0 以外の値を返した場合は、インターフェースの構成解除の続行は許可されません。
postup()
および postdown()
関数の戻り値は、それらが失敗を示してもすることが何も無いので、無視されます。
${IFACE} は、接続/切断されようとしているインターフェースに設定されます。${IFVAR} は bash が使用できる変数名に変換された ${IFACE} です。
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} です。
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 をお読みください。