您的位置:首页 > 其它

dev_get_by_index的使用及struct net*参数

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

[cpp] view
plain copy

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]

[cpp] view
plain copy

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于此类似。




0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: