初始化/启动流程
- 通过
struct rte_eth_conf确认需要打开的RX/TX功能设置 rte_eth_dev_info_get()获得可以卸载到网卡的功能,如RSS相关的功能在flow_type_rss_offloads- 将想要打开的功能和网卡具备的功能进行对比
(&=) rte_eth_dev_configure()配置RX/TX队列数量以及struct rte_eth_conf信息rte_eth_dev_adjust_nb_rx_tx_desc()获取网卡支持的最大RX/TX队列长度- 根据网卡支持的最大RX/TX队列长度,调用
rte_eth_rx_queue_setup()设置RX队列的长度、mempool等 rte_eth_dev_start()启动网卡rte_eth_add_rx_callback()为某个RX队列添加回调函数,例如这里添加了一个add_timestamp函数给每一个包添加时间戳。
网卡接收端的卸载能力
混杂模式promiscuous mode打开后,网卡收到目的MAC地址不是自己的MAC地址的包时,也会进行处理,否则会丢弃这个包。
rss_hf各个选项的含义
| 选项 | 含义 |
|---|---|
ETH_RSS_IPV4 | 使用IPv4的src/dst IP计算哈希 |
ETH_RSS_FRAG_IPV4 | 分片的IPv4包用src/dst IP计算哈希 |
ETH_RSS_NONFRAG_IPV4_TCP | 非分片的IPv4 TCP包用src/dst port计算哈希(分片时只有第一个有端口号) |
ETH_RSS_NONFRAG_IPV4_UDP | 非分片的IPv4 UDP包用src/dst port计算哈希(分片时只有第一个有端口号) |