rte_eth_conf 结构体是 DPDK 中的一个数据结构,用于配置以太网设备(Ethernet device)的属性。该结构体定义如下:
struct rte_eth_conf {
uint32_t link_speed; /**< ETH_LINK_SPEED_* */
uint32_t link_duplex; /**< ETH_LINK_[HALF/FULL]_DUPLEX */
struct {
uint32_t high_water; /**< Set RX buffer high threshold. */
uint32_t low_water; /**< Set RX buffer low threshold. */
uint16_t size; /**< RX ring size, power of 2 required. */
uint8_t drop_en; /**< Drop packets if no descriptors are available. */
} rxmode; /**< Configuration of the reception path. */
struct {
uint16_t nb_queues; /**< Number of transmit queues. */
uint16_t nb_desc; /**< Number of transmit descriptors in each queue. */
uint16_t deferred_start; /**< Defered start for TX queues. */
uint16_t tx_free_thresh; /**< Start freeing TX buffers when there are less free descriptors than this value. */
enum rte_eth_tx_mq_mode mq_mode;
/**< Select Tx multi-queue mode: none(0), RSS (1) or DCB(2). */
uint8_t offloads; /**< Device TX offloads configuration. */
} txmode; /**< Configuration of the transmission path. */
struct {
enum rte_eth_rx_mq_mode mq_mode; /**< Select Rx multi-queue mode: none(0), RSS (1), DCB(2) or VMDQ(3). */
uint16_t max_rx_pkt_len; /**< Stop receiving after size of this packet is received. */
uint16_t split_hdr_size; /**< Split header, e.g. for VLAN header. */
uint16_t nb_queues; /**< Number of receive queues. */
uint8_t enable_lro; /**< Enable LRO (Large Receive Offload). */
uint8_t enable_scatter; /**< Enable scatter gather. */
uint8_t rx_free_thresh; /**< Start freeing RX buffers when there are less free descriptors than this value. */
uint8_t offloads; /**< Device RX offloads configuration. */
} rxmode; /**< Configuration of the reception path. */
struct {
uint32_t burst_size; /**< Maximum size of bursts. */
uint32_t ring_size; /**< Size of descriptor rings. */
uint8_t retry_mode; /**< Enable retry mode. */
uint8_t intr_conf.rxq; /**< RX queue intr-conf. */
} rx_adv_conf; /**< Advanced configuration for the Rx side. */
struct {
uint32_t burst_size; /**< Maximum size of bursts. */
uint32_t ring_size; /**< Size of descriptor rings. */
uint16_t nb_tcs; /**< Number of traffic classes in DCB. */
struct rte_eth_dcb_tx_conf tx_conf[RTE_ETH_DCB_MAX_TRAFFIC_CLASS];
/**< Tx configuration for DCB. */
struct rte_eth_dcb_rx_conf rx_conf[RTE_ETH_DCB_MAX_TRAFFIC_CLASS];
/**< Rx configuration for DCB. */
} dcb; /**< DCB configuration. */
struct rte_eth_vmdq_rx_conf vmdq_rx_conf;
/**< VMDQ configuration. */
struct rte_eth_mac_filter *mac_filter; /**< MAC filtering configuration. */
uint32_t rx_queue_flags;/**< Flags for configuring the behavior of the Rx queues. */
uint32_t tx_queue_flags;/**< Flags for configuring the behavior of the Tx queues. */
struct rte_eth_fdir_conf fdir_conf;
/**< Filter Control frame configuration. */
struct rte_eth_intr_conf intr_conf;
/**< Device interrupt configuration. */
};
具体解析如下:
- link_speed: 设备的链接速度,取值范围为 Ethernet 链接速率,如 ETH_LINK_SPEED_10M。
- link_duplex: 设备的链接双工模式,取值范围为 ETH_LINK_HALF_DUPLEX 和 ETH_LINK_FULL_DUPLEX。
- rxmode: 接收端口的配置信息,包括接收队列中缓冲区大小、高低阈值以及是否允许丢弃。
- txmode: 发送端口的配置信息,包括发送队列数量、每个队列中缓冲区数量、多队列(RSS、DCB)模式选择等。
- rx_adv_conf: 接收端口高级配置,包括最大传输单位、描述符环大小、重试模式和中断配置等。
- dcb: 数据中心桥协议(DCB)配置,用于实现带宽分配和服务质量特性(QoS)。
- vmdq_rx_conf: 虚拟机设备队列(VMDQ)配置,用于支持虚拟化场景。
- mac_filter: MAC 地址过滤器的配置信息。
- rx_queue_flags: 接收队列的属性标志,用于指定接收队列是否启用 RSS、LRO 等功能。
- tx_queue_flags: 发送队列的属性标志,用于指定发送队列是否启用 DCB 等功能。
- fdir_conf: 控制帧过滤(FDIR)配置,用于实现基于流的流量识别和分类。
- intr_conf: 设备中断配置。