CN102546400A - 一种卡间通信的方法、通信卡及网络转发设备 - Google Patents
一种卡间通信的方法、通信卡及网络转发设备 Download PDFInfo
- Publication number
- CN102546400A CN102546400A CN2011104302524A CN201110430252A CN102546400A CN 102546400 A CN102546400 A CN 102546400A CN 2011104302524 A CN2011104302524 A CN 2011104302524A CN 201110430252 A CN201110430252 A CN 201110430252A CN 102546400 A CN102546400 A CN 102546400A
- Authority
- CN
- China
- Prior art keywords
- communication card
- data message
- value
- remote
- local
- 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.)
- Pending
Links
Images
Landscapes
- Small-Scale Networks (AREA)
Abstract
本发明提供了一种卡间通信的方法、通信卡及网络转发设备,其中方法包括:第一通信卡在自身以及第二通信卡都初始化完成后,定时执行下述操作:第一通信卡检查自身是否存在需要发送的数据报文,若有,将需要发送的数据报文写入到预先设置的第二通信卡用于接收数据报文的内存地址中,并通告所述第二通信卡已完成数据报文的发送;第一通信卡检查是否存在需要接收的数据报文,若有,从预先设定的自身用于接收数据报文的内存地址中读取需要接收的数据报文,并通告所述第二通信卡已完成数据报文的接收。本发明提供了一种简单易行的卡间通信方法,复用已有的PCIE卡间通信通道,释放以太管理通道出来做业务接口,提高了网络转发设备的接口密度。
Description
技术领域
本发明涉及移动通信技术领域,尤其涉及一种卡间通信的方法、通信卡及网络转发设备。
背景技术
现有的分布式网络转发设备中,一般的硬件实现都采用三级卡的设计方案(主控、载板和线卡),并且把数据通道和管理通道分开。
如图1所示,这种采用三级硬件实现的设计方案,在后续升级背板总线的时候,只需要在主控板和载板做改动,能比较方便的兼容以前旧的线卡。同时把数据通道和管理通道分开,如图1中实线为主控板与多个载板之间的卡间数据通道,点划线为主控板与多个载板之间的管理通道,虚线为备份主控板与多个载板之间的管理通道,这样分开的好处是数据通道和管理通道单独管理,互不影响。
该分布式转发设备中,软件的实现同样采用三级启动的设计方案(boot、ctrl和main)。
Boot:做最小系统的初始化,同时支持升级和引导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之后,向第二通信卡通告自身已准备好接收数据报文。
较佳地,第一通信卡在上电之后,还包括初始化下述变量的值的操作:
remote_rx_status,其值用于表征通信对端接收本端发送过去的数据报文的状态;
remote_tx_status,其值用于表征通信对端完成的数据报文发送的状态;
local_rx_finish_flag,其值用于表征本端已处理完成对端发送的数据报文的状态;
local_tx_finish_flag,其值用于表征本端已经完成数据报文的发送的状态;
REMOTE_RX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成读取本端发送的数据报文的状态;
REMOTE_TX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成数据报文发送的状态;
初始化上述变量后,remote_rx_status的值、remote_tx_status的值、REMOTE_RX_ADDR记录的值以及REMOTE_TX_ADDR记录的值相等,local_rx_finish_flag和local_tx_finish_flag的值相等;且remote_rx_status(remote_tx_status的值、REMOTE_RX_ADDR的值以及REMOTE_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。
较佳地,第一通信卡(线卡或载板)可以通过下述方式向第二通信卡通告自身已准备好接收数据报文:
第一通信卡(线卡或载板)向第二通信卡(载板或线卡)中的REMOTE_RX_ADDR的内存地址写入第一通信卡自身local_rx_finish_flag的值,以通告自身已准备好接收数据报文。
图4所示的是本发明实施例提供的第一通信卡为载板时的初始化流程,图5所示的是第一通信卡为线卡时的初始化流程。
进一步地,上述图3中的步骤S301中第一通信卡检查自身是否存在需要发送的数据报文之前,还可以执行下述步骤:
第一通信卡检查自身remote_rx_status与REMOTE_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中,第一通信卡通告所述第二通信卡已完成数据报文的发送,可以通过下述方式实现:第一通信卡将更新后的local_tx_finish_flag的值写入到第二通信卡中的REMOTE_TX_ADDR的内存地址中。
上述步骤S304中,第一通信卡通过下述方式检查是否存在需要接收的数据报文:
检查自身remote_tx_status和REMOTE_TX_ADDR的值是否相等;
若不相等,则确定存在需要接收的数据报文;
若相等,则确定不存在需要接收的数据报文。
在上述步骤S305第一通信卡从预先设定的自身用于接收数据报文的内存地址中读取需要接收的数据报文之后,还包括:更新local_rx_finish_flag的值;
这样,上述步骤S306中,第一通信卡向第二通信卡通告已完成数据报文的接收,通过下述方式实现:第一通信卡将更新后的local_rx_finish_flag的值写入到第二通信卡中的REMOTE_RX_ADDR的内存地址中。
为了更好地说明本发明实施例提供的上述卡间通信的方法,下面一个具体的实例说明。
在本实例中,载板和线卡初始化过程中,均按照下述方式在本地初始化各种参数以及配置通信过程中需要的内存地址:
设置用以记录对方UP的内存地址PCIE_ADDR。该地址为PCIE映射空间内任意的内存地址,用来接收表示对端已经UP的信息,在本实例中其实际地址为0x9A00。如线卡已经准备好,就往载板的PCIE_UP_ADDR地址写入一个特殊的值,载板检测到该值后就知道线卡已经准备好。同样载板准备好后也会向线卡的该地址写入同样的值表明自己已经准备好。该特殊值例如为0xDEAD12344321BEEF。
设置remote_rx_status=1;
remote_tx_status=1;
local_rx_finish_flag=0x0101;
local_tx_finish_flag=0x0101;
REMOTE_RX_ADDR=1;
REMOTE_TX_ADDR=1。
REMOTE_RX_ADDR是一个PCIE映射空间内任意的内存地址,本实例中其实际地址为0x9800。
REMOTE_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、载板判断内存地址REMOTE_RX_ADDR和变量remote_rx_status的值是否不相等,若是,执行步骤3,若否,执行步骤8;
3、载板判断链表中的cnt是否大于0,若是,执行下述步骤4,否则,执行步骤8;
4、载板把内存地址REMOTE_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变为0x1111;
7、载板把local_tx_finish_flag的值写到线卡的内存地址REMOTE_TX_ADDR,向线卡通告数据报文已发送完成;
8、载板判断内存地址REMOTE_TX_ADDR记录的值和变量remote_tx_status的值是否不相等,若相等,转向步骤1;若不相等,执行步骤9;
9、载板把内存地址REMOTE_TX_ADDR记录的值赋给变量remote_tx_status,此时变量remote_tx_status的值由0x0101变为0x1111;
10、载板把内存地址PCIE_RX_DATA_ADDR中的数据取走交给上层模块,完成数据报文的接收;
11、载板把变量local_rx_finish_flag和PCIE_FINISH_MASK进行异或计算后,再赋给local_rx_finish_flag,此时变量local_rx_finish_flag的值由0x0101变为0x1111;
12、载板把local_rx_finish_flag的值写到线卡的内存地址REMOTE_RX_ADDR中,向线卡通告已完成数据报文的接收,然后转向步骤1。
上述流程会定时地不断循环执行。
基于同一发明构思,本发明实施例还提供了一种通信卡及网络转发设备,由于这些装置和设备所解决问题的原理与前述卡间通信的方法相似,因此该装置和设备的实施可以参见前述方法的实施,重复之处不再赘述。
本发明实施例提供的一种通信卡,如图9所示,包括:
检查模块901,用于在所属通信卡以及对端通信卡都初始化完成后,定时检查所属通信卡是否存在需要发送的数据报文,以及检查是否存在需要接收的数据报文;
数据报文发送模块902,用于在所属通信卡存在需要发送的数据报文时,将需要发送的数据报文写入到预先设置的对端通信卡用于接收数据报文的内存地址中,并通告所述对端通信卡已完成数据报文的发送;
数据报文接收模块903,用于在所属通信卡存在需要接收的数据报文时,从预先设定的所属通信卡用于接收数据报文的内存地址中读取需要接收的数据报文,并通告所述对端通信卡已完成数据报文的接收。
进一步地,本发明实施例提供的通信卡,还可以包括:初始化模块904,用于在上电后,将所属通信卡本地用于接收数据报文的内存地址设置为与对端通信卡预先约定的地址;向对端通信卡通告所属通信卡UP的信息;在所属通信卡以及对端通信卡都UP之后,向对端通信卡通告所属通信卡已准备好接收数据报文。
进一步地,上述初始化模块904,具体用于向对端通信卡中预先设定的内存地址中写入表征所属通信卡UP的值;以及通过检查对端通信卡是否在所属通信卡设定的内存地址中写入表征对端通信卡UP的值,来确定对端通信卡是否UP。
进一步地,上述初始化模块904,还用于在上电之后,向对端通信卡通告所属通信卡UP的信息之前,初始化下述变量的值:
remote_rx_status,其值用于表征通信对端接收本端发送过去的数据报文的状态;
remote_tx_status,其值用于表征通信对端完成的数据报文发送的状态;
local_rx_finish_flag,其值用于表征本端已处理完成对端发送的数据报文的状态;
local_tx_finish_flag,其值用于表征本端已经完成数据报文的发送的状态;
REMOTE_RX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成读取本端发送的数据报文的状态;
REMOTE_TX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成数据报文发送的状态;
上述remote_rx_status的值、remote_tx_status的值、REMOTE_RX_ADDR记录的值以及REMOTE_TX_ADDR记录的值相等,local_rx_finish_flag和local_tx_finish_flag的值相等;且remote_rx_status与local_rx_finish_flag的值不等。
进一步地,上述初始化模块904,具体用于向对端通信卡中的REMOTE_RX_ADDR的内存地址写入所属通信卡的local_rx_finish_flag的值,以通告所属通信卡已准备好接收数据报文。
进一步地,上述检查模块901,具体用于检查所属通信卡的remote_rx_status与REMOTE_RX_ADDR的值是否相等;若不相等,则确认对端通信卡已准备好接收数据报文,并转向检查是否存在需要发送的数据报文的步骤;若相等,则转向检查是否存在需要接收的数据报文的步骤。
进一步地,上述数据报文发送模块902,还用于在将需要发送的数据报文写入到预先设置的对端通信卡用于接收数据报文的内存地址中之后,更新local_tx_finish_flag的值;以及将更新后的local_tx_finish_flag的值写入到对端通信卡中的REMOTE_TX_ADDR的内存地址中,以向对端通信卡通告已完成数据报文的发送。
进一步地,上述检查模块901,具体用于检查所属通信卡remote_tx_status和REMOTE_TX_ADDR的值是否相等;若不相等,确定存在需要接收的数据报文;若相等,确定不存在需要接收的数据报文。
进一步地,上述数据报文接收模块903,还用于在读取需要接收的数据报文之后,更新local_rx_finish_flag的值;以及将更新后的local_rx_finish_flag的值写入到对端通信卡中的REMOTE_RX_ADDR的内存地址中,以向对端通信卡通告已完成数据报文的接收。
进一步地,上述数据报文发送模块902,具体用于检测用于缓存列表中的报文个数是否大于零;所述缓存列表用于缓存上层模块需要发送的数据报文;当报文个数大于零时,确定存在需要发送的数据报文;当报文个数等于零时,确定不存在需要发送的数据报文。
本发明实施例提供的上述通信卡可以为线卡或为载板。
本发明实施例提供的一种网络转发设备,包括至少两块本发明实施例提供的上述通信卡,上述两块通信卡中一块为线卡,另一块为载板,两者通过PCIE连接。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明实施例可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
本发明实施例提供的卡间通信的方法、通信卡及网络转发设备,进行卡间通信的两个通信卡分别定时执行下述操作:检查自身是否存在需要发送的报文,若有,将数据报文写到到对方设置的接收报文的内存地址中,并通告对方已完成数据报文的发送,以及检查自身是否存在需要接收的报文,若有,从自身用于接收报文的内存地址中读取数据报文,并通告对方已完成数据报文的接收,本发明实施例采用定时地将数据报文写入到报文接收端内存的方式完成数据报文的发送和接收,并且在发送和接收完成后,向对方通告,使得卡间通信的两个通信卡之间,可以使用PCIE同时实现数据的传输和管理信息的传递,实现PCIE卡间通道的复用,这样可释放出以太管理通道作为业务接口,相比较现有技术中需要使用专门的业务口来传递管理信息的方式,提高了接口密度,同时该卡间通信方法简单易行,代码维护容易。
进一步地,本发明实施例提供的卡间通信的方法、通信卡及网络转发设备,进行卡间通信的两块通信卡均定义一组变量和内存地址,在进行卡间通信时,双方通过读取这些变量的值,可以确定对端是否已经完成数据的发送、接收,以及确定数据报文的写入位置,这样,就进一步地简化了卡间通信的机制,提高了卡间通信的效率,并且,本领域技术人员可以容易地想见,如果定义多组变量和内存地址,就可以实现一个通信卡与多个通信卡之间的通信,对于分布式转发设备中载板和多个线卡之间通信提供了有效和简易的通信机制。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (21)
1.一种卡间通信的方法,其特征在于,包括:
第一通信卡在自身以及第二通信卡都初始化完成后,定时执行下述操作:
第一通信卡检查自身是否存在需要发送的数据报文,若有,将需要发送的数据报文写入到预先设置的第二通信卡用于接收数据报文的内存地址中,并通告所述第二通信卡已完成数据报文的发送;
第一通信卡检查是否存在需要接收的数据报文,若有,从预先设定的自身用于接收数据报文的内存地址中读取需要接收的数据报文,并通告所述第二通信卡已完成数据报文的接收。
2.如权利要求1所述的方法,其特征在于,第一通信卡的初始化过程,包括:
第一通信卡上电后,将本地用于接收数据报文的内存地址设置为与第二通信卡预先约定的地址;
向第二通信卡通告自身UP的信息;
在自身以及第二通信卡都UP之后,第一通信卡向第二通信卡通告自身已准备好接收数据报文。
3.如权利要求2所述的方法,其特征在于,所述向第二通信卡通告自身UP的信息,包括:
第一通信卡向所述第二通信卡中预先设定的内存地址中写入表征自身UP的值;
第一通信卡通过下述方式获知第二通信卡UP:
第一通信卡通过检查第二通信卡是否在自身设定的内存地址中写入表征第二通信卡UP的值,来确定所述第二通信卡是否UP。
4.如权利要求2所述的方法,其特征在于,所述第一通信卡在上电之后,还包括:
第一通信卡初始化下述变量的值:
remote_rx_status,其值用于表征通信对端接收本端发送过去的数据报文的状态;
remote_tx_status,其值用于表征通信对端完成的数据报文发送的状态;
local_rx_finish_flag,其值用于表征本端已处理完成对端发送的数据报文的状态;
local_tx_finish_flag,其值用于表征本端已经完成数据报文的发送的状态;
REMOTE_RX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成读取本端发送的数据报文的状态;
REMOTE_TX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成数据报文发送的状态;
上述remote_rx_status的值、remote_tx_status的值、REMOTE_RX_ADDR记录的值以及REMOTE_TX_ADDR记录的值相等,local_rx_finish_flag和local_tx_finish_flag的值相等;且remote_rx_status与local_rx_finish_flag的值不等。
5.如权利要求4所述的方法,其特征在于,向第二通信卡通告自身已准备好接收数据报文,具体包括:
第一通信卡向第二通信卡中的REMOTE_RX_ADDR的内存地址写入第一通信卡自身local_rx_finish_flag的值,以通告自身已准备好接收数据报文。
6.如权利要求4所述的方法,其特征在于,第一通信卡检查自身是否存在需要发送的数据报文之前,还包括:
第一通信卡检查自身remote_rx_status与REMOTE_RX_ADDR的值是否相等;
若不相等,则确认对端已准备好接收数据报文,并转向检查是否存在需要发送的数据报文的步骤;
若相等,则转向检查是否存在需要接收的数据报文的步骤。
7.如权利要求4所述的方法,其特征在于,第一通信卡需要发送的数据报文写入到预先设置的第二通信卡用于接收数据报文的内存地址中之后,还包括:
更新local_tx_finish_flag的值;
第一通信卡通告所述第二通信卡已完成数据报文的发送,包括:
第一通信卡将更新后的local_tx_finish_flag的值写入到第二通信卡中的REMOTE_TX_ADDR的内存地址中。
8.如权利要求4所述的方法,其特征在于,第一通信卡检查是否存在需要接收的数据报文,包括:
第一通信卡检查自身remote_tx_status和REMOTE_TX_ADDR的值是否相等;
若不相等,确定存在需要接收的数据报文;
若相等,确定不存在需要接收的数据报文。
9.如权利要求4所述的方法,其特征在于,第一通信卡读取需要接收的数据报文之后,还包括:
更新local_rx_finish_flag的值;
第一通信卡通告所述第二通信卡已完成数据报文的接收,包括:
第一通信卡将更新后的local_rx_finish_flag的值写入到第二通信卡中的REMOTE_RX_ADDR的内存地址中。
10.权利要求1-9任一项所述的方法,其特征在于,所述第一通信卡为载板,所述第二通信卡为线卡;或者
所述第一通信卡为线卡,所述第二通信卡为载板。
11.一种通信卡,其特征在于,包括:
检查模块,用于在所属通信卡以及对端通信卡都初始化完成后,定时检查所属通信卡是否存在需要发送的数据报文,以及检查是否存在需要接收的数据报文;
数据报文发送模块,用于在所属通信卡存在需要发送的数据报文时,将需要发送的数据报文写入到预先设置的对端通信卡用于接收数据报文的内存地址中,并通告所述对端通信卡已完成数据报文的发送;
数据报文接收模块,用于在所属通信卡存在需要接收的数据报文时,从预先设定的所属通信卡用于接收数据报文的内存地址中读取需要接收的数据报文,并通告所述对端通信卡已完成数据报文的接收。
12.如权利要求11所述的通信卡,其特征在于,还包括:初始化模块,用于在上电后,将所属通信卡本地用于接收数据报文的内存地址设置为与对端通信卡预先约定的地址;向对端通信卡通告所属通信卡UP的信息;在所属通信卡以及对端通信卡都UP之后,向对端通信卡通告所属通信卡已准备好接收数据报文。
13.如权利要求12所述的通信卡,其特征在于,所述初始化模块,具体用于向对端通信卡中预先设定的内存地址中写入表征所属通信卡UP的值;以及通过检查对端通信卡是否在所属通信卡设定的内存地址中写入表征对端通信卡UP的值,来确定所述对端通信卡是否UP。
14.如权利要求12所述的通信卡,其特征在于,所述初始化模块,还用于在上电之后,向对端通信卡通告所属通信卡UP的信息之前,初始化下述变量的值:
remote_rx_status,其值用于表征通信对端接收本端发送过去的数据报文的状态;
remote_tx status,其值用于表征通信对端完成的数据报文发送的状态;
local_rx_finish_flag,其值用于表征本端已处理完成对端发送的数据报文的状态;
local_tx_finish_flag,其值用于表征本端已经完成数据报文的发送的状态;
REMOTE_RX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成读取本端发送的数据报文的状态;
REMOTE_TX_ADDR,预设的本端的内存地址,其记录的值用于表征通信对端已完成数据报文发送的状态;
上述remote_rx_status的值、remote_tx_status的值、REMOTE_RX_ADDR记录的值以及REMOTE_TX_ADDR记录的值相等,local_rx_finish_flag和local_tx_finish_flag的值相等;且remote_rx_status与local_rx_finish_flag的值不等。
15.如权利要求14所述的通信卡,其特征在于,所述初始化模块,具体用于向对端通信卡中的REMOTE_RX_ADDR的内存地址写入所属通信卡的local_rx_finish_flag的值,以通告所属通信卡已准备好接收数据报文。
16.如权利要求14所述的通信卡,其特征在于,所述检查模块,用于检查所属通信卡的remote_rx_status与REMOTE_RX_ADDR的值是否相等;若不相等,则确认对端通信卡已准备好接收数据报文,并转向检查是否存在需要发送的数据报文的步骤;若相等,则转向检查是否存在需要接收的数据报文的步骤。
17.如权利要求14所述的通信卡,其特征在于,所述数据报文发送模块,还用于在将需要发送的数据报文写入到预先设置的对端通信卡用于接收数据报文的内存地址中之后,更新local_tx_finish_flag的值;以及将更新后的local_tx_finish_flag的值写入到对端通信卡中的REMOTE_TX_ADDR的内存地址中,以向所述对端通信卡通告已完成数据报文的发送。
18.如权利要求14所述的通信卡,其特征在于,所述检查模块,具体用于检查所属通信卡remote_tx_status和REMOTE_TX_ADDR的值是否相等;若不相等,确定存在需要接收的数据报文;若相等,确定不存在需要接收的数据报文。
19.如权利要求14所述的通信卡,其特征在于,所述数据报文接收模块,还用于在读取需要接收的数据报文之后,更新local_rx_finish_flag的值;以及将更新后的local_rx_finish_flag的值写入到对端通信卡中的REMOTE_RX_ADDR的内存地址中,以向对端通信卡通告已完成数据报文的接收。
20.如权利要求11-19任一项所述的通信卡,其特征在于,所述通信卡为线卡或为载板。
21.一种网络转发设备,其特征在于,包括至少两块如权利要求11-20任一项所述的通信卡,所述两块通信卡中一块为线卡,另一块为载板,两者通过PCIE连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104302524A CN102546400A (zh) | 2011-12-20 | 2011-12-20 | 一种卡间通信的方法、通信卡及网络转发设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011104302524A CN102546400A (zh) | 2011-12-20 | 2011-12-20 | 一种卡间通信的方法、通信卡及网络转发设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102546400A true CN102546400A (zh) | 2012-07-04 |
Family
ID=46352389
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011104302524A Pending CN102546400A (zh) | 2011-12-20 | 2011-12-20 | 一种卡间通信的方法、通信卡及网络转发设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102546400A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106936722A (zh) * | 2015-12-31 | 2017-07-07 | 华为技术有限公司 | 一种网络设备及信号发送的方法 |
CN113014308A (zh) * | 2021-02-23 | 2021-06-22 | 湖南斯北图科技有限公司 | 一种卫星通信大容量通道并行的物联网数据接收方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1933451A (zh) * | 2006-10-26 | 2007-03-21 | 杭州华为三康技术有限公司 | 板间通信方法及接口板 |
CN101043510A (zh) * | 2007-04-29 | 2007-09-26 | 中兴通讯股份有限公司 | Pci-e总线分布式系统单板内及单板间数据通讯方法 |
CN101252537A (zh) * | 2008-03-31 | 2008-08-27 | 杭州华三通信技术有限公司 | 一种交换网通信系统、方法和主控板 |
CN101277195A (zh) * | 2007-03-30 | 2008-10-01 | 杭州华三通信技术有限公司 | 一种交换网通信系统、实现方法及交换装置 |
CN101902436A (zh) * | 2009-05-31 | 2010-12-01 | 华为技术有限公司 | 板间通信方法、装置及系统 |
CN102263698A (zh) * | 2011-08-11 | 2011-11-30 | 福建星网锐捷网络有限公司 | 虚拟通道的建立方法、数据传输的方法及线卡 |
-
2011
- 2011-12-20 CN CN2011104302524A patent/CN102546400A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1933451A (zh) * | 2006-10-26 | 2007-03-21 | 杭州华为三康技术有限公司 | 板间通信方法及接口板 |
CN101277195A (zh) * | 2007-03-30 | 2008-10-01 | 杭州华三通信技术有限公司 | 一种交换网通信系统、实现方法及交换装置 |
CN101043510A (zh) * | 2007-04-29 | 2007-09-26 | 中兴通讯股份有限公司 | Pci-e总线分布式系统单板内及单板间数据通讯方法 |
CN101252537A (zh) * | 2008-03-31 | 2008-08-27 | 杭州华三通信技术有限公司 | 一种交换网通信系统、方法和主控板 |
CN101902436A (zh) * | 2009-05-31 | 2010-12-01 | 华为技术有限公司 | 板间通信方法、装置及系统 |
CN102263698A (zh) * | 2011-08-11 | 2011-11-30 | 福建星网锐捷网络有限公司 | 虚拟通道的建立方法、数据传输的方法及线卡 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106936722A (zh) * | 2015-12-31 | 2017-07-07 | 华为技术有限公司 | 一种网络设备及信号发送的方法 |
CN106936722B (zh) * | 2015-12-31 | 2020-07-24 | 华为技术有限公司 | 一种网络设备及信号发送的方法 |
CN113014308A (zh) * | 2021-02-23 | 2021-06-22 | 湖南斯北图科技有限公司 | 一种卫星通信大容量通道并行的物联网数据接收方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102981990B (zh) | 采用Android平台终端设备的数据传输方法及装置 | |
JP6048402B2 (ja) | コンピュータシステム、接続装置、電源制御方法、及び電源制御プログラム | |
CN100474280C (zh) | 系统总线控制装置、集成电路和数据处理系统 | |
US7809875B2 (en) | Method and system for secure communication between processor partitions | |
CN104205050A (zh) | 访问远程机器上的设备 | |
WO2011136480A9 (ko) | 반도체 저장장치 | |
CN101415270B (zh) | 移动终端及其处理模块的通讯方法 | |
CN110312266B (zh) | 终端的多系统实现wifi通信的方法和装置 | |
CN104168281A (zh) | 电力线载波自组网方法、装置及系统 | |
CN102546400A (zh) | 一种卡间通信的方法、通信卡及网络转发设备 | |
US20120307827A1 (en) | Multi-processor apparatus using dedicated buffers for multicast communications | |
WO2016047104A1 (ja) | データ転送制御システム、データ転送制御方法、及び、プログラム記憶媒体 | |
CN104484205A (zh) | 一种io设备固件的升级装置及方法 | |
CN110046138B (zh) | 一种iSCSI目标器多实例处理方法及分布式存储系统 | |
JP2014179066A (ja) | ストレージ制御装置、ストレージシステム、およびストレージ制御方法 | |
CN103530256B (zh) | CPCIe和PCI协议数据的处理装置及方法 | |
CN105022707B (zh) | 接口单元装置 | |
CN113672172A (zh) | 应用于led显示控制系统的数据交互方法以及接收卡 | |
US20160162199A1 (en) | Multi-processor communication system sharing physical memory and communication method thereof | |
CN203352624U (zh) | 一种节目加载装置和用于交通工具的娱乐系统 | |
CN104333803A (zh) | 防止视频编辑时丢帧的方法、设备及系统 | |
CN113268358A (zh) | 数据通信方法、装置和系统及多设备级联系统 | |
KR100921504B1 (ko) | 다중 프로세서를 구비한 시스템 온 칩 시스템 내의프로세서간 통신 장치 및 방법 | |
CN113867835B (zh) | 用于dsp动态加载的装置及方法 | |
JP2007114950A (ja) | 中継装置、記憶装置及び記憶システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20120704 |