设为首页 加入收藏

TOP

Linux驱动开发:网络设备之虚拟网卡
2014-11-24 13:33:54 来源: 作者: 【 】 浏览:1
Tags:Linux 驱动 开发 网络设备 虚拟 网卡

以下是一个简单的虚拟网卡驱动,目的是使初学者对网卡驱动的整体架构有一个初步的了解
代码编译加载(insmod virtnet.ko)后,会形成一个自己的虚拟网卡(ifconfig -a 可查看全部网卡信息),


MAC address = 00:12:34:56:78:9a,可以通过ifconfig "ether" 192.168.1.1 up 对虚拟网卡设置IP地址(ifconfig "ether" 192.168.1.1 down 卸载)


测试:


ping 192.168.1.1


ping 192.168.1.2 即会不停地向外发送数据,此时数据包其实是没有经过网卡设备层的


但是,我自己测试一直没有加载上,待后续弄清楚后再来更新!!!


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include



//声明一个网络设备结构体


struct net_device *dev = NULL;


//启动数据包的传输,传递参数skb,使得驱动程序能获取从上层传递下来的数据包


static int virtnet_start_xmit(struct sk_buf *skb, struct net_device *dev)


{


printf("send %d bytes\n", skb->len);


// 更改统计数据


dev->stats.tx_packets++;


dev->stats.tx_bytes += skb->len;


return 0;


}


//入口函数


static int __init virtnet_init(void)


{


1、分配一个维护网卡的结构


dev = alloc_netdev(0, "virtnet%d", ether_setup);


2、配置网卡特性


dev->hard_start_xmit = &virtnet_start_xmit;


/*MAC address*/


dev->dev_addr[0] = 0x00;


dev->dev_addr[0] = 0x12;


dev->dev_addr[0] = 0x34;


dev->dev_addr[0] = 0x56;


dev->dev_addr[0] = 0x78;


dev->dev_addr[0] = 0x9a;


3、注册网卡设备


register_netdev(dev);


return 0;


}



//出口函数


static void __exit virtnet_exit(void)


{


unregister_netdev(dev);


free_netdev(dev);


return;


}



//注册


module_init(virtnet_init);


module_exit(virtnet_exit);


MODULE_LICENSE("GPL");


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux驱动开发:USB驱动之usb_ske.. 下一篇Linux驱动开发:网络设备之DM9000..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: