1

Я изучаю модули ядра и новы к нему. Я хочу изменить размер MTU для eth0. Вот программа модуля, которую я написал.Ядро Linux для изменения размера MTU не работает

Цель состоит в том, чтобы изменить размер MTU eth0 на 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 на структуру, не присвоенная с каким-либо фактическим сетевым устройством. Вы указали local переменную dev в init, а затем изменили ее.

Сначала вы должны: найти сетевое устройство, которое вы хотите изменить. Это делается с __dev_get_by_name, как это:

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

После того, что ваши изменения будут применены к сетевому интерфейсу.