一种卡间通信的方法、通信卡及网络转发设备的制作方法

文档序号:7788018阅读:196来源:国知局
专利名称:一种卡间通信的方法、通信卡及网络转发设备的制作方法
技术领域
本发明涉及移动通信技术领域,尤其涉及一种卡间通信的方法、通信卡及网络转发设备。
背景技术
现有的分布式网络转发设备中,一般的硬件实现都采用三级卡的设计方案(主控、载板和线卡),并且把数据通道和管理通道分开。如图1所示,这种采用三级硬件实现的设计方案,在后续升级背板总线的时候,只需要在主控板和载板做改动,能比较方便的兼容以前旧的线卡。同时把数据通道和管理通道分开,如图1中实线为主控板与多个载板之间的卡间数据通道,点划线为主控板与多个载板之间的管理通道,虚线为备份主控板与多个载板之间的管理通道,这样分开的好处是数据通道和管理通道単独管理,互不影响。该分布式转发设备中,软件的实现同样采用三级启动的设计方案(boot、Ctrl和 mam) 0Boot :做最小系统的初始化,同时支持升级和引导Ctrl。Ctrl 负责交換主控板、载板和线卡之间的版本信息,从主控板上下发版本到载板和线卡,同时支持升级和引导main。Main 完成分布式网络转发设备的所有业务。采用这种三级启动方案有明显的优势,boot负责最小系统的初始化,一旦调试好后就很少去改动。把boot和ctrl分开就是防止在调试ctrl的时候修改的代码造成启动时死机,要把flash重新烧写。Ctrl保证载板和线卡每次启动的main都和主控相同,避免启动后同步完又再重启。采用分层启动的方式,每层的功能明确,出错了可以恢复到上ー层。现有分布式网络转发设备中,存在以下缺点由于分布式网络转发设备,不仅要有很高的转发性能,还要能够提供尽可能多的网络接ロ,就是要求设备的线卡接ロ密度尽可能大。而线卡上的CPU—般只有4个报文接 ロ,如果每张线卡都用ー个接口和载板互连做管理通道,线卡上就只能有3个ロ来做业务, 这样每张线卡的接口数量从4个减少到3个,接ロ密度降低了 25%。要提高分布式网络转发设备的接ロ密度,解决的方案可以把线卡和载板之间的以太ロ释放出来做业务ロ,在载板和线卡之间数据通道和管理通道共享ー个PCIE通道。硬件架构如图2所示,这需要在载板和线卡之间数据通道和管理通道共享ー个PCIE硬件通道。 这个PCIE硬件通道,不仅在main下线卡间传输报文时需要用,在ctrl下同步版本信息和下发main时也要用。但是目前对于ctrl下载板和线卡之间的通信方法,没有好的解决方案,并且,由于ctrl和boot都是烧制在norflash上,这个norflash的存储空间很小,在如此受限的空间内,该硬件通道实现的载板和线卡之间的通信方法不能用大量的代码来实现,因此载板和线卡之间的通信亟需ー种简单的通信方法。

发明内容
本发明实施例提供了一种卡间通信的方法、通信卡及网络转发设备,用以提供一种载板和线卡之间简单易行的通信方法以提高接ロ密度。基于上述问题,本发明实施例提供的一种卡间通信的方法,包括第一通信卡在自身以及第二通信卡都初始化完成后,定时执行下述操作第一通信卡检查自身是否存在需要发送的数据报文,若有,将需要发送的数据报文写入到预先设置的第二通信卡用于接收数据报文的内存地址中,并通告所述第二通信卡已完成数据报文的发送;第一通信卡检查是否存在需要接收的数据报文,若有,从预先设定的自身用于接收数据报文的内存地址中读取需要接收的数据报文,并通告所述第二通信卡已完成数据报文的接收。本发明实施例提供的ー种通信卡,包括检查模块,用于在所属通信卡以及对端通信卡都初始化完成后,定时检查所属通信卡是否存在需要发送的数据报文,以及检查是否存在需要接收的数据报文;数据报文发送模块,用于在所属通信卡存在需要发送的数据报文时,将需要发送的数据报文写入到预先设置的对端通信卡用于接收数据报文的内存地址中,并通告所述对端通信卡已完成数据报文的发送;数据报文接收模块,用于在所属通信卡存在需要接收的数据报文吋,从预先设定的所属通信卡用于接收数据报文的内存地址中读取需要接收的数据报文,并通告所述对端通信卡已完成数据报文的接收。本发明实施例提供的ー种网络转发设备,包括至少两块本发明实施例提供的上述通信卡,所述两块通信卡中ー块为线卡,另一块为载板,两者通过PCIE连接。本发明实施例的有益效果包括本发明实施例提供的卡间通信的方法、通信卡及网络转发设备,进行卡间通信的两个通信卡分别定时执行下述操作检查自身是否存在需要发送的报文,若有,将数据报文写到到对方设置的接收报文的内存地址中,并通告对方已完成数据报文的发送,以及检查自身是否存在需要接收的报文,若有,从自身用于接收报文的内存地址中读取数据报文,并通告对方已完成数据报文的接收,本发明实施例采用定时地将数据报文写入到报文接收端内存的方式完成数据报文的发送和接收,并且在发送和接收完成后,向对方通告,使得卡间通信的两个通信卡之间,可以使用PCIE同时实现数据的传输和管理信息的传递,实现PCIE 卡间通道的复用,这样可释放出以太管理通道作为业务接ロ,相比较现有技术中需要使用专门的业务ロ来传递管理信息的方式,提高了接ロ密度,同时该卡间通信方法简单易行,代码维护容易。


图1为现有技术中的分布式网络转发设备的结构示意图之ー;图2为现有技术中分布式网络转发设备的结构示意图之ニ ;图3为本发明实施例提供的卡间通信的方法的流程图;图4为本发明实施例提供的第一通信卡为载板时的初始化流程图5为本发明实施例提供的第一通信卡为线卡时的初始化流程图;图6为本发明实施例提供的缓存链表结构示意图;图7为本发明实施例提供的缓存链表中数据变化示意图;图8为本发明实施例提供的实例的流程图;图9为本发明实施例提供的通信卡的结构示意图。
具体实施例方式下面结合说明书附图,对本发明实施例提供的一种卡间通信的方法、通信卡及网络转发设备的具体实施方式
进行说明。由于本发明实施例提供的卡间通信的方法中,不论是载板还是线卡,其与通信对端(线卡或载板)进行通信的机制大致相同,为了方便说明通信流程,本发明实施例中,以第一通信卡指代通信本端的通信卡,以第二通信卡指代通信对端的通信卡,当然,第一通信卡可以是载板,相应地,第二通信卡为线卡;或者,第一通信卡还可以是线卡,相应地,第二通信卡为载板。本发明实施例仅为了方便说明,将其区分为第一通信卡和第二通信卡而己。具体来说,本发明实施例提供的一种卡间通信的方法,如图3所示,具体包括以下步骤第一通信卡在自身以及第二通信卡都初始化完成后,定时执行下述操作S301、第一通信卡检查自身是否存在需要发送的数据报文,若有,执行下述步骤 S302,否则,执行下述步骤S304 ;S302、第一通信卡将需要发送的数据报文写入到预先设置的第二通信卡用于接收数据报文的内存地址中;S303、第一通信卡通告所述第二通信卡已完成数据报文的发送;S304、第一通信卡检查是否存在需要接收的数据报文,若有,执行下述步骤S305, 否则,执行下述步骤S307;S305、第一通信卡从预先设定的自身用于接收数据报文的内存地址中读取需要接收的数据报文;S306、第一通信卡通告所述第二通信卡已完成数据报文的接收;S307、结束流程。本发明实施例在具体实施吋,第一通信卡可以定时地调用PCIE驱动按照上述 S301-S307的步骤执行发送和接收数据报文的操作。因此,上述步骤S301-S307的流程是不断循环执行的,PCIE驱动执行报文发送和接收的操作吋,都可使用相同的入ロ。需要说明的是,上述步骤S301-S307即第一通信卡执行发送数据报文和接收数据报文的操作没有严格的先后順序,可以先执行数据报文的发送操作,然后执行数据报文的接收操作,也可以先执行数据报文的接收操作,然后执行数据报文的发送操作。在上述步骤S301-S307之前,是第一通信卡(线卡或载板)初始化的过程。第一通信卡初始化过程如下第一通信卡上电后,将本地用于接收数据报文的内存地址设置为与第二通信卡预先约定的地址(例如使用PCIE_RX_DATA_DATA表示该地址,该地址为PCIE映射空间内的任意内存地址);
向第二通信卡通告自身UP的信息;第一通信卡在自身以及第二通信卡都UP之后,向第二通信卡通告自身已准备好接收数据报文。较佳地,第一通信卡在上电之后,还包括初始化下述变量的值的操作rem0te_rX_StatUS,其值用于表征通信对端接收本端发送过去的数据报文的状态;rem0te_tX_StatUS,其值用于表征通信对端完成的数据报文发送的状态;l0Cal_rX_finiSh_flag,其值用于表征本端已处理完成对端发送的数据报文的状态;l0Cal_tX_finiSh_flag,其值用于表征本端已经完成数据报文的发送的状态;REM0TE_RX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成读取本端发送的数据报文的状态;REM0TE_TX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成数据报文发送的状态;初始化上述变量后,remote_rx_status 的值、remote_tx_status 的值、REM0TE_ RX_ADDR 记录的值以及 REM0TE_TX_ADDR 记录的值相等,local_rx_f inish_f lag 和 local_ tx_finish_flag 的值相等;且 remote_rx_status (remote_tx_status 的值、REM0TE_RX_ ADDR 的值以及 REM0TE_TX_ADDR 记录的值)与 local_rx_finish_flag(local_tx_finish_ flag)的值不等。由于线卡的供电是由载板控制,因此载板的初始化过程需要早于线卡,两者UP的时间稍有不同。对于载板而言,需要上电并初始化上述变量之后,向线卡通告自身UP,并等待线卡 UP,自身和线卡都UP之后,才会向线卡通告自身已准备好接收数据报文,整个初始化过程才算完成。对于线卡而言,载板给线卡供电后,线卡也同样初始化上述变量,状态变为UP后, 将自身已UP的信息通告给载板,判断自己和载板都UP后,向对方通告自身已准备好接收数据报文,整个初始化过程才算完成。较佳地,线卡UP之后,向载板的设定的内存地址(例如用PCIE_UP_ADDR表示该地址,实际为载板的某个内存地址)写入ー个特定的值(例如0xDEAD12344321BEEF)以表征线卡已UP。相应地,载板可以通过检查线卡是否在载板设定的内存地址PCIE_UP_ADDR中写入表征线卡UP的值,来确定线卡是否UP。较佳地,第一通信卡(线卡或载板)可以通过下述方式向第二通信卡通告自身已准备好接收数据报文第一通信卡(线卡或载板)向第二通信卡(载板或线卡)中的REM0TE_RX_ADDR 的内存地址写入第一通信卡自身l0Cal_rX_finiSh_flag的值,以通告自身已准备好接收数据报文。图4所示的是本发明实施例提供的第一通信卡为载板时的初始化流程,图5所示的是第一通信卡为线卡时的初始化流程。进ー步地,上述图3中的步骤S301中第一通信卡检查自身是否存在需要发送的数据报文之前,还可以执行下述步骤第一通信卡检查自身remote_rx_status与REM0TE_RX_ADDR的值是否相等;若不相等,则确认对端已准备好接收数据报文,并进而执行上述检查是否存在需要发送的数据报文的步骤(S301);若相等,则可能是由于对端未初始化好或者上次发送过去的数据报文未被读走, 此时第一通信卡转向执行检查是否存在需要接收的数据报文的步骤(S304)。如果通信对端未初始化好,或者上次发送过去的数据报文未被读走,而调用通信卡PCIE驱动的上层模块就会被阻塞在这里。为了避免出现上层模块阻塞的情況,本发明实施例中,较佳地,可以采用数据链表结构的方式来缓存上层模块将要发送的数据报文,上层模块有数据报文要发送的时候,先把其要发送的数据报文缓存到该链表,PCIE驱动会定时地去扫描缓存链表,当发现链表内有数据报文就将其发送出去,缓存链表结构如图6。从图6可以看出,该缓存链表存储数据报文的数量的上限为256个,缓存链表中的 head.tail和cnt是三个整型变量,head和tail用来分別表示缓存有数据报文的链表头和尾,cnt用来表示挂在该链表上的报文个数,pointer则是指针变量,用来指向缓存在该链表里的各个数据报文。该缓存链表刚初始化吋,head、tail和cnt值都为0,pointer指针都为空,用NULL表示。该缓存链表服从先进先出的原则,当有数据报文存储进来吋,将其挂在缓存链表的尾部,即挂在序号为tail的指针上。PCIE驱动要发送报文的时候,则从序号为head的指针上取出数据报文发送出去。以图7说明发送和缓存ー个数据报文后该缓存链表内对应数据的变化。如7所示,现在缓存链表里面有3个报文,挂在序号为1-3的指针上。发送数据报文吋,PCIE驱动循环地扫描缓存链表,发现cnt的值大于0,则表明缓存链表内有需要发送的数据报文。然后先读取缓存链表中head变量的值,得知本次发送要从序号为1的指针上取报文,取走报文并发送后,把head变量加1,其值为下一次发送取报文的指针序号2,同时也把cnt的值减1变为2,表示已经从该链表内取走ー个报文。缓存数据报文吋,也就是当上层模块有报文要发送吋,也是先判断cnt的值,如果 cnt值等于256,则表明该缓存链表已经满,丢弃该数据报文。否则把报文挂在序号为tail 的指针上,然后tail和cnt变量都加1,值分别为5和4,至此完成一个数据报文的缓存。缓存链表是ー个环形结构,head和tail毎次加1后都要与上255,保证他们的值大小在0-255之间。上述步骤S302中,第一通信卡发送数据报文的方式,可以采用现有的直接存储器访问(Direct Memory Access, DMA)技术,即不依赖与CPU,将需要发送的数据报文直接写入到预先设置的第二通信卡用于接收数据报文的内存地址(PCIE_RX_DATA_DATA)中。在第一通信卡将需要发送的数据报文写入到预先设置的第二通信卡用于接收数据报文的内存地址中之后,还可以执行下述步骤更新 local_tx_finish_flag 的值;那么上述S303中,第一通信卡通告所述第二通信卡已完成数据报文的发送,可以通过下述方式实现第一通信卡将更新后的l0Cal_tX_finiSh_flag的值写入到第二通信卡中的REMOTE TX ADDR的内存地址中。
上述步骤S304中,第一通信卡通过下述方式检查是否存在需要接收的数据报文检查自身remote_tx_status 和 REM0TE_TX_ADDR 的值是否相等;若不相等,则确定存在需要接收的数据报文;若相等,则确定不存在需要接收的数据报文。在上述步骤S305第一通信卡从预先设定的自身用于接收数据报文的内存地址中读取需要接收的数据报文之后,还包括更新loCal_rX_finiSh_flag的值;这样,上述步骤S306中,第一通信卡向第二通信卡通告已完成数据报文的接收, 通过下述方式实现第一通信卡将更新后的l0Cal_rX_finiSh_flag的值写入到第二通信卡中的REM0TE_RX_ADDR的内存地址中。为了更好地说明本发明实施例提供的上述卡间通信的方法,下面ー个具体的实例说明。在本实例中,载板和线卡初始化过程中,均按照下述方式在本地初始化各种參数以及配置通信过程中需要的内存地址设置用以记录对方UP的内存地址PCIE_ADDR。该地址为PCIE映射空间内任意的内存地址,用来接收表示对端已经UP的信息,在本实例中其实际地址为0X9A00。如线卡已经准备好,就往载板的PCIE_UP_ADDR地址写入ー个特殊的值,载板检测到该值后就知道线卡已经准备好。同样载板准备好后也会向线卡的该地址写入同样的值表明自己已经准备好。该特殊值例如为OxDEADU34432IBEEF。ΤχΜ. remote_rx_status = 1 ;remote_tx_status = 1 ;local_rx_finish_flag = 0x0101 ;local_tx_finish_flag = 0x0101 ;REM0TE_RX_ADDR = 1 ;REM0TE_TX_ADDR = 1。REM0TE_RX_ADDR是ー个PCIE映射空间内任意的内存地址,本实例中其实际地址为 0x9800。REM0TE_TX_ADDR也是ー个在PCIE映射空间内任意的内存地址,在本实例中其实际地址为0x9810。同时还设置了用于接收对端发送过来的数据报文的地址PCIE_RX_DATA_ADDR,在本实例中,其实际地址为0x9000。除此之外,还设置了一个常量PCIE_FINISH_MASK,该常量用来在发送数据报文以及接收数据报文之后參与更新local_rx_finish_flag和local_tx_finish_flag的值,在本实例中其值为0x1010。本实例中,载板和线卡上都设置有一个定时器,载板和线卡的PCIE驱动收发报文是根据定时器来触发的,定时地调用PCIE驱动发送和接收数据报文。定时器ー触发,先检查缓存链表里面是否有报文要发送并且可以发送。完成发送后再检查是否有新的报文发送过来,有则读取报文提交给上层模块,并且通告对端报文已经取走,通信过程对载板和线卡来说,流程都是ー样的。以载板为例,具体流程图详见图8 1、定时器触发流程开始;
2、载板判断内存地址REM0TE_RX_ADDR和变量remote_rx_status的值是否不相等,若是,执行步骤3,若否,执行步骤8 ;3、载板判断链表中的cnt是否大于0,若是,执行下述步骤4,否则,执行步骤8 ;4、载板把内存地址REM0TE_RX_ADDR记录的值赋给变量remote_rx_status,其值由1变为0x0101 ;5、载板将要发送的数据报文写到线卡接收数据报文的内存地址PCIE_RX_DATA_ ADDR,完成数据报文的发送;6、载板把变量local_tx_finish_flag和PCIE_FINISH_MASK进行异或计算后再赋给 local_tx_finish_flag,此时变量 local_tx_finish_flag 的值由 0x0101 变为 Oxllll ;7、载板把local_tx_finish_flag的值写到线卡的内存地址REM0TE_TX_ADDR,向线卡通告数据报文已发送完成;8、载板判断内存地址1 ]\ 7^^^_六001 记录的值和变量仪111(^631_8{3如8的值是否不相等,若相等,转向步骤1 ;若不相等,执行步骤9 ;9、载板把内存地址REM0TE_TX_ADDR记录的值赋给变量remote_tx_status,此时变量 remote_tx_status 的值由 0x0101 变为 Oxllll ;10、载板把内存地址PCIE_RX_DATA_ADDR中的数据取走交给上层模块,完成数据报文的接收;11、载板把变量 local_rx_finish_flag 和 PCIE_FINISH_MASK 进行异或计算后, 再赋给 local_rx_finish_flag,此时变量 local_rx_finish_flag 的值由 0x0101 变为 Oxllll ;12、载板把local_rx_f inish_f lag的值写到线卡的内存地址REM0TE_RX_ADDR中, 向线卡通告已完成数据报文的接收,然后转向步骤1。上述流程会定时地不断循环执行。基于同一发明构思,本发明实施例还提供了一种通信卡及网络转发设备,由于这些装置和设备所解决问题的原理与前述卡间通信的方法相似,因此该装置和设备的实施可以参见前述方法的实施,重复之处不再赘述。本发明实施例提供的一种通信卡,如图9所示,包括检查模块901,用于在所属通信卡以及对端通信卡都初始化完成后,定时检查所属通信卡是否存在需要发送的数据报文,以及检查是否存在需要接收的数据报文;数据报文发送模块902,用于在所属通信卡存在需要发送的数据报文时,将需要发送的数据报文写入到预先设置的对端通信卡用于接收数据报文的内存地址中,并通告所述对端通信卡已完成数据报文的发送;数据报文接收模块903,用于在所属通信卡存在需要接收的数据报文时,从预先设定的所属通信卡用于接收数据报文的内存地址中读取需要接收的数据报文,并通告所述对端通信卡已完成数据报文的接收。进一步地,本发明实施例提供的通信卡,还可以包括初始化模块904,用于在上电后,将所属通信卡本地用于接收数据报文的内存地址设置为与对端通信卡预先约定的地址;向对端通信卡通告所属通信卡UP的信息;在所属通信卡以及对端通信卡都UP之后,向对端通信卡通告所属通信卡已准备好接收数据报文。
进一步地,上述初始化模块904,具体用于向对端通信卡中预先设定的内存地址中写入表征所属通信卡UP的值;以及通过检查对端通信卡是否在所属通信卡设定的内存地址中写入表征对端通信卡UP的值,来确定对端通信卡是否UP。进一步地,上述初始化模块904,还用于在上电之后,向对端通信卡通告所属通信卡UP的信息之前,初始化下述变量的值rem0te_rX_StatUS,其值用于表征通信对端接收本端发送过去的数据报文的状态;rem0te_tX_StatUS,其值用于表征通信对端完成的数据报文发送的状态;l0Cal_rX_finiSh_flag,其值用于表征本端已处理完成对端发送的数据报文的状态;l0Cal_tX_finiSh_flag,其值用于表征本端已经完成数据报文的发送的状态;REM0TE_RX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成读取本端发送的数据报文的状态;REM0TE_TX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成数据报文发送的状态;上述 remote_rx_status 的值、remote_tx_status 的值、REM0TE_RX_ADDR 记录的值以及 REM0TE_TX_ADDR 记录的值相等,local_rx_f inish_f lag 和 local_tx_f inish_f lag 的值相等;且 remote_rx_status 与 local_rx_f inish_f lag 的值不等。进一步地,上述初始化模块904,具体用于向对端通信卡中的REM0TE_RX_ADDR的内存地址写入所属通信卡的l0Cal_rX_finiSh_flag的值,以通告所属通信卡已准备好接收数据报文。进一步地,上述检查模块901,具体用于检查所属通信卡的rem0te_rX_StatuS与 REM0TE_RX_ADDR的值是否相等;若不相等,则确认对端通信卡已准备好接收数据报文,并转向检查是否存在需要发送的数据报文的步骤;若相等,则转向检查是否存在需要接收的数据报文的步骤。进一步地,上述数据报文发送模块902,还用于在将需要发送的数据报文写入到预先设置的对端通信卡用于接收数据报文的内存地址中之后,更新l0Cal_tX_finiSh_flag 的值;以及将更新后的loCal_tX_finiSh_flag的值写入到对端通信卡中的REM0TE_TX_ ADDR的内存地址中,以向对端通信卡通告已完成数据报文的发送。进一步地,上述检查模块901,具体用于检查所属通信卡rem0te_tX_StatuS和 REM0TE_TX_ADDR的值是否相等;若不相等,确定存在需要接收的数据报文;若相等,确定不存在需要接收的数据报文。进一步地,上述数据报文接收模块903,还用于在读取需要接收的数据报文之后, 更新local_rx_finish_flag的值;以及将更新后的local_rx_finish_flag的值写入到对端通信卡中的REM0TE_RX_ADDR的内存地址中,以向对端通信卡通告已完成数据报文的接收。进一步地,上述数据报文发送模块902,具体用于检测用于缓存列表中的报文个数是否大于零;所述缓存列表用于缓存上层模块需要发送的数据报文;当报文个数大于零时,确定存在需要发送的数据报文;当报文个数等于零时,确定不存在需要发送的数据报文。本发明实施例提供的上述通信卡可以为线卡或为载板。本发明实施例提供的一种网络转发设备,包括至少两块本发明实施例提供的上述通信卡,上述两块通信卡中一块为线卡,另一块为载板,两者通过PCIE连接。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明实施例可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是⑶-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。本发明实施例提供的卡间通信的方法、通信卡及网络转发设备,进行卡间通信的两个通信卡分别定时执行下述操作检查自身是否存在需要发送的报文,若有,将数据报文写到到对方设置的接收报文的内存地址中,并通告对方已完成数据报文的发送,以及检查自身是否存在需要接收的报文,若有,从自身用于接收报文的内存地址中读取数据报文,并通告对方已完成数据报文的接收,本发明实施例采用定时地将数据报文写入到报文接收端内存的方式完成数据报文的发送和接收,并且在发送和接收完成后,向对方通告,使得卡间通信的两个通信卡之间,可以使用PCIE同时实现数据的传输和管理信息的传递,实现PCIE 卡间通道的复用,这样可释放出以太管理通道作为业务接口,相比较现有技术中需要使用专门的业务口来传递管理信息的方式,提高了接口密度,同时该卡间通信方法简单易行,代码维护容易。进一步地,本发明实施例提供的卡间通信的方法、通信卡及网络转发设备,进行卡间通信的两块通信卡均定义一组变量和内存地址,在进行卡间通信时,双方通过读取这些变量的值,可以确定对端是否已经完成数据的发送、接收,以及确定数据报文的写入位置, 这样,就进一步地简化了卡间通信的机制,提高了卡间通信的效率,并且,本领域技术人员可以容易地想见,如果定义多组变量和内存地址,就可以实现一个通信卡与多个通信卡之间的通信,对于分布式转发设备中载板和多个线卡之间通信提供了有效和简易的通信机制。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种卡间通信的方法,其特征在干,包括第一通信卡在自身以及第二通信卡都初始化完成后,定时执行下述操作 第一通信卡检查自身是否存在需要发送的数据报文,若有,将需要发送的数据报文写入到预先设置的第二通信卡用于接收数据报文的内存地址中,并通告所述第二通信卡已完成数据报文的发送;第一通信卡检查是否存在需要接收的数据报文,若有,从预先设定的自身用于接收数据报文的内存地址中读取需要接收的数据报文,并通告所述第二通信卡已完成数据报文的接收。
2.如权利要求1所述的方法,其特征在干,第一通信卡的初始化过程,包括第一通信卡上电后,将本地用于接收数据报文的内存地址设置为与第二通信卡预先约定的地址;向第二通信卡通告自身UP的信息;在自身以及第二通信卡都UP之后,第一通信卡向第二通信卡通告自身已准备好接收数据报文。
3.如权利要求2所述的方法,其特征在干,所述向第二通信卡通告自身UP的信息,包括第一通信卡向所述第二通信卡中预先设定的内存地址中写入表征自身UP的值; 第一通信卡通过下述方式获知第二通信卡UP 第一通信卡通过检查第二通信卡是否在自身设定的内存地址中写入表征第二通信卡 UP的值,来确定所述第二通信卡是否UP。
4.如权利要求2所述的方法,其特征在干,所述第一通信卡在上电之后,还包括 第一通信卡初始化下述变量的值rem0te_rx_StatUS,其值用于表征通信对端接收本端发送过去的数据报文的状态; rem0te_tX_StatUS,其值用于表征通信对端完成的数据报文发送的状态; l0Cal_rx_finiSh_flag,其值用于表征本端已处理完成对端发送的数据报文的状态; l0Cal_tX_finiSh_flag,其值用于表征本端已经完成数据报文的发送的状态; REM0TE_RX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成读取本端发送的数据报文的状态;REM0TE_TX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成数据报文发送的状态;上述 remote_rx_status 的值、remote_tx_status 的值、REM0TE_RX_ADDR 记录的值以及 REM0TE_TX_ADDR 记录的值相等,local_rx_f inish_f lag 和 local_tx_f inish_f lag 的值相等;且 remote_rx_status 与 local_rx_finish_flag 的值不等。
5.如权利要求4所述的方法,其特征在干,向第二通信卡通告自身已准备好接收数据报文,具体包括第一通信卡向第二通信卡中的REM0TE_RX_ADDR的内存地址写入第一通信卡自身 local_rx_finish_flag的值,以通告自身已准备好接收数据报文。
6.如权利要求4所述的方法,其特征在干,第一通信卡检查自身是否存在需要发送的数据报文之前,还包括第一通信卡检查目身remote_rx_status与REM0TE_RX_ADDR的值是否相等; 若不相等,则确认对端已准备好接收数据报文,并转向检查是否存在需要发送的数据报文的步骤;若相等,则转向检查是否存在需要接收的数据报文的步骤。
7.如权利要求4所述的方法,其特征在干,第一通信卡需要发送的数据报文写入到预先设置的第二通信卡用于接收数据报文的内存地址中之后,还包括更新 local_tx_finish_flag 的值;第一通信卡通告所述第二通信卡已完成数据报文的发送,包括 第一通信卡将更新后的loCal_tX_finiSh_flag的值写入到第二通信卡中的REM0TE_ TX_ADDR的内存地址中。
8.如权利要求4所述的方法,其特征在干,第一通信卡检查是否存在需要接收的数据报文,包括第一通信卡检查自身remote_tx_status和REM0TE_TX_ADDR的值是否相等; 若不相等,确定存在需要接收的数据报文; 若相等,确定不存在需要接收的数据报文。
9.如权利要求4所述的方法,其特征在干,第一通信卡读取需要接收的数据报文之后, 还包括更新 local_rx_finish_flag 的值;第一通信卡通告所述第二通信卡已完成数据报文的接收,包括 第一通信卡将更新后的loCal_rX_finiSh_flag的值写入到第二通信卡中的REM0TE_ RX_ADDR的内存地址中。
10.权利要求1-9任一项所述的方法,其特征在干,所述第一通信卡为载板,所述第二通信卡为线卡;或者所述第一通信卡为线卡,所述第二通信卡为载板。
11.ー种通信卡,其特征在干,包括检查模块,用于在所属通信卡以及对端通信卡都初始化完成后,定时检查所属通信卡是否存在需要发送的数据报文,以及检查是否存在需要接收的数据报文;数据报文发送模块,用于在所属通信卡存在需要发送的数据报文时,将需要发送的数据报文写入到预先设置的对端通信卡用于接收数据报文的内存地址中,并通告所述对端通信卡已完成数据报文的发送;数据报文接收模块,用于在所属通信卡存在需要接收的数据报文吋,从预先设定的所属通信卡用于接收数据报文的内存地址中读取需要接收的数据报文,并通告所述对端通信卡已完成数据报文的接收。
12.如权利要求11所述的通信卡,其特征在于,还包括初始化模块,用于在上电后,将所属通信卡本地用于接收数据报文的内存地址设置为与对端通信卡预先约定的地址;向对端通信卡通告所属通信卡UP的信息;在所属通信卡以及对端通信卡都UP之后,向对端通信卡通告所属通信卡已准备好接收数据报文。
13.如权利要求12所述的通信卡,其特征在干,所述初始化模块,具体用于向对端通信卡中预先设定的内存地址中写入表征所属通信卡UP的值;以及通过检查对端通信卡是否在所属通信卡设定的内存地址中写入表征对端通信卡UP的值,来确定所述对端通信卡是否UP。
14.如权利要求12所述的通信卡,其特征在干,所述初始化模块,还用于在上电之后, 向对端通信卡通告所属通信卡UP的信息之前,初始化下述变量的值rem0te_rx_StatUS,其值用于表征通信对端接收本端发送过去的数据报文的状态; remote_tx status,其值用于表征通信对端完成的数据报文发送的状态; l0Cal_rx_finiSh_flag,其值用于表征本端已处理完成对端发送的数据报文的状态; l0Cal_tX_finiSh_flag,其值用于表征本端已经完成数据报文的发送的状态; REM0TE_RX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成读取本端发送的数据报文的状态;REM0TE_TX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成数据报文发送的状态;上述 remote_rx_status 的值、remote_tx_status 的值、REM0TE_RX_ADDR 记录的值以及 REM0TE_TX_ADDR 记录的值相等,local_rx_f inish_f lag 和 local_tx_f inish_f lag 的值相等;且 remote_rx_status 与 local_rx_f inish_f lag 的值不^#。
15.如权利要求14所述的通信卡,其特征在干,所述初始化模块,具体用于向对端通信卡中的REM0TE_RX_ADDR的内存地址写入所属通信卡的local_rx_finish_flag的值,以通告所属通信卡已准备好接收数据报文。
16.如权利要求14所述的通信卡,其特征在干,所述检查模块,用于检查所属通信卡的 remote_rx_status与REM0TE_RX_ADDR的值是否相等;若不相等,则确认对端通信卡已准备好接收数据报文,并转向检查是否存在需要发送的数据报文的步骤;若相等,则转向检查是否存在需要接收的数据报文的步骤。
17.如权利要求14所述的通信卡,其特征在干,所述数据报文发送模块,还用于在将需要发送的数据报文写入到预先设置的对端通信卡用于接收数据报文的内存地址中之后,更新l0Cal_tX_finiSh_flag的值;以及将更新后的loCal_tX_finiSh_flag的值写入到对端通信卡中的REM0TE_TX_ADDR的内存地址中,以向所述对端通信卡通告已完成数据报文的发达。
18.如权利要求14所述的通信卡,其特征在干,所述检查模块,具体用于检查所属通信卡rem0te_tX_StatuS和REM0TE_TX_ADDR的值是否相等;若不相等,确定存在需要接收的数据报文;若相等,确定不存在需要接收的数据报文。
19.如权利要求14所述的通信卡,其特征在干,所述数据报文接收模块,还用于在读取需要接收的数据报文之后,更新l0Cal_rX_finiSh_flag的值;以及将更新后的loCal_rx_ finish_flag的值写入到对端通信卡中的REM0TE_RX_ADDR的内存地址中,以向对端通信卡通告已完成数据报文的接收。
20.如权利要求11-19任一项所述的通信卡,其特征在干,所述通信卡为线卡或为载板。
21.—种网络转发设备,其特征在干,包括至少两块如权利要求11-20任一项所述的通信卡,所述两块通信卡中ー块为线卡,另一块为载板,两者通过PCIE连接。
全文摘要
本发明提供了一种卡间通信的方法、通信卡及网络转发设备,其中方法包括第一通信卡在自身以及第二通信卡都初始化完成后,定时执行下述操作第一通信卡检查自身是否存在需要发送的数据报文,若有,将需要发送的数据报文写入到预先设置的第二通信卡用于接收数据报文的内存地址中,并通告所述第二通信卡已完成数据报文的发送;第一通信卡检查是否存在需要接收的数据报文,若有,从预先设定的自身用于接收数据报文的内存地址中读取需要接收的数据报文,并通告所述第二通信卡已完成数据报文的接收。本发明提供了一种简单易行的卡间通信方法,复用已有的PCIE卡间通信通道,释放以太管理通道出来做业务接口,提高了网络转发设备的接口密度。
文档编号H04L12/56GK102546400SQ20111043025
公开日2012年7月4日 申请日期2011年12月20日 优先权日2011年12月20日
发明者杨振华 申请人:福建星网锐捷网络有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1