一种维护表项的方法和装置的制作方法

文档序号:6463137阅读:155来源:国知局
专利名称:一种维护表项的方法和装置的制作方法
技术领域
本发明涉及网络通信技术,特别涉及一种维护表项的方法和装置。
技术背景三态内容可寻址存寸诸器(TCAM, Ternary Content Addressable Memory) 是随着网络设备处理速度不断提高而衍生出的一种高效的专用芯片。TCAM 可以根据输入的内容得到地址,当输入一个内容时,TCAM利用该输入的内 容对TCAM中存储的数据进行搜索,如果有匹配的数据,则命中该数据对 应的表项,并获取该命中表项的内容。图1为现有技术中TCAM的结构示意图,如图1所示,表项存储模块 中存储各表项,其中,每条表项都与一个索引对应,当表项管理模块通过驱 动模块在表项存储模块中添加一个表项时,驱动模块可以获取该表项的索引 并进行存储,表项管理模块可以利用驱动模块中各表项的索引对表项进行更 新和删除。另外,表项存储模块中存储的每条表项都具有各自的命中标识, 各命中标识的初始值为O,当内容搜索模块搜索到匹配的数据时,将该数据 对应的表项的命中标识置1,代表该表项被命中,只有当驱动模块读取该命 中标识后,才将该命中标识清0。在现有技术中,并没有存在针对TCAM中表项的老化机制,因此,仅 能够手工对TCAM中的表项进行删除,否则,长时间没有命中的表项则仍 然会占用TCAM的存储空间,从而造成TCAM的存储负担。发明内容本发明提供了一种维护表项的方法和装置,能够自动地删除TCAM中 老化的表项,从而减轻TCAM的存储负担。一种维护表项的方法,该方法包括以预设的时间Tl为周期对所有表项进行遍历,并对遍历到的当前表项执行 以下步骤判断当前表项是否命中,如果否,增加该当前表项对应的不命中计数值加 1,并判断当前表项的不命中计数值是否达到预设的计数阈值M,如果是,则 上报当前表项的老化信息,根据该老化信息删除所述当前表项。一种维护表项的装置,该装置包括不命中计数值存储模块、老化模块和 表项管理模块;所述不命中计数值存储模块,用于存储各表项的不命中计数值; 所述老化模块,用于以预设的时间Tl为周期对所有表项进行遍历,并获取 遍历到的当前表项的命中标识,判断所述当前表项是否命中,如果否,增加所 述当前表项的不命中计数值,并判断当前表项的不命中计数值是否达到预设的 计数阈值M,如果是,则向所述表项管理模块上报当前表项的老化信息,继续 进4亍下一表项的遍历;所述表项管理模块,用于接收所述老化模块上报的所述老化信息后,根 据所述老化信息删除所述当前表项。由以上技术方案可以看出,本发明提供的方法和装置以预设的时间Tl 为周期对所有表项进行遍历,并对遍历到的当前表项执行以下步骤判断当 前表项是否命中,如果否,增加该当前表项对应的不命中计数值,并判断当 前表项的不命中计数值是否达到预设的计数阈值M,如果是,则上报当前表 项的老化信息,根据该老化信息删除当前表项。可以利用该方法对TCAM 表项在T1时间内连续不命中次数进行记录,当达到预设的计数阈值M时上 报该表项的老化信息,表项管理模块可以根据该表项的老化信息对该表项进 行删除,以此提供了一种针对TCAM中表项的定时老化机制,从而实现自 动地删除TCAM中老化的表项,减轻TCAM的存储负担。


图1为现有技术中TCAM的结构示意图;图2为本发明实施例提供的方法流程图;图3为本发明实施例提供的老化属性位图数组结构示意图;图4为本发明实施例提供的不命中计数数组示意图;图5为本发明实施例提供的装置结构图;图6为采用本发明的方法和装置实现定时老化的时序图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体 实施例对本发明进行详细描述。本发明提供的方法主要包括以预设的时间Tl为周期对表项进行遍历, 并对各表项执行以下步骤判断当前表项是否命中;如果否,增加该当前表 项对应的不命中计数值,并判断当前表项的不命中计数值是否达到预设的计 数阔值M,如果是,则上报该表项的老化信息,根据该老化信息删除当前表 项。下面以图2为例对本发明提供的方法进行详细描述,图2为本发明实施 例提供的方法流程图,如图2所示,该方法可以包括以下步骤 步骤201:读取当前表项的老化属性标识。预先存储TCAM中各表项的老化属性标识,通常TCAM中的表项可以 分为静态表项和可老化表项,其中,静态表项通常为重要表项或核心表项, 静态表项不能被删除,不可老化;可老化表项是指可老化的普通表项,可以 设置其老化时间为T,则针对该表项的不命中计数值的计数阈值M为M = T/T1。 (1)本步骤中的老化属性标识可以根据各表项的索引以老化属性位图数组 的形式进行存储,该老化属性位图数组体现了表项索引和表项老化属性之间 的对应关系,通过该对应关系可以确定各表项的老化属性。当然,也可以采用除了老化属性位图数组之外的其它表现形式。当表项为静态表项时,可以预先设置该表项对应的老化属性标识为0, 表项为可老化表项时,可以预先设置该表项对应的老化属性标识为1,按照 表项的索引按位填到老化属性位图数组中。在此,除了0和1之外,还可以 采用其它方式表征静态表项和可老化表项,并不具体限定表征静态表项和老 化表项的老化属性标识的形式。每个表项的索引Handle为表项在TCAM中的索引基址Base加表内偏 移Offset,可以表示为Handle = Base + Offset。当一条表项添加成功时, 驱动模块会将表项索引返回给表项管理模块,表项管理模块将该表项索引和 该表项的老化属性按表项索引的顺序添加到老化属性位图数组中。如果老化属性位图数组为32位的位图数组,则老化属性位图数组的大 小ArraySize可以为当表项数目为32的整数倍时,ArraySize = Size/32;当 表项数目不是32的整数倍时,ArraySize = Size/32 + 1。其中,Size为表项的 数目,/表示求商并取整。第N个表项的老化属性标识在位图数组中的数组序号Index为Index =N/32;第N个表项在序号为Index的数组中的位数Bit为Bit=N%32。其 中,%表示取余数。图3为本发明实施例提供的老化属性位图数组结构示意 图,如图3所示,该老化属性位图数组共ArraySize条数组,每条数组中包 含32位,其中,阴影部分的位置对应的位图数组序号为Index,对应的位数 为Bit。本方法中以预设的时间Tl为周期对所有表项进行遍历,也就是以预设 的时间Tl为周期对老化属性位图数组中的老化属性标识进行遍历。步骤202:根据当前表项的老化属性标识,判断当前表项是否可老化, 如果是,则执行步骤203;如果否,则执行步骤209。步骤203:根据该老化属性标识的位置计算该表项的索引。由步骤201中关于老化属性位图数组中老化属性标识位置的描述,可以 得出,老化属性标识在老化属性位图数组中的位置与索引之间的对应关系为Handle = Index x 32 + Bit + Base。步骤204:根据该表项的索引读取该表项的命中标识,读取后将该表项 的命中标识清零。同样,各表项的命中标识也可以以命中标识位图数组的形式进行存储, 该命中标识位图数组的形式可以与老化属性位图数组相同。通常,表项命中时,其命中标识为1,表项不命中时,其命中标识为O。 同样,除了0和1之外,还可以釆用其它方式表征表项不命中和命中,本发 明也不具体限定命中标识的形式。驱动模块可以以固定的采样周期T2对各表项的命中标识进行采样,如 果该T2-T1,即在T1内进行单次采样,则驱动模块将釆样到的命中标识按 照表项索引的顺序依次添加到命中标识位图数组中;如果该T2 = Tl/n,其 中,n为自然数,即Tl时间内进行n次釆样,则驱动模块可以将n次采样 到的命中标识以按位或的形式添加到命中标识位图数组中,即将n次采样到 的各表项的命中标识进行或运算后,将预算后的结果按照表项索引的顺序保 存到命中标识位图数组中。在T1时间内,某表项只要有一次命中,则该表 项的命中标识为1。本步骤可以根据该表项的索引,从该命中标识位图数组中读取该表项的 命中标识;当然,驱动模块也可以不采样命中标识并以位图数组的形式存储 各表项的命中标识,此时,可以根据表项的索引,直接从表项存储单元中读 取该表项的命中标识。步骤205:判断读取的该表项的命中标识是否为1,如果否,则执行步 骤206;如果是,则执行步骤212。步骤206:将该表项对应的不命中计数值加1。在该方法中可以对应每一表项设置计数器,记录在老化周期内表项的连 续不命中次数。每遍历到该表项,如果该表项的命中标识为0,则将该表项 对应的不命中计数值加l。本实施例中,增加表项对应的不命中计数值以加 1为例,在此不对具体增加表项不命中计数值的方案进行限定。各表项的不命中计数值可以以不命中计数数组的形式进行存储,如图4 所示,图4为本发明实施例提供的不命中计数数组示意图。步骤207:判断该表项对应的不命中计数值是否达到预设的计数阈值M, 如果是,则执行步骤208,否则,执行步骤209。步骤208:将该表项对应的不命中计数值清零,上报该表项的老化信息。本步骤中,该表项对应的不命中计数值达到预设的计数阈值M,说明该 表项已经达到老化时间而未被命中,因此,可以将该表项的老化信息上报表 项管理模块;表项管理模块接收到该表项的老化信息后,可以通过驱动模块 对该表项进行删除。步骤209:判断本次T1周期内遍历的表项数目是否达到预设数目Num 的整数倍,如果是,则执行步骤210,如果否,则执行步骤211。为了不使表项遍历长时间的占用CPU,可以对表项进行分片,每一片 中包含的表项数目可以为Num,该Num可以为Size/P,其中,P为将所有 表项分成的片数。每完成一片内的表项遍历后,可以将任务挂起T3时间, 使得CPU可以及时处理其它任务。每一片中包含的表项数目均为Num仅为 该实施例提供的一种方案,还可以根据具体需要,设置各分片中的表项数目 不同。步骤210:在T3时间内暂停遍历表项,即将遍历任务挂起T3时间。 对所有表项遍历一次的时间Tl可以表示为Tl=Px (T3 + t) ; (2) 其中,t为遍历该分片内表项所用的时间,通常t远远小于T3,相对于 T3可忽略不计。步骤211:读取下一个表项的老化属性标识,转至执行步骤202。步骤212:将该表项对应的不命中计数值清零,执行步骤209。以上是对本发明提供的方法的描述,下面对本发明提供的装置进行详细描述,图5为本发明实施例提供的装置结构图,如图5所示,该装置可以包括不命中计数值存储模块510、老化模块520和表项管理模块530。不命中计数值存储模块510,用于存储各表项的不命中计数值。老化模块520,用于以预设的时间Tl为周期对所有表项进行遍历,并获取 遍历到的当前表项的命中标识,判断当前表项是否命中,如果否,增加当前表 项的不命中计数值,并判断当前表项的不命中计数值是否达到预设的计数阈值 M,如果是,则向表项管理模块530上报当前表项的老化信息,继续进行下一 表项的遍历。另外,老化模块520如果确定当前表项不命中,则可以将不命中计数值存 储模块510中存储的当前表项的不命中计数值清零,继续进行下一表项的遍历。表项管理模块530,用于接收老化模块上报的老化信息,并根据该老化信 息删除当前表项。表项管理模块530接收到该表项的老化信息后,可以将该表项进行删除。 其中,老化模块520可以包括遍历子模块521、命中标识获取子模块522、第一判断子模块523、计数值处理子模块524、第二判断子模块525和上报子模块526。遍历子才莫块521,用于以预设的时间Tl为周期对所有表项进行遍历。 命中标识获取子模块522,用于获取遍历子模块遍历到的当前表项的命中 标识。第一判断子模块523,用于根据命中标识获取子模块获取的命中标识,判 断当前表项是否命中,如果是,则向计数值处理子模块524发送命中通知,否 则,向计数值处理子模块524发送不命中通知。计数值处理子模块524,用于接收到命中通知后,将不命中计数值存储模 块522中存储的当前表项的不命中计数值清零,并触发遍历子模块521进行下 一表项的遍历;接收到不命中通知后,将不命中计数值存储模块510中存储的 当前表项的不命中计数值加1,并向第二判断子模块525发送执行通知。第二判断子模块525,用于接收到执行通知后,判断当前表项的不命中计 数值是否达到预设的计数阈值M,如果是,则向上报子模块526发送上报通知, 触发遍历子模块521进行下一表项的遍历。上报子模块526,用于接收到上报通知后,向表项管理模块530上报当前表项的老化信息。该装置还可以包括老化属性标识存储模块540,用于存储各表项的老化 属性标识。该老化属性标识存储模块540可以以老化属性位图数组的形式,按照各表 项索引的顺序存储各表项的老化属性标识。遍历子模块521以预设的时间Tl 为周期对所有表项进行遍历可以为以预设的时间Tl对老化属性标识存储^t块 540存储的老化属性位图数组中各表项的老化属性标识进行遍历。此时,老化模块520还可以包括老化属性读取子模块527和第三判断子 模块528。老化属性读取子模块527,用于从老化属性标识存储模块540中读取当前 表项的老化属性标识。第三判断子模块528,用于根据老化属性读取子模块527读取的老化属性 标识,判断当前表项是否可老化,如果是,则触发命中标识获取子模块522获 取遍历子模块521遍历到的当前表项的命中标识,否则触发遍历子冲莫块521进 4亍下一表项的遍历。该装置还可以包括表项存储模块550、驱动模块560和命中标识位图数 组存储模块570。表项存储模块550,用于存储各表项的命中标识。命中标识位图数组存储才莫块570,用于存储命中标识位图数组。驱动模块560,用于以预设的采样周期T2对表项存储模块550中存储的各 表项的命中标识进行釆样,并将采样到的命中标识保存到命中标识位图数组中。老化模块520从命中标识位图数组存储模块570中获取当前表项的命中标识。如果T2 = Tl/n,则上述驱动模块560可以包括采样子模块561和或运算子 模块562。采样子模块561,用于以预设的采样周期T2对表项存储模块550中存储的 各表项的命中标识进行采样。或运算子模块562,用于将在T2周期内釆样到的命中标识进行或运算,并将运算后的结果按照表项索引的顺序保存到命中标识位图数组中。其中,上述的遍历子模块521可以包括遍历处理子模块5211、第四判断 子模块5212和延时定时器5213。遍历处理子模块5211,用于对以预设的时间Tl为周期对所有表项进行遍历。第四判断子模块5212,用于判断当前表项是否为所在分片中的而最后 一个 表项,如果是,则向延时定时器5213发送计时通知,否则触发遍历处理子模块 5211对当前表项的下一表项进行遍历。延时定时器5213,用于接收到计时通知后,开始计时,当达到预设的计时 门限T3时,触发遍历处理子模块5211对当前表项的下一表项进行遍历。上述不命中计数值存储模块510、老化模块520、老化属性标识存储模块 540可以设置于一个模块中实现,驱动模块560、命中标识位图数组存储模块 570可以设置于一个模块中实现。当然各模块也可以采用其它的组合设置方式。 图6为采用本发明的方法和装置实现定时老化的时序图。从时序图中可 以看出,从表项最后一次被命中到上报老化信息的时间最长为Tl+T2 + T, 误差率为(Tl + T2)/T,如果要求老化精度为X。/。,则可以控制(Tl+T2) /TS X%,且T12T2,并根据选定的Tl值计算出在老化时间T内需遍历表 项的次数,也就是不命中计数的计数阈值M,由(l)式可以得出M为T/T1; 最后可以根据设定的分片数P,计算出完成一组分片需要挂起遍历任务的时 间T3,由(2)式可以得出T3 = T2/P。由以上描述可以看出,本发明提供的方法和装置以预设的时间Tl为周 期对所有表项进行遍历,并对遍历到的当前表项执行以下步骤判断当前表 项是否命中,如果否,增加该当前表项对应的不命中计数值,并判断当前表 项的不命中计数值是否达到预设的计数阈值M,如果是,则上报当前表项的 老化信息,根据该老化信息删除当前表项。可以利用该方法对TCAM表项 在Tl时间内连续不命中次数进行记录,当达到预设的计数阈值M时上报该表项的老化信息,表项管理模块可以根据该表项的老化信息对该表项进行删除,以此提供了一种针对TCAM中表项的定时老化机制,从而实现自动地 删除TCAM中老化的表项,减轻TCAM的存储负担。更进一步地,本发明在判断当前表项是否命中之前还可以首先读取当前 表项的老化属性标识,根据读取的老化属性标识判断当前表项是否可老化, 如果是,则判断当前表项是否命中,否则,直接遍历下一个表项。也就是说, 可以根据表项的老化属性进行区分,并选择性地对可老化表项进行定时老 化,而对静态表项则无需进行定时老化,增加了该方法的灵活性。更优地,本发明还可以在对下一表项进行遍历之前,判断当前表项是否 为所在分片的最后一个表项,如果是,则等待T3后再对当前表项的下一表 项进行遍历;否则继续对当前表项的下一表项进行遍历。也就是it,可以对 所有表项进行分片,当完成一片内表项的遍历后,将遍历任务挂起T3时间, 从而避免遍历任务长时间占用CPU。更优地,驱动模块可以在Tl时间内对各表项的命中标识进行多次采样, 并以按位或的形式将各表项的命中标识添加到命中标识位图数组中,在Tl 时间内,表项只要有一次命中,则该表项的命中标识就为1,从而提高了表 项定时老化的精度。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本 发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在 本发明保护的范围之内。
权利要求
1、一种维护表项的方法,其特征在于,该方法包括以预设的时间T1为周期对所有表项进行遍历,并对遍历到的当前表项执行以下步骤判断当前表项是否命中,如果否,增加该当前表项对应的不命中计数值,并判断当前表项的不命中计数值是否达到预设的计数阈值M,如果是,则上报当前表项的老化信息,根据该老化信息删除所述当前表项。
2、 根据权利要求1所述的方法,其特征在于,在所述判断当前表项是否命 中之前还包括读取当前表项的老化属性标识,根据所述读取的老化属性标识 判断当前表项是否可老化,如果是,则继续执行所述判断当前表项是否命中的 步骤;否则,直接遍历下一个表项。
3、 根据权利要求2所述的方法,其特征在于,该方法还包括预先按照各 表项的索引顺序,将各表项的老化属性标识存储在老化属性位图数组中;所述以预设的时间Tl为周期对所有表项进行遍历包括以预设的时间Tl 为周期对所述老化属性位图数组中所有表项的老化属性标识进行遍历;所述读取当前表项的老化属性标识包括从所述老化属性位图数组中读取 当前表项对应的老化属性标识。
4、 根据权利要求3所述的方法,其特征在于,所述判断当前表项是否命中 包括根据当前表项的老化属性标识的位置获取该表项的索引,并根据该表项 的索引读取该表项的命中标识,根据该表项的命中标识判断当前表项是否命中。
5、 根据权利要求1所述的方法,其特征在于,该方法还包括的命中标识按照表项索引的顺序保存到命中标识位图数组中;所述判断当前表项是否命中包括读取当前表项在所述命中标识位图数组 中对应的命中标识,并根据该读取的命中标识判断当前表项是否命中。
6、 根据权利要求5所述的方法,其特征在于,如果T2:Tl/n,则所述驱动模块将采样到的命中标识按照表项索引的顺序保存到命中标识位图数组中包括所述驱动模块将n次采样到的各表项的命中标识进行或运算后,将运算后 的结果按照表项索引的顺序保存到命中标识位图数组中;其中,n为自然数。
7、 根据权利要求1所述的方法,其特征在于,所述计数阈值M为M = T/T1,其中,T为所述当前表项的老化时间。
8、 根据权利要求l所述的方法,其特征在于,预先将所有表项进行分片, 在对所述当前表项的下一表项进行遍历之前还包括判断所述当前表项是否为 所在分片中的最后一个表项,如果是,则等待时长T3后再对当前表项的下一 表项进行遍历;否则继续对当前表项的下 一表项进行遍历。
9、 一种维护表项的装置,其特征在于,该装置包括不命中计数值存储模 块、老化^f莫块和表项管理模块;所述不命中计数值存储模块,用于存储各表项的不命中计数值; 所述老化模块,用于以预设的时间Tl为周期对所有表项进行遍历,并获取 遍历到的当前表项的命中标识,判断所述当前表项是否命中,如果否,增加所 述当前表项的不命中计数值,并判断当前表项的不命中计数值是否达到预设的 计数阈值M,如果是,则向所述表项管理模块上报当前表项的老化信息,继续 进4亍下 一表项的遍历;所述表项管理模块,用于接收所述老化模块上报的所述老化信息后,根据 所述老化信息删除所述当前表项。
10、 根据权利要求9所迷的装置,其特征在于,所述老化模块包括遍历 子模块、命中标识获取子模块、第一判断子模块、计数值处理子模块、第二判 断子模块和上报子模块;所述遍历子模块,用于以预设的时间Tl为周期对所有表项进行遍历; 所述命中标识获取子模块,用于获取所述遍历子模块遍历到的当前表项的 命中标识;所述第一判断子模块,用于根据所述命中标识获取子模块获取的命中标识, 判断当前表项是否命中,如果否,向所述计数值处理子模块发送不命中通知;所述计数值处理子模块,用于接收到所述不命中通知后,增加所述不命中 计数值存储模块中存储的当前表项的不命中计数值,并向所述第二判断子模块发送寺丸4亍通知;所述第二判断子模块,用于接收到所述执行通知后,判断当前表项的不命 中计数值是否达到预设的计数阈值M,如果是,则向所述上报子模块发送上报 通知,触发所述遍历子模块进行下一表项的遍历;所述上报子模块,用于接收到所述上报通知后,向所述表项管理模块上报 当前表项的老化信息。
11、 根据权利要求IO所述的装置,其特征在于,该装置还包括老化属性 标识存储模块,用于存储各表项的老化属性标识;所述老化模块还包括老化属性读取子模块和第三判断子模块; 所述老化属性读取子模块,用于从所述老化属性标识存储模块中读取所述当前表项的老化属性标识;所述第三判断子模块,用于根据所述老化属性读取子模块读取的老化属性标识,判断当前表项是否可老化,如果是,则触发所述命中标识获取子模块获取所述遍历子模块遍历到的当前表项的命中标识,否则触发所述遍历子模块进行下一表项的遍历。
12、 根据权利要求IO所述的装置,其特征在于,所述遍历子模块包括遍 历处理子模块、第四判断子模块和延时定时器;所述遍历处理子模块,用于对以预设的时间Tl为周期对所有表项进行遍历;所述第四判断子模块,用于判断所述当前表项是否为所在分片中的最后一 个表项,如果是,则向所述延时定时器发送计时通知,否则触发所述遍历处理 子模块对当前表项的下 一表项进行遍历;所述延时定时器,用于接收到所述计时通知后,开始计时,当达到预设的 计时门限T3时,触发所述遍历处理子模块对当前表项的下一表项进行遍历。
13、 根据权利要求9所述的装置,其特征在于,该装置还包括表项存储模块、驱动模块和命中标识位图数组存储模块;所述表项存储模块,用于存储各表项的命中标识;所述命中标识位图数组存储模块,用于存储命中标识位图数组;所述驱动模块,用于以预设的釆样周期T2对所述表项存储模块中存储的各表项的命中标识进行釆样,并将采样到的命中标识保存到所述命中标识位图数组中;所述老化模块从所述命中标识位图数组存储模块中获取所述当前表项的命 中标识。
14、根据权利要求13所述的装置,其特征在于,如果T2-Tl/n,则所述 驱动模块包括采样子模块和或运算子模块;所述采样子模块,用于以预设的釆样周期T2对所述表项存储模块中存储的 各表项的命中标识进行采样;所述或运算子模块,用于将在T2周期内釆样到的命中标识进行或运算,并 将运算后的结果按照表项索引的顺序保存到命中标识位图数组中;其中,n为自然数。
全文摘要
本发明提供了一种维护表项的方法和装置,其中,方法包括以预设的时间T1为周期对所有表项进行遍历,并对遍历到的当前表项执行以下步骤判断当前表项是否命中,如果否,增加该当前表项对应的不命中计数值,并判断当前表项的不命中计数值是否达到预设的计数阈值M,如果是,则上报当前表项的老化信息,根据该老化信息删除当前表项。以此提供了一种针对三态内容可寻址存储器(TCAM)中表项的定时老化机制,从而实现自动地删除TCAM中老化的表项,减轻TCAM的存储负担。
文档编号G06F17/30GK101241513SQ200810102248
公开日2008年8月13日 申请日期2008年3月19日 优先权日2008年3月19日
发明者荻 陈 申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1