报文保序方法及系统的制作方法

文档序号:7750566阅读:203来源:国知局
专利名称:报文保序方法及系统的制作方法
技术领域
本发明涉及通信领域,具体而言,涉及一种报文保序方法及系统。
背景技术
通讯网络设备的基本功能是转发报文,在保证转发性能的情况下,还必须保证报 文的转发质量(例如,保证报文转发的低时延、低抖动等)。此外,对于一些用户业务的报文 (例如用户语音、视频等)还必须保证报文转发的顺序(简称为保序),即同一个数据流的 报文从进入网络设备到离开网络设备的顺序应该严格相同。目前,为了提高网络设备的报 文处理能力,多核处理器已经被应用在网络通讯设备上了。在多核处理器系统中,报文的保序可以通过硬件和软件来实现。其中,利用硬件实 现的保序功能(例如,利用硬件保序队列来实现保序,或者利用报文标签(tag)值切换等) 对系统整体性能影响比较小、易于维护。但是,利用硬件来实现保序在不同的硬件架构需要 使用不同的硬件机制来实现,因而造成了对硬件依赖性比较大、通用性不够强,需要不同的 专业人员来维护。软件保序利用软件保序算法的灵活性和通用性,可以屏蔽硬件结构的差异,具有 移植和维护方便的特点。目前的软件保序策略分为以下两种一、按流分发按流分发保序是将同一用户的报文分发到同一个线程上处理。图1是根据相关技术 的按流分发报文的示意图,硬件在接收单元接收到报文之后,首先按照一定规则将报文分成不 同的数据流。然后将不同的数据流分发到不同的核上处理。这样可以将同一用户的报文被分发 到同一个核上进行处理,可以保证报文处理的顺序。由于不同流间的报文相互间没有联系,不 同流的报文顺序是不需要考虑的。按流分发的实现过程比较简单,但是由于多核处理器的硬件 分类单元对报文的分类能力有限,不能解析出所有的用户报文。并且由于用户报文的随机性, 容易出现线程之间负荷分担不均勻,导致有的线程比较空闲,而有的线程负荷比较大。二、序列号保序序列号保序是根据报文序列号和期望序列号并通过期望序列号的不断推进来实 现报文的保序。图2是根据相关技术的序列号报文保序的示意图,硬件接收单元将从同一 端口接收的报文打上一个序列号(Pkt_seq),其中,每接收一个报文,pkt_Seq就会递增1, 不同端口的报文序列号是独立编号、互不影响的。然后,硬件分发单元按照轮询的方式将报 文分担到每个线程进行并行处理。在报文处理完毕之后,将报文送入保序单元。保序单元预 先为每个接收端口分配一个期望序列号(eXp_seq)和保序队列(order_qUe),期望序列号 和保序队列为每个线程都能共同访问的共享变量。图3是根据相关技术的保序队列结构示 意图,保序队列不同于一般的先入先出队列,报文根据自身序列号在保序队列中有一个对 应位置,期望序列号指向保序队列中当前的保序位置。保序队列节点有两个特性一是节点 状态,包括有效和无效,其中,“有效”表示线程可以处理当前节点的报文;二是节点动作,根 据业务要求可以将用户报文分为保序和非保序,区别在于是否需要保序单元发送该报文。
报文在进入保序单元之后,线程判断当前处理报文的序列号与期望序列号是否相 同,如果相同则通过原子锁(spirulock)的方式(即,线程通过原子锁的方式来操作期望序 列号eXp_Seq和保序队列)锁住当前报文在保序队列中的位置,处理该报文,并将期望序列 号递增1,然后继续判断保序队列下一个节点的状态,直到队列下一个节点状态无效;否则 将报文缓存到保序队列中,并返回接收新的报文。上述的在报文进入保序单元之后,线程是根据spirulock的方式来锁住当前报文 在保序队列中的位置。发明人发现,在网络流量比较大的情况下,这样的处理方式,会使获 得锁的线程一直处于保序发送状态,如果这个线程还要执行其他功能,那么由于该线程一 直处于保序发送状态而无法执行其应该执行的功能。从而有可能导致影响单板性能或流控 机制,引起流量抖动。

发明内容
本发明的主要目的在于提供一种报文保序方案,以至少解决上述问题。根据本发明的一个方面,提供了 一种报文保序方法,包括以下步骤多个线程竞争 原子锁;得到所述原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后, 释放所述原子锁。根据本发明的另一个方面,提供了一种报文保序系统,包括竞争模块,用于使多 个线程竞争原子锁;处理模块,用于使得到所述原子锁的线程对保序队列中的预定个数的 报文进行处理,并在处理之后,释放所述原子锁。通过本发明,采用多个线程竞争原子锁;得到该原子锁的线程对保序队列中的预 定个数的报文进行处理,并在处理之后,释放该原子锁。解决了获取到原子锁的线程一直处 于保序发送状态而无法执行其应该执行的功能而导致影响单板性能或流控机制的问题,进 而完善了保序处理。


此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发 明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中图1是根据相关技术的在多核处理器系统中按流分发报文的示意图;图2是根据相关技术的在多核处理器系统中采用序列号报文保序的示意图;图3是根据相关技术的保序队列结构示意图;图4是根据本发明实施例的报文保序方法的流程图;图5是根据本发明实施例软件序列号报文保序策略报文动作类型示意图;图6是根据本发明实施例的报文保序策略过程结构示意图;图7是根据本发明实施例的保序单元多线程保序示意图;图8是根据本发明实施例五的软件序列号报文保序策略流程图;图9是根据本发明实施例六的软件序列号报文保序策略异常保护机制流程图。
具体实施例方式下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的
5情况下,本申请中的实施例及实施例中的特征可以相互组合。实施例一图4是根据本发明实施例的报文保序方法的流程图,该流程包括以下步骤步骤S402,多个线程竞争原子锁;步骤S404,得到该原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放该原子锁。由于在现有技术中,一个线程在获取到原子锁之后,只要保序队列中有报文需要 处理,那么该线程就会一直进行报文保序的处理,那么该线程就无法执行其应该执行的功 能,从而就会产生相应的问题。通过上述步骤S404,得到该原子锁的线程在对一定数量(例 如,一个报文或者设置一个阈值)的报文进行保序处理之后,释放该原子锁,这样该线程就 不会一直处理报文保序的处理,从而可以解决现有技术中的问题。获取原子锁的方式可以包括两种一种是线程在获取不到原子锁的情况下会一直 等待,直到该线程获取到原子锁(例如,spinjock);另一种是获取原子锁失败的线程直接 返回(例如,spinjrylock)。如果在本实施例中采用第一种方式,虽然可以在一定程度上 解决现有技术中的问题,但是,如果一个线程一直未获得原子锁,也会影响该线程功能的执 行。因此,采用第二种处理方式可以最大程度解决现有技术中的问题。优选地,在获取原子锁之前,可以对节点的状态是否有效和序列号与期望序列号 是否相等进行判断。其中,如果判断保序队列中的当前节点的状态,则在当前节点的状态为 有效的情况下,并且,当前报文序列号和期望序列号相同的情况下,多个线程尝试获取原子 锁。优选地,在线程得到原子锁之后,进行保序处理时,对保序队列中的当前节点的状 态和/或当前报文的序列号和期望序列号是否相同进行判断。其中,如果获取原子锁的线 程判断保序队列中的当前节点的状态,在所述当前节点的状态为有效的情况下,得到所述 原子锁的线程对所述一个或多个报文进行处理;如果获取所述原子锁的线程比较当前报文 的序列号和期望序列号,则在两者相同的情况下,将所述当前报文发送至对应的端口。如果 在尝试获取原子锁之前和进行保序处理时均采用了上述的判断,则可以提高安全性。优选地,在将当前报文发送至对应的端口之后,获取所述原子锁的线程进行下一 个报文的处理或者释放所述原子锁。如果在处理完一个报文之后就释放原子锁,可以使其 他的线程增加进行保序处理的机会,如果在处理完多个报文之后再释放原子锁,可以在一 定程度上提高保序处理的速度,因此,可以根据实际的需要进行试验以选择一个最佳的阈 值。在现有的保序处理中,由于是采用的一个线程在获取到原子锁之后一直进行保序 处理,这样,在用户报文序列号出现丢失等异常情况下,缺乏异常保护机制,导致保序模块 死锁。在本实施例中采用以下的手段来解决这个问题为每一个线程均申请一个共享变量(即,每个线程均对应一个共享变量),这样, 线程在接收报文之前,判断该线程的共享变量的值,在该线程的共享变量的值不是初始值 的情况下,确定上一个报文的序列号丢失,并将丢失的报文序列号送入保序单元释放该丢 失的报文序列号;在该线程的共享变量的值是初始值的情况下,接收报文,并将接收到的报 文的序列号赋给该线程的共享变量,在接收到的报文进入所述保序单元之后,将共享变量的值恢复为初始值。通过上述的异常保护机制,在序列号出现丢失的情况下对保序单元起到了保护作用。在本实施例中,还提供了一种报文保序系统,包括竞争模块、处理模块,其中,竞争模块,用于使多个线程竞争原子锁;处理模块,用于使得到该原子锁的线程对保序队列中 的预定个数的报文进行处理,并在处理之后,释放该原子锁。优选地,处理模块用于使得到原子锁的线程比较当前报文的序列号和期望序列 号,在两者相同的情况下,将当前报文发送至对应的端口 ;在将当前报文发送至对应的端口 之后,获取原子锁的线程进行下一个报文的处理或者释放该原子锁。优选地,该系统还可以包括异常处理模块,该异常处理模块用于使多个线程中的 每个线程在接收报文之前,判断该线程的共享变量的值,在该线程的共享变量的值不是初 始值的情况下,确定上一个报文的序列号丢失,并将丢失的报文序列号送入保序单元释放 该丢失的报文序列号;其中,每个线程均对应一个共享变量;在该线程的共享变量的值是 初始值的情况下,接收报文,并将接收到的所述报文的序列号赋给该线程的共享变量,在接 收到的报文进入保序单元之后,将共享变量的值恢复为初始值。实施例二本实施包括了实施例一及其变型实施例的实施方式,提供了一种报文保序方法, 包括如下步骤步骤S2,为每个硬件接收端口配置一个保序缓存队列和期望序列号;步骤S4,保序定义点(报文序列号的分配与提取),为每个端口的接收报文分配一 个递增的保序序列号,并将报文按一定规则分发到并行运行的不同线程上处理;步骤S6,多核处理单元中各个线程接收到报文后提取报文序列号,按照业务用户 需要将报文分为保序和非保序两种,在报文处理终结点将报文送入保序单元。例如,可以根 据用户报文的类型及需求将报文分为两种类型保序和非保序。保序报文需要在保序单元 做发送处理,非保序报文不需要保序发送,只需要“释放序列号”。在报文处理终结点需要向 保序单元传递报文接收端口号、报文序列号及报文类型;步骤S8,保序恢复点(即,保序单元入口),保序单元采用先缓存再保序发送的方 法对报文做保序发送,例如,报文被缓存到保序缓存队列之前可以判断队列是否已满,判断 条件为报文序列号与期望序列号的差值绝对值是否大于保序队列长度,如果大于则进入等 待状态,否则执行缓存操作。然后,利用spirutrylock机制访问当前期望序列号在保序缓 存队列指示的位置,trylock成功后判断节点状态是否有效及节点序列号是否与期望序列 号相等,如果满足条件,则发送该报文,节点状态置为无效并“预取”该节点的下一个位置, 期望序列号递增1,释放该节点原子锁,然后继续spirutrylock “预取”的下一个节点,其 中,“预取”下一个节点操作要放在期望序列号递增1之前。优选地,线程在先缓存再保序发送的过程中,根据报文接收端口号和报文序列号 将报文缓存到保序队列相应节点位置,锁住该节点后记录下报文的发送信息、报文序列号 及报文类型,将该节点标记为有效并释放节点原子锁。优选地,在该步骤中,线程可以在spirutrylock前后两次判断保序条件节点状 态是否有效和节点序列号是否与期望序列号相等。如果不满足条件,则该线程直接返回。
在本实施例中,spirutrylock机制保证了多线程做保序发送,避免了大流量下单 线程做保序发送。实施例三 在本实施例中提供了一种异常保序机制,异常保护机制需要每个线程维护一个线 程序列号,并初始化为-1。线程序列号记录当前报文序列号,在报文进入保序单元之后线程 序列号被置为-1。线程在接收下一个报文之前判断线程序列号是否为-1,如果不是则需要 将该序列号送入保序单元做“释放序列号”操作,其中,“释放序列号”表示报文不需要保序 发送,只需要在Spin_tryl0Ck成功后将期望序列号递增1。通过上述异常保序机制,如果中 间出现流程错误导致序列号丢失,则序列号丢失的报文会被检测出来,能够保证不影响其 它报文的顺序。在本实施例中保序恢复点是协同操作的多个实体,由多个保序恢复点实体共同完 成序列号的恢复操作,实现保序的高效性。实施例四本实施例包括了实施例一及其变型实施例的实施方式,提供了一种报文保序方 法,首先对保序定义点、报文处理单元、保序恢复点进行说明保序定义点为物理端口接收 的每个报文分配一个序列号;报文处理单元多个核并行处理报文,并在报文处理终结处 向保序单元传递报文的“动作类型”。图5是根据本发明实施例软件序列号报文保序策略报 文动作类型示意图,如图5所示,动作类型包括保序和非保序,其中,保序报文的动作是保 序发送并释放序列号,非保序报文的动作是释放序列号;保序恢复点在使用保序队列和 期望序列号的基础上,利用多核处理器的spirutrylock机制实现多线程保序。该方法包括如下步骤步骤S22,作为保序定义点,包含报文序列号的分配及提取,其中,保序定义点为接 收报文分配序列号,并将报文轮询到各个线程;各个线程提取并记录接收报文序列号;步骤S24,多核并行处理过程的差异性可能导致报文出现“乱序”,在报文处理终结 处调用保序单元接口,向保序单元传递报文信息、接收端口及“动作类型”等;步骤S26,实现报文保序发送,可以分为四个环节(1)存储(store),线程根据接 收端口号和序列号计算报文在保序队列中的位置,报文在store之前判断保序队列是否已 满未满,则利用原子锁spinjock锁住该节点,将报文缓存到保序队列并置该队列节点 为有效,然后释放原子锁进入下一个环节;如果已满,则进入等待状态,如果等待时间超过 阈值后,需要将窗口向前推动并发送当前处理报文;(2) spin_trylock,获取当前期望序列 号eXp_Seq,并计算其在保序队列中的位置,如果该位置节点有效,则多个线程同时spin_ trylock “争抢”该节点原子锁,spirutrylock的效果是每次有且仅有一个线程会获取原子 锁成功,而spin_tryl0Ck失败的线程则直接返回;spin_tryloCk成功后还需要判断另外两 个条件节点状态有效、节点序列号与期望序列号相等,条件同时满足则进入下一个环节, 否则释放原子锁后,直接返回。(3)执行(Do_Job),首先线程判断节点的“动作类型”,保序 报文被发送至端口,非保序报文则只需要“释放序列号”,然后“预取”当前节点的下一个位 置,并将期望序列号递增1并释放该节点原子锁,最后spirutrylock“预取”节点的原子锁, 重复环节⑵和⑶。下面通过实施例五和实施例六并结合附图进行说明。图6是根据本发明实施例的报文保序策略过程结构示意图,如图6所示,在保序定义点处,每个接收报文被分配一个序 列号,当报文被轮询分发到各个线程后会导致同一数据流的报文被轮询到各个线程,报文 经过多线程并行处理后必须要经过保序恢复点,按照接收序列号和期望序列号来实现报文 的保序发送。图7是根据本发明实施例的保序单元多线程保序示意图,如图7所示,保序单 元在实现保序算法过程中采用了 spirutrylock机制,保证线程参与保序的均勻性和负荷 分担,避免大流量下个别线程的负荷过重。实施例五 图8是根据本发明实施例五的软件序列号报文保序策略流程图,如图8所示,该流 程包括如下步骤步骤S801 为保序单元创建保序队列及期望序列号。为每个接收端口创建一个保序队列,队列长度为2的整数次幂,长度大小可以预 先设置。每个接收端口对应一个期望序列号,期望序列号与接收报文序列号长度大小相同,
并一一对应。步骤S802 保序定义点,保序定义点为接收到的报文分配一个连续递增的序列 号,并按照一定的规则分发到并行运行的线程上。步骤S803 多线程处理单元提取保序定义点为报文分配的序列号,保存在报文描 述符中,并完成对报文的处理。由于是多个核并行处理,报文在处理过程中可能发生“乱序”。在报文处理的终结 点,线程将报文送入保序单元,需要向保序单元传递以下信息报文接收序列号、接收端口 号、保序动作类型。步骤S804 保序恢复点,从接口单元接收的报文被送入保序单元进行顺序恢复。步骤S805 判断保序队列状态,报文缓存到保序队列。在报文被缓存到保序窗口之前需要判断保序窗口是否已满,如果保序窗口不满, 则可以继续向保序窗口中缓存报文,如果保序窗口满,需要等待一段时间,如果在等待的一 段时间内,窗口依然还处于满的状态,则向前滑动窗口,将窗口中处于最前面的报文发送出 去。判断条件为当前序列号(cur_seq)与期望序列号(expectseq)差值绝对值是否小于 “保序窗口”的大小(0Q_WIND0W_SIZE),即cur_seq-expect_seq >= 0Q_WIND0ff_SIZE“保序窗口”的大小可以自由配置,最大长度为保序队列长度-1。步骤S806 报文节点store过程。通过报文接收序列号和接收端口号计算出该报文在保序队列中的位置,并获取该 节点的原子锁。通过判断报文的保序动作类型,将报文分为保序与不保序两种。这两种报 文向保序队列缓存的共同信息为报文序列号、保序动作类型;不同点是保序报文需要传 递的报文的发送信息,例如,报文数据地址,发送端口等,而不保序报文不需要。最后将保序 队列节点置为有效,并释放该节点原子锁。步骤S807 :spin_trylock,多个线程“竞争”期望序列号。计算当前期望序列号在保序队列中的对应位置,获取该位置节点的原子锁。如果 该节点有效,则多个线程同时spirutrylock “争抢”该原子锁,spir^trylock的效果是最后 有且仅有一个线程会获取该原子锁成功,其他线程获取原子锁失败后则直接返回;获取原子锁成功后还需要继续判断该节点是否满足两个条件节点状态有效、节点序列号与期望 序列号相等。条件满足则进入下一个环节,否则释放原子锁后,直接返回。 步骤S808 :Do_Job, spin_trylock 成功后的线程操作。线程获取该节点对应的原子锁之后,判断节点的“保序动作”来Do_Job 需要保序 发送的报文被发送至端口,不需要保序的报文则只需要“释放序列号”。Do_Job完成后,该 节点被置位无效,并“预取”期望序列号对应的下一个节点,最后将期望序列号加1并释放 该节点原子锁。获取“预取”节点的原子锁,重复步骤S807。实施例六图9是根据本发明实施例六的软件序列号报文保序策略异常保护机制流程图,该 流程包括如下步骤步骤S901 每个线程维护一个自己的线程序列号thrd_seq ;为每个线程申请一个 共享变量,初始化值设置为-1。步骤S902 线程序列号thrd_Seq记录当前处理报文的序列号;在线程提取接收报 文序列号的地方,将接收报文序列号赋给线程序列号thrd_seq。步骤S903 保序恢复点处将线程序列号thrd_seq置为_1,表示该报文序列号已经 被正常“释放”。步骤S904 线程在每次接收下一个报文之前判断线程序列号的有效性。判断线程序列号thrd_Seq是否等于-1,相等说明线程处理的上一个报文的序列 号已经被正常“释放”,重复步骤S902 ;否则说明上一个报文的序列号“丢失”,需要将thrd_ seq送入保序单元来“释放”报文序列号,进入保序单元。本发明的上述实施例实现过程简单,能够克服大流量情况下出现的单线程保序现 象,避免个别线程负荷过重,能很好的解决流控失效问题。异常保护机制使保序单元在序列 号丢失及错误的情况下也能正常工作,因此,保序策略更加完善,保序功能更加稳定有效。 通过本发明的上述实施例,克服了现有软件保序的不足,实现一种更加完善、稳定的软件保 序方法。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用 的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成 的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储 在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示 出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或 步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技 术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修 改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
一种报文保序方法,其特征在于,包括以下步骤多个线程竞争原子锁;得到所述原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放所述原子锁。
2.根据权利要求1所述的方法,其特征在于,判断所述保序队列中的当前节点的状态;在所述当前节点的状态为有效的情况下,所述多个线程竞争所述原子锁。
3.根据权利要求1所述的方法,其特征在于,判断当前报文的序列号和期望序列号是否相同;在相同的情况下,得到所述原子锁的线程对所述当前节点的报文进行保序处理。
4.根据权利要求1至3中任一项所述的方法,其特征在于,得到所述原子锁的线程对所 述预定个数的报文进行处理包括获取所述原子锁的线程判断所述保序队列中的当前节点的状态,在所述当前节点的状 态为有效的情况下,得到所述原子锁的线程对所述预定个数的报文进行处理。
5.根据权利要求1至3中任一项所述的方法,其特征在于,得到所述原子锁的线程对所 述预定个数的报文进行处理包括得到所述原子锁的线程比较当前报文的序列号和期望序列号,在两者相同的情况下, 将所述当前报文发送至对应的端口;在将所述当前报文发送至对应的端口之后,得到所述原子锁的线程进行下一个报文的 处理或者释放所述原子锁。
6.根据权利要求1所述的方法,其特征在于,还包括每个线程在接收报文之前,判断该线程的共享变量的值,在该线程的共享变量的值不 是初始值的情况下,确定上一个报文的序列号丢失,并将丢失的报文序列号送入保序单元 释放所述丢失的报文序列号;其中,所述每个线程均对应一个共享变量;在该线程的共享变量的值是初始值的情况下,接收报文,并将接收到的所述报文的序 列号赋给该线程的共享变量,在接收到的所述报文进入所述保序单元之后,将所述共享变 量的值恢复为初始值。
7.根据权利要求1所述的方法,其特征在于,未得到所述原子锁的线程返回。
8.一种报文保序系统,其特征在于,包括竞争模块,用于使多个线程竞争原子锁;处理模块,用于使得到所述原子锁的线程对保序队列中的预定个数的报文进行处理, 并在处理之后,释放所述原子锁。
9.根据权利要求8所述的系统,其特征在于,所述处理模块,还用于使得到所述原子锁的线程比较当前报文的序列号和期望序列 号,在两者相同的情况下,将所述当前报文发送至对应的端口 ;并在将所述当前报文发送至 对应的端口之后,获取所述原子锁的线程进行下一个报文的处理或者释放所述原子锁。
10.根据权利要求8或9所述的系统,其特征在于,还包括异常处理模块,用于使所述多个线程中的每个线程在接收报文之前,判断该线程的共 享变量的值,在该线程的共享变量的值不是初始值的情况下,确定上一个报文的序列号丢失,并将丢失的报文序列号送入保序单元释放所述丢失的报文序列号;其中,所述每个线程 均对应一个共享变量;在该线程的共享变量的值是初始值的情况下,接收报文,并将接收 到的所述报文的序列号赋给该线程的共享变量,在接收到的所述报文进入所述保序单元之 后,将所述共享变量的值恢复为初始值。
全文摘要
本发明公开了一种报文保序方法及系统,该方法包括以下步骤多个线程竞争原子锁;得到该原子锁的线程对保序队列中的预定个数的报文进行处理,并在处理之后,释放该原子锁。通过本发明完善了保序处理。
文档编号H04L12/56GK101854302SQ201010190599
公开日2010年10月6日 申请日期2010年5月27日 优先权日2010年5月27日
发明者刘志远, 曹彪, 赵丰收 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1