基于Linux的端口状态实时检测方法、电路和交换机转让专利

申请号 : CN201810516602.0

文献号 : CN110535715B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 焦玉科

申请人 : 北京东土科技股份有限公司

摘要 :

本发明涉及计算机网络技术领域,特别涉及一种基于Linux的端口状态实时检测方法、电路和交换机。包括:PHY可以在自身对应的端口状态发生改变时,产生中断信号,并上报给CPU。CPU在接收到中断信号时,可以确定产生中断信号的PHY。只需轮询该PHY的每个端口状态寄存器,即可以检测出发生状态改变的端口。无需像现有技术那样,实时轮询PHY的所有PHY的所有端口状态寄存器,大大减少了CPU的工作量,减少了对CPU的资源占用,并可以有效缩短端口状态检测所需时间,减低滞后性,减少链路倒换时间。

权利要求 :

1.一种基于Linux的端口状态实时检测方法,其特征在于,所述方法包括:接收外部信号接口芯片PHY上报的中断信号,该中断信号是每个所述PHY在自身对应的端口的状态发生改变时,产生并上报的;

根据接收到的所述中断信号,确定产生中断信号的PHY;

轮询所述产生中断信号的PHY对应的端口状态寄存器,确定发生状态改变的端口;

根据接收到的所述中断信号,确定产生中断信号的PHY,包括:根据接收到的所述中断信号,读取复杂可编程逻辑器件CPLD中寄存器的数值,该数值是所述CPLD根据每个所述PHY,产生并发送的所述中断信号,写入所述寄存器的;

根据所述寄存器的数值,确定产生中断信号的PHY。

2.如权利要求1所述的方法,其特征在于,所述PHY为至少两个时,接收PHY上报的中断信号,包括:接收PHY通过或门上报的中断信号,该中断信号是所述或门对每个所述PHY在对应的端口的状态发生改变时,产生并上报的中断信号进行或操作后上报的。

3.如权利要求1~2任一所述的方法,其特征在于,通过串行外设接口SPI读取CPLD中寄存器的数值。

4.一种基于Linux的端口状态实时检测电路,其特征在于,所述电路包括至少一个外部信号接口芯片PHY和中央处理器CPU,每个所述PHY与所述CPU连接,其中:每个所述PHY,用于在自身对应的端口的状态发生改变时,产生中断信号,并向所述CPU发送所述中断信号;

所述CPU,用于在接收到所述中断信号时,确定产生中断信号的PHY;轮询该PHY对应的端口状态寄存器,确定发生状态改变的端口;

所述电路还包括复杂可编程逻辑器件CPLD,每个所述PHY还与所述CPLD连接,所述CPU还与所述CPLD连接:每个所述PHY,还用于向所述CPLD发送所述中断信号;

所述CPLD,用于根据接收到的所述中断信号,在寄存器中写入对应的数值;

所述CPU,用于在接收到所述中断信号时,确定产生中断信号的PHY,包括:在接收到所述中断信号时,读取所述CPLD中所述寄存器中的数值,根据该数值,确定产生中断信号的PHY。

5.如权利要求4所述的电路,其特征在于,所述电路包括至少两个PHY时,所述电路还包括或门,每个所述PHY与所述或门的输入端连接,所述CPU与所述或门的输出端连接;

所述或门,用于对每个所述PHY产生的中断信号进行或操作后,上报给所述CPU。

6.如权利要求4~5任一所述的电路,其特征在于,所述CPU通过串行外设接口SPI读取所述CPLD中所述寄存器中的数值。

7.一种交换机,其特征在于,所述交换机包括如权利要求4~6任一所述的端口状态实时检测电路。

说明书 :

基于Linux的端口状态实时检测方法、电路和交换机

技术领域

[0001] 本发明涉及计算机网络技术领域,特别涉及一种基于Linux的端口状态实时检测方法、电路和交换机。

背景技术

[0002] 在交换网络中,对端口的检测通常采取以下方式:中央处理器(CPU)通过串行管理接口(SMI,Serial Management Interface),实时轮询所有外部信号接口芯片(PHY)上的所有端口状态寄存器,通过与上一次轮询时,端口状态寄存器状态的对比,确定端口状态寄存器状态是否发生了改变,从而确定是否有端口状态发生了改变。
[0003] 在基于Linux系统的交换机中,由于Linux系统实时性较差,通过实时轮询所有PHY上的所有端口状态寄存器,来定位发生状态改变的端口,端口状态检测时间长,滞后性严重,链路倒换时间较长,且占用CPU资源较多。

发明内容

[0004] 本发明实施例提供一种基于Linux的端口状态实时检测方法、电路和交换机,用于解决基于Linux系统的交换机中,端口状态检测时间长,占用CPU资源较多的问题。
[0005] 一种基于Linux的端口状态实时检测方法,所述方法包括:
[0006] 接收外部信号接口芯片PHY上报的中断信号,该中断信号是每个所述PHY在自身对应的端口的状态发生改变时,产生并上报的;
[0007] 根据接收到的所述中断信号,确定产生中断信号的PHY;
[0008] 轮询所述产生中断信号的PHY对应的端口状态寄存器,确定发送状态改变的端口。
[0009] 一种基于Linux的端口状态实时检测电路,所述电路包括至少一个外部信号接口芯片PHY和中央处理器CPU,每个所述PHY与所述CPU连接,其中:
[0010] 每个所述PHY,用于在自身对应的端口的状态发生改变时,产生中断信号,并向所述CPU发送所述中断信号;
[0011] 所述CPU,用于在接收到所述中断信号时,确定产生中断信号的PHY;轮询该PHY对应的端口状态寄存器,确定发生状态改变的端口。
[0012] 一种交换机,所述交换机包括如上所述的端口状态实时检测电路。
[0013] 根据本发明实施例提供的方案,PHY可以在自身对应的端口状态发生改变时,产生中断信号,并上报给CPU。CPU在接收到中断信号时,可以确定产生中断信号的PHY。只需轮询该PHY的每个端口状态寄存器,即可以检测出发生状态改变的端口。无需像现有技术那样,实时轮询PHY的所有PHY的所有端口状态寄存器,大大减少了CPU的工作量,减少了对CPU的资源占用,并可以有效缩短端口状态检测所需时间,减低滞后性,减少链路倒换时间。

附图说明

[0014] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0015] 图1为本发明实施例一提供的端口状态实时检测电路的结构示意图;
[0016] 图2为本发明实施例二提供的端口状态实时检测方法的步骤流程图;
[0017] 图3为本发明实施例三提供的STP/RSTP/MSTP组网结构示意图;
[0018] 图4为本发明实施例四提供的DRP组网结构示意图。

具体实施方式

[0019] 一个交换机中可以包括多个PHY。一个PHY又可以包括多个端口,其中,每个端口对应一个端口状态寄存器。针对由于Linux系统实时性较差,导致通过实时轮询所有PHY的所有端口状态寄存器的方式定位发生状态改变的端口会导致端口状态检测时间长,且占用CPU资源较多的问题,本发明实施例提出可以使能PHY中断,一旦有端口状态发生改变时,PHY即可以产生中断信号并上报给CPU。CPU可以在接收到中断信号时,确定产生中断信号的PHY。进而只需轮询该PHY对应的每个端口状态寄存器,即可以确定发生状态改变的端口,无需实时轮询所有PHY的所有端口状态寄存器。从而减少发现端口状态改变所需时间,并减少CPU资源的占用。
[0020] CPU在接收到中断信号,确定产生中断信号的PHY时,可以通过复杂可编程逻辑器件(CPLD)来实现。具体的,可以根据接收到的所述中断信号,读取CPLD中寄存器的数值,该数值是所述CPLD根据每个所述PHY,产生并发送的所述中断信号,写入所述寄存器的;根据所述寄存器的数值,确定产生中断信号的PHY。
[0021] 具体的,可以但不限于理解为CPLD寄存器的1个数据位中的数值对应一个PHY的中断或非中断状态,根据一个PHY的状态,CPLD在寄存器对应的数据位中写入数值。例如,一个PHY上报中断信号给CPLD时,则CPLD在寄存器中该PHY对应的数据位写入1(或者0)。因此,只需读取CPLD寄存器中的数值,确定数值为1(或者0)的数据位,即可以确定出对应的发生了中断的PHY。
[0022] 进一步的,如果PHY为多个时,还可以进一步对每个PHY上报的中断信号进行或操作,使得同时产生的多个中断信号也只会触发一次CPU处理中断信号的操作,减少了CPU处理中断信号的次数,进一步减少对CPU资源的占用。
[0023] 为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0024] 实施例一
[0025] 本发明实施例一提供一种基于Linux的端口状态实时检测电路,该端口状态检测实时电路的结构示意图可以如图1所示,图1中以包括三个外部信号接口芯片为例进行示意。该电路包括至少一个外部信号接口芯片(PHY)11和中央处理器(CPU)13,每个所述外部信号接口芯片11与所述中央处理器13连接,其中:
[0026] 每个所述外部信号接口芯片11用于在自身对应的端口的状态发生改变时,产生中断信号,并向所述CPU发送所述中断信号;
[0027] 所述中央处理器13用于在接收到所述中断信号时,确定产生中断信号的外部信号接口芯片;轮询该外部信号接口芯片对应的端口状态寄存器,确定发生状态改变的端口。
[0028] 在本实施例中,CPU可以根据接收到的中断信号,触发端口状态检测。相对于实时轮询方式的端口状态检测,大大减少对CPU资源的占用。另外,在端口状态检测时,只需要轮询发生中断信号的PHY上的端口状态寄存器,无需轮询所有PHY上的所有端口状态寄存器,进一步减少CPU资源占用的情况下,还减少了端口状态检测所需的时间。另外,一旦接收到中断信号,即触发端口状态检测,还确保了端口状态检测的实时性。
[0029] 具体的,CPU确定产生中断信号的外部信号接口芯片,可以但不限于是通过CPLD实现的:
[0030] 进一步的,所述电路还包括复杂可编程逻辑器件12,每个所述外部信号接口芯片11还与所述复杂可编程逻辑器件12连接,所述中央处理器13还与所述复杂可编程逻辑器件
12连接:
[0031] 每个所述外部信号接口芯片11还用于向所述CPLD发送所述中断信号;
[0032] 所述复杂可编程逻辑器件12用于根据接收到的所述中断信号,在寄存器中写入对应的数值;
[0033] 所述中央处理器13用于在接收到所述中断信号时,确定产生中断信号的PHY,包括:在接收到所述中断信号时,读取所述CPLD中所述寄存器中的数值,根据该数值,确定产生中断信号的PHY。
[0034] 所述电路包括至少两个PHY时,所述电路还包括或门14,每个所述外部信号接口芯片11与所述或门14的输入端连接,所述中央处理器13与所述或门14的输出端连接;
[0035] 所述或门14用于对每个所述外部信号接口芯片产生的中断信号进行或操作后,上报给所述CPU。
[0036] 更优的,在PHY为多个时,可以对中断信号进行或操作后上报给CPU,减少CPU处理中断信号的次数,进一步减少对CPU资源的占用。
[0037] 具体的,所述中央处理器13可以通过串行外设接口(SPI)读取所述CPLD中所述寄存器中的数值。
[0038] 进一步的,本发明实施例还可以提供一种交换机,该交换机可以包括如实施例一所述的端口状态检测电路。
[0039] 与本发明实施例一基于同样的发明构思,提供以下的方法。
[0040] 实施例二
[0041] 本发明实施例二提供一种基于Linux的端口状态实时检测方法,该方法的步骤流程图可以如图2所示,包括:
[0042] 步骤201、接收中断信号。
[0043] 在本步骤中,可以接收PHY上报的中断信号,该中断信号是每个所述PHY在自身对应的端口的状态发生改变时,产生并上报的。
[0044] 较优的,所述PHY为至少两个时,在本步骤中,还可以接收PHY通过或门上报的中断信号,该中断信号是所述或门对每个所述PHY在对应的端口的状态发生改变时,产生并上报的中断信号进行或操作后上报的。
[0045] 当然,可以理解为,在本步骤之前,已经在程序中对PHY中断进行了注册。
[0046] 步骤202、读取CPLD中寄存器的数值。
[0047] 在本步骤中,可以根据接收到的所述中断信号,读取复杂可编程逻辑器件CPLD中寄存器的数值,该数值是所述CPLD根据每个所述PHY,产生并发送的所述中断信号,写入所述寄存器的。
[0048] 具体的,在本步骤中,可以通过串行外设接口(SPI)读取CPLD中寄存器的数值。
[0049] 本发明提供的方案中,CPU在接收到所述中断信号时,可以通过任意方式确定产生中断信号的PHY。在本实施例中,以CPU接收到中断信号时,通过CPLD确定产生中断信号的PHY为例进行说明。
[0050] 步骤203、确定产生中断信号的PHY。
[0051] 在本步骤中,可以根据所述寄存器的数值,确定产生中断信号的PHY。
[0052] 步骤204、确定发生状态改变的端口。
[0053] 在本步骤中,可以轮询所述产生中断信号的PHY对应的端口状态寄存器,确定发送状态改变的端口。
[0054] 具体的,在确定产生中断信号的PHY之后,可以根据具体产品型号,遍历该PHY,而无需遍历所有PHY。
[0055] 需要说明的是,本发明实施例提供的方案可以解决基于Linux系统的交换机存在的CPU资源的占用多,端口状态检测所需时间长的问题,但本发明提供的方案不限于应用于基于Linux系统的交换网络中。
[0056] 下面通过两个具体的实例,针对不同组网方式下的端口状态实时检测方案进行说明。
[0057] 实施例三
[0058] 本发明实施例三提供的生成树协议(STP,Spanning Tree Protocol)/快速生成树协议(RSTP,Rapid Spanning Tree Protocol)/多生成树协议(MSTP,Multiple Spanning Tree Protocol)组网结构示意图如图3所示,个人电脑(PC)与由设备A、设备B、设备C和设备D组成的交换网络连接。可以理解为设备A、设备B、设备C、设备D均为集成有本发明实施例一提供的端口状态检测电路的交换机。
[0059] 假设每台设备均包括三个PHY,分别为PHY1、PHY2和PHY3。每台设备的三个端口,分别为端口1(在图3中用1表示)、端口2(在图3中用2表示)和端口3(在图3中用3表示),部分设备的部分端口未在图3中示出。且每台设备的端口1对应PHY1(即端口1在PHY1上)、端口2对应PHY2、端口3对应PHY3。
[0060] 假设,断开或恢复设备B和设备C之间的连接:
[0061] 则,设备B中PHY2产生中断信号,设备B中的CPU在接收到中断信号时,读取设备B中CPLD中寄存器的数值,发现是PHY2产生的中断信号,只需轮询PHY2对应的端口状态寄存器,即可以发现发生状态改变的端口2,无需轮询PHY1和PHY3,从而大大减少端口轮询所需时间。
[0062] 类似的,设备C中PHY1产生中断信号,设备C中的CPU在接收到中断信号时,读取设备C中CPLD中寄存器的数值,发现是PHY1产生的中断信号,只需轮询PHY1对应的端口状态寄存器,即可以发现发生状态改变的端口1,无需轮询PHY2和PHY3,从而大大减少端口轮询所需时间。
[0063] 具体的,如图3所示的组网模式下,配置测试过程可以包括如下内容:
[0064] 1、配置设备A的域名为1,设备B/C/D的域名为2,修正级别默认,设备B/C/D创建实例2映射虚拟局域网(VLAN)2到10;配置设备A/B/C/D端口1、2、3为端口汇聚(trunk)模式,以标签(tag)模式加入VLAN2到10;配置设备A/B/C/D实例0对应的网桥的桥优先级,依次为4096/8192/12288/32768;配置设备B/C/D实例2对应的网桥的桥优先级,依次为8192/
32768/4096;
[0065] 2、配置设备A端口1对应实例0路径开销配置为2,端口2对应实例0路径开销配置为4;设备B的端口1对应实例0的路径开销配置为8,端口2对应实例0的路径开销配置为16,端口3对应实例0的路径开销配置为16;设备C的端口1对应实例0的路径开销配置为32,端口2对应实例0的路径开销配置为64;设备D的端口1对应实例0的路径开销配置为128,端口2对应实例0的路径开销配置为256,端口3对应实例0的路径开销配置为128;
[0066] 3、配置设备B端口3对应实例2的路径开销为8,端口2对应实例2的路径开销配置为16;设备C的端口1对应实例2的路径开销配置为32,端口2对应实例2的路径开销配置为64;
设备D的端口1对应实例2的路径开销配置为2,端口3对应实例2的路径开销配置为4;
[0067] 4、将设备C和设备D的其他端口接入测试仪,并配置为边缘端口,互相打VLAN1的物理地址(mac)流量每秒1000个帧,此时断开设备B、设备C之间连接,查看丢包在50个以内,链路倒换时间在50ms以内,恢复设备B、设备C之间的连线,查看丢包在50个以内,链路倒换时间在50ms以内。
[0068] 实施例四
[0069] 本发明实施例四提供的组网结构示意图如图4所示,该网络基于动态冗余协议(DRP,Dynamic Redundancy Protocol)进行组网,个人电脑(PC)与由设备1、设备2和设备3组成的交换网络连接。可以理解为设备1、设备2、设备3均为集成有本发明实施例一提供的端口状态检测电路的交换机。
[0070] 假设每台设备均包括三个PHY,分别为PHY1、PHY2和PHY3。每台设备的三个端口,分别为端口1(在图4中用1表示)、端口2(在图4中用2表示)和端口3(在图4中用3表示),部分设备的部分端口未在图4中示出。且每台设备的端口1在PHY1上、端口2在PHY2上、端口3在PHY3上。
[0071] 假设,断开或恢复设备2和设备3之间的连接:
[0072] 则,设备2中PHY2产生中断信号,设备2中的CPU在接收到中断信号时,读取设备2中CPLD中寄存器的数值,发现是PHY2产生的中断信号,只需轮询PHY2对应的端口状态寄存器,即可以发现发生状态改变的端口2,无需轮询PHY1和PHY3,从而大大减少端口轮询所需时间。
[0073] 类似的,设备3中PHY3产生中断信号,设备3中的CPU在接收到中断信号时,读取设备3中CPLD中寄存器的数值,发现是PHY3产生的中断信号,只需轮询PHY3对应的端口状态寄存器,即可以发现发生状态改变的端口3,无需轮询PHY1和PHY2,从而大大减少端口轮询所需时间。
[0074] 具体的,如图4所示的组网模式下,配置测试过程可以包括如下内容:
[0075] 1、配置设备1(DUT1)/设备2(DUT2)/设备3(DUT3)为基于端口(port)模式的DRP,创建DRP环:域名为“123”、域id为“1”,添加端口2、3为DRP环端口,使能环协议,配置下发成功;
[0076] 2、配置DUT1角色优先级为220;
[0077] 3、如图4连接3台设备,查看各设备环状态正常,DUT1为主站,主站端口处于阻塞(blocked)状态,假设端口3blocked;
[0078] 4、测试仪1、2口分别连接DUT1、DUT3的端口4,双向发送已知单播流,1000帧/秒,链路转发正常,无丢包;
[0079] 5、断开DUT2与DUT3连线,DRP环进行切换,DUT2、DUT3分别为主设备(ROOT)或备份主设备(BROOT),查看链路丢包发现,丢包在20个以内,链路倒换时间在20ms以内;
[0080] 6、恢复DUT2与DUT3连线,DRP环不进行切换,链路丢包在20个以内,链路倒换时间在20ms以内。
[0081] 通过实施例三和实施例四提供的两种组网方案进行测试可以发现,根据本发明实施例提供的端口状态检测实时电路和端口状态检测实时方法,可以释放轮询时占用CPU的资源和时间,极大减少链路倒换时间,减少报文丢失。
[0082] 本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0083] 本发明是参照根据本发明实施例的方法、装置(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0084] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0085] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0086] 尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
[0087] 显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。