一种报文流量的采样方法、装置及路由设备与流程

文档序号:12889935阅读:302来源:国知局
一种报文流量的采样方法、装置及路由设备与流程

本发明涉及通信技术领域,尤其涉及一种报文流量的采样方法、装置及路由设备。



背景技术:

随着互联网技术的发展,网络已经成为日常生活必需的一部分,海量的网络数据对网络通信设备的数据吞吐量的要求也更加严格。路由器作为通信网络中的必需的重要设备,其数据收发的性能直接决定了所在网络的数据通信的可靠性,对网络中所承载的业务的正常运行起到了支撑和限制的作用。

现有技术中,通常是通过静态统计的方式对路由器某一网络接口上的报文流量作统计,即对网络接口上接收的报文进行简单的累加。这样只能反映出路由器在工作时间内的总的报文接收量,而无法反映出接收方向上报文流量的变化情况,这样使得对于在路由器中所出现的一些常见问题依据该工作时间内的总的报文接收量是不能分析出具体原因。例如,对于路由器常见的丢包问题,上述的静态统计方式只能确定网络接口在工作期间所统计的报文丢弃的总数,无法作为依据来判断网络丢包的原因是由于网络数量超过接口所使用的网络芯片的性能,还是软件层处理速率太慢导致buffer耗光出现的丢包。

因此,有必要对路由设备的网络接口上的报文流量进行动态描绘,从而提供对路由设备的工作性能和软件层的工作状态进行分析的数据,是目前亟需解决的技术问题。



技术实现要素:

本发明的实施例提供一种报文流量的采样方法、装置及路由设备,解决现有技术中所采用的静态统计方法无法获知工作时间内网络接口上的报文流量的变化情况的问题。

为达到上述目的,本发明的实施例采用如下技术方案:

本发明实施例的第一方面,提供一种路由设备,包括:

网络接口,用于接收报文;

从核,所述从核上创建的线程用于循环读取与所述从核对应的网络接口接收的报文,并记录每次成功读取的报文数目,在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量,所述统计变量用于反映报文累加的数目;还用于转发由所述网络接口接收的报文;

主核,所述主核上创建的线程用于在每个采样周期到达时,将所述已读标志置为第二标识,并读取所述统计变量,在读完后将所述已读标志置为所述第一标识,根据所述读取到的统计变量输出该采样周期内报文的接收情况。

本发明实施例的第二方面,提供一种报文流量的采样方法,所述方法包括:

循环读取由网络接口接收的报文,并记录每次成功读取的报文数目,在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量,所述统计变量用于反映报文累加的数目;

在每个采样周期到达时,将所述已读标志置为第二标识,并读取所述统计变量,在读完后将所述已读标志置为所述第一标识,根据所述读取到的统计变量输出该采样周期内报文的接收情况。

本发明实施例的第三方面,提供一种报文流量的采样装置,其特征在于,所述装置包括:

读取模块,用于循环读取由网络接口接收的报文,并记录每次成功读取的报文数目;

更新模块,用于在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量,所述统计变量用于反映报文累加的数目;

处理模块,用于在每个采样周期到达时,将所述已读标志置为第二标识,并读取所述统计变量,在读完后将所述已读标志置为所述第一标识;

输出模块,用于根据所述读取到的统计变量输出该采样周期内报文的接收情况。

本发明实施例提供的报文流量的采样方法、装置及路由设备,通过循环读取由网络接口接收的报文,并记录每次成功读取的报文数目,在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量,该统计变量用于反映报文累加的数目;在每个采样周期到达时,将已读标志置为第二标识,并读取统计变量,在读完后将已读标志置为第一标识,根据读取到的统计变量输出该采样周期内报文的接收情况。

相比于现有技术所采取的静态统计的方式仅能得到路由器在工作时间内的总的报文接收量,本方案中通过在每个采样周期到达时,读取统计变量,根据该读取到的统计变量输出该采样周期内报文的接收情况,进而得到路由设备在工作时间内各个采样周期内的包问接收情况,从而得到报文流量的动态变化的情况,对于路由设备中所出现的一些问题的定位和报文流量分析有很好的指导作用。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种报文流量的采样方法的方法流程图;

图2为本发明实施例提供的一种报文流量的采样装置的结构示意图;

图3为本发明实施例提供的一种路由设备的框架示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了便于清楚描述本发明实施例的技术方案,在本发明的实施例中,采用了“第一”、“第二”等字样对功能或作用基本相同的相同项或相似项进行区分,本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定。

本发明实施例中提及的路由设备,该路由设备所使用的多核处理器包括一个主核和多个从核(也可以称为转发核)。该主核负责运行处理报文转发相关的业务。从核主要负责将接收的报文进行转发,确保软件处理可以快速获取网络接口上当前承载的报文。

基于上述的路由设备的内容,本发明实施例提供一种报文流量的采样方法,如图1所示,该方法包括:

101、循环读取由网络接口接收的报文,并记录每次成功读取的报文数目,在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量。

其中,上述的统计变量用于反映报文累加的数目。

示例性的,上述步骤101中的执行主体可以是从核或在从核中所建立的线程。

优选的,为了能够体现采样周期内报文数目的变化趋势,上述的步骤101中的根据每次成功读取的报文数目更新统计变量包括:

a1、根据每次成功读取的报文数目所处的报文数区间,将报文统计结构中与该报文数区间对应的统计变量增加预设常数。

其中,上述的报文统计结构包含与各个报文数区间对应的统计变量。

可选的,为了方便统计,上述的预设常数为大于或等于0的数值。

进一步优选的,上述的报文统计结构为数组,且数组中各个统计变量按照其排列顺序依次对应的报文数区间为连续的。

示例性的,若上述的报文数区间为4个,则数组中的包含4个统计变量,且按照数组的排列顺序分别为a、b、c以及d,则对应的报文数区间为:[0-1/4*l1]、(1/4*l1-1/2*l1)、[1/2*l1-3/4*l1]以及(3/4*l1-l1],其中:l1表示bd环最大长度。对应的上述的步骤a1具体为:根据每次成功读取的报文数目所处的报文数区间,将数组中与该报文数区间对应的统计变量增加预设常数。例如,若某一次成功读取的报文数目所处的报文数区间为[0-1/4*l1],则数组中的统计变量a的数值增加预设常数;若下一次成功读取的报文数目所处的报文数区间为(1/4*l1-1/2*l1),则数组中的统计变量b的数值增加与上次相同的预设常数。

102、在每个采样周期到达时,将已读标志置为第二标识,并读取统计变量,在读完后将已读标志置为第一标识,根据读取到的统计变量输出该采样周期内报文的接收情况。

示例性的,上述步骤102的执行主体可以是主核或在主核中所建立的线程。

示例性的,上述的采样周期为flowtime,该flowtime在运行中是可配置的。具体的,工作人员或技术人员可以根据需要来配置该flowtime,例如,该采样周期可以为10s或1s等。

示例性的,上述的已读标识可以用“0”“1”表示,具体的,若该已读标识等于1,则步骤101中从核或从核中的线程根据每次成功读取的报文数目更新统计变量;若该已读标识等于0,则步骤102中的主核或主核中的线程读取数组中各个统计变量的数值,在读完后将readflag置为1。然后,主核或主核中的线程,以及从核或从核中的线程一直循环执行。当然,在采样周期到达时,主核或主核中的线程会将已读标识置为0。当然,上述的0和1仅仅是一种示例,在实际应用中,也可以利用其它标识来表示,这里并不做限定,本实施例为了方便用0和1为例进行说明。

可选的,为了防止断电后出现内存中的数据丢失的问题,上述步骤102中根据读取到的统计变量输出该采样周期内报文的接收情况,包括:

b1、根据读取到的统计变量将该采样周期内报文的接收情况输出至缓存中。

通过上述的步骤102a的内容,将报文的接收情况输出至缓存中,这样使得断电后该报文的接收情况所对应的数据不会丢失,同时也方便后期通过这些数据来获知网络接口以及整个路由设备的工作状态等信息。

示例性的,上述步骤102中根据读取到的统计变量输出该采样周期内报文的接收情况,包括:

102a、将读取到的第n个周期的统计变量减去第n-1个周期的统计变量,得到采样周期内接收的报文数目。

102b、输出该采样周期内接收的报文数目。

可选的,上述步骤102中在读取统计变量的步骤之后,在将已读标志置为第一标识的步骤之前,该方法还包括:

c1、将统计变量清零。

基于上述的步骤c1的内容,上述步骤102中根据读取到的统计变量输出该采样周期内报文的接收情况,包括:直接根据读取到的统计变量的数值输出该采样周期内报文的接收情况,即无需做任何的运算处理,直接输出该采样周期内报文的接收情况。

本发明实施例提供的报文流量的采样方法,通过循环读取由网络接口接收的报文,并记录每次成功读取的报文数目,在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量,该统计变量用于反映报文累加的数目;在每个采样周期到达时,将已读标志置为第二标识,并读取统计变量,在读完后将已读标志置为第一标识,根据读取到的统计变量输出该采样周期内报文的接收情况。

相比于现有技术所采取的静态统计的方式仅能得到路由器在工作时间内的总的报文接收量,本方案中通过在每个采样周期到达时,读取统计变量,根据该读取到的统计变量输出该采样周期内报文的接收情况,进而得到路由设备在工作时间内各个采样周期内的包问接收情况,从而得到报文流量的动态变化的情况,对于路由设备中所出现的一些问题的定位和报文流量分析有很好的指导作用。

下面将基于图1对应的报文流量的采样方法的实施例中的相关描述对本发明实施例提供的一种报文流量的采样装置进行介绍。以下实施例中与上述实施例相关的技术术语、概念等的说明可以参照上述的实施例,这里不再赘述。

本发明实施例提供一种报文流量的采样装置,如图2所示,该装置2包括:读取模块21、更新模块22、处理模块23以及输出模块24,其中:

读取模块21,用于循环读取由网络接口接收的报文,并记录每次成功读取的报文数目。

更新模块22,用于在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量,统计变量用于反映报文累加的数目。

处理模块23,用于在每个采样周期到达时,将已读标志置为第二标识,并读取统计变量,在读完后将已读标志置为第一标识。

输出模块24,用于根据读取到的统计变量输出该采样周期内报文的接收情况。

示例性的,为了能够体现采样周期内报文数目的变化趋势,上述的更新模块22在根据每次成功读取的报文数目更新统计变量时,具体用于:

根据每次成功读取的报文数目所处的报文数区间,将报文统计结构中与该报文数区间对应的统计变量增加预设常数。

其中,上述的报文统计结构包含与各个报文数区间对应的统计变量。

可选的,为了方便统计,上述的预设常数为大于或等于0的数值。

进一步优选的,上述的报文统计结构为数组,且数组中各个统计变量按照其排列顺序依次对应的报文数区间为连续的。

可选的,为了防止断电后出现内存中的数据丢失的问题,上述的输出模块24具体用于:

根据读取到的统计变量将该采样周期内报文的接收情况输出至缓存中。

通过上述的输出模块24将报文的接收情况输出至缓存中,这样使得断电后该报文的接收情况所对应的数据不会丢失,同时也方便后期通过这些数据来获知网络接口以及整个路由设备的工作状态等信息。

示例性的,上述的输出模块24具体用于:

将读取到的第n个周期的统计变量减去第n-1个周期的统计变量,得到采样周期内接收的报文数目。

输出该采样周期内接收的报文数目。

可选的,如图2所示,该装置2还包括:清零模块25,其中:

清零模块25,用于将上述的统计变量清零。

相比于现有技术所采取的静态统计的方式仅能得到路由器在工作时间内的总的报文接收量,本方案中通过在每个采样周期到达时,读取统计变量,根据该读取到的统计变量输出该采样周期内报文的接收情况,进而得到路由设备在工作时间内各个采样周期内的包问接收情况,从而得到报文流量的动态变化的情况,对于路由设备中所出现的一些问题的定位和报文流量分析有很好的指导作用。

下面将基于图1对应的报文流量的采样方法的实施例中的相关描述对本发明实施例提供的一种路由设备进行介绍。以下实施例中与上述实施例相关的技术术语、概念等的说明可以参照上述的实施例,这里不再赘述。

本发明实施例提供一种路由设备,该路由设备包括:

网络接口,用于接收报文。

从核,该从核上创建的线程用于循环读取由与从核对应的网络接口接收的报文,并记录每次成功读取的报文数目,在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量,统计变量用于反映报文累加的数目;还用于转发由所述网络接口接收的报文。

主核,该主核上创建的线程用于在每个采样周期到达时,将已读标志置为第二标识,并读取统计变量,在读完后将所述已读标志置为第一标识,根据读取到的统计变量输出该采样周期内报文的接收情况。

示例性的,上述的网络接口还用于将接收的报文挂载在bd环上。

具体的,上述的网络接口中包含报文接收芯片,该报文接收芯片将接收的报文挂载在bd环上。

基于上述的内容,上述的从核上创建的线程具体用于:

循环从bd环上读取报文,并记录每次成功读取的报文数目,在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量,该统计变量用于反映报文累加的数目;转发由网络接口接收的报文。

优选的,上述的主核上创建有第一线程和第二线程。其中:

该第一线程用于在每个采样周期到达时,将已读标志置为第二标识,并读取统计变量,在读完后将已读标志置为第一标识。

该第二线程用于根据读取到的统计变量输出该采样周期内报文的接收情况。

其中,上述的第一线程和第二线程间通过互斥信号量flowsem进行同步,第二线程阻塞等待信号量flowsem,当第一线程读取统计变量后释放信号量flowsem,第二线程才根据读取到的统计变量输出该采样周期内报文的接收情况。

优选的,为了能够体现采样周期内报文数目的变化趋势,上述的从核上创建的线程在根据每次成功读取的报文数目更新统计变量时,具体用于:

根据每次成功读取的报文数目所处的报文数区间,将报文统计结构中与该报文数区间对应的统计变量增加预设常数。

其中,上述的报文统计结构包含与各个报文数区间对应的统计变量。

可选的,为了方便统计,上述的预设常数为大于或等于0的数值。

进一步优选的,上述的报文统计结构为数组,且数组中各个统计变量按照其排列顺序依次对应的报文数区间为连续的。

示例性的,若上述的报文数区间为4个,则数组中的包含4个统计变量,且按照数组的排列顺序分别为a、b、c以及d,则对应的报文数区间可以为:[0-1/4*l1]、(1/4*l1-1/2*l1)、[1/2*l1-3/4*l1]以及(3/4*l1-l1],其中:l1表示bd环最大长度。对应的上述的步骤a1具体为:根据每次成功读取的报文数目所处的报文数区间,将数组中与该报文数区间对应的统计变量增加预设常数。例如,若某一次成功读取的报文数目所处的报文数区间为[0-1/4*l1],则数组中的统计变量a的数值增加预设常数;若下一次成功读取的报文数目所处的报文数区间为(1/4*l1-1/2*l1),则数组中的统计变量b的数值增加与上次相同的预设常数。

示例性的,上述的主核上创建的线程在根据所述读取到的统计变量输出该采样周期内报文的接收情况时,还具体用于:

将读取到的第n个周期的统计变量减去第n-1个周期的统计变量,得到采样周期内报文的接收情况。

输出该采样周期内报文的接收情况。

可选的,上述的主核上创建的线程还用于:将统计变量清零。当主核上创建的线程将统计变量清零时,主主核上创建的线程直接根据读取的到统计变量的数值输出该采样周期内报文的接收情况。

本发明实施例提供的路由设备,通过从核上创建的线程循环读取由与从核对应的网络接口接收的报文,并记录每次成功读取的报文数目,在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量,统计变量用于反映报文累加的数目;还用于转发由所述网络接口接收的报文。通过该主核上创建的线程在每个采样周期到达时,将已读标志置为第二标识,并读取统计变量,在读完后将所述已读标志置为第一标识,根据读取到的统计变量输出该采样周期内报文的接收情况。

相比于现有技术所采取的静态统计的方式仅能得到路由器在工作时间内的总的报文接收量,本方案中的主核上创建的线程通过在每个采样周期到达时,读取统计变量,根据该读取到的统计变量输出该采样周期内报文的接收情况,进而得到路由设备在工作时间内各个采样周期内的包问接收情况,从而得到报文流量的动态变化的情况,对于路由设备中所出现的一些问题的定位和报文流量分析有很好的指导作用。

下面将基于路由器中的多核处理器的框架,以具体的内容来解释并说明上述所描述的路由设备的内容,详细内容参考以下几个部分的内容:

(a)基于上述的路由器中的多核处理器的框架,本发明实施例中在主核上创建一个线程flowctrl,该线程负责周期性读取每一个从核在该采样周期内报文的接收情况,假设采样周期为flowtime,该采样周期是运行中可配置的。在主核中创建另一个线程flowprocess,该线程flowprocess根据每一个周期内获取的所有从核的报文流量进行计算,就可以描绘出连续时间内报文接收流量的变化情况,并将统计结果保存至flash中,用于流量分析等用途,其中:线程flowctrl和flowprocess之间通过互斥信号量flowsem进行同步,线程flowprocess阻塞等待信号量flowsem,当线程flowctrl读取采样值后释放信号量flowsem,线程flowprocess开始进行报文流量计算。

(b)基于上述的路由器中的多核处理器的框架,本发明实施例中在每一个从核上创建一个线程flowrecv,该线程负责循环从bd环上读取报文,对接收的报文进行处理和转发。同时,该线程flowrecv会记录每一次从bd环上成功读取的报文个数,存储到针对该从核建立的报文接收统计结构flowsum中,用于主核上的线程flowctrl进行读取和分析。

(c)基于路由设备中的网络接口中所使用的报文接收芯片,对(b)中描述的bd环,报文接收芯片会将接收的报文挂载到bd环上。假设该bd环最大长度为l1,当前bd环上已经承载的报文个数为l2。当l2=l1时,若软件不从bd环上读取报文,则后续报文就会被丢弃。

(d)基于(c)中所描述的bd环长度,假设每次软件从bd环上可成功读取的报文个数为l3,则l3≤l2≤l1。将报文接收个数区间划分为[0-1/4*l1]、(1/4*l1-1/2*l1)、[1/2*l1-3/4*l1]、(3/4*l1-l1]。根据每次读取的报文个数l3落在不同区间的次数,就可以反映出一个采样周期内报文流量的大小变化情况。

(e)对于(b)中描述的报文接收统计结构flowsum[],该结构对于每一个从核而言,可以是一个长度为m的数组,m的大小为上述中报文接收个数区间的数目。通过标志readflag实现主核中线程flowctrl和从核中线程flowrecv对该统计结构flowsum[]的无锁访问,避免降低转发性能。

具体的,从核中线程flowrecv循环读取由路由设备的网络接口接收的报文,并记录每次成功读取的报文数目,在readflag等于1时,根据每次成功读取的报文数目更新数组中的各个统计变量。

主核中线程flowctrl在每个采样周期到达时,将readflag置为0,并读取数组中各个统计变量的数值,在读完后将readflag置为1。然后从核中线程flowrecv根据该readflag值为1,进行更新数组中的各个统计变量,一直循环,直到结束。

(f)从核在每次从bd环读取报文后,根据readflag标志和此次读取的报文个数l3的区间分布,对统计结构flowsum[]中的对应元素进行累加。

(g)当主核线程flowctrl采样的周期flowtime到达时,遍历读取每个转发核的统计结构flowsum。当主核线程flowctrl完成所有转发核的统计结构flowsum[]的读取后,释放信号量flowsem,由线程flowprocess处理采样值。并再次等待采样周期flowtime的到达。

(h)通过对主核线程flowctrl的采样周期flowtime和readflag标志的设置,可以动态关闭或开启从核上的流量采样,实现按需开启的目的。例如,将上述的采样周期flowtime设为无穷大,且readflag置为0,由于readflag为0使得从核不工作,采样周期为无穷大使得主核等不到采样周期的到达也无法工作,这样就关闭了流量采集和处理的功能。

根据上面(a)-(h)内容的描述,以一个从核而言,本发明的实现框架如图3所示。基于图3所示的路由设备的框架示意图,本方案中通过从核上创建的线程flowrecv循环从bd环上读取报文,并记录每次成功读取的报文数目,在已读标志为第一标识的情况下,根据每次成功读取的报文数目更新统计变量,该统计变量用于反映报文累加的数目。主核上创建的线程flowctrl在每个采样周期到达时,将已读标志置为第二标识,并读取统计变量,在读完后将已读标志置为第一标识;主核上创建的线程flowprocess根据读取到的统计变量输出该采样周期内报文的接收情况。如此可以得到每个采样周期内报文的接收情况,从而可以获得报文数目随时间动态变化的趋势。

需要说明的是,上述仅仅是以bd环接收模式为例进行说明本发明实施例过程,这里并不进行限定。而本方案提供的报文流量采样方法也可应用于其他接收报文的方式中。

通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的报文流量的采样装置,可以通过其它的方式实现。例如,以上所描述装置的实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1