5. 新增功能
5.a. 標準函數連結
有四個定義好的函數在 start/stop 動作時會啟動。這些函數開頭都是網路介面的名稱,以便控制多個網路介面。
preup 和 predown 函數應該回傳 0,表示接下來的介面設定或取消設定可以繼續,如果 preup 回傳不為 0 的數值,會結束網路介面的設定。如果 predown 回傳不為 0 的數值,將會不允許繼續這個網路介面的取消設定。
postup 及 postdown 函數會忽略回傳值,因為如果他們有錯誤的話,也沒有什麼要做的。
${IFACE} 是設成要啟動/關閉的網路介面。${IFVAR} 是把 ${IFACE} 轉換成 bash 可以接受的變數名稱。
原始碼 1: pre/post up/down function 範例 |
preup() {
# 在啟動前測試網路線是否已接上。
# 這只在某些網路卡有作用,並且需要安裝 mii-diag 套件
if mii-tool ${IFACE} 2> /dev/null | grep -q 'no link'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
# 在啟動前測試網路線是否已接上。
# 這只在某些網路卡有作用,並且需要安裝 ethtool 套件
if ethtool ${IFACE} | grep -q 'Link detected: no'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
# 記得回傳 0 代表成功
return 0
}
predown() {
# script 中預設的是測試是否使用 NFS 當作根目錄,在這種情況不允許停止網路介面。
# 注意如果你指定一個 predown() 函數,會蓋掉這個判斷。底下就是這個
#script,如果你還需要他的話...
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
}
|
5.b. 無線網路函數連結
注意: 這對 WPA Supplicant 不能工作 - 但是 ${ESSID} 和 ${ESSIDVAR} 變數在 postup() 函數內可以用。 |
這裡定義兩個結合函數在相關的函數附近被呼叫。這些函數開頭都是網路介面的名稱,以便控制多個網路介面。
preassociate 函數應該回傳 0,表示接下來的介面設定或取消設定可以繼續,如果 preup 回傳不為 0 的數值,會結束網路介面的設定。如果 predown 回傳不為 0 的數值,將會不允許繼續這個網路介面的取消設定。
postassociate 函數會忽略回傳值,因為如果他們有錯誤的話,也沒有什麼要做的。
${ESSID} 是設成你連線 AP 的 ESSID。${ESSIDVAR} 是 ${ESSID} 轉換成 bash 可以接受的變數名稱。
原始碼 2: pre/post 結合函數 |
preassociate() {
# 底下加了 leap_user_ESSID 及 leap_pass_ESSID 兩個變數
# 當這些都對你要連線的 ESSID 設好後,執行 CISCO LEAP script
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() 函數不能使用 |
6. 網路管理
6.a. 網路管理
如果你和你的電腦經常在移動,你可能會沒有網路線或無線網路可以用。而且,你可能希望在你插上網路線或是找到無線網路時網路自動啟動。
這裡你可以找到一些幫你完成的工具。
注意: 這份文件只介紹 ifplugd,但時還有其他像 quickswitch 的工具你可以參考。 |