我正在写大概需要本地计算机的接口,就像通过一个简单的“使用ifconfig”命令重新调校的那些信息的内核模块,我已经搜查了很多的,但找不到任何有没有一个内核模块能够返回一个简单的'ifconfig'呢?
2
A
回答
5
你可以通过struct net_device
这样或那样的方式获得所有这些信息。正如Albert Veli所说,你可以使用__dev_get_by_name()
得到这个struct net_device
指针。
如果您告诉我们您需要具体哪些信息,我们甚至可以将您指向正确的字段。
查找MAC地址是相当简单:
struct net_device *dev = __dev_get_by_name("eth0");
dev->dev_addr; // is the MAC address
dev->stats.rx_dropped; // RX dropped packets. (stats has more statistics)
查找IP地址是相当困难的,但不是不可能的:
struct in_device *in_dev = rcu_dereference(dev->ip_ptr);
// in_dev has a list of IP addresses (because an interface can have multiple)
struct in_ifaddr *ifap;
for (ifap = in_dev->ifa_list; ifap != NULL;
ifap = ifa1->ifa_next) {
ifap->ifa_address; // is the IPv4 address
}
(所有这些是不编译测试,所以错别字是可能)
+0
好吧,我想获得接口的IP地址,MAC地址,状态,错误的数据包数量和丢失的数据包,并且有什么方法可以在此接口上获得链接的速度或带宽? – 2012-04-12 15:40:58
0
例如,请参阅函数net/ipv6/addrconf.c
以了解如何获取地址。对于链接属性,如链接层地址,请参见core/rtnetlink.c
。 ifconfig及其ioctls已经过时(在Linux上),所以最好不要认为现在是bug弥漫的程序。
相关问题
- 1. 有没有一个libnfc android可加载内核模块?
- 2. 从活动中返回一个值 - 有没有一个好的做法呢?
- 3. 有没有办法简单地返回一个BlockingCollection
- 4. 有一个简单的JavaScript滑块吗?
- 5. 有没有像返回一个函数?
- 6. 一个模块中的功能,我进口的回报有没有定义
- 7. 如何建立一个内核模块
- 8. XSL-FO - 空块元素有一个很简单的模板
- 9. 是否有一个ruby方法只返回一个块的值?
- 10. 如何在没有DAL的情况下创建一个简单的Dotnetnuke模块
- 11. 如何使一个Linux内核模块依赖于具有depmod的另一个外部模块?
- 12. PHP mt_rand没有返回一个整数
- 13. 返回一个NSArray没有泄漏?
- 14. 做一个简单的wxWidgets程序没有内存泄漏
- 15. 有没有做一个特定的线程中的OpenCL内核
- 16. 不能让这个(简单)递归函数返回一个值
- 17. 有没有人有一个单一的ContentPresenter UserControl的简单例子?
- 18. 功能没有定义,返回一个匿名功能
- 19. 检查数整除9没有一个简单的模
- 20. 只返回最后一个内容块
- 21. Clojure的 - 功能没有返回一个懒惰的序列
- 22. 是否有可能结束一个像返回类似的Python模块导入?
- 23. 从模块返回一个类实例?
- 24. JTable中没有返回的最后一个单元格的值
- 25. PHP有一个“模块”类
- 26. 有没有成功的一个行块
- 27. 为什么这个简单的PHP没有返回响应?
- 28. 返回一个空集时,LINQ的地方没有返回
- 29. get_current()在这个内核模块中返回什么?
- 30. 我在函数内的第一个返回值没有返回任何东西
检查ifconfig的源代码并查看它的作用(或者使用strace进行检查),然后检查Linux内核源代码,了解执行这些系统调用时网络驱动程序的功能。例如ioctl SIOCGIFHWADDR,SIOCGIFADDR等。 – 2012-04-12 13:41:45
例如,检查net/core/dev.c函数__dev_get_by_name()看起来很有趣。你可以使用它并从返回的结构中获取关于接口的一些信息。 – 2012-04-12 13:49:45