ハンドブック:HPPA/ネットワーク/拡張
標準関数フック
/etc/conf.d/net 内では 4 つの関数を定義することができます:
preup()
、インターフェースが up にされる前に呼ばれます;predown()
、インターフェースが down にされる前に呼ばれます;postup()
、インターフェースが up にされた後に呼ばれます;postdown()
、インターフェースが down にされた後に呼ばれます。
これらの関数はすべてインターフェース名を指定して呼び出されます。関数内ではインターフェース名は IFACE 変数を通じて利用でき、関数は複数のインターフェースを制御できるようになっています。
preup()
および predown()
関数の戻り値は以下の通りであるべきです:
- 成功し、インターフェースの構成または構成の解除を続行できることを表す、0。
- それ以外の場合は 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()
関数で利用することができます。/etc/conf.d/net 内では 2 つの関数を定義することができます:
preassociate()
、アソシエーションの前に呼ばれます。postassociate()
、アソシエーションの後に呼ばれます。
これらの関数はすべてインターフェース名を指定して呼び出されます。関数内ではインターフェース名は IFACE 変数を通じて利用でき、関数は複数のインターフェースを制御できるようになっています。
preassociate() 関数の戻り値は以下の通りであるべきです:
- 成功し、構成を続行することを表す、0。
- それ以外の場合は 0 以外の値。
preassociate()
が 0 以外の値を返すと、インターフェースの構成は中止されるでしょう。
postassociate()
関数の戻り値は、それが失敗を示してもすることが何も無いので、無視されます。
各関数内では、システムが接続しようとしている AP の完全な ESSID は 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 をお読みください。