DPDK网卡PMD驱动常用属性字段和API函数汇总

使用DPDK进行报文收发,网卡被DPDKPMD驱动接管,所以以前可以使用ethtool工具配置的网卡属性,现在都需要通过DPDK提供的API函数来进行配置。

DPDK官方文档说明》中我们对DPDK官方提供的文档做了整体说明,今天来具体看一下DPDK提供的针对网卡各属性进行操作的API函数。

1、获取网卡支持的速率双工配置

int rte_eth_dev_info_get(uint16_t port_id, struct rte_eth_dev_info *dev_info); 

根据port_id获取对应网卡的速率双工配置,从struct rte_eth_dev_info的speed_capa字段获取,speed_capa是一个位图, 取值可能为:

#define RTE_ETH_LINK_SPEED_AUTONEG 0             /**< Autonegotiate (all speeds) */
#define ETH_LINK_SPEED_AUTONEG     RTE_ETH_LINK_SPEED_AUTONEG
#define RTE_ETH_LINK_SPEED_FIXED   RTE_BIT32(0)  /**< Disable autoneg (fixed speed) */
#define ETH_LINK_SPEED_FIXED       RTE_ETH_LINK_SPEED_FIXED
#define RTE_ETH_LINK_SPEED_10M_HD  RTE_BIT32(1)  /**<  10 Mbps half-duplex */
#define ETH_LINK_SPEED_10M_HD      RTE_ETH_LINK_SPEED_10M_HD
#define RTE_ETH_LINK_SPEED_10M     RTE_BIT32(2)  /**<  10 Mbps full-duplex */
#define ETH_LINK_SPEED_10M         RTE_ETH_LINK_SPEED_10M
#define RTE_ETH_LINK_SPEED_100M_HD RTE_BIT32(3)  /**< 100 Mbps half-duplex */
#define ETH_LINK_SPEED_100M_HD     RTE_ETH_LINK_SPEED_100M_HD
#define RTE_ETH_LINK_SPEED_100M    RTE_BIT32(4)  /**< 100 Mbps full-duplex */
#define ETH_LINK_SPEED_100M        RTE_ETH_LINK_SPEED_100M
#define RTE_ETH_LINK_SPEED_1G      RTE_BIT32(5)  /**<   1 Gbps */
#define ETH_LINK_SPEED_1G          RTE_ETH_LINK_SPEED_1G
#define RTE_ETH_LINK_SPEED_2_5G    RTE_BIT32(6)  /**< 2.5 Gbps */
#define ETH_LINK_SPEED_2_5G        RTE_ETH_LINK_SPEED_2_5G
#define RTE_ETH_LINK_SPEED_5G      RTE_BIT32(7)  /**<   5 Gbps */
#define ETH_LINK_SPEED_5G          RTE_ETH_LINK_SPEED_5G
#define RTE_ETH_LINK_SPEED_10G     RTE_BIT32(8)  /**<  10 Gbps */
#define ETH_LINK_SPEED_10G         RTE_ETH_LINK_SPEED_10G
#define RTE_ETH_LINK_SPEED_20G     RTE_BIT32(9)  /**<  20 Gbps */
#define ETH_LINK_SPEED_20G         RTE_ETH_LINK_SPEED_20G
#define RTE_ETH_LINK_SPEED_25G     RTE_BIT32(10) /**<  25 Gbps */
#define ETH_LINK_SPEED_25G         RTE_ETH_LINK_SPEED_25G
#define RTE_ETH_LINK_SPEED_40G     RTE_BIT32(11) /**<  40 Gbps */
#define ETH_LINK_SPEED_40G         RTE_ETH_LINK_SPEED_40G
#define RTE_ETH_LINK_SPEED_50G     RTE_BIT32(12) /**<  50 Gbps */
#define ETH_LINK_SPEED_50G         RTE_ETH_LINK_SPEED_50G
#define RTE_ETH_LINK_SPEED_56G     RTE_BIT32(13) /**<  56 Gbps */
#define ETH_LINK_SPEED_56G         RTE_ETH_LINK_SPEED_56G
#define RTE_ETH_LINK_SPEED_100G    RTE_BIT32(14) /**< 100 Gbps */
#define ETH_LINK_SPEED_100G        RTE_ETH_LINK_SPEED_100G
#define RTE_ETH_LINK_SPEED_200G    RTE_BIT32(15) /**< 200 Gbps */
#define ETH_LINK_SPEED_200G        RTE_ETH_LINK_SPEED_200G

2、获取网卡链路状态

根据port_id获取网卡的链路状态,包括网卡速率、双工状态、网卡协商状态和up/down状态。

int rte_eth_link_get(uint16_t port_id, struct rte_eth_link *link);  //设定的时间内(9s) 内不断的轮询接口状态,当获取到一次 up 就立刻返回,或者当时间耗尽时仍旧为 down 则返回 down 的状态  
int rte_eth_link_get_nowait(uint16_t port_id, struct rte_eth_link *link);  //直接读取当前状态,不需要等待  

struct rte_eth_link {
    uint32_t link_speed;        /**< RTE_ETH_SPEED_NUM_ */                  //网卡当前速率
    uint16_t link_duplex  : 1;  /**< RTE_ETH_LINK_[HALF/FULL]_DUPLEX  */    //网卡半双工/全双工状态
    uint16_t link_autoneg : 1;  /**< RTE_ETH_LINK_[AUTONEG/FIXED] */
        //网卡协商/固定速率
    uint16_t link_status  : 1;  /**< RTE_ETH_LINK_[DOWN/UP] */              //网卡up/down状态
} __rte_aligned(8);      /**< aligned for atomic64 read/write */

3、链路状态事件

int rte_eth_dev_callback_register(uint16_t port_id,
            enum rte_eth_event_type event,
        rte_eth_dev_cb_fn cb_fn, void *cb_arg);

rte_eth_dev_callback_register函数注册网卡的链路状态事件,当rte_eth_event_type对应事件发生时,会触发调用cb_fn回调函数。

enum rte_eth_eve
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值