支持linux 的硬件抽象层的虚拟网卡设计方法技术

技术编号:7249201 阅读:279 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种支持linux的硬件抽象层的虚拟网卡设计方法,所述设计方法包括虚拟网卡中网络数据包的组织、虚拟网卡中网络数据包的存储管理、客户操作系统的网络包发送过程和客户操作系统的网络包接收过程。本发明专利技术通过虚拟网卡设备,多个客户操作系统能够同时进行网络操作。另外,硬件抽象层的分层设计减少了网卡设备驱动移植的工作量。设计了支持linux的硬件抽象层的虚拟网络设备,抽象化网络包数据组织结构,并通过消息和中断注入机制实现虚拟网卡中网络数据包的发送和接收。

【技术实现步骤摘要】

本专利技术属于嵌入式系统设计领域,具体涉及支持Iinux的硬件抽象层中虚拟网卡设备的设计方法。
技术介绍
硬件抽象层(简称HAL)旨在对驱动框架分层,将设备无关部分和设备相关部分分开。以网络设备为例,通过设计一个公共的、抽象的虚拟网络设备,将原先具体设备的驱动分成两层。虚拟设备之上(即客户操作系统,简称Guest OS)属于设备无关部分,而虚拟设备与具体设备之间(即虚拟机监控器,简称VMM)则属于设备相关部分。设备无关部分在各个网络设备之间是通用的,且可以被复用。当为新的网络设备设计驱动时,只需改写设备相关部分,即重写虚拟网络设备与物理网络设备之间的映射。本专利技术将虚拟网络设备与具体设备之间的映射放在VMM中实现,而不是在Linux 中,这样使得linux (Guest OS)屏蔽具体的硬件细节,硬件细节全部在VMM得到处理,而 Iinux作为Guest 0S,只操作虚拟的设备。通过硬件抽象层中对虚拟网卡的设计,可以将一个物理网卡映射为多个虚拟网卡,从而使得多个Guest OS可以在桥接的情况下,各使用一个虚拟网卡,同时连接网络,接收及发送网络包。其具体结构框架见图1,图中的Guest OS代表Linux操作系统。现有的流行虚拟化方案有VMware和Xen,他们均针对网络设备进行了虚拟化。前者主要应用于全虚拟化方案,即运行不经修改的Guest 0S,对原网络设备驱动可不加修改的应用于虚拟机环境中;后者采用分离驱动模型,即多个客户操作系中一个作为domain 0,具有较高优先级,并直接复用已有网络驱动使用网络设备,其余客户操作系统通过向 domain 0申请网络服务来上网。但他们均应用于PC、服务器领域,而本专利主要应用于嵌入式领域,并同前者相比具有较低的性能损耗、易于移植的特点。
技术实现思路
本专利技术的目的在于提供一种支持Iinux的硬件抽象层的虚拟网卡设计方法。通过虚拟网卡设备,多个客户操作系统能够同时进行网络操作。另外,硬件抽象层的分层设计减少了网卡设备驱动移植的工作量。为了达到上述目的,本专利技术采用以下技术方案予以实现通过将虚拟网卡中网络数据包抽象为特定的数据结构,并以链表的方式组织,然后通过消息和中断注入机制分别实现网络包的发送和接收过程(见图2)。(1)虚拟网卡中网络数据包的组织每个虚拟网卡中网络数据包在硬件抽象层端被抽象为一个结构体,其所包含的 Ien字段和addr字段分别代表数据包的长度及其在内存中的地址。由该结构体相连接的链表表示由网络设备发送或接收的一系列数据包。当数据包在HAL层中传递时,仅需传送其 addr字段,并据此实现数据在客户操作系统与硬件缓冲区之间的拷贝。图3显示虚拟网络设备的数据包组织形式,其中两个环形链表分别代表暂存发送和接收的虚拟网卡中网络数据包结构体,实线和虚线分别代表发送和接收网络包的过程。(2)虚拟网卡中网络数据包的存储管理虚拟网卡中网络数据包在客户操作系统(Iinux)中以结构体sk_buff表示,其网络数据位于sk_buff_ > data所指向的内存地址中。对于客户操作系统中的每个sk_buff, 都由HAL端虚拟网卡中网络数据包链表的一个元素的索引。虚拟网卡中网络数据包(sk_ buff)在客户操作系统中创建和释放,对应HAL端虚拟网卡中网络数据包链表元素的增加和删除。通过该方式,HAL端不进行虚拟网卡中网络数据包空间的分配与释放,相应的工作由客户操作系统完成。当需要发送网络包时,只需要把sk_buff- > data (即上文的addr字段)传递给HAL,并由后者将该指针指向的内存空间拷贝至硬件缓冲区中,完成发送操作, 接着由客户操作系统将网络包(sk_buff)的空间释放。当接收网络包时,客户操作系统创建预先分配固定大小负载空间的sk_buff,并由HAL将接收到的网络数据拷贝至该负载空间中(sk_buff_ > data,即上文的addr字段)。该过程参考图5。(3)客户操作系统的网络包发送过程每个客户操作系统在硬件抽象层中对应一个网络发送实时任务。当需要发送网络数据时,将数据映射进HAL端的虚拟网卡中网络数据包链表,封装发送消息内容,进而将消息传递给实时任务。该任务收到消息后被唤醒并调度执行,读取数据包链表中的一个元素, 根据其中的addr字段将数据拷贝到物理网卡缓冲区,设置相应寄存器后,完成发送任务。 客户操作系统接着被通知释放该虚拟网卡中网络数据包空间。(3)客户操作系统的网络包接收过程a)物理网卡接收到数据包时,会触发相应中断,调用网络包接收中断服务程序。该服务程序首先验证网络包是否有效,如有效则从客户操作系统内核取出一个空的数据包链表元素。如链表元素取出过程失败,则将物理网卡中的数据取出,存入临时缓冲区,不向客户操作系统传递。否则转入b)。b)将物理网卡中的数据取出,存入网络数据链表元素的addr字段所代表的内存处,并向客户操作系统注入网络包接收中断,即设置其虚拟中断标志为1。接着转到C)。c)客户操作系统被调度执行时,首先处理已触发的虚拟中断。在调用相应的网络虚拟中断服务程序时,会通过网络接收数据包链表依次处理每个从VMM端发送来的数据包,将其传递到更高层的网络协议栈进行处理。每个包(即链表中的每个元素)处理完成后,均需要为该元素分配一段新的负载空间。本专利技术设计了支持Iinux的硬件抽象层的虚拟网络设备,抽象化网络包数据组织结构,并通过消息和中断注入机制实现虚拟网卡中网络数据包的发送和接收。附图说明图1为两个Guest OS通过硬件抽象层中的虚拟网络设备桥接方式上网;图2为网络包的发送和接收过程示意图;图3为抽象后的虚拟网卡中网络数据包的组织形式示意图;图4为虚拟网卡中网络数据包链表在初始化时的组织形式;图5虚拟网卡中网络数据包链表在发送和接收包时的组织形式;图6为虚拟网络设备驱动层次模型示意图。 具体实施例方式下面结合附图对本专利技术做进一步详细描述参见图1-6,网络设备虚拟化技术主要体现在数据包的组织、发送、接收过程。(1)虚拟网卡中网络数据包的组织客户操作系统利用虚拟网络设备进行网络数据的接收和发送是通过虚拟网卡中网络数据包链表实现的,该链表中的每个元素描述一个数据包,元素的Ien字段和addr字段分别代表数据包的长度和其在内存中的地址。该数据包的数据存放客户操作系统内核中,当数据包进行转移时,一般仅传递其addr字段。在客户操作系统间虚拟网卡中网络数据包发送和接收时,需要相应的系统间虚拟网卡中网络数据包链表数据结构,若一个客户操作系统需要向另一个发送数据包时,需要将数据包的内存地址和长度字段写入链表中的空白元素。另一个客户操作系统从该链表中取出一个元素,读出其数据包地址,并据此拷贝至该客户操作系统内核中。(2)虚拟网卡中网络数据包的存储管理考虑到网络包数据量大,网络传输频繁,需要减少不必要的内存拷贝。虚拟网卡中网络数据包在客户操作系统(Iinux)中创建和存储,以结构体sk_buff表示,其网络数据位于Sk_buff->data所指向的内存地址中(该地址同样位于客户操作系统)。当需要发送网络包时,只需要把sk_buff- > data(即上文的addr字段)传递给HAL,并由后者将该指针指向的内存本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:梅魁志冯升李国辉李铁强李博良
申请(专利权)人:西安交通大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术