dpdk中的RTE_ETH_FOREACH_DEV宏分析

 

uint16_t
rte_eth_dev_count(void)
{
	uint16_t p;
	uint16_t count;

	count = 0;

    //统计可用的port
	RTE_ETH_FOREACH_DEV(p)
		count++;

	return count;
}



/*
rte_eth_find_next返回的p是一个临时中间变量,每次返回一个满足(unsigned int)p < (unsigned int)RTE_MAX_ETHPORTS的p,说明就有一个可用的port,因此可用计数count即可++
*/
#define RTE_ETH_FOREACH_DEV(p)					\
	for (p = rte_eth_find_next(0);				\
	     (unsigned int)p < (unsigned int)RTE_MAX_ETHPORTS;	\
	     p = rte_eth_find_next(p + 1))



/*
while循环是为了找出满足RTE_ETH_DEV_ATTACHED状态的dev,如果dev的state不满足的话,那么就会使port_id++,因此达到过滤作用。
*/

uint16_t
rte_eth_find_next(uint16_t port_id)
{
	while (port_id < RTE_MAX_ETHPORTS &&
	       rte_eth_devices[port_id].state != RTE_ETH_DEV_ATTACHED)
		port_id++;

	if (port_id >= RTE_MAX_ETHPORTS)
		return RTE_MAX_ETHPORTS;

	return port_id;
}

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值