CN100464535C - 一种路由器虚拟驱动模块的动态加载与控制方法 - Google Patents
一种路由器虚拟驱动模块的动态加载与控制方法 Download PDFInfo
- Publication number
- CN100464535C CN100464535C CNB2006100780920A CN200610078092A CN100464535C CN 100464535 C CN100464535 C CN 100464535C CN B2006100780920 A CNB2006100780920 A CN B2006100780920A CN 200610078092 A CN200610078092 A CN 200610078092A CN 100464535 C CN100464535 C CN 100464535C
- Authority
- CN
- China
- Prior art keywords
- virtual
- virtual unit
- module
- unit
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种多用户条件下分布式高性能路由器虚拟驱动模块的动态加载与控制方法。该方法包括:由单内核模块实现对多个实际接口数据包收发行为的动态虚拟,则首先需要以驱动的形式完成各个虚拟接口的动态加载或者撤销。同时,需要根据系统数据维护模块下发的指令完成对其状态的控制与更新。另外,本发明还完成了与上层协议软件之间的标准接口以及数据的有效传递,以及与运行于用户空间的内部通信模块之间的协议数据以及状态指令的交互。本发明解决了由于多用户接入造成的用户数量不确定、接口类型多的复杂条件下,由嵌入式操作系统的单内核模块,模拟多个接口的虚拟驱动的动态加载与控制问题。
Description
技术领域
本发明涉及计算机通信领域中的基于嵌入式实时操作系统的网络路由技术,特别涉及一种多用户条件下分布式高性能路由器虚拟驱动模块的动态加载与控制方法。
背景技术
目前,虽然互联网核心段的传输速率对于支持多媒体业务或者大规模的对称业务等不会产生传输上的瓶颈,而且流媒体等多元化业务即将成为网络的主流业务。但网络接入段设备传输速率慢、接入过程复杂、接入段流速不稳定以及接入段不能为流媒体业务提供恒定的网络带宽,已成为多元化混合业务有效传输与开展的主要问题。
最近在国家宽带信息网(3Tnet)示范工程中,采用了具有大规模接入汇聚功能的路由器(Access Convergence Router,ACR)实现网络的一体化接入,该设备的优点在于在确保用户端到端带宽的情况下,方便对接入段设备实施管理,而且便于引入新的业务以及新的运营策略。利用ACR实现网络业务的接入如图1所示,其中ACR设备由接入汇聚路由器主交换机(Access ConvergenceRouter Switcher,ACR-S)、以太类合分路器(Ethernet MultiplexerDemultiplexer,EMD)以及远端接口单元(Remote Interface Unit,RIU)组成。虽然在接入段,各种业务仍然采用IP数据包的封装格式,但是在RIU以及EMD上,并不对数据进行交换,而是由ACR-S完成数据的三层交换,然后直接进入骨干网进行传输。由于核心网的传输速率已经足够高,故在核心网段,并不需要对流媒体业务保持恒定的资源占用,而是继续采用高带宽的突发式传输方式;在接入段的下行过程中,业务经过高速率的链路向低速率的链路传递,而且在整个接入段不进行三层交换,只是经过EMD以及RIU进行分路处理,易于实现接入段对媒体业务提供固定的链路资源。
ACR-S作为ACR的核心交换主机,不但要完成接入段的业务接入,也要实现对EMD,RIU的中心化管理与配置,同时需要完成城域网上的数据交换,因此ACR-S是能够实现远端控制与配置的高性能路由器。
由于高性能路由器一般采用分布式结构,因此必须解决在主处理器上准确、快速感知并有效控制整个路由器对外接口单元状态的问题,包括:
1、接入ACR系统中的用户数量不确定。嵌入式操作系统对驱动通常的加载方式是将一个驱动程序作为一个整体模块,在需要的时候加入内核工作。由于不确定数量的用户在接入时,使得某一时刻内核中注册的接口单元数量与状态都是不确定的,如果实施尽可能多的一次性加载,会造成内核过大,系统资源冗余开销巨大,极大影响了系统的性能。因此使用单一内核,实现对未知数量的真实用户接口对数据包的收发行为的虚拟。
2、嵌入式操作系统中,驱动程序是以内核模块(Module)的形式运行在内核空间的,在该系统中,需要注册多个接口的虚拟驱动在操作系统中,模拟事实上的用户接口对数据包的收发行为,屏蔽底层硬件细节,为上层协议栈提供标准的驱动程序接口。
发明内容
本发明要解决的技术问题是在多用户接入的条件下,由嵌入式操作系统的单内核模块,基于ACR系统的实际需要,提供一种模拟多个接口的虚拟驱动的动态加载与控制方法。完成对数据平面实际多接口收发数据包的收发行为的模拟,并且直接为运行于主处理单元的上层协议栈或者路由协议提供统一的标准接口,使上层协议软件的移植和功能扩展时不考虑底层硬件实现的技术细节。同时,本发明能够为整个系统提供并行的研发与调试提供基础,缩短系统调试周期和产品的研发周期。
为了解决以上的实际需要,本发明的主要内容可以从两个方面予以说明,一是单模块下多接口虚拟的控制方法与配置方法,称之为本发明的控制部分;二是各个接口对数据包的收发,称之为本发明的数据交换部分。控制部分主要包括了单内核模块根据系统工作的系统数据维护模块的状态指示,对于多虚拟接口的动态注册、撤销以及状态配置与管理方法,同时由于上层协议栈在下发协议包的同时,需要为各个虚拟设备提供相应的发送队列的管理机制。数据交换部分主要是包括了完成虚拟驱动与本系统中的内部通信模块之间的数据交换,与上层协议栈之间的数据交换,同时需要接收系统数据维护模块发送的控制指令并且完成相应的控制操作。
具体地,本发明控制部分的主要内容有:
1、一种多用户条件下分布式高性能路由器虚拟驱动模块的动态加载与控制方法,内部通信模块接收来自系统数据维护模块发来的低层硬件的实际状态的指令,调用虚拟驱动模块中的基本设备的ioctl操作,对操作系统进行虚拟设备操作。
2、调用虚拟驱动模块中的基本设备的ioctl操作包括:在单内核模块中创建虚拟设备和撤销虚拟设备的操作。
创建虚拟设备操作包括:
1)、ACR系统中的RIU探测到用户请求,则需要从数据平面通过内部通信模块向运行于控制平面的系统数据维护模块通告需要注册虚拟设备的消息;
2)通过基本设备的ioctl操作,递交给内核模块要注册虚拟设备的名称、类型等信息,向操作系统注册相应名称的虚拟设备,即虚拟设备;
3)、创建对应于该虚拟设备的发送队列,用于存储由上层协议栈发送的以skb格式封装的需要下发的协议报文;
4)、虚拟设备的操作包括:ioctl操作、接收操作、发送操作、Down操作和Up等操作;
撤销虚拟设备操作包括:
1)、ACR系统中的RIU探测到用户从ACR上撤销,则需要从数据平面通过内部通信模块向运行于控制平面的系统数据维护模块通告需要撤销的消息;
2)、系统数据维护模块则向内部通信模块发送相应的指令,在内部通信模块中,通过基本设备的ioctl操作,撤销相应名称的虚拟设备并完成对对应虚拟设备的发送队列进行清空,同时回收与该虚拟设备有关的资源,而且将该虚拟设备的节点从虚拟设备队列中删除,最后从操作系统中撤销该虚拟设备;
3、在操作系统对模块进行初始化过程中,首先需要完成基本设备的注册,并定义基本设备的ioctl操作。
4、本发明的控制部分的异常处理机制,即在出现异常时,需要对各种队列进行清空处理,关闭相应的套接字(Socket)描述符以及从操作系统内核中撤销相应的虚拟设备。
5、本发明的数据交换部分的主要内容包括:
1)、虚拟驱动模块从内部通信模块中接收来自数据平面的协议报文,内部通信模块通过相应虚拟设备的ioctl的接收操作将数据与相应的虚拟设备信息封装上交给运行于主处理单元的上层协议栈。
A1、在内部通信模块向虚拟驱动模块通过相应虚拟设备的ioctl调用传递数据时,在ioctl操作中,通过copy_from_user( )函数完成用户空间数据的虚拟内存向内核虚拟内存的映射;
A2、将相应的数据拷贝至内核空间;
A3、通过虚拟设备的接收操作将数据与相应的虚拟设备信息封装为skb格式;
A4、由标准函数netif_rx( )上交给运行于主处理单元的上层协议栈。
2)、上层协议栈向下发送协议报文时,通过该虚拟设备的发送操作,封装报文,将报文放入对应于该虚拟设备的发送队列的队尾,等待内部通信模块从虚拟驱动模块中以轮询方式从队头取出。
B1、通过dev_start_xmit( )函数下发以skb格式封装的报文;
B2、在本发明的虚拟驱动模块中,查找相应的虚拟设备名称;
B3、搜索虚拟设备队列,判断相应的虚拟设备名称是否在虚拟设备队列中,若在队列中,则执行步骤B4,否则对报文做丢弃处理;
B4、将对应的skb报文放入对应虚拟设备的发送队列的队尾,等待内部通信模块以轮询的方式将该报文取出。
轮询方式算法包括:
C1:通过相应虚拟设备的ioctl将内存空间指针递入虚拟驱动模块,申请内存空间;
C2:通过ioctl操作,通过copy_from_user( )函数完成内存映射;
C3:判断相应虚拟设备的发送队列中的skb节点上的数据长度是否小于或等于申请的内存空间,如果是,则执行步骤C2;如果否,则执行步骤C1,重新申请;
C4:通过copy_to_user( )将相应的报文传递至用户空间;
C5:从发送队列中删除该skb节点。
与现有技术相比,本发明具有以下优点:
在多用户接入的条件下,基于嵌入式操作系统的单内核模块,根据ACR系统的实际需要,在主处理器中,实现了能够模拟多个接口的虚拟驱动的动态加载与状态控制。完成对数据平面实际多接口收发数据包的收发行为的模拟,并且直接为运行于主处理单元的上层协议栈或者路由协议提供统一的标准接口,使上层协议软件的移植和功能扩展时不考虑底层硬件实现的技术细节。同时,本发明能够为整个系统提供并行的研发与调试提供基础,缩短系统调试周期和产品的研发周期。
附图说明
图1是ACR实现网络业务的接入的示意图。
图2是本发明方法在整个ACR系统中的应用环境。
图3是多个虚拟接口在嵌入式操作系统中的注册与撤销的方法示意图。
图4是本发明方法的结构示意图。
图5是本发明的虚拟设备队列与发送队列结构示意图。
图6是本发明需要完成的外部接口示意图。
图7是本发明中的虚拟驱动向内部通信模块的数据传递算法流程。
具体实施方式
本发明所提供的一种多用户条件下分布式高性能路由器虚拟驱动模块的动态加载与控制的方法,为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图,对本发明进一步详细说明。
首先,对本发明的系统环境和方法进行总体描述:
如图2图和图3所示,ACR系统的应用环境中,主要包括ACR-S主处理单元和ACR-S从处理单元,在它们之间的是ACR-S内部通信模块。对照图3,其中的数据平面的实际硬件接口与图2中的ACR-S从处理单元相对应,虚拟驱动模块处于ACR-S主处理单元。系统数据模块与内部通信模块传递下发命令包括:注册、撤销虚拟设备;UP、DOWN接口。数据平面的实际硬件接口向内部通信模块上报状态。内部通信模块与虚拟驱动模块之间通过基本设备的ioctl和虚拟设备的ioctl进行操作。在虚拟驱动模块中完成,注册新虚拟设备、撤销虚拟设备、UP接口和DOWN操作。
本发明涉及到在多用户接入条件下,需要在ACR-S的主处理器上完成对通过远端接口单元RIU接入的多个用户接口进行模拟,该模拟是基于嵌入式实时操作系统,以驱动程序的形式实现。由于用户接入的数量未知,而且各个实际接口的状态也会不断发生变化。因此,本发明需要完成由单内核模块实现对多个实际接口数据包收发行为的动态虚拟,那么首先需要以驱动的形式完成各个虚拟接口的动态加载或者撤销,同时,需要根据系统数据维护模块下发的指令完成对其状态的控制与更新。
因此,在实施过程中,可以从结构上将本发明分为两个部分来实施,一是需要完成控制部分,二是需要完成数据传递功能的数据交换部分。
本发明所提供的方法包括:
一、本发明控制部分的实施
如图3所示,内部通信模块和系统数据维护模块位于用户空间,虚拟驱动模块位于内核空间;同时内部通信模块、系统数据维护模块、虚拟驱动模块位于控制平面,数据平面的实际硬件接口位于数据平面。
具体步骤包括:
步骤1:如图4所示,在ACR路由器启动时,就在操作系统中加载该内核模块,而且完成该内核模块的初始化。在初始化过程中,完成整个基本设备向操作系统注册,而且初始化一个双向链表来链接各个虚拟设备的虚拟设备队列。
基本设备只包括一个操作,即基本设备的ioctl操作,而且该基本设备始终处于Down状态。其中基本设备的ioctl操作主要是根据由内部通信模块通过该基本设备的ioctl调用,将要向虚拟设备注册的虚拟设备名递交内核模块。在该操作中向操作系统注册相应名称的虚拟设备,即虚拟设备,如图4所示。根据接入用户的接口类型,初始状态等完成初始化,并且将该虚拟设备加入该内核模块的如图5所示的虚拟设备队列中。
步骤2:如图4所示,当内部通信模块接收到来自系统数据维护模块关于数据平面上低层硬件的实际状态的指令时,根据低层硬件的实际状态,内部通信模块调用基本设备的ioctl操作完成创建虚拟设备指令或撤销虚拟设备指令,如果是创建虚拟设备指令进入步骤3;如果是撤销虚拟设备指令,则进入步骤4;如果是修改状态指令,则进入步骤5;否则进入步骤6执行异常处理。
步骤3:执行创建虚拟设备指令。如图4所示,根据整个ACR的运行机制,RIU如果探测到有用户接入时,通过内部通信模块向位于主处理器的控制平面报告,由控制平面的系统数据维护模块通过内部通信模块向位于内核空间的虚拟驱动模块向操作系统进行虚拟设备注册,内部通信模块接收到来自系统数据维护模块关于数据平面上低层硬件的实际状态的指令,调用基本设备的ioctl操作,根据虚拟设备名称完成各个虚拟设备的注册任务,同时完成虚拟设备的初始化任务,虚拟驱动模块完成具有相应名称的虚拟设备的注册以后,转到步骤8结束操作
其中每注册一个虚拟设备时,同时定义该接口的打开、关闭、ioctl操作等,并且初始化对应该虚拟设备的发送队列。在每一个虚拟设备注册时,主要完成虚拟设备的初始化,在虚拟设备的初始化中,需要创建对应于该虚拟设备的如图5所示的发送队列,用于存储由上层协议栈发送的以skb格式封装的需要下发的协议报文。虚拟设备的主要操作包括ioctl操作、接收操作、发送操作、Down操作以及Up操作等。其中:
ioctl操作主要完成向运行于用户空间的内部通信模块数据报文的交换,状态变化指示以及配置(如Down,Up,IP地址等等),这部分的主要内容由本发明的数据交换部分来完成。
接收操作主要将从内部通信模块中接收的来自于数据平面的协议报文,并封装成协议栈需要的skb格式后,通过标准接口netif_rx( )函数交上层协议栈。
发送操作主要是接收上层以标准接口dev_start_xmit( )函数下发的以skb格式封装的协议报文,并根据虚拟设备名称在虚拟设备队列中查找相应的虚拟设备,并且将每下发的skb报文加入对应虚拟设备的发送队列的尾部。
Down操作以及Up操作主要是根据虚拟设备物理接口上报给主处理器上的系统数据维护模块的状态指令,系统数据维护模块以消息队列的方式告知内部通信模块,并且由内部通信模块通过相应虚拟设备的ioctl操作来修改虚拟接口的状态,使其与实际的物理虚拟设备接口的状态保持一致。
步骤4:执行虚拟设备的撤销指令。从主控制平面内的操作系统中撤销一个虚拟设备的过程。该过程可以简要描述如下:一旦ACR系统中的RIU探测到用户从ACR上撤销,则需要从数据平面通过内部通信模块向运行于控制平面的系统数据维护模块通告需要撤销的消息。系统数据维护模块则向内部通信模块发送相应的指令,在内部通信模块中,通过基本设备的ioctl操作,撤销相应名称的虚拟设备,在对应于该命令的ioctl操作,需要完成对对应虚拟设备的发送队列进行清空,同时回收与该虚拟设备有关的资源,而且将该虚拟设备的节点从虚拟设备队列中删除,最后从操作系统中撤销该虚拟设备。
步骤5:执行虚拟设备的状态控制与更新指令。如图3所示,根据系统数据维护模块下达的相应的实际低层硬件的状态指令,由内部通信模块通过相应虚拟设备的ioctl的UP和DOWN操作向虚拟驱动内核模块发送相应虚拟设备名称状态修改指令,在内核模块中完成相应虚拟设备的状态修改,保持虚拟设备的状态与位于数据平面上的实际物理虚拟设备接口的状态一致,完成后转到步骤8结束操作。
步骤6:如图4所示,本发明提供了控制部分的异常处理机制,即在出现异常时,删除模块需要对各种队列进行清空处理,关闭相应的套接字(Socket)描述符以及从操作系统内核中撤销相应的虚拟设备。
步骤7:结束操作。
其中在步骤4和步骤5中对虚拟设备队列和发送队列的操作,如图5所示,有新虚拟设备加入队列,则将其链入队列尾部,建立相关队列头,可以正常加入skb,删除skb。在虚拟设备队列头部可以完成三种操作:增加新虚拟设备、给虚拟设备添加skb、删除虚拟设备中skb数据;如果有发送给虚拟设备0的skb,则加入链表尾部、如果收到删除虚拟设备1中的skb,则完成删除工作。
二、本发明数据交换部分的实施:
如图6所示,内部通信模块位于用户空间,虚拟驱动模块和协议栈位于内核空间中。
本部分完成两个外部接口主要有:一个是虚拟驱动模块与内部通信模块的接口,该接口主要完成操作系统用户空间与内核空间之间的协议数据报文的交换。另一个是虚拟驱动模块与运行于内核空间的上层协议栈,该接口主要完成协议数据报文的封装与分解。然后完成数据的顺利传递。
如图6所示,具体步骤包括:
步骤8:如果是上传的协议报文则执行步骤9,如果是向下发送的协议报文执行步骤10。
步骤9:虚拟驱动模块从内部通信模块中接收来自数据平面的协议报文。内部通信模块通过相应虚拟设备的ioctl系统调用,将协议报文的所在的用户空间的虚拟内存地址指针以及数据报文的长度等信息递交虚拟驱动模块的ioctl操作。在虚拟驱动的ioctl操作中,通过copy_from_user( )函数完成用户空间数据的虚拟内存向内核虚拟内存的映射,并且将相应长度的数据拷贝至内核空间。通过虚拟设备的接收操作将数据与相应的虚拟设备信息封装为skb格式,由标准函数netif_rx( )上交给运行于主处理单元的上层协议栈。
步骤10:当上层协议栈向下发送协议报文时,通过该虚拟设备的发送操作,利用标准接口函数dev_start_xmit( )函数下发以skb格式封装的报文。在该虚拟设备的发送操作中,从虚拟设备队列中查找相应的虚拟设备名称,将对应的skb报文放入对应于该虚拟设备的发送队列的队尾,等待内部通信模块从虚拟驱动模块中取出,并交ACR数据平面处理。虚拟驱动模块向运行于用户空间的内部通信模块递交协议报文的流程如图7所示,内部通信模块按照虚拟设备队列进行轮询,通过相应虚拟设备的ioctl操作,将足够大的内存空间指针递入虚拟驱动模块,通过copy_from_user( )函数完成内存映射,并判断相应虚拟设备的发送队列中的skb节点上的数据长度是否小于该内存空间,若满足,则通过copy_to_user( )将相应的报文传递至用户空间。否则,通知用户空间,申请相应大小的虚拟内存空间,重新读取相应的数据,完成后,从发送队列中删除该skb节点。
步骤11:在虚拟驱动模块中的虚拟设备队列中,查找相应的虚拟设备名称,将对应的skb报文放入对应虚拟设备的发送队列的队尾,等待内部通信模块以轮询的方式将该报文取出。若不能查到相对应的虚拟设备,则丢弃该报文。
其中步骤11中的内部通信模块与虚拟驱动模块的轮询方式的数据传递算法,如图7所示,具体包括步骤:
步骤701~702:从数组头节点读取数组节点。
步骤703:判断数组轮询是否完毕,如果完毕则返回步骤701重新读取数组节点;如果完毕则进入下一步。
步骤704:判断读到的头节点是否有效,如果无效则返回步骤702重新读取;如果有效则进入下一步。
步骤705:从取到的数据中取得接口的名称。
步骤706:申请存放数据的空间。
步骤707:填写ifreq->name为接口名称,data域为包含申请空间及长度和flag的结构指针。
步骤708:执行ioctl调用。
步骤709:判断Flag的值的真假。为真则执行步骤710;为假则进入步711。
步骤710:调整缓冲区长度,并返回步骤708
步骤711:判断Len值是否为零,如果为零则返回步骤702;不为零则进入下一步。
步骤712:根据接口名称填写内部通信模块头。
步骤713:发送数据至单板,并返回步骤706。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (9)
1.一种多用户条件下分布式高性能路由器虚拟驱动模块的动态加载与控制方法,其特征在于,包括控制部分和数据交换部分,控制部分包括:内部通信模块接收来自系统数据维护模块发来的低层硬件的实际状态的指令,调用虚拟驱动模块中的基本设备的ioct1操作,对操作系统进行虚拟设备操作;
数据交换部分包括:
1)、虚拟驱动模块从内部通信模块中接收来自数据平面的协议报文,内部通信模块通过相应虚拟设备的ioct1的接收操作,将数据与相应的虚拟设备信息封装上交给运行于主处理单元的上层协议栈;
2)、上层协议栈向下发送协议报文时,通过所述虚拟设备的发送操作,封装报文,将报文放入对应于该虚拟设备的发送队列的队尾,等待内部通信模块从虚拟驱动模块中以轮询方式从相应的队头取出。
2.根据权利要求1所述的方法,其特征在于,调用虚拟驱动模块中的基本设备的ioct1操作进一步包括:在单内核模块中创建虚拟设备、虚拟设备状态更新、虚拟设备异常处理和撤销虚拟设备的操作。
3.根据权利要求1所述的方法,其特征在于,在操作系统对模块进行初始化过程中,首先需要完成基本设备的注册,并定义基本设备的ioct1操作。
4.根据权利要求2所述的方法,其特征在于,创建虚拟设备操作进一步包括:
1)、ACR(大规模接入汇聚路由器)系统中的RIU(远端用户单元)探测到用户请求,则需要从数据平面通过内部通信模块向运行于控制平面的系统数据维护模块通告需要注册虚拟设备的消息;
2)通过基本设备的ioct1操作,递交给内核模块要注册虚拟设备的名称、类型等信息,向操作系统注册相应名称的虚拟设备,即虚拟设备;
3)、创建对应于该虚拟设备的发送队列,用于存储由上层协议栈发送的以skb格式封装的需要下发的协议报文;
4)、虚拟设备的操作包括:ioct1操作、接收操作、发送操作、Down操作和Up操作;
5.根据权利要求2所述的方法,其特征在于,撤销虚拟设备操作进一步包括:
1)、ACR系统中的RIU探测到用户从ACR上撤销,则需要从数据平面通过内部通信模块向运行于控制平面的系统数据维护模块通告需要撤销的消息;
2)、系统数据维护模块则向内部通信模块发送相应的指令,在内部通信模块中,通过基本设备的ioct1操作,撤销相应名称的虚拟设备并完成对对应虚拟设备的发送队列进行清空,同时回收与该虚拟设备有关的资源,而且将该虚拟设备的节点从虚拟设备队列中删除,最后从操作系统中撤销该虚拟设备;
6.根据权利要求1所述的方法,其特征在于,还包括:控制部分的异常处理机制,即在出现异常时,需要对各种队列进行清空处理,关闭相应的套接字Socket描述符以及从操作系统内核中撤销相应的虚拟设备。
7.根据权利要求1所述的方法,其特征在于,步骤1)包括:
A1、在内部通信模块向虚拟驱动模块通过相应虚拟设备的ioct1调用传递数据时,在ioct1操作中,通过copy_from_user()函数完成用户空间数据的虚拟内存向内核虚拟内存的映射;
A2、将相应的数据拷贝至内核空间;
A3、通过虚拟设备的接收操作将数据与相应的虚拟设备信息封装为skb格式;
A4、由标准函数netif_rx()上交给运行于主处理单元的上层协议栈。
8.根据权利要求1所述的方法,其特征在于,步骤2)包括:
B1、通过dev_start_xmit()函数下发以skb格式封装的报文;
B2、在本发明的虚拟驱动模块中,查找相应的虚拟设备名称;
B3、搜索虚拟设备队列,判断相应的虚拟设备名称是否在虚拟设备队列中,若在队列中,则执行步骤B4,否则对报文做丢弃处理;
B4、将对应的skb报文放入对应虚拟设备的发送队列的队尾,等待内部通信模块以轮询的方式将该报文从队头取出。
9.根据权利要求8所述的方法,其特征在于,步骤B4中的轮询方式算法包括:
C1:通过相应虚拟设备的ioct1将内存空间指针递入虚拟驱动模块,申请内存空间;
C2:通过ioct1操作,通过copy_from_user()函数完成内存映射;
C3:判断相应虚拟设备的发送队列中的skb节点上的数据长度是否小于或等于申请的内存空间,如果是,则执行步骤C4;如果否,则执行步骤C1,重新申请;
C4:通过copy_to_user()将相应的报文传递至用户空间;
C5:从发送队列中删除该skb节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100780920A CN100464535C (zh) | 2006-05-09 | 2006-05-09 | 一种路由器虚拟驱动模块的动态加载与控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100780920A CN100464535C (zh) | 2006-05-09 | 2006-05-09 | 一种路由器虚拟驱动模块的动态加载与控制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1881936A CN1881936A (zh) | 2006-12-20 |
CN100464535C true CN100464535C (zh) | 2009-02-25 |
Family
ID=37519917
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100780920A Expired - Fee Related CN100464535C (zh) | 2006-05-09 | 2006-05-09 | 一种路由器虚拟驱动模块的动态加载与控制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100464535C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102231709A (zh) * | 2011-07-04 | 2011-11-02 | 清华大学 | 虚拟路由装置的控制平面结构及其控制方法 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102546347B (zh) * | 2010-12-17 | 2016-03-30 | 中兴通讯股份有限公司 | 基于proc技术的虚拟串口热插拔的实现方法及系统 |
CN102830983A (zh) * | 2011-06-14 | 2012-12-19 | 上海未来宽带技术及应用工程研究中心有限公司 | 一种可动态加载不同终端交换芯片驱动的方法 |
KR20140054425A (ko) * | 2011-09-30 | 2014-05-08 | 후아웨이 테크놀러지 컴퍼니 리미티드 | 네트워크 발호 방법 및 장치 |
CN102497434B (zh) * | 2011-12-16 | 2014-11-05 | 中国科学院计算技术研究所 | 内核态虚拟网络设备的建立方法、及其包发送和接收方法 |
CN104461716B (zh) * | 2014-12-29 | 2018-06-15 | 迈普通信技术股份有限公司 | 一种多核异构系统的访问方法及多核异构系统 |
CN107329892B (zh) * | 2017-06-07 | 2020-09-11 | 珠海市杰理科技股份有限公司 | 驱动测试方法、装置、存储介质及其计算机设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1540524A (zh) * | 2003-10-31 | 2004-10-27 | 清华大学 | 存储区域网络中分布式虚拟化存储的方法 |
CN1601512A (zh) * | 2003-09-25 | 2005-03-30 | 国际商业机器公司 | 使用多个处理器的虚拟设备的系统和方法 |
CN1645342A (zh) * | 2005-01-21 | 2005-07-27 | 清华大学 | San环境中基于网络的海量存储资源管理方法 |
-
2006
- 2006-05-09 CN CNB2006100780920A patent/CN100464535C/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1601512A (zh) * | 2003-09-25 | 2005-03-30 | 国际商业机器公司 | 使用多个处理器的虚拟设备的系统和方法 |
CN1540524A (zh) * | 2003-10-31 | 2004-10-27 | 清华大学 | 存储区域网络中分布式虚拟化存储的方法 |
CN1645342A (zh) * | 2005-01-21 | 2005-07-27 | 清华大学 | San环境中基于网络的海量存储资源管理方法 |
Non-Patent Citations (2)
Title |
---|
基于ACR的硬件抽象层结构及关键技术研究. 姜艳红,魏进武,陈庶樵,兰巨龙.电子技术应用,第2005卷第11期. 2005 |
基于ACR的硬件抽象层结构及关键技术研究. 姜艳红,魏进武,陈庶樵,兰巨龙.电子技术应用,第2005卷第11期. 2005 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102231709A (zh) * | 2011-07-04 | 2011-11-02 | 清华大学 | 虚拟路由装置的控制平面结构及其控制方法 |
CN102231709B (zh) * | 2011-07-04 | 2013-07-10 | 清华大学 | 虚拟路由装置的控制平面结构及其控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN1881936A (zh) | 2006-12-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100464535C (zh) | 一种路由器虚拟驱动模块的动态加载与控制方法 | |
CN105282135B (zh) | 采用软件定义联网中的虚拟机和虚拟化容器实现本地服务链接的方法和装置 | |
CN111542064B (zh) | 一种用于无线接入网的容器编排管理系统及编排方法 | |
CN104243265B (zh) | 一种基于虚拟机迁移的网关控制方法、装置及系统 | |
CN101849230B (zh) | 在多主机环境中共享遗留设备 | |
CN102334112B (zh) | 用于虚拟机网络的方法和系统 | |
KR100241218B1 (ko) | 통신 시스템내에서 상대적으로 대규모인 데이터 객체의 전송을 제어하기 위한 시스템 및 그 방법 | |
JP3033935B2 (ja) | アダプタ・ハードウェアへのインターフェース方法 | |
CN101957808B (zh) | 多cpu间的通信方法、系统及cpu | |
CN104965700B (zh) | VxWorks操作系统下实现驱动SPI设备的方法和系统 | |
CN106534178B (zh) | RapidIO网络通用套接字的实现系统及方法 | |
CN101430652A (zh) | 片内网络以及片内网络软件流水线操作方法 | |
CN109587281A (zh) | 容器配置方法和计算节点 | |
CN101645813A (zh) | 分布式半实物网络仿真系统及其半实物接口控制方法 | |
CN103346981A (zh) | 虚拟交换方法、相关装置和计算机系统 | |
CN102082692A (zh) | 基于网络数据流向的虚拟机迁移方法、设备和集群系统 | |
US11281506B2 (en) | Virtualised gateways | |
CN101630343B (zh) | 仿真方法及系统 | |
WO2023115852A1 (zh) | 基于pcie的通信方法、装置、计算机设备和可读存储介质 | |
CN108228309A (zh) | 基于虚拟机的数据包发送和接收方法及装置 | |
CN105095150A (zh) | 一种支持片上网络的网络接口 | |
CN1987798A (zh) | 数据平面与控制平面之间的通讯方法 | |
CN114124740A (zh) | 一种vnf实例化的方法和装置 | |
Medvidovic et al. | A family of software architecture implementation frameworks | |
CN112867998B (zh) | 运算加速器、交换器、任务调度方法及处理系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090225 Termination date: 20160509 |
|
CF01 | Termination of patent right due to non-payment of annual fee |