我正在编写一个内核模块,该模块需要有关本地计算机接口(interface)的信息,就像通过简单的“ifconfig”命令重新调整的接口(interface)一样,我已经为此进行了大量搜索,但找不到任何东西

最佳答案

您可以通过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
}

(这些都没有经过编译测试,因此可能出现拼写错误。)

关于linux - 是否有一个内核模块可以完全返回简单的 'ifconfig'的功能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10124721/

10-10 12:43