概觀 IFF_UP 與 IFF_RUNNING 的異同
對於如何在 Linux 底下取得網路介面的狀態,過去曾經於『取得網路裝置(NETDEVICE)的系統訊息』提過,基本上整個操作是很簡單明瞭的,應該不會有太大的問題。
有人曾來信問我,IFF_UP 和 IFF_RUNNING 的差別在哪?就實際功用而言,兩者都代表了網路裝置是否正常啟用,但是更仔細觀察可以發現拔除網路線時會造成 IFF_RUNNING 的改變,至於 IFF_UP 不會因插拔網路線而有任何變化。
事實上對 Linux 而言, IFF_UP 是核心主要操作的旗標,而 IFF_RUNNING 純粹只是為了與 BSD 相容而存在,若你是想要撰寫 Linux network device driver 的人,就比較需要對 IFF_UP 多點著墨。
有人曾來信問我,IFF_UP 和 IFF_RUNNING 的差別在哪?就實際功用而言,兩者都代表了網路裝置是否正常啟用,但是更仔細觀察可以發現拔除網路線時會造成 IFF_RUNNING 的改變,至於 IFF_UP 不會因插拔網路線而有任何變化。
事實上對 Linux 而言, IFF_UP 是核心主要操作的旗標,而 IFF_RUNNING 純粹只是為了與 BSD 相容而存在,若你是想要撰寫 Linux network device driver 的人,就比較需要對 IFF_UP 多點著墨。
在 Linux 中,IFF_RUNNING 是用來偵測插拔線用的。當一個網路 driver 偵測到 media change 時,應該呼叫 netif_carrier_on/netif_carrier_off來反應這個變化。
回覆刪除不過有些 driver 根本沒有做這件事就是了。
的確, 不管是在 Linux 還是其他 BSD 系統裡, IFF_RUNNING 本來就是做該用途, 只不過有不少 driver 因為沒有去做這件事, 造成 user space application 不應太過依賴使用該 flag。
回覆刪除