1

我正在學習內核模塊,並且它是新的。 我想改變eth0的MTU大小。這是我寫的模塊程序。Linux內核模塊更改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

你不需要內核模塊來做到這一點,在終端'ifconfig eth0 mtu 1000 up'輸入此命令 –

回答

1

您正在設置未分配任何實際網絡設備的結構上的MTU。您在init中聲明本地變量dev,然後更改它的字段。

您應該先找到要更改的網絡設備。這與__dev_get_by_name這樣做:

struct net_device *dev = __dev_get_by_name("eth0"); 

那之後所做的更改將被應用到您的網絡接口。