我正在学习内核模块并且是新手。 我想改变eth0的MTU大小。这是我写的模块程序。
目的是将eth0的MTU大小更改为1000.但它没有改变。 任何人都可以告诉我,我错过了什么。如果方法本身是错误的,你能指出我正确的方向吗?
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/etherdevice.h>
#include <linux/netdevice.h>
static int __init hello_2_init(void)
{
printk(KERN_INFO "Hello, world 2\n");
struct net_device dev;
eth_change_mtu(&dev,1000); //calling eth_change_mtu
return 0;
}
static void __exit hello_2_exit(void)
{
printk(KERN_INFO "Goodbye, world 2\n");
}
int eth_change_mtu(struct net_device *dev, int new_mtu)
{
dev->mtu = new_mtu;
printk(KERN_INFO "New MTU is %d",new_mtu);
return 0;
}
module_init(hello_2_init);
module_exit(hello_2_exit);
答案 0 :(得分:1)
您正在为未配置任何实际网络设备的结构设置MTU。您在init中声明了 local 变量dev
,然后更改了它的字段。
您应首先找到要更改的网络设备。这是通过__dev_get_by_name
完成的,如下所示:
struct net_device *dev = __dev_get_by_name("eth0");
之后,您的更改将应用于您的网络接口。