DPDK 關閉網口速率自動協商, 強制網口速率

朝寝猫發表於2024-06-18

dpdk 原始碼中的 宏定義

#define ETH_LINK_SPEED_FIXED    (1 <<  0)  //< Disable autoneg (fixed speed) 
#define ETH_LINK_SPEED_10M_HD   (1 <<  1)  //<  10 Mbps half-duplex 
....

要檢視裝置的支援速度能力,您可以呼叫 rte_eth_dev_info_get,例如 rte_eth_dev_info_get(port_id, &dev_info) 並檢視 dev_info.speed_capa。

e.g: 10M_HD
The network card must support 10M_HD,
網路卡必須支援10M_HD

// 配置 port_conf 中的 速率
0  struct rte_eth_conf port_conf;
   //將代表10的位置為1
   port_conf.link_speeds  = (1U << 1);  //ETH_LINK_SPEED_10M_HD    10 Mbps half-duplex    
    //關閉自動協商
   port_conf.link_speeds |= (1 <<  0); //ETH_LINK_SPEED_FIXED      Disable autoneg (fixed speed)   

// 關閉網路卡鏈路
1  rte_eth_dev_set_link_down(Port);  
// 停止網路卡
2  rte_eth_dev_stop(Port);  
// 重新配置網路卡
3  rte_eth_dev_configure(Port, ucRxQCnt, ucTxQCnt, &port_conf);
// 啟動網路卡
4  rte_eth_dev_start(Port);
// 設定網路卡鏈路為UP
5  rte_eth_dev_set_link_up(Port);

搞定
要重新開啟auto, 將 link_speeds 配置為0 即可

相關文章