[发明专利]支持linux 的硬件抽象层的虚拟网卡设计方法有效
申请号: | 201110175932.6 | 申请日: | 2011-06-28 |
公开(公告)号: | CN102404253A | 公开(公告)日: | 2012-04-04 |
发明(设计)人: | 梅魁志;冯升;李国辉;李铁强;李博良 | 申请(专利权)人: | 西安交通大学 |
主分类号: | H04L12/66 | 分类号: | H04L12/66;G06F9/455 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 陆万寿 |
地址: | 710049 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 支持 linux 硬件 抽象 虚拟 网卡 设计 方法 | ||
1.支持linux的硬件抽象层的虚拟网卡设计方法,其特征在于:所述设计方法包括虚拟网卡中网络数据包的组织、虚拟网卡中网络数据包的存储管理、客户操作系统的网络包发送过程和客户操作系统的网络包接收过程。
2.如权利要求1所述支持linux的硬件抽象层的虚拟网卡设计方法,其特征在于:所述虚拟网卡中网络数据包的组织按照如下步骤进行,每个虚拟网卡中网络数据包在硬件抽象层端被抽象为一个结构体,其所包含的len字段和addr字段分别代表虚拟网卡中网络数据包长度和其在内存中的地址;由该结构体相连接的链表表示由网络设备发送或接收的一系列数据包;当数据包在HAL中传递时,仅需传送其addr字段,并据此实现数据在客户操作系统与硬件缓冲区之间的拷贝。
3.如权利要求1所述支持linux的硬件抽象层的虚拟网卡设计方法,其特征在于:所述虚拟网卡中网络数据包的存储管理按照如下步骤进行,虚拟网卡中网络数据包在客户操作系统linux中以结构体sk_buff表示,其网络数据位于sk_buff->data所指向的内存地址中;对于客户操作系统中的每个sk_buff,都由HAL端虚拟网卡中网络数据包链表的一个元素的索引;虚拟网卡中网络数据包sk_buff在客户操作系统中创建和释放,对应HAL端虚拟网卡中网络数据包链表元素的增加和删除;通过该方式,HAL端不进行虚拟网卡中网络数据包空间的分配与释放,相应的工作由客户操作系统完成;每当需要发送网络包时,只需要把sk_buff->data,即上文的addr字段传递给HAL,并由后者将该指针指向的内存拷贝至硬件缓冲区中,发送完成后由客户操作系统将网络包sk_buff的空间释放;当接收网络包时,客户操作系统创建预先分配固定大小负载空间的sk_buff,并由HAL将接收到的网络数据拷贝至linux的sk_buff->data,即上文的addr字段中。
4.如权利要求1所述支持linux的硬件抽象层的虚拟网卡设计方法,其特征在于:所述客户操作系统的网络包发送过程按照如下步骤进行,每个客户操作系统在硬件抽象层对应一个网络发送实时任务,当需要发送网络数据时,将数据映射进HAL端的虚拟网卡中网络数据包链表,封装发送消息,进而将消息传递给实时任务;该任务收到消息后被唤醒并调度执行时,读取数据包链表中的一个元素,根据其中的addr字段将数据拷贝到物理网卡缓冲区,设置相应寄存器后,完成发送任务;接着客户操作系统被通知将该虚拟网卡中网络数据包释放。
5.如权利要求1所述支持linux的硬件抽象层的虚拟网卡设计方法,其特征在于:所述客户操作系统的网络包接收过程按照如下步骤进行,
(1)物理网卡接收到的数据包时,会触发相应中断,调用网络包接收中断服务程序;该服务程序会确定网络包发送的目标客户操作系统,并从该客户操作系统取出一个空的数据包链表元素,如失败,将物理网卡中的数据取出至临时缓冲区,不向客户操作系统传递;否则转入(1);
(2)将物理网卡中的数据取出,存入网络数据链表元素的addr字段所代表的内存处,并向客户操作系统注入网络包接收中断,设置其虚拟中断标志位;
(3)客户操作系统被调度执行时,会处理网络接收虚拟中断;
在该中断的服务程序中,依次处理每个从VMM端发送来的数据包,
并将其传递至更高层次的网络协议栈进行处理。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110175932.6/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种履带式行走装置的润滑链条结构
- 下一篇:多功能画规