如何獲得Linux網絡卡工作模式,半工還是全雙工

2021-06-18 06:38:31 字數 1220 閱讀 3820

今天值得紀念,作為技術支援,總算解決了第乙個客戶提出的實際問題。

實在是詭異的問題,為了重現錯誤嘗試了多次,居然無意中發現跟延時有關。

最後解決問題還白白花了2個多小時,linux shell指令碼真的很缺乏互動功能

神清氣爽啊,回來都很晚了

這時有同學求助,工作上一堆問題,女生當然得幫了,時間不夠先挑個軟柿子,就是c語言取得網絡卡工作模式,半工還是全雙工。

這個我很快就想到,要是/proc 、/sys 等下面沒有的話,只能是ioctl 介面了

但是具體是那個ioctl命令就糾結了,lxr.linux.no上不了,手頭沒有原始碼檢視環境,這個只能baidu了

很冷門啊,找到了siocethtool

也可以strace 一下兩個命令

strace ethtool eth0

strace mii-tool -v

但是一些ioctl命令不是所有網絡卡驅動都支援的,所以往往沒跟到siocethtool,這些程式就自己退出了,

很是靠不住

網路裝置沒有裝置節點,fd只要socket就可以獲得了

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

typedef unsigned short u16;

typedef unsigned int u32;

typedef unsigned char u8;

#include

#include

int get_settings(const char* devname)

ecmd.cmd = 1;

ifr.ifr_data = (caddr_t)&ecmd;

if(ioctl(fd, siocethtool, &ifr))

//duplex 0 half 1 full

fprintf(stdout, "settings for %s: speed:%d, duplex:%s\n", devname, ecmd.speed,

ecmd.duplex ? "full" : "half");

close(fd);

return 1;

}int main(int argc, char *argv)

linux 下更改網絡卡工作模式

linux下更改網絡卡工作模式 現在的網絡卡一般都是10 100m自適應工作模式,在配置網絡卡引數時我們很少 考慮到它的工作模式,但在路由器和交換機 伺服器等通訊量比較大的 關鍵裝置上,我們應該為它指定正確的工作模式,這樣可以提高通訊效率。在linux環境下,們可以使用系統自帶的命令或工具實現,下面...

網絡卡工作模式 混雜模式

網絡卡工作模式有4種,分別是 廣播 broadcast 模式 多播 multicast 模式 單播模式 unicast 混雜模式 promiscuous 在混雜模式下的網絡卡能夠接收一切通過它的資料,而不管該資料目的位址是否是它。如果通過程式將網絡卡的工作模式設定為 混雜模式 那麼網絡卡將接受所有流...

網絡卡的工作模式

乙太網 ethernet 具有共享介質的特徵,資訊是以明文的形式在網路上傳輸,當網路介面卡設定為監聽模式 混雜模式,promiscuous 時,由於採用乙太網廣播通道爭用的方式,使得監聽系統與正常通訊的網路能夠併聯連線,並可以捕獲任何乙個在同一衝突域上傳輸的資料報。ieee802.3 標準的乙太網採...