按照之前模块的思路,从新整了一个比较小的系统,

最后结果是这样的~


============================================================================

/ # insmod test.ko

[k]myns_init

[k]my_net_init

[k]mynet_setup

[k]mynet_init

/ # ifconfig

eth0      Link encap:Ethernet  HWaddr 00:E0:4A:BC:15:E7  

         inet addr:192.168.10.20  Bcast:192.168.10.255  Mask:255.255.255.0

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

         RX packets:1726 errors:0 dropped:0 overruns:0 frame:0

         TX packets:701 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:1000

         RX bytes:2256049 (2.1 MiB)  TX bytes:120754 (117.9 KiB)

         Interrupt:108 Base address:0x300


lo        Link encap:Local Loopback  

         inet addr:127.0.0.1  Mask:255.0.0.0

         UP LOOPBACK RUNNING  MTU:16436  Metric:1

         RX packets:0 errors:0 dropped:0 overruns:0 frame:0

         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:0

         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


/ # ifconfig -a

eth0      Link encap:Ethernet  HWaddr 00:E0:4A:BC:15:E7  

         inet addr:192.168.10.20  Bcast:192.168.10.255  Mask:255.255.255.0

         UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

         RX packets:1733 errors:0 dropped:0 overruns:0 frame:0

         TX packets:709 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:1000

         RX bytes:2257043 (2.1 MiB)  TX bytes:123858 (120.9 KiB)

         Interrupt:108 Base address:0x300


lo        Link encap:Local Loopback  

         inet addr:127.0.0.1  Mask:255.0.0.0

         UP LOOPBACK RUNNING  MTU:16436  Metric:1

         RX packets:0 errors:0 dropped:0 overruns:0 frame:0

         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:0

         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


sxt       Link encap:Ethernet  HWaddr 00:26:7A:01:02:03  

         [NO FLAGS]  MTU:1500  Metric:1

         RX packets:0 errors:0 dropped:0 overruns:0 frame:0

         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

         collisions:0 txqueuelen:98

         RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)


/ # ifconfig sxt 1.1.1.1

[k]mynet_open

/ # ping 1.1.1.1

PING 1.1.1.1 (1.1.1.1): 56 data bytes

64 bytes from 1.1.1.1: seq=0 ttl=64 time=0.552 ms

^C

--- 1.1.1.1 ping statistics ---

1 packets transmitted, 1 packets received, 0% packet loss

round-trip min/avg/max = 0.552/0.552/0.552 ms

/ #

============================================================================

下面是源码:

#include "fhead.h"


int mynet_init(struct net_device *dev)

{

printk("[k]%s\n",__func__);

return 0;

}


int mynet_open(struct net_device *dev)

{

printk("[k]%s\n",__func__);

return 0;

}

int mynet_stop(struct net_device *dev)

{

printk("[k]%s\n",__func__);

return 0;

}


void mynet_setup(struct net_device * dev)

{

printk("[k]%s\n",__func__);

dev->init = mynet_init;

dev->mtu = 1500;

dev->type = ARPHRD_ETHER;

dev->hard_header_len = 14;

dev->addr_len = 6;

dev->mc_count = 2;

dev->dev_addr[0] = 0x0;

dev->dev_addr[1] = 0x26;

dev->dev_addr[2] = 0x7a;

dev->dev_addr[3] = 0x01;

dev->dev_addr[4] = 0x02;

dev->dev_addr[5] = 0x03;


dev->broadcast[0] = 0xff;

dev->broadcast[1] = 0xff;

dev->broadcast[2] = 0xff;

dev->broadcast[3] = 0xff;

dev->broadcast[4] = 0xff;

dev->broadcast[5] = 0xff;

dev->tx_queue_len = 98;

dev->open = mynet_open;

dev->stop = mynet_stop;

}


int my_net_init(struct net *net)

{

printk("[k]%s\n",__func__);

struct net_device *dev;


dev = alloc_netdev(0,"sxt",mynet_setup);

dev_net_set(dev,net);

register_netdev(dev);


return 0;

}


void my_net_exit(struct net *net)

{


}


struct pernet_operations my_net_ops =

{

.init = my_net_init,

.exit = my_net_exit,

};


int __init myns_init(void)

{

printk("[k]%s\n",__func__);

return register_pernet_device(&my_net_ops);

}


module_init(myns_init);

MODULE_LICENSE("GPL");