dev_get_by_index的使用及struct net*参数

本文详细解释了Linux 2.6.30版本中dev_get_by_name函数从单参数升级到双参数的变化原因,并指导如何在新版本中正确使用该函数,通过引入init_net全局变量来获取网络设备实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

linux2.6.30里面使用dev_get_by_name通过设备名来获取网络设备实例,但是在之前的dev_get_by_name只有一个参数const char*,现在新版本的dev_get_by_name有两个参数,有如下的函数原型[Linux/net/core/dev.c]:

715 struct net_device *dev_get_by_name(struct net *net, const char *name)
716 {
717         struct net_device *dev;
718 
719         rcu_read_lock();
720         dev = dev_get_by_name_rcu(net, name);
721         if (dev)
722                 dev_hold(dev);
723         rcu_read_unlock();
724         return dev;
725 }

习惯了使用之前的dev_get_by_name,现在多出个struct net *net参数,感觉不知所措了。

后来发现可以使用init_net,来用做第一个参数。init_net为全局变量[Linux/net/core/net_namespace.c]

 32 struct net init_net = {
 33         .dev_base_head = LIST_HEAD_INIT(init_net.dev_base_head),
 34 };


这样就能够获得到设备实例了:比如 dev_get_by_name(&init_net,"eth0")

struct net是一个网络名字空间namespace,在不同的名字空间里面可以有自己的转发信息库,有自己的一套net_device等等。默认情况下都是使用 init_net这个全局变量。
dev_get_by_index于此类似。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值