概觀 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 多點著墨。

留言

  1. 在 Linux 中,IFF_RUNNING 是用來偵測插拔線用的。當一個網路 driver 偵測到 media change 時,應該呼叫 netif_carrier_on/netif_carrier_off來反應這個變化。

    不過有些 driver 根本沒有做這件事就是了。

    回覆刪除
  2. 的確, 不管是在 Linux 還是其他 BSD 系統裡, IFF_RUNNING 本來就是做該用途, 只不過有不少 driver 因為沒有去做這件事, 造成 user space application 不應太過依賴使用該 flag。

    回覆刪除

張貼留言

這個網誌中的熱門文章

有趣的邏輯問題:是誰在說謊

Web 技術中的 Session 是什麼?

淺談 USB 通訊架構之定義(一)

淺談 USB 通訊架構之定義(二)

Reverse SSH Tunnel 反向打洞實錄