路由器及其软件升级方法

文档序号:7981741阅读:163来源:国知局
路由器及其软件升级方法
【专利摘要】本发明公开了一种路由器及其软件升级方法,其中,该路由器包括:多核CPU以及相互独立的第一内存区域和第二内存区域,多核CPU包括控制平面CPU和数据平面CPU,其中:第一内存区域用于存储控制平面程序;第二内存区域用于存储数据平面程序;数据平面CPU用于使用第二内存区域中的数据平面程序处理数据报文;控制平面CPU用于使用第一内存区域中的控制平面程序处理协议报文,以及,当路由器进行软件升级时,进行复位并仅将第一内存区域清零,在复位启动后,将新版本的控制平面程序加载到第一内存区域,并运行第一内存区域中的新版本的控制平面程序。本发明能够提高软转发路由器的可用性。
【专利说明】路由器及其软件升级方法
【技术领域】
[0001]本发明涉及软件升级【技术领域】,特别涉及一种路由器及其软件升级方法。
【背景技术】
[0002]最初的软件升级,尤其是嵌入式系统的软件升级,主要依赖于软件的重新启动。但是,这个过程持续的时间较长,并且在软件升级过程中,业务会处于中断状态。而对于某些核心设备以及某些特殊应用场合的设备来说,这样的代价是不能接受的。所以,如何在软件升级过程中确保业务不发生中断,成为亟待解决的问题。
[0003]为了解决上述问题,提出了 ISSU (In-Service Software Upgrade,业务不中断升级)。ISSU是一种能够保证在软件升级过程中,业务不中断或者中断时间较短的升级方式,它提供了高可用性的软件升级方式。与之前的软件升级不同的是,支持ISSU的设备在升级过程中,业务是处于正常状态,因此,能够在最大程度上,为用户提供了高可用性。
[0004]路由器是网络中进行数据路由转发的重要设备之一。按照由软件实现数据转发、还是由硬件实现数据转发,可以将路由器分为软转发路由器和硬转发路由器两类。其中,软转发路由器是指通过CPU (Central Processing Unit,中央处理单元)转发的路由器。和它相对的硬转发路由器,通常包括NP (Network Processor,网络处理器)转发、ASIC (Application Specific Integrated Circuit,专用集成电路)转发、FPGA (FieldProgrammable Gate Array,现场可编程门阵列)转发的路由器等。
[0005]现有技术中,硬转发路由器可以通过与交换机类似的方式支持ISSU,即,在软件升级过程中,CPU重启,而负责业务转发的转发芯片不重启,从而做到转发的业务数据不中断。
[0006]但是,由于软转发路由器是通过CPU进行业务转发的,因此,无法采用上述方法来实现ISSU,从而无法在软件升级过程中,实现业务不中断。

【发明内容】

[0007]有鉴于此,本发明提供了一种路由器及其软件升级方法,以至少解决软转发路由器无法实现ISSU,即无法在软件升级过程中,实现业务不中断的问题。
[0008]本发明的技术方案如下:
[0009]一方面,提供了一种路由器,该路由器通过CPU转发数据报文,包括:多核CPU以及相互独立的第一内存区域和第二内存区域,多核CPU包括控制平面CPU和数据平面CPU,其中:第一内存区域用于存储控制平面程序,控制平面程序包括路由协议的相关程序;第二内存区域用于存储数据平面程序,数据平面程序包括数据报文转发处理的相关程序;数据平面CPU用于使用第二内存区域中的数据平面程序处理数据报文;控制平面CPU用于使用第一内存区域中的控制平面程序处理协议报文,以及,当路由器进行软件升级时,进行复位并仅将第一内存区域清零,在复位启动后,将新版本的控制平面程序加载到第一内存区域,并运行第一内存区域中的新版本的控制平面程序。
[0010]另一方面,还提供了一种路由器的软件升级方法,该路由器通过CPU转发数据报文,该路由器包括多核CPU以及相互独立的第一内存区域和第二内存区域,多核CPU包括控制平面CPU和数据平面CPU,该方法包括:在第一内存区域存储控制平面程序,控制平面程序包括路由协议的相关程序,控制平面CPU使用第一内存区域中的控制平面程序处理协议报文;在第二存储区域存储数据平面程序,数据平面程序包括数据报文转发处理的相关程序,数据平面CPU使用第二内存区域中的数据平面程序处理数据报文;控制平面CPU在路由器需要进行软件升级时,复位自身并将第一内存区域清零;控制平面CPU在复位启动后,将新版本的控制平面程序加载到第一内存区域,并运行第一内存区域中的新版本的控制平面程序。
[0011]本发明的以上技术方案中,通过将路由器中的多核CPU分为负责数据报文转发处理的数据平面CPU和负责数据报文转发处理以外的工作(包括协议报文的处理)的控制平面CPU,将内存分为服务于控制平面CPU的第一内存区域和服务于数据平面CPU的第二内存区域,在路由器开始进行软件升级时,仅复位控制平面CPU并仅对第一内存区域清零,控制平面CPU在复位启动后,加载并运行新版本的控制平面程序,在此过程中,数据平面CPU维持运行状态并且第二内存区域不清零,这样,能够确保负责数据报文转发处理(即业务转发处理)的数据平面CPU在控制平面CPU进行软件升级过程中,仍然能够正常运行,进行数据报文转发处理,从而确保了业务的不中断,支持了 ISSU,提高了软转发路由器的可用性。
【专利附图】

【附图说明】
[0012]图1是根据本发明的实施例一的软转发路由器的架构图;
[0013]图2是根据本发明的实施例一的软转发路由器的软件升级方法的流程图;
[0014]图3是根据本发明的实施例二的在写入新版本的数据平面程序代码前,Section3的结构不意图;
[0015]图4是根据本发明的实施例二的在写入新版本的数据平面程序代码后,Section3的结构不意图;
[0016]图5是根据本发明的实施例三的控制平面CPU的结构示意图。
【具体实施方式】
[0017]实施例一
[0018]本发明实施例提供了一种通过CPU转发数据报文的路由器,称为软转发路由器,该路由器的架构如图1所示。该路由器中的CPU为多核CPU (即包含有多个CPU核心),在多核CPU越来越普及的今天,大部分的软转发路由器都是基于多核CPU设计的。另外,该路由器中的内存中包含有两个相互独立的存储区域:第一内存区域和第二内存区域。
[0019]本实施例中,该路由器中的多核CPU包括两部分:
[0020]控制平面(Control Plane) CPU,负责完成协议报文的处理、转发表项生成和下发的工作,路由器上的其它功能,如管理等,也都在控制平面CPU上完成;协议报文包括各种路由选择协议报文,还可以包括网络管理协议报文。
[0021]数据平面(Data Plane) CPU,负责完成数据报文的转发处理。数据报文包括需要路由器查表转发的报文。
[0022]控制平面CPU和数据平面CPU中各自包含多核CPU中的I个或多个CPU核心,具体数量由产品形态确定,本发明对此不做限定。
[0023]第一内存区域(在图1中记为Sectionl)服务于控制平面CPU,用于存储各种协议的相关程序的数据、代码等,例如存储如路由协议(routing protocoI)的相关程序(即控制平面程序),其中,路由协议例如可以是RIP (Routing Information Protocol,路由信息协议)、IGP (Interior Gateway Protocol,内部网关协议)和 OSPF (Open Shortest PathFirst,开放最短路径优先)等。第一内存区域还可以存储网络管理等协议的相关程序。控制平面CPU通过运行这些程序,可以实现对路由协议报文、网络管理协议报文等的处理,例如,根据路由协议报文生成及下发数据报文的转发表项、向其他路由器发送路由协议报文等,根据网络管理协议报文执行相应的设备管理等。
[0024]第二内存区域用于存储数据平面CPU进行数据报文转发处理所需的转发表项、以及数据报文转发处理的相关程序(即数据平面程序)。这个内存区域中的转发表项,数据平面CPU在进行数据报文转发的时候会来查询,而控制平面CPU生成转发表项时会主动下发。也可以进一步将第二内存区域划分为两个存储区域(可以记为:Section 2和Section 3),一个存储区域(例如为Section 2)用于存储转发表项,而另一个存储区域(例如为Section3)用于存储数据报文转发处理的相关程序(即数据平面程序),本发明对此不做限定。
[0025]为了描述方便,以下按照第二内存区域分为两个存储区域来进行介绍。
[0026]在路由器正常运行时,控制平面CPU使用Section I中的控制平面程序,完成协议报文的处理,一旦生成转发表项,就将其写入(即下发)Section 2中。而数据平面CPU运行Section 3中的数据平面程序,在收到数据报文时,查询Section 2中的转发表项,并根据转发表项中的信息,将其转发到外部、或者丢弃、或者上送到控制平面CPU以做进一步处理。
[0027]这里需要注意的是:由于Section 2中的转发表项被两个平面的CPU访问,所以需要通过现有的原子操作和延迟删除技术(如RCU (Read-Copy Update,读-拷贝修改))来规避临界区问题。
[0028]如图2所示,路由器进行软件升级的过程包括以下步骤:
[0029]步骤S202,仅控制平面CPU复位,并仅将第一内存区域清零;
[0030]此时,数据平面CPU继续运行,并且,Section 2和Section 3不清零。
[0031]通常,复位包括两个过程:跳转到特定位置,之后,基于该特定位置的指令开始初始化。上述的步骤S202中,控制平面CPU在复位过程中,首先跳转到特定位置,然后,从该特定位置开始进行初始化,在初始化过程中,就可以执行将第一内存区域清零的动作。
[0032]当需要对路由器进行软件升级时,用户可以通过PC (Private Computer)向路由器下发升级指令,也可以由其他设备下发升级指令,本发明对此不做限定。
[0033]步骤S204,在复位启动后,控制平面CPU将欲升级到的新版本软件程序(例如为新版本的嵌入式系统软件程序)中包含的控制平面程序(以下简称为新版本的控制平面程序)加载到第一内存区域,并运行第一内存区域中的新版本的控制平面程序。
[0034]在加载之前,新版本软件程序可以存放在文件系统、FLASH (闪存)、移动存储设备、或者内存的特殊区域中,本发明对此不做限定。
[0035]由于路由器的一个版本的软件程序中可以包含控制平面程序和数据平面程序两部分,因此,在实际实施时,在控制平面CPU加载新版本的控制平面程序时,可以同时将新版本软件程序中包含的数据平面程序一起加载到第一内存区域中,即,将整个新版本软件程序加载到第一内存区域中;也可以仅将新版本的控制平面程序加载到第一内存区域中,本发明对此不做限定。
[0036]在运行新版本的控制平面程序的过程中,控制平面CPU就会将各种协议的代码、数据写入到第一内存区域中。
[0037]通过将路由器中的多核CPU分为负责数据报文转发处理的数据平面CPU和负责数据报文转发处理以外的工作(包括协议报文的处理)的控制平面CPU,将内存分为服务于控制平面CPU的第一内存区域和服务于数据平面CPU的第二内存区域,在路由器进行软件升级时,仅复位控制平面CPU并仅对第一内存区域清零,控制平面CPU在复位启动后,加载并运行新版本的控制平面程序,在此过程中,数据平面CPU维持运行状态并且第二内存区域不清零,这样,能够确保负责数据报文转发处理(即业务转发处理)的数据平面CPU在控制平面CPU进行软件升级过程中,仍然能够正常运行,进行数据报文转发处理,从而确保了业务的不中断,支持了 ISSU,提高了软转发路由器的可用性。
[0038]实施例二
[0039]如图1所示的路由器的软件升级过程,可以包括以下步骤:
[0040]第一步,控制平面CPU进行软件升级;
[0041]在该步骤中,仅控制平面CPU复位,并仅将Section I清零。此时,数据平面CPU继续运行,Section 2和Section 3不清零。控制平面CPU重启后,加载新版本的控制平面程序到第一内存区域,并运行第一内存区域中的新版本的控制平面程序。
[0042]新版本的控制平面程序在控制平面CPU上运行起来后,进入第二步。
[0043]第二步,数据平面表项更新升级;
[0044]本步骤应用于数据平面表项格式存在变化(即新版本控制平面程序对应的转发表项(称为新版本的数据平面表项)与旧版本的控制平面程序对应的转发表项(称为旧版本的数据平面表项)的格式不同)的情况,如果不存在变化,则可以直接跳过本步骤,进入第三
止/J/ O
[0045]在实际实施时,例如可以通过预设的版本号来判断新版本与旧版本的数据平面表项的格式是否相同,例如,在进行版本开发时,预先规定了版本等级,属于同一个版本等级的软件程序的数据平面表项的格式不会发生变化(即相同),这样,就可以判断新版本的版本号与旧版本的版本号是否属于同一个版本等级,若是,则确定新旧版本的数据平面表项的格式相同,否则,确定新旧版本的数据平面表项的格式不同。显然,也可以通过现有的其他方式进行判断,本发明对此不做限定。
[0046]控制平面CPU运行了新版本的控制平面程序之后,遍历Section 2中的各个转发表项(即数据平面的表项),将旧版本的转发表项内容,转化为新版本的转发表项内容。也就是说,控制平面CPU对Section 2中的转发表项进行格式转化,以符合新版本的数据平面表项的格式。通过更新升级转发表项,为后续的更新升级数据平面程序做准备。
[0047]其中,表项格式的转化方式例如:旧版本的转发表项中有3个字段,新版本的表项有4个字段(与旧版本相比,有I个新增字段),那么,就需要为新增字段赋默认值,而且新增字段应该位于表项结构的最后,这样,还在运行旧版本的数据平面程序的数据平面CPU在读到新格式的转发表项时,依然能够正常工作。[0048]在进行表项格式转换时,依然存在两个平面的CPU访问同一块内存区域(SPSection 2)的临界区,所以可以通过原子操作和延迟删除来避免临界区问题。
[0049]在Section 2中的所有转发表项均转化完毕后,进入第三步。
[0050]第三步,升级数据平面程序;
[0051]本步骤应用于数据平面程序存在变化,即旧版本的数据平面程序与新版本的数据平面程序不同,数据平面程序需要升级的情况。如果数据平面程序不存在变化,则此时可以直接结束整个软件升级流程。
[0052]在实际实施时,判断新旧版本的数据平面程序是否相同的方式与上述第二步中判断新旧版本的数据平面表项格式是否相同的方式类似,判断新版本的版本号与旧版本的版本号是否属于同一个版本等级,若是,则确定新旧版本的数据平面程序相同,否则,确定新旧版本的数据平面程序不同。显然,也可以通过现有的其他方式进行判断,本发明对此不做限定。
[0053]数据平面程序的升级,可以包括以下步骤:
[0054]步骤I,控制平面CPU将新版本的数据平面程序写入Section 3,写入完成后,进入步骤2 ;
[0055]在实际实施时,若控制平面CPU将整个新版本软件程序加载到了第一内存区域,则在本步骤中,就可以将第一内存区域中的新版本的数据平面程序复制到第二内存区域中即可;若控制平面CPU仅将新版本的控制平面程序加载到了第一内存区域,则本步骤中,就可以将新版本的数据程序从文件系统、FLASH (闪存)、移动存储设备、或者内存的特殊区域中写入到第二内存区域中。本发明对此不做限定。
[0056]如图3所示,Section 3中的部分内存保存了旧版本的数据平面程序(在图3中用Old表示)。运行了新版本的控制平面程序的控制平面CPU将新版本的数据平面程序写入Reserved (预留)区域中,如图4所示,预留区域与旧版本的数据平面程序的保存位置相独立,互不重叠。图4中,R表示剩余的Reserved区域,New表示新版本的数据平面程序。
[0057]步骤2,数据平面CPU包含的多个CPU核心逐个运行Section 3中的新版本的数据平面程序(即,数据平面CPU中包含的多个CPU核心逐个从旧版本的数据平面程序切换至新版本的数据平面程序),其中,逐个是指一个CPU核心切换(或运行)完毕后,下一个CPU核心再切换(或运行)。通过逐个切换(或运行)的方式,可以确保至少有一个CPU核心能够处于运行状态,业务不会发生中断。
[0058]步骤3,在数据平面CPU包含的所有CPU核心均切换到新版本的数据平面程序后,控制平面CPU将Section 3中的旧版本的数据平面程序删除。
[0059]至此,路由器的软件升级过程完成。
[0060]从上述描述可知,若与旧版本相比,新版本软件程序的数据平面表项格式以及数据平面程序均未发生变化,那么只需执行上述的第一步即可完成整个软件升级过程,即上述实施例一;若仅新版本软件程序的数据平面表项格式发生了变化,那么只需执行上述的第一步和第二步,即可完成整个软件升级过程,该过程可以作为一个单独的实施例实施;若仅新版本软件程序的数据平面程序发生了变化,那么只需执行上述的第一步和第三步,即可完成整个软件升级过程,该过程也可以作为一个单独的实施例实施。
[0061]实施例三[0062]由上述实施例一和实施例二可知,为了实现如实施例一和二中的软件升级方法,在路由器进行软件升级时,控制平面CPU用于进行复位并仅将第一内存区域清零,在复位启动后,将新版本的控制平面程序加载到第一内存区域,并运行第一内存区域中的新版本的控制平面程序。
[0063]如图5所示,本实施例的路由器的控制平面CPU可以包括以下功能模块:判断模块10、转化模块20、写入模块30和删除模块40,其中:
[0064]在控制平面CPU运行了新版本的控制平面程序之后,判断模块10判断旧版本与新版本的数据平面表项的格式是否相同。
[0065]转化模块20在判断模块10判断旧版本与新版本的数据平面表项的格式不同时,对第二内存区域中的转发表项进行转化,以符合新版本的数据平面表项的格式。
[0066]这里,判断模块10还在判断出旧版本与新版本的数据平面表项的格式相同时,或者在转化模块20对所述第二内存区域中的旧转发表项进行转化之后,判断数据平面程序是否需要升级(具体可以通过判断旧版本的数据平面程序与新版本的数据平面程序是否相同),若不需要(即相同),则直接退出整个软件升级流程,若需要(即不同),则触发写入模块30。
[0067]写入模块30将新版本的数据平面程序写入第二内存区域中的预留区域,所述预留区域与旧版本的数据平面程序的保存位置相独立,以使得数据平面CPU中包含的多个CPU核心逐个从旧版本的数据平面程序切换至新版本的数据平面程序,其中,逐个是指一个CPU核心切换完毕后,下一个CPU核心再切换。
[0068]删除模块40在数据平面CPU包含的多个CPU核心均切换至新版本的数据平面程序之后,删除第二内存区域中的旧版本的数据平面程序,然后,退出整个软件升级流程。
[0069]由于控制平面CPU由多个CPU核心组成,则也可以认为控制平面CPU中的每一个CPU核心均如图5所示,包含图5中的四个功能模块。
[0070]综上,本发明以上实施例可以达到以下技术效果:
[0071]通过将路由器中的多核CPU分为负责数据报文转发处理的数据平面CPU和负责数据报文转发处理以外的工作(包括协议报文的处理)的控制平面CPU,将内存分为服务于控制平面CPU的第一内存区域和服务于数据平面CPU的第二内存区域,在路由器进行软件升级时,仅复位控制平面CPU并仅对第一内存区域清零,控制平面CPU在复位启动后,加载并运行新版本的控制平面程序,在此过程中,数据平面CPU维持运行状态并且第二内存区域不清零,这样,能够确保负责数据报文转发处理(即业务转发处理)的数据平面CPU在控制平面CPU进行软件升级过程中,仍然能够正常运行,进行数据报文转发处理,从而确保了业务的不中断,支持了 ISSU,提高了软转发路由器的可用性。
[0072]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
【权利要求】
1.一种路由器,所述路由器通过中央处理单元CPU转发数据报文,其特征在于,包括:多核CPU以及相互独立的第一内存区域和第二内存区域,所述多核CPU包括控制平面CPU和数据平面CPU,其中: 所述第一内存区域用于存储控制平面程序,所述控制平面程序包括路由协议的相关程序; 所述第二内存区域用于存储数据平面程序,所述数据平面程序包括数据报文转发处理的相关程序; 所述数据平面CPU用于使用所述第二内存区域中的数据平面程序处理数据报文; 所述控制平面CPU用于使用所述第一内存区域中的控制平面程序处理协议报文,以及,当所述路由器进行软件升级时,进行复位并仅将所述第一内存区域清零,在复位启动后,将新版本的控制平面程序加载到所述第一内存区域,并运行所述第一内存区域中的所述新版本的控制平面程序。
2.根据权利要求1所述的路由器,其特征在于,所述第二内存区域还用于存储所述控制平面CPU生成并下发的转发表项,所述数据平面CPU还用于按照所述第二内存区域中的转发表项转发数据报文,则,所述控制平面CPU包括: 判断模块,用于判断新版本的控制平面程序对应的新转发表项与升级前的旧版本的控制平面程序对应的旧转发表项的格式是否相同; 转化模块,用于在所述判断模块的判断结果为所述新转发表项与旧转发表项的格式不同时,对所述第二内存区域中的旧转发表项进行格式转化,以符合所述新转发表项的格式。
3.根据权利要求2所述的路由器,其特征在于,所述控制平面CPU还包括:写入模块,其中: 所述判断模块还用于在判断出所述新转发表项与旧转发表项的格式相同之后,或者在所述转化模块对所述第二内存区域中的旧转发表项进行转化之后,判断所述数据平面程序是否需要升级; 所述写入模块用于在所述判断模块判断所述数据平面程序需要升级时,将新版本的数据平面程序写入所述第二内存区域中的预留区域,所述预留区域与旧版本的数据平面程序的保存位置相独立。
4.根据权利要求3所述的路由器,其特征在于,所述数据平面CPU包括至少两个CPU核心,所述至少两个CPU核心逐个从旧版本的数据平面程序切换至新版本的数据平面程序,其中,所述逐个是指一个CPU核心切换至新版本的数据平面程序后,下一个CPU核心再切换。
5.根据权利要求4所述的路由器,其特征在于,所述控制平面CPU还包括: 删除模块,用于在所述数据平面CPU包含的所有CPU核心均切换至新版本的数据平面程序后,删除所述第二内存区域中的所述旧版本的数据平面程序。
6.一种路由器的软件升级方法,所述路由器通过中央处理单元CPU转发数据报文,其特征在于,所述路由器包括多核CPU以及相互独立的第一内存区域和第二内存区域,所述多核CPU包括控制平面CPU和数据平面CPU,所述方法包括: 在所述第一 内存区域存储控制平面程序,所述控制平面程序包括路由协议的相关程序,所述控制平面CPU使用所述第一内存区域中的控制平面程序处理协议报文;在所述第二存储区域存储数据平面程序,所述数据平面程序包括数据报文转发处理的相关程序,所述数据平面CPU使用所述第二内存区域中的数据平面程序处理数据报文; 所述控制平面CPU在所述路由器需要进行软件升级时,复位自身并将所述第一内存区域清零; 所述控制平面CPU在复位启动后,将新版本的控制平面程序加载到所述第一内存区域,并运行所述第一内存区域中的所述新版本的控制平面程序。
7.根据权利要求6所述的方法,其特征在于,在所述运行所述第一内存区域中的所述新版本的控制平面程序之后,还包括: 所述控制平面CPU判断新版本的控制平面程序对应的新转发表项与升级前的旧版本的控制平面程序对应的旧转发表项的格式是否相同; 若判断出所述新转发表项与旧转发表项的格式不同,则所述控制平面CPU对所述第二内存区域中的旧转发表项进行格式转化,以符合所述新转发表项的格式。
8.根据权利要求7所述的方法,其特征在于,在所述控制平面CPU对所述第二内存区域中的旧转发表项进行格式转化之后,或者,在判断出所述新转发表项与旧转发表项的格式相同之后,还包括: 判断所述数据平面程序是否需要升级; 若判断出所述数据平面程序需要升级,则所述控制平面CPU将新版本的数据平面程序写入所述第二内存区域中的预留区域,所述预留区域与旧版本的数据平面程序的保存位置相独立。
9.根据权利要求8所述的方法,其特征在于,在所述控制平面CPU将新版本的数据平面程序写入所述第二内存区域中的预留区域之后,还包括: 所述数据平面CPU包含的至少两个CPU核心逐个从旧版本的数据平面程序切换至新版本的数据平面程序,其中,所述逐个是指一个CPU核心切换至新版本的数据平面程序后,下一个CPU核心再切换。
10.根据权利要求9所述的方法,其特征在于,在所述数据平面CPU包含的所有CPU核心均切换至新版本的数据平面程序之后,还包括: 所述控制平面CPU删除所述第二内存区域中的所述旧版本的数据平面程序。
【文档编号】H04L12/701GK103581008SQ201210277932
【公开日】2014年2月12日 申请日期:2012年8月7日 优先权日:2012年8月7日
【发明者】魏巍 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1