一种路由器虚拟驱动模块的动态加载与控制方法

文档序号:7960562阅读:281来源:国知局
专利名称:一种路由器虚拟驱动模块的动态加载与控制方法
技术领域
本发明涉及计算机通信领域中的基于嵌入式实时操作系统的网络路由技术,特别涉及一种多用户条件下分布式高性能路由器虚拟驱动模块的动态加载与控制方法。
背景技术
目前,虽然互联网核心段的传输速率对于支持多媒体业务或者大规模的对称业务等不会产生传输上的瓶颈,而且流媒体等多元化业务即将成为网络的主流业务。但网络接入段设备传输速率慢、接入过程复杂、接入段流速不稳定以及接入段不能为流媒体业务提供恒定的网络带宽,已成为多元化混合业务有效传输与开展的主要问题。
最近在国家宽带信息网(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、一种多用户条件下分布式高性能路由器虚拟驱动模块的动态加载与控制方法,内部通信模块接收来自系统数据维护模块发来的低层硬件的实际状态的指令,调用虚拟驱动模块中的基本设备的ioct操作,对操作系统进行设备操作。
2、调用虚拟驱动模块中的基本设备的ioct操作包括在单内核模块中创建虚拟设备和撤销虚拟设备的操作。
创建设备操作包括1)、ACR系统中的RIU探测到用户请求,则需要从数据平面通过内部通信模块向运行于控制平面的系统数据维护模块通告需要注册设备的消息;2)通过基本设备的ioctl操作,递交给内核模块要注册设备的名称、类型等信息,向操作系统注册相应名称的设备,即虚拟设备;3)、创建对应于该设备的发送队列,用于存储由上层协议栈发送的以skb格式封装的需要下发的协议报文;4)、设备的操作包括ioctl操作、接收操作、发送操作、Down操作和Up等操作;撤销设备操作包括1)、ACR系统中的RIU探测到用户从ACR上撤销,则需要从数据平面通过内部通信模块向运行于控制平面的系统数据维护模块通告需要撤销的消息;2)、系统数据维护模块则向内部通信模块发送相应的指令,在内部通信模块中,通过基本设备的ioctl操作,撤销相应名称的设备并完成对对应设备的发送队列进行清空,同时回收与该设备有关的资源,而且将该设备的节点从设备队列中删除,最后从操作系统中撤销该设备;3、在操作系统对模块进行初始化过程中,首先需要完成基本设备的注册,并定义基本设备的ioct操作。
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节点上的数据长度是否小于或等于申请的内存空间,如果是,则执行步骤B244;如果否,则执行步骤B241,重新申请;C4通过copy_to_user()将相应的报文传递至用户空间;C5从发送队列中删除该skb节点。
C2通过ioctl操作,通过copy_from_user()函数完成内存映射;C3判断相应设备的发送队列中的skb节点上的数据长度是否小于或等于申请的内存空间,如果是,则执行步骤B244;如果否,则执行步骤B241,重新申请;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。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式
及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
权利要求
1.一种多用户条件下分布式高性能路由器虚拟驱动模块的动态加载与控制方法,其特征在于,内部通信模块接收来自系统数据维护模块发来的低层硬件的实际状态的指令,调用虚拟驱动模块中的基本设备的ioct操作,对操作系统进行设备操作。
2.根据权利要求1所述的方法,其特征在于,调用虚拟驱动模块中的基本设备的ioct操作进一步包括在单内核模块中创建虚拟设备和撤销虚拟设备的操作。
3.根据权利要求1所述的方法,其特征在于,在操作系统对模块进行初始化过程中,首先需要完成基本设备的注册,并定义基本设备的ioct操作。
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)、虚拟驱动模块从内部通信模块中接收来自数据平面的协议报文,内部通信模块通过相应虚拟设备的ioct1的接收操作将数据与相应的设备信息封装上交给运行于主处理单元的上层协议栈;2)、上层协议栈向下发送协议报文时,通过该设备的发送操作,封装报文,将报文放入对应于该设备的发送队列的队尾,等待内部通信模块从虚拟驱动模块中以轮询方式从相应的队头取出。
8.根据权利要求7所述的方法,其特征在于,步骤1)包括A1、在内部通信模块向虚拟驱动模块通过相应虚拟设备的ioct1调用传递数据时,在ioct1操作中,通过copy_from_user( )函数完成用户空间数据的虚拟内存向内核虚拟内存的映射;A2、将相应的数据拷贝至内核空间;A3、通过虚拟设备的接收操作将数据与相应的设备信息封装为skb格式;A4、由标准函数netif_rx( )上交给运行于主处理单元的上层协议栈。
9.根据权利要求7所述的方法,其特征在于,步骤2)包括B1、通过dev_start_xmit( )函数下发以skb格式封装的报文;B2、在本发明的虚拟驱动模块中,查找相应的设备名称;B3、搜索设备队列,判断相应的设备名称是否在设备队列中,若在队列中,则执行步骤B4,否则对报文做丢弃处理;B4、将对应的skb报文放入对应设备的发送队列的队尾,等待内部通信模块以轮询的方式将该报文从队头取出。
10.根据权利要求9所述的方法,其特征在于,步骤B4中的轮询方式算法包括C1通过相应设备的ioct1将内存空间指针递入虚拟驱动模块,申请内存空间;C2通过ioct1操作,通过copy_from_user( )函数完成内存映射;C3判断相应设备的发送队列中的skb节点上的数据长度是否小于或等于申请的内存空间,如果是,则执行步骤C4;如果否,则执行步骤C1,重新申请;C4通过copy_to_user( )将相应的报文传递至用户空间;C5从发送队列中删除该skb节点。
全文摘要
本发明公开了一种多用户条件下分布式高性能路由器虚拟驱动模块的动态加载与控制方法。该方法包括由单内核模块实现对多个实际接口数据包收发行为的动态虚拟,则首先需要以驱动的形式完成各个虚拟接口的动态加载或者撤销。同时,需要根据系统数据维护模块下发的指令完成对其状态的控制与更新。另外,本发明还完成了与上层协议软件之间的标准接口以及数据的有效传递,以及与运行于用户空间的内部通信模块之间的协议数据以及状态指令的交互。本发明解决了由于多用户接入造成的用户数量不确定、接口类型多的复杂条件下,由嵌入式操作系统的单内核模块,模拟多个接口的虚拟驱动的动态加载与控制问题。
文档编号H04L29/06GK1881936SQ20061007809
公开日2006年12月20日 申请日期2006年5月9日 优先权日2006年5月9日
发明者陈庶樵, 魏进武, 张兴明, 魏星平, 周丽 申请人:国家数字交换系统工程技术研究中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1