Kernel 内核中的网络上/下问题
我正在尝试编写一个Linux内核模块,使用正确的命令,它将关闭网络接口(比如wlan0),将其IP地址更改为指定的IP地址,然后重新启动接口。在开始评论之前,是的,我知道您可以使用ifconfig,是的,我知道您也可以编写用户代码来完成此操作,但是对于我的研究项目,我正在尝试学习如何在Linux内核中完成此操作 经过研究,我找到了Kernel 内核中的网络上/下问题,kernel,linux-kernel,Kernel,Linux Kernel,我正在尝试编写一个Linux内核模块,使用正确的命令,它将关闭网络接口(比如wlan0),将其IP地址更改为指定的IP地址,然后重新启动接口。在开始评论之前,是的,我知道您可以使用ifconfig,是的,我知道您也可以编写用户代码来完成此操作,但是对于我的研究项目,我正在尝试学习如何在Linux内核中完成此操作 经过研究,我找到了net\u device\u ops结构,它有我需要调用的方法(ndo\u stop,和ndo\u open)。然而,我正在努力寻找使用示例,因此尝试: dev->
net\u device
\u ops结构,它有我需要调用的方法(ndo\u stop
,和ndo\u open
)。然而,我正在努力寻找使用示例,因此尝试:
dev->netdev_ops->ndo_stop(dev);
这编译得很好,但是当模块运行时,设备没有关闭
有谁能提供一个正确的用法示例或让我知道我做错了什么
void目标(int索引,\u32键){
无符号短电流if;
设备中的结构*;
如果信息为,则为ifaddr*中的结构;
结构网络设备*dev;
//结构网络设备操作;
__be32 n_键;
__u32试验2;
test2=0x00FFFFFF;
//test2=test2 |键;
n_key=cpu_到_be32(key);
cur_if=0;
dev=第一个网络设备(&init网络);
while(dev&&cur_如果ip\u ptr;
对于(如果在开发->ifa\u列表中显示信息;如果信息!=NULL;如果信息=如果信息->ifa\u下一步){
if(cur_if==索引){
dev->netdev_ops->ndo_stop(dev);
if\u info->ifa\u address=if\u info->ifa\u address&test2;
if\u info->ifa\u local=if\u info->ifa\u local&test2;
if_info->ifa_address=if_info->ifa_address | n_键;
if_info->ifa_local=if_info->ifa_local | n|u键;
printk(KERN_DEBUG“newtest::%pI4”,&if_info->ifa_local);
//dev->netdev_ops->ndo_open(dev);
}
}
cur_if++;
dev=下一个网络设备(dev);
}
返回;
}
这与我正在尝试的类似,事实上我尝试实现某种隐形模式,它应该做到这一点(root是先决条件)。但这不是通过内核模块完成的。我仍在尽力帮忙。我的步骤如下:
顺便说一句,您可以使用上面提到的命令和prepend ptrace,然后您将看到涉及哪些系统调用。太棒了,谢谢您的建议!我得调查一下,看看结果如何。