我正在编写一个内核模块,它需要有关本地机器接口的信息,就像通过简单的“ifconfig”命令重新调整的那些,我已经搜索了很多,但找不到任何东西
问问题
3120 次
2 回答
6
struct net_device
您可以通过一种或另一种方式获取所有这些信息。正如 Albert Veli 所说,您可以struct net_device
使用__dev_get_by_name()
.
如果您告诉我们您具体需要哪些信息,我们甚至可以为您指出正确的字段。
查找 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 = ifap->ifa_next) {
ifap->ifa_address; // is the IPv4 address
}
(这些都没有经过编译测试,因此可能存在拼写错误。)
于 2012-04-12T15:17:22.440 回答
0
例如,查看如何获取地址的in6_dump_addrs
函数。net/ipv6/addrconf.c
对于链路层地址等链路属性,请参阅core/rtnetlink.c
。ifconfig 及其 ioctl 已过时(在 Linux 上),因此最好不要考虑那个现在充满错误的程序。
于 2012-04-12T15:51:18.320 回答