發表文章

目前顯示的是 8月 24, 2014的文章

如何在 Linux Kernel 下偵測網路的連線狀態?

借用一下參考資料的標題。 今天如果想要在 Linux Kernel 內得知實體網路的 Link Status,只需要去 /sys/class/net/ 然後直接去 cat 這兩個 node,以 eth0 來當範例。 這是網路線有插入的狀況: eth0/carrier:1 eth0/operstate:unknown 這是網路線拔除的狀況: eth0/carrier:0 eth0/operstate:down 當再次插入時,原本的 carrier 會從 unknown 變成 1: eth0/operstate:up eth0/carrier:1 不然直接去 grep eth0/ 底下的東西也可以: grep "" eth0/* 很遺憾的是,在 user level 內支援的 inotify,在 kernel level 是不能用的, 所以要借助 socket 的力量,直接在 ethernet driver 內使用 sock_create_kern 來 create socket, 然後透過 connect 與 sock_sendmsg 將要傳的資料填寫在 buf 內就好。(如果要傳 struct 就 &struct) 參考資料: http://stackoverflow.com/questions/808560/how-to-detect-the-physical-connected-state-of-a-network-cable-connector http://stackoverflow.com/questions/10340145/get-event-for-nic-ethernet-card-link-status-on-linux