网络装置以及应用在网络装置中的方法

文档序号:7808322阅读:193来源:国知局
网络装置以及应用在网络装置中的方法
【专利摘要】一种在网络装置中使用的方法,用来在每一周期以一个数据总线频宽输出数据至总线,该方法包含:使用封包产生器来在一个周期内的一个封包的封包结束之后产生空闲数据,并且在一个不同的周期产生下一封包的封包开始;以及使用一个封包间隙产生器接收该封包产生器传输来的数据,动态写入接收到的数据至缓冲器,并且依据该封包结束以及该封包产生器产生的该空闲数据,插入一个包含该空闲数据的间隙至该封包结束与该封包开始之间。上述方法与网络装置能够有效地减少封包产生器的电路成本并且同时满足标准IEEE802.3的要求。
【专利说明】网络装置以及应用在网络装置中的方法

【技术领域】
[0001]本申请请求2013年7月11日提交的美国专利临时申请号61/845,368的优先权,并且该申请的全文在此作为引用基础。
[0002]抟术领域
[0003]本发明有关于高速网络。具体来说,有关于在高速网络中的封包传输。

【背景技术】
[0004]通常来讲,应用至一个高速网络(例如40GHz以太网或者10GHz以太网)的传统网络装置被配置为产生多个封包至该高速网络,并在两个连续封包之间产生空闲数据(idle data)。封包之间产生的空闲数据的数量,例如空闲字节的数量,是预先配置的。并且配置的数量小于传统网络装置在每一个周期(cycle)产生的全部字节的数量。因此,对于传统网络装置来说,可能在一个相同的周期内产生当前封包的封包结束以及下一封包的封包开始。对于传统网络装置,设计封包产生机制是十分困难的。此外,在每两个封包之间设计固定数量的空闲字节也可能是不实际的。


【发明内容】

[0005]本发明的目的之一是提供一种网络装置以及应用在网络装置中的方法,通过在不同的周期产生封包的结束与封包的开始,并且动态调整并输出不同数量的空闲字节作为一个间隙(gap)来插入两个封包之间,以在每一周期中输出数据至一个具有数据总线频宽的数据总线,从而解决如上所述的技术问题。
[0006]依据本发明的实施例,提出一种在网络装置中使用的方法,用来在每一周期以一个数据总线频宽输出数据至总线,该方法包含:使用封包产生器来在一个周期内的一个封包的封包结束之后产生空闲数据,并且在一个不同的周期产生下一封包的封包开始;以及使用一个封包间隙产生器接收该封包产生器传输来的数据,动态写入接收到的数据至该缓冲器,并且依据该封包结束以及该封包产生器产生的该空闲数据,插入一个包含该空闲数据的间隙至该封包结束与该封包开始之间。
[0007]依据本发明的另一实施例,提出一种网络装置,用来在每一周期以一个数据总线频宽输出数据至总线,该网络装置包含:封包产生器,用于在一个封包的封包结束之后产生空闲数据,并且在一个不同的周期产生下一封包的封包开始;以及封包间隙产生器,耦接至该封包产生器,用于接收从该封包产生器传输的数据,动态写入接收到的数据至缓冲器,并且依据该封包结束以及该封包产生器产生的该空闲数据,插入一个包含该空闲数据的间隙至该封包结束与该封包开始之间。
[0008]本发明所述的封包产生器在不同的周期产生当前封包的封包结束以及下一封包的封包开始,并且封包间隙产生器动态调整并且输出不同数量的空闲字节作为一个间隙插入到两个封包之间。上述方法与网络装置能够有效地减少封包产生器的电路成本并且同时满足标准IEEE802.3的要求。

【专利附图】

【附图说明】
[0009]图1是依据本发明第一实施例的网络装置的结构示意图。
[0010]图2A是图1的封包产生器在时钟CLK的不同的周期CO - C5产生的数据的举例说明。
[0011]图2B是当数据写入封包间隙产生器时,针对图1所示的封包产生器在图2A所示的不同的周期CO - C5产生的举例数据写入缓冲器的相对应的存储地址的示意图。
[0012]图2C是图2B所示的举例说明的由封包间隙产生器选择并传输的数据结果的示意图。
[0013]图2D是图1的封包产生器在时钟CLK的不同的周期CO - C5产生的数据的另一举例说明。
[0014]图3A是当缺陷空闲计数小于或者等于8时,依据不同的EOP举例,包含空闲字节的间隙与相比较平均空闲字节数量的缺陷空闲字节数量之间的关系的查找表。
[0015]图3B是当缺陷空闲计数大于8时,依据不同的EOP举例,包含空闲字节的间隙与相比较平均空闲字节数量的缺陷空闲字节数量之间的关系的查找表。
[0016]图4A显示在依据图1所示的实施例接收EOP的一个周期,封包间隙产生器在该周期处理数据操作的流程图。
[0017]图4B显示在依据图1所示的实施例接收EOP的一个周期的下一周期,封包间隙产生器在该下一周期处理/输出数据操作的流程图。
[0018]图5是依据本发明第二实施例的网络装置的结构示意图。
[0019]图6A是图5的封包产生器在时钟CLK的不同的周期CO - C5以较高的频率FW产生的数据的举例说明。
[0020]图6B是当数据写入封包间隙产生器时,针对图5所示的封包产生器在图6A所示的不同的周期CO - C5产生的举例数据写入缓冲器的相对应的存储地址的示意图。
[0021]图7A是依据图5所示的实施例,当缺陷空闲计数小于或者等于8时,依据不同的EOP举例,包含空闲字节的间隙与相比较平均空闲字节数量的缺陷空闲字节数量之间的关系的查找表。
[0022]图7B是依据图5所示的实施例,当缺陷空闲计数大于8时,依据不同的EOP举例,包含空闲字节的间隙与相比较平均空闲字节数量的缺陷空闲字节数量之间的关系的查找表。
[0023]图8是依据本发明第三实施例的网络装置的结构示意图。

【具体实施方式】
[0024]图1是依据本发明第一实施例的网络装置100的结构示意图。网络装置100包含封包产生器105,封包间隙产生器(inter-pack gap, IPG generator) 110,以及缓冲器115。网络装置100整体稱接(但不局限于整体稱接)至一个接口电路(interface circuit) 120以及一个总线(bus) 125。网络装置100是用来依据IEEE802.3标准在不同的周期产生数据(例如封包)至总线。对于每一封包,网络装置100产生封包的开始(可以缩写为S0P)、前导码(preamble)、封包数据、以及封包的结束(可以缩写为Ε0Ρ)。此外,依据标准IEEE802.3的说明,网络装置100产生以及/或者插入(insert)足够的空闲数据(例如空闲字节)在每两个连续的封包之间。网络装置100能够产生/插入足够的空闲字节来满足IEEE802.3标准的需求。每两个连续的封包之间插入的空闲字节的数量是由网络装置100决定。对于不同的周期,空闲字节的数量是变化的,而不是固定不变的。网络装置100设置空闲字节的数量,使其落在一个由一个最大值和一个最小值组成的范围之内。此外,网络装置100设置的对于不同封包的空闲字节的平均数量满足标准IEEE802.3的要求。举例来说,网络装置100设置空闲字节的数量的范围为从5字节(最小空闲字节数量)至19字节(最大空闲字节数量),来获得平均12空闲字节并满足IEEE802.3标准的要求。然而,这并非是本发明的限制。
[0025]网络装置100产生数据(包含封包与空闲字节),通过接口电路120传输至总线125。W*CS代表用来传输数据至总线125的数据总线频宽,CS代表一个数据行的数据字节的数量,并且W代表一个周期中的数据行的数量。网络装置100产生的数据由缓冲器115缓冲,接着从缓冲器115中读出并且通过具有数据总线频宽W*CS的接口电路120写入总线125。为了有效地减少电路成本,在第一实施例中,网络装置100配置封包产生器105在每一周期来产生比数据总线频宽W*CS相对应的数据更多的数据,并且配置封包间隙产生器110来写入所有的封包数据并且适当地写入部分空闲字节。封包间隙产生器110过滤掉由封包产生器105产生的一部分空闲字节。具体来说,封包产生器105以较宽的数据总线频宽(W+EB) *CS产生数据(包含封包以及空闲数据),其中EB*CS代表由封包产生器105在每一周期产生的附加数据。封包间隙产生器110在一个周期传输所有的封包数据,并且仅仅使一部分的空闲字节通过,而并非是将封包产生器105产生的所有空闲字节通过。封包间隙产生器110等效地对于选择的部分空闲字节使能(enable)数据写入至缓冲器115,并且对于没有选择的部分空闲字节禁能(disable)数据写入。过滤/选择的空闲字节以及封包数据由封包间隙产生器110传输至缓冲器115缓冲,并且接口电路120从缓冲器115中读出数据,并写入数据至具有数据总线频宽W*CS的总线125。因此,网络装置100能够产生封包数据以及足够的空闲数据,并依据由IEEE802.3标准规定的数据总线频宽W*CS传输至总线125。当缓冲器115是满额或者接近满额时,封包产生器105停止数据产生。由封包间隙产生器110来决定缓冲器115是否是满额,并且如果封包间隙产生器110决定缓冲器115是满额的,封包间隙产生器110通过传输一个禁能通知信号(disable notificat1n signal)来通知封包产生器105。此实施例的多种变型也在本发明的范围之中。
[0026]数据总线频宽W*CS,举例来说,包含每周期24数据字节,即每周期3个数据行,每一数据行包含8数据字节。但上述举例仅仅为举例说明,而并非是用来限制本发明。封包产生器105也可以在每一周期产生多于3个数据行(即24字节)的更多的数据。在第一实施例中,封包产生器105在每一周期产生四个数据行(即总共32字节)。即上述的EB等于I。每一周期的32字节可包含封包数据、一部分的前序码、EOP、SOP以及/或者空闲字节等等。与数据总线频宽W*CS相比较,封包产生器105更进一步在每一周期产生一个数据行。在一个周期中,当封包产生器105对于当前封包产生Ε0Ρ,封包产生器105在这个周期中在EOP之后以空闲字节来填充其余的字节空间。封包产生器105在这个周期中,在EOP之后产生空闲数据,并且在一个不同的周期产生下一封包的S0P。
[0027]此外,封包产生器105依据这一周期中在EOP之后的剩余字节空间的数量来决定是否在下一个周期产生空闲字节。如果剩余字节空间的数量大于或者等于如上所述的空闲字节范围的最小空闲字节(例如五个字节),封包产生器105决定在下一个周期不产生空闲字节,并且在下一周期的开始产生下一封包的SOP。如果剩余字节空间的数量小于最小空闲字节(例如五个字节),封包产生器105决定在下一周期产生32空闲字节,并且在下一周期之后的一个周期的开始产生下一封包的SOP。因此,在产生EOP之后,封包产生器105被设置为产生空闲数据来填充同一个周期中剩余字节空间,并在一个不同的周期的开始产生下一封包的S0P。由于封包产生器105并非设置为在一个相同的周期中产生一个封包的EOP与下一个封包的S0P,本发明所提出的架构能够有效地减少封包产生器105的成本。EOP与SOP分别对应不同的周期。
[0028]图2A是图1的封包产生器105在时钟CLK的不同的周期CO - C5产生的数据的举例说明。如图2A所示,在周期CO,封包产生器105针对当前封包产生SOP SI,当前封包的前序码P,以及封包数据Dl。在周期Cl与C2,封包产生器105产生当前封包的封包数据Dl。在周期C3,封包产生器105产生封包数据D1、当前封包的EOP Tl、以及空闲数据II,其中空闲数据Il在当前封包的EOP Tl之后,并且封包产生器105利用空闲数据(即空闲字节)Il填充EOP Tl之后的剩余字节空间。在周期C3之后的周期C4,封包产生器105产生下一封包的S0PS2、前序码P、以及下一封包的封包数据D2。在周期C5,封包产生器105产生封包数据D2。需注意上述举例说明并非本发明的限制。在其他的实施例中,封包产生器105可替代地在周期C4产生空闲数据II,并且在周期C5产生下一封包的SOP S2、前序码P、以及封包数据D2。
[0029]图2D是图1的封包产生器105在时钟CLK的不同的周期CO - C5产生的数据的另一举例说明。下一封包的SOP S2在周期C3的下一周期C4发生,或者在下一周期C4的再下一周期C5发生。封包产生器105在周期C4产生空闲数据II。即在这个举例说明中,周期C4产生的数据都是空闲字节。上述修正也在本发明的范围之中。如上所述,封包产生器105在周期C3被设置为产生空闲数据并且以空闲数据填充EOP Tl之后的剩余字节空间,并且在一个不同的周期(例如C4或者C5)的开始产生下一封包的S0P。封包产生器105不在相同的周期内产生EOP Tl以及SOP S2。通道(Lanes)O-31代表较宽的数据总线频宽(ff+EB) *CS,其中W*CS包含24字节并且EB*CS包含8字节。
[0030]图2B是当数据写入封包间隙产生器110时,针对图1所示的封包产生器105在图2A所示的不同的周期CO - C5产生的举例数据写入缓冲器的相对应的存储地址的示意图。如图2B所示,举例来说,封包产生器105在周期C3产生的数据(包含封包数据D1、当前封包的EOP Tl、以及一部分空闲数据II)位于具有初始地址0x60-0x78的行。封包产生器105在周期C3产生的该部分空闲数据Il位于具有初始地址0x70 - 0x78的行,并由封包间隙产生器110过滤掉。
[0031]如上所述,为了减少电路成本并且满足IEEE802.3标准的要求,封包产生器105在每一周期产生比标准IEEE802.3规定的数据量更多的数据。对于封包数据的字节来说,封包间隙产生器110传输所有的封包产生器105产生的封包数据至缓冲器115。对于空闲数据的字节来说,封包间隙产生器110选择性地过滤出封包产生器105产生的一部分空闲字节,并且选择并且传输(transfer/transmit)被选的空闲字节至缓冲器115。封包间隙产生器110被设置为传输封包产生器105产生的部分空闲数据至缓冲器115。封包间隙产生器110并不传输封包产生器105产生的所有的空闲数据至缓冲器115。传输至缓冲器115的部分空闲数据的数量是由封包间隙产生器110依据当前封包的EOPTl来动态决定。举例来说,如图2B所示,封包产生器105在周期C3产生I个字节的封包数据、I个字节的EOP以及30个空闲字节的空闲数据,并且产生的数据分别对应于4个平行的行的初始地址0x60-0x78,如图2B的上方所示。位于初始地址0x70与0x78的行的空闲数据由封包间隙产生器110过滤掉,并且位于初始地址0x60与0x68的行的数据被封包间隙产生器110选择并传输至缓冲器115。
[0032]图2C是图2B所示的举例说明的由封包间隙产生器110选择并传输的数据结果的示意图。如图2C所示,当前封包与下一封包的空闲数据的间隙包含15个字节。位于初始地址0x70与0x78的空闲数据Il的空闲字节被下一封包的SOP S2、下一封包的前导码p、以及下一封包的封包数据D2替换。在另一个举例说明中,封包间隙产生器110传输不同数量的空闲字节至缓冲器115。封包间隙产生器110被设置为在每两个连续的封包之间动态输出、产生、或者插入一个不同数量的空闲字节,来满足在两个连续的封包之间平均产生12个空闲字节的标准IEEE802.3的要求。
[0033]在下面的说明中,详细说明了封包间隙产生器110的操作。封包间隙产生器110过滤掉部分空闲字节,从而使得插入在两个连续的封包之间的空闲字节的数量满足标准IEEE802.3的要求。封包间隙产生器110决定插入两个连续的封包之间的空闲字节的数量,依据在相同的数据行中在EOP之后的剩余字节的数量。当每次需要时,封包间隙产生器110进一步产生一个数据行的空闲字节。如果相同的数据行中在EOP之后的剩余字节的数量小于标准IEEE802.3中规定的最小空闲字节的数量(例如5个),封包间隙产生器110进一步增加/产生空闲字节的一个数据行来形成空闲字节。如果相同的数据行中在EOP之后的剩余字节的数量不小于标准IEEE802.3中规定的最小空闲字节的数量(例如5个),封包间隙产生器110并不增加/产生空闲字节的一个数据行至剩余空闲字节,而是封包间隙产生器110设置与数据行中在EOP之后的剩余空闲字节空间相同的数量来形成空闲字节。举例来说,同一数据行在EOP之后的剩余空闲字节的数量等于4,即小于5,封包间隙产生器110增加一个空闲字节的数据行(即8个空闲字节)至剩余的4个空闲字节,来形成12个空闲字节(即平均的标准IEEE802.3规定的空闲字节数量)。此外,举例来说,相同的数据行在EOP之后的剩余空闲字节的数量等于7,即不小于5,封包间隙产生器110使用7个空闲字节空间来形成所需的空闲字节。
[0034]封包间隙产生器110设置为通过比较插入两个连续的封包之间的空闲字节的数量与标准IEEE802.3规定的平均空闲字节数量来计算并累加缺陷空闲字节的数量来产生一个缺陷空闲计数。需注意的是,缺陷空闲字节的数量代表空闲字节的数量与两个封包之间的一个间隙的空闲字节的平均数量之差,并且缺陷空闲计数代表的是缺陷空闲字节的当前累加值。一旦缺陷空闲计数大于或者等于该特定数量,封包间隙产生器110补偿空闲字节的总体数量,该封包间隙产生器110通过增加一个特定数量的空闲字节来插入至如上所述的选择的空闲字节来补偿/调整缺陷空闲计数。在这个实施例中,封包间隙产生器110设置的空闲字节特定数量为一个数据行的数量,即8。每一次当缺陷空闲计数并不小于8时,封包间隙产生器110补偿插入两个连续的封包之间的空闲字节的总体数量。需注意的是,上述特定数量并非是本发明的一个限制。一旦缺陷空闲计数不小于8,封包间隙产生器110进一步增加8个空闲字节至如上所述的选择的空闲字节,来形成插入两个连续封包之间的生成空闲字节(resultant idle bytes)。如果缺陷空闲计数小于一个数据行的数量(即8),在这种情况下,封包间隙产生器110并不增加8个空闲字节至选择的空闲字节来形成两个封包之间由插入的空闲字节组成的间隙。
[0035]在上述的举例说明中,如果在相同的数据行中在EOP之后的剩余字节的数量小于5,例如剩余字节的数量等于3,封包间隙产生器110选择3个空闲字节以及一个空闲字节的数据行紧跟着这3个空闲字节。因此,封包间隙产生器110选择11个空闲字节。其他没有选择的空闲字节被封包间隙产生器110过滤掉或者忽略。封包间隙产生器110与平均数量相比,计算并且决定缺陷空闲数量等于I。封包间隙产生器110依据缺陷空闲数量以及缺陷空闲计数的先前值,累加并且获得缺陷空闲计数。如果在这种情况下,获得的缺陷空闲计数小于8,封包间隙产生器110使用所选的11个空闲字节来形成两个封包之间由插入的空闲字节组成的间隙。因此,在这个举例说明中,插入两个连续的封包之间空闲字节的总体数量等于11。
[0036]然而,如果在这个举例说明中,缺陷空闲计数并非小于8,封包间隙产生器110进一步增加8个空闲字节至所选择的11个空闲字节来产生19个空闲字节,来插入以补偿缺陷空闲计数,并且使用19个空闲字节来形成两个封包之间由插入的空闲字节组成的间隙。在补偿缺陷空闲计数之后,缺陷空闲计数由封包间隙产生器110重新计算。因此,两个连续的封包之间待插入的空闲字节的总体数量等于19。通过计算以及缺陷空闲字节的数量、以及补偿缺陷空闲计数的数量,封包间隙产生器110能够等效地产生/插入具有平均数量(即12)的空闲字节,来满足标准IEEE802.3的规定。
[0037]需要注意的是封包间隙产生器110是用来传输封包产生器105产生的一部分空闲数据至缓冲器115,并且过滤出封包产生器105产生的空闲数据的其余部分。封包间隙产生器110传输封包产生器105产生的所有的封包数据。没有封包数据被封包间隙产生器110过滤掉。当封包产生器105产生S0P、前序码、以及封包数据,封包间隙产生器110传输所有的四个数据行的数据。当封包产生器105在一个周期产生Ε0Ρ,封包间隙产生器110是用来传输部分数据。因此,当封包产生器105产生EOP的周期,封包间隙产生器110传输由封包产生器105产生的包含仅仅一个数据行、两个数据行、三个数据行或者四个数据行的选择数据。
[0038]图3A是当缺陷空闲计数小于或者等于8时,依据不同的EOP举例,包含空闲字节的间隙与相比较平均空闲字节数量的缺陷空闲字节数量之间的关系的查找表。图3B是当缺陷空闲计数大于8时,依据不同的EOP举例,包含空闲字节的间隙与相比较平均空闲字节数量的缺陷空闲字节数量之间的关系的查找表。如图3A所示,MOD的值代表在一个周期(例如图2A所示的周期C3)E0P在4个数据行(即32字节)中的不同位置。举例来说,如图2A所示,EOP Tl的位置等于1,并且MOD的值代表“I”。此外,举例来说,MOD的值“O”与“31”分别代表EOP在4个数据行的开始以及在4个数据行的结束。ΕΝ_Ε0Ρ代表当EOP发生时,封包间隙产生器110在这个周期输出至缓冲器115的数据行的数量。在不同的情况下,EN_EOP的值I至4分别表明封包间隙产生器110输出的数据大小从I个数据行(即8字节)至4个数据行(即32字节)。IBN的值代表封包间隙产生器110是否进一步产生空闲字节的数据行在下一周期,该下一周期是紧接着这一周期的,其中在这一周期EOP发生。IBN的值“O”代表封包间隙产生器110在下一周期并不产生空闲字节的数据行,并且在下一周期产生下一封包的SOP。IBN值“I”代表封包间隙产生器110进一步在下一周期产生I个数据行的空闲字节,该下一周期紧接着当前周期之后,其中在当前周期EOP发生,并且封包间隙产生器110在紧接着该下一周期的后面一个周期产生下一封包的SOP。IS代表封包間隙中待插入的空闲字节最后数量,该待插入的空闲字节的间隙是封包间隙产生器对当前的封包选择写入的空闲字节加上EOP形成的。图3A中该“IS”的最小值等于最小空闲数量,即5。图3A中该“IS”的最大值等于平均空闲数量,即12。DS的值代表与平均空闲数量(即12)相比较的缺陷空闲字节数量,即缺陷空闲计数的变化值。图3A中DS的最小值等于0,对应到IS的值“12”,并且图3A中的“DS”的最大值等于7,对应到由标准IEEE规定的最小空闲数量,即5。
[0039]因此,当缺陷空闲计数小于或者等于8时,封包间隙产生器110能够参考图3A所示的查找表来获得在这个间隙的足够的空闲字节,决定这个周期需要传输多少字节,决定是否在下一周期进一步产生空闲字节,以及依据缺陷空闲数量重新计算缺陷空闲计数。在这种情况下,封包间隙产生器110决定并产生的空闲字节的数量等于12或者小于12。如果当前封包的EOP对应到MOD的值“6”,封包间隙产生器110在这一周期被设置为写入两行数据(即16字节)至缓冲器115,并且封包间隙产生器110在下一周期并不进一步产生32空闲字节,而是在下一周期产生下一封包的SOP。在这个举例说明中,“ IS ”的值对应为“10”,代表两个连续的封包之间的间隙(包含空闲字节以及Ε0Ρ)应包含10个字节。因此,封包间隙产生器110输出两行数据(总共16字节),包含6个字节的封包数据、I个字节的EOP以及9个字节的空闲数据。最后两个空闲字节的数据行被封包间隙产生器110过滤掉。缺陷空闲计数通过2来增加,由值为2的DS代表。此外,在另一个举例说明中,如果当前封包的EOP对应于值为“30”的M0D,封包间隙产生器110在当前周期被设置为写入4行(即32字节)的数据至缓冲器115,并且封包间隙产生器110进一步在下一周期产生32个空闲字节,并且在紧随着下一周期的后面的一个周期产生下一封包的SOP ;封包产生器105被设置为在下一周期产生32空闲字节,并且在紧随着下一周期的后面的一个周期产生下一封包的SOP。“IS”的值对应于“10”,代表两个连续的封包之间的间隙(包含空闲字节以及封包的结束)包含10个字节。因此,封包间隙产生器110在当前周期以及下一周期输出5行数据(总共40字节),包含30字节的封包数据、I个字节的EOP以及9个字节的空闲数据。在下一周期的最后3个数据行的空闲数据被封包间隙产生器110过滤掉。缺陷空闲计数增加2,以值为“2”的DS来代表。
[0040]图3B所示的查找表描述了当缺陷空闲计数大于8时,不同的待插入的空闲字节数量的例子。在图3B的举例说明中,封包间隙产生器110决定并产生的空闲字节的数量大于12。如图3B所示,MOD的值代表在一个周期(例如图2A所示的周期C3)E0P在4个数据行(即32字节)的不同位置。举例来说,如图2A所示,EOP Tl的位置等于I,并且MOD的值代表“I”。此外,举例来说,MOD的值“O”与“31”分别代表EOP在4个数据行的开始以及在4个数据行的结束。其中,M0D4, 12,20,24应只存在图3A中,而在图3b中表示为空格。其原因为,如图4a的流程说明,本申请所述实施例的处理流程是先查询图3a,调整缺陷空闲计数,如果>8,才再改查询图3B。在此流程下,因图3A Mod4, 12,20,24的DS = 0,缺陷空闲计数不会增加,所以不会再去查到图3B。ΕΝ_Ε0Ρ代表封包间隙产生器110在当前周期输出至缓冲器115的数据行的数量。EN_EOP的值从2至4分别表明封包间隙产生器110输出的数据大小从2个数据行(即16字节)至4个数据行(即32字节)。IBN的值代表封包间隙产生器110是否进一步在下一周期产生空闲字节,以及封包间隙产生器110产生多少字节。
[0041]IBN的值“O”代表封包间隙产生器110在下一周期并不产生空闲字节的数据行,并且在下一周期产生下一封包的SOP。IBN值“I”代表封包间隙产生器110进一步在下一周期产生I个数据行的空闲字节,并且在紧接着该下一周期的后面一个周期产生下一封包的SOP。IBN值“2”代表封包间隙产生器110进一步在下一周期产生2个数据行的空闲字节,并且在紧接着该下一周期的后面一个周期产生下一封包的S0P。封包间隙产生器110进一步产生I个数据行的空闲字节的操作可视为封包间隙产生器110在下一周期从封包产生器105产生的4行空闲字节选择I行空闲字节(即在数据行的开始的8个空闲字节)。封包间隙产生器110进一步产生2个数据行的空闲字节的操作可视为封包间隙产生器110在下一周期从封包产生器105产生的4行空闲字节选择2行空闲字节(即在数据行的开始的16个空闲字节)。IG的值代表在封包间隙产生器110输出的2个封包之间的间隙中的待插入的空闲字节的数量(包含初始选择空闲字节以及进一步增加的8个空闲字节)加上Ε0Ρ。DG的值代表与平均空闲数量(即12)相比较的缺陷空闲字节数量。DG的值为负代表缺陷空闲计数应当减少。
[0042]如图3B所示,当缺陷空闲计数大于8时,如果当前封包的EOP对应到MOD的值“6 ”,封包间隙产生器110在当前周期被设置为写入三行数据(即24字节)至缓冲器115,并且封包间隙产生器110在下一周期并不进一步产生32空闲字节,而是在下一周期产生下一封包的SOP。“IG”的值对应为“18”,代表两个连续的封包之间的间隙(包含空闲字节以及Ε0Ρ)应包含18个字节。因此,封包间隙产生器110输出三行数据(总共24字节)包含6个字节的封包数据、I个字节的EOP以及17个字节的空闲数据。缺陷空闲计数通过6来减少,由值为-6的DG代表。此外,在另一个举例说明中,如果当前封包的EOP对应于值为“30”的M0D,封包间隙产生器110在当前周期被设置为写入4行(即32字节)的数据至缓冲器115,并且封包间隙产生器110进一步在下一周期从封包产生器105产生的32个空闲字节中选择16个空闲字节,并且在紧随着下一周期的后面的一个周期产生下一封包的SOP ;封包产生器105产生被设置为在下一周期产生16空闲字节,并且在紧随着下一周期的后面的一个周期产生下一封包的SOP。“IG”的值对应于“18”,代表两个连续的封包之间的间隙(包含空闲字节以及Ε0Ρ)包含18个字节。因此,封包间隙产生器110在当前周期以及下一周期输出6行数据(总共48个字节)包含30个字节的封包数据、I个字节的Ε0Ρ、以及17字节的空闲数据。在下一周期的最后2个数据行的空闲数据被封包间隙产生器110过滤掉。缺陷空闲计数减少6,以值为“_6”的DG来代表。
[0043]图4A显示在依据图1所示的实施例接收EOP的一个周期,封包间隙产生器110在该周期处理数据操作的流程图。如果可以得到相似的结果,则不局限于图4A所示的流程顺序,因此,其他的步骤也可以整合进来。图4A中的各个步骤如下详述:
[0044]步骤405A:开始;
[0045]步骤410A:封包间隙产生器110通过参考图3A所示的查找表,依据在相同的周期内EOP在4行数据中的位置计算并且获得待插入的空闲字节的数量、相对应的缺陷空闲数量、以及多少字节应被写入缓冲器115,举例来说,封包间隙产生器110能够通过参考图3A所示的查找表,依据MOD的值获得待插入的空闲字节的数量、相对应的缺陷空闲数量、以及多少字节应被写入缓冲器115 ;
[0046]步骤415A:封包间隙产生器110计算相对应的缺陷空闲数量与先前累加的缺陷空闲数量(即缺陷空闲计数)的和,来调整以及获得调整之后的缺陷空闲计数,并且检查调整之后的缺陷空闲计数是否小于I个数据行的字节数量(即8)。如果调整之后的缺陷空闲计数小于8,接着执行步骤420A ;否则,流程执行步骤425A ;
[0047]步骤420A:封包间隙产生器110依据先前调整的缺陷空闲计数以及MOD的值,通过参考图3A所示的查找表重新计算缺陷空闲计数;
[0048]步骤425A:封包间隙产生器110通过参考图3B所示的查找表,依据在相同的周期内EOP在4行数据中的位置计算并且获得待插入的空闲字节的数量、相对应的缺陷空闲数量、以及多少字节应被写入缓冲器115。举例来说,封包间隙产生器110能够通过参考图3B所示的查找表,依据MOD的值获得待插入的空闲字节的数量、相对应的缺陷空闲数量、以及多少字节应被写入缓冲器;
[0049]步骤430A:封包间隙产生器110在该周期输出字节与封包的结束至缓冲器115 ;以及
[0050]步骤435A:结束。
[0051]图4B显示在依据图1所示的实施例在接收EOP的当前周期的下一周期,封包间隙产生器110在该下一周期处理/输出数据操作的流程图。如果可以得到相似的结果,则不局限于图4B所示的流程顺序,因此,其他的步骤也可以整合进来。图4B中的各个步骤如下详述:
[0052]步骤405B:开始;
[0053]步骤410B:封包间隙产生器110检查相对接收到EOP的周期的下一个周期中,空闲字节的数据行的数量;
[0054]步骤415B:封包间隙产生器110决定是否空闲字节的数据行的数量为O。如果是具有O个数据行的空闲字节,接着处理至步骤425B ;否则,该流程处理至步骤420B ;
[0055]步骤420B:封包间隙产生器110以空闲字节填充数据,并且产生I个具有IBN值的行使能信号,来控制缓冲器115 ;
[0056]步骤425B:封包间隙产生器110检查是否下一封包是可用的。如果是可用的,处理流程前进至步骤430B ;否则处理流程执行步骤435B ;
[0057]步骤430B:通过设置行使能信号具有对应所有数据行总量的值,封包间隙产生器110传输从封包产生器105接收的下一封包的所有的封包数据字节至缓冲器115 ;
[0058]步骤435B:封包间隙产生器110使能以空闲数据传输所有的字节,这些空闲数据是封包产生器110在下一周期产生的;以及
[0059]步骤440B:结束。
[0060]图5是依据本发明第二实施例的网络装置500的结构示意图。网络装置500包含封包产生器505、封包间隙产生器510,以及缓冲器515。网络装置500整体耦接(但不局限于整体耦接)至一个接口电路520、一个总线525以及一个时钟产生器530。网络装置500是用来依据标准IEEE802.3的规定,在不同的周期产生数据(例如封包)至总线525。对于每一封包,网络装置500产生封包的开始(可以缩写为SOP)、前序码、封包数据、以及封包的结束(可以缩写为EOP)。此外,网络装置500产生以及/或者插入足够的空闲数据(例如空闲字节)在每两个连续的封包之间。每两个连续的封包之间插入的空闲字节的数量是由网络装置500决定。网络装置500设置空闲字节的数量,使其落在一个由一个最大值和一个最小值组成的范围之内。此外,网络装置500设置不同封包的空闲字节的平均数量来满足标准IEEE802.3的规定。网络装置500也产生数据(包含封包与空闲字节)至总线525经由接口电路520。W*CS代表用来传输数据至总线525的数据总线频宽。因此,网络装置500产生的数据由缓冲器515缓冲,接着从缓冲器515中读出并且通过具有数据总线频宽W*CS的接口电路520写入总线525。
[0061]具体来说,在第二实施例中,网络装置500配置封包产生器505以一个较高的操作频率FM产生更多的数据,并且配置封包间隙产生器510以这个较高的操作频率FM来写入所有的封包数据并且适当地写入部分空闲字节。该较高的操作频率FW由时钟产生器530提供,并且在第二实施例中,等于(K+l) /K*F,其中K等于4并且F代表一个正常的由标准IEEE802.3规定的操作频率。举例来说,在10GHz高速网络的距离中,F等于521MHz,并且因此FW等于652MHz。然而,这并非本发明的一个限制。
[0062]封包产生器505以较高的操作频率FW产生封包以及空闲数据,并且封包间隙产生器510以较高的操作频率FW传输所有的封包数据以及使得部分的空闲字节通过,而不是将封包产生器505产生的所有空闲字节通过。当缓冲器525是满额或者接近满额时,封包产生器505停止数据产生。举例来说,在每一周期,封包产生器505产生3行(即24字节)的数据,包含封包以及/空闲字节。当封包产生器505在一个周期产生当前封包的EOP时,封包产生器505在这个周期以空闲字节填充EOP之后的剩余字节空间。封包产生器505在这个周期的EOP之后产生空闲数据(空闲字节),并且在一个不同的周期产生下一封包的S0P。封包产生器505依据这一周期中在EOP之后的剩余字节空间的数量来决定是否在下一个周期产生空闲字节。如果剩余字节空间的数量大于或者等于如上所述的空闲字节范围的最小空闲字节,封包产生器505决定在下一个周期不产生空闲字节,并且在下一周期的开始产生下一封包的S0P。如果剩余字节空间的数量小于最小空闲字节,封包产生器505决定在下一周期产生24空闲字节,并且在下一周期之后的一个周期的开始产生下一封包的S0P。因此,在产生EOP之后,封包产生器505被设置为产生空闲数据来填充同一个周期中剩余字节空间,并在一个不同的周期的开始产生下一封包的S0P。由于封包产生器505并非设置为在一个相同的周期中产生一个封包的EOP与下一个封包的S0P,本发明所提出的架构能够有效地减少封包产生器505的成本。EOP与SOP分别对应不同的周期。
[0063]接口电路520被设置为以较高的操作频率FW来从缓冲器515中读出数据,并且以较高的操作频率FW写入数据至总线525。为了满足标准IEEE802.3的规定,接口电路520被设置为使能或者禁能数据写入至总线525。举例来说,在每K+1个连续的周期,接口电路520在K个周期使能数据写入至总线525,并且在I个周期禁能数据写入。对于100GHz的以太网,K等于4。因此,通过总线525的数据依然满足标准IEEE802.3的规定。
[0064]图6A是图5的封包产生器505在时钟CLK的不同的周期CO - C5以较高的频率FW产生的数据的举例说明。在周期CO,封包产生器505针对当前封包产生SOP SI,当前封包的前序码P,以及封包数据Dl。在周期Cl与C2,封包产生器505产生当前封包的封包数据Dl。在周期C3,封包产生器505产生封包数据Dl、当前封包的EOP Tl、以及空闲数据II,其中空闲数据Il在当前封包的EOP Tl之后,并且封包产生器505利用空闲数据(即空闲字节)Il填充EOP Tl之后的剩余字节空间。在周期C3之后的周期C4,封包产生器505产生下一封包的SOP S2、前序码P、以及下一封包的封包数据D2。在周期C5,封包产生器505产生封包数据D2。需注意上述举例说明并非本发明的限制。在其他的实施例中,封包产生器505在周期C3产生空闲数据填充EOP Tl之后的剩余字节空间,并且在一个不同的周期(例如周期C4或者周期C5)产生下一封包的SOP S2。封包产生器505不在相同的周期内产生EOP Tl以及SOP S2。通道(Lanes) O-23代表包含24字节的数据总线频宽W*CS。
[0065]图6B是当数据写入封包间隙产生器510时,针对图5所示的封包产生器505在图6A所示的不同的周期CO - C5产生的举例数据写入缓冲器的相对应的存储地址的示意图。举例来说,封包产生器505在周期C3产生的数据(包含封包数据Dl、当前封包的EOP Tl、以及一部分空闲数据II)位于具有初始地址0x48 - 0x58的行。封包产生器105在周期C3产生的该部分空闲数据Il位于具有初始地址0x50 - 0x58的行,并由封包间隙产生器510过滤掉。图6C是图6B所示的举例说明的由封包间隙产生器510选择并传输的数据结果的示意图。如图6C所示,当前封包与下一封包的空闲数据的间隙包含7个字节,包含6个空闲字节以及I个字节的当前封包的Ε0Ρ。在另一个举例说明中,封包间隙产生器510传输不同数量的空闲字节至缓冲器515。封包间隙产生器510被设置为在每两个连续的封包之间动态输出、产生、或者插入一个不同数量的空闲字节,来满足在两个连续的封包之间平均产生12个空闲字节的标准IEEE802.3的要求。需说明的是,封包间隙产生器510的操作与图1所示的封包间隙产生器110的操作相似,在此不再赘述。与封包间隙产生器110的操作相比较,一个较大的差别是封包间隙产生器510在一个较高的操作频率FW下工作,并且处理3行数据每周期。
[0066]图7A是依据图5所示的实施例,当缺陷空闲计数小于或者等于8时,依据不同的EOP举例,包含空闲字节的间隙与相比较平均空闲字节数量的缺陷空闲字节数量之间的关系的查找表。图7B是依据图5所示的实施例,当缺陷空闲计数大于8时,依据不同的EOP举例,包含空闲字节的间隙与相比较平均空闲字节数量的缺陷空闲字节数量之间的关系的查找表。M0D、EN_E0P、IBN, IS、DS、IG以及DG的值的定义与图3A与图3B中对应的值的定义相似,在此不再赘述。一个不同之处在于图7A与图7B所示的查找表是被封包间隙产生器510以较高的操作频率FW每周期处理24字节来使用。图3A与图3B所示的查找表是封包间隙产生器110以一个较低的操作频率每周期处理32字节时使用。
[0067]在另一个举例说明中,设置一个先近先出(first-1n-first-out, FIFO)电路在缓冲器与接口电路之间。图8是依据本发明第三实施例的网络装置800的结构示意图。网络装置800包含封包产生器805、封包间隙产生器810,缓冲器815以及先进先出电路817。网络装置800是整体耦接(但不局限于整体耦接)至一个接口电路820、一个总线825以及一个时钟产生器830。网络装置800是用来依据标准IEEE802.3的规定,在不同的周期产生数据(例如封包)至总线825。对于每一封包,网络装置800产生封包的开始(可以缩写为S0P)、前序码、封包数据、以及封包的结束(可以缩写为Ε0Ρ)。此外,网络装置800产生以及/或者插入足够的空闲数据(例如空闲字节)在每两个连续的封包之间。每两个连续的封包之间插入的空闲字节的数量是由网络装置800决定。网络装置800设置空闲字节的数量,使其落在一个由一个最大值和一个最小值组成的范围之内。此外,网络装置800设置不同封包的空闲字节的平均数量来满足标准IEEE802.3的规定。网络装置800也产生数据(包含封包与空闲字节)经由接口电路820至总线825。W*CS代表用来传输数据至总线825的数据总线频宽。因此,网络装置800产生的数据由缓冲器815缓冲,接着从缓冲器815中读出并且通过具有数据总线频宽W的接口电路820写入总线825。先进先出电路817以较高的操作频率FW从缓冲器815中读出数据,并且以操作频率FW将数据写入先进先出电路817。接口电路820以正常的频率F从先进先出电路817中读出数据,并以正常的频率F将数据写入总线。因此,并不需要将总线825的数据存取速率从正常的操作频率F增加至较高的操作频率FW。
[0068]此外,如上所述的实施例并不局限于10GHz的以太网,而能够应用在其他的以太网,例如40GHz以太网或者400GHz以太网。以上所述的实施方式能够应用至所有高速的以太网。
[0069]虽然本发明以较佳实施方式揭露如上,然而此较佳实施方式并非用以限定本发明,本领域技术人员不脱离本发明的精神和范围内,凡依本发明申请专利范围所做的均等变化与修饰,都应属本发明的涵盖范围。
【权利要求】
1.一种在网络装置中使用的方法,用来在每一周期以一个数据总线频宽输出数据至总线,该方法包含: 使用封包产生器在一个周期内的一个封包的封包结束之后产生空闲数据,并且在一个不同的周期产生下一封包的封包开始;以及 使用封包间隙产生器接收从该封包产生器传输来的数据,动态写入接收到的数据至缓冲器,并且依据该封包结束以及该封包产生器产生的该空闲数据,插入一个包含该空闲数据的间隙至该封包结束与该封包开始之间。
2.如权利要求1所述的方法,其特征在于,该一个周期是第一周期并且该一个不同的周期是在该第一周期之后的第二周期;以及该在一个周期内,使用封包产生器来在一个封包的封包结束之后产生空闲数据,并且在一个不同的周期产生下一封包的封包开始的步骤包含: 在该第一周期中的该封包结束之后产生该空闲数据;以及 在该第二周期的开始产生该封包开始。
3.如权利要求1所述的方法,其特征在于,该一个周期是第一周期并且该一个不同的周期是在该第一周期之后的第二周期之后的第三周期;以及该在一个周期内,使用封包产生器来在一个封包的封包结束之后产生空闲数据,并且在一个不同的周期产生下一封包的封包开始的步骤包含: 在该第一周期中的该封包结束之后以及该第二周期产生该空闲数据;以及 在该第三周期的开始产生该封包开始.
4.如权利要求1所述的方法,其特征在于,进一步包含: 使用该封包产生器在每一周期产生比对应该数据总线频宽的数据更多的数据。
5.如权利要求4所述的方法,其特征在于,在每一周期产生的数据对应到数据行的大小,该数据行的大小等于该数据总线频宽的行数量加上一个数据行。
6.如权利要求1所述的方法,其特征在于,该插入包含空闲数据的间隙的步骤包含: 依据该封包结束以及该封包产生器产生的该空闲数据,决定该间隙中的空闲数据的空闲字节的数量;以及 依据该空闲字节的数量,选择该封包结束以及在该封包结束之后的一部分的该空闲数据来形成两个连续的封包之间的该间隙,并且输出该封包结束以及该部分空闲数据。
7.如权利要求6所述的方法,其特征在于,该决定空闲字节的数量的步骤包含: 依据该封包的该封包结束来计算空闲字节的初始数量; 通过比较该空闲字节初始数量与空闲字节的平均数量,计算缺陷空闲数量; 在一个先前封包的封包结束之后,通过增加该缺陷空闲数量至缺陷空闲计数,针对空闲字节累加该缺陷空闲计数; 依据该累加的缺陷空闲计数,选择性地参考两个不同的查找表中的一个查找表来决定两个封包之间的该间隙的空闲字节的数量; 其中该两个查找表中的一个第一查找表与空闲字节的数量小于该平均数量的情况相关,并且该两个查找表中的一个第二查找表与空闲字节的数量不小于该平均数量的情况相关。
8.如权利要求7所述的方法,其特征在于,该选择性地参考两个不同的查找表中的一个查找表来决定两个封包之间的该间隙的空闲字节的数量的步骤包含: 当该缺陷空闲计数小于或者等于一个阈值数量,通过参考该第一查找表与该封包的封包结束决定该空闲字节的数量,其中该缺陷空闲计数被增加,并且决定的该两个连续的封包之间的该间隙的空闲字节的数量不大于该平均数量;并且 当该缺陷空闲计数大于该阈值数量,通过参考该第二查找表与该封包的封包结束决定并且补偿该空闲字节的数量,其中该缺陷空闲计数被减少,并且决定该两个连续的封包之间的该间隙的空闲字节的数量大于该平均数量。
9.如权利要求8所述的方法,其特征在于,该阈值数量是一个数据行的字节的数量。
10.如权利要求1所述的方法,其特征在于,该在一个周期内使用封包产生器来在一个封包的封包结束之后产生空闲数据,并且在一个不同的周期产生下一封包的封包开始的步骤包含: 使用该封包产生器以一个高于该数据总线频宽速率的频率来产生数据,来在该周期内在该封包结束之后产生该空闲数据,并且在该不同的周期产生该下一封包的该封包开始; 其中从该封包产生器传输的该数据被该封包间隙产生器以该高于该数据总线频宽速率的频率来处理。
11.一种网络装置,用来在每一周期以一个数据总线频宽输出数据至总线,该网络装置包含: 封包产生器,用于在一个封包的封包结束之后产生空闲数据,并且在一个不同的周期产生下一封包的封包开始;以及 封包间隙产生器,耦接至该封包产生器,用于接收从该封包产生器传输的数据,动态写入接收到的数据至缓冲器,并且依据该封包结束以及该封包产生器产生的该空闲数据,插入一个包含该空闲数据的间隙至该封包结束与该封包开始之间。
12.根据权利要求11所述的网络装置,其特征在于,该一个周期是第一周期并且该一个不同的周期是在该第一周期之后的第二周期;该封包产生器设置为在该第一周期中的该封包结束之后产生该空闲数据,以及在该第二周期的开始产生该封包开始。
13.根据权利要求11所述的网络装置,其特征在于,该一个周期是第一周期并且该一个不同的周期是在该第一周期之后的第二周期之后的第三周期;以及该封包产生器设置为在该第一周期中的该封包结束之后以及该第二周期产生该空闲数据,以及在该第三周期的开始产生该封包开始。
14.根据权利要求11所述的网络装置,其特征在于,该封包产生器设置为在每一周期来产生比对应该数据总线频宽的数据更多的数据。
15.根据权利要求14所述的网络装置,其特征在于,在每一周期产生的数据对应到数据行的大小,该数据行的大小等于该数据总线频宽的行数量加上一个数据行。
16.根据权利要求11所述的网络装置,其特征在于,该封包间隙产生器设置为依据该封包结束以及该封包产生器产生的该空闲数据,决定该间隙中的空闲数据的空闲字节的数量,并且依据该空闲字节的数量,选择该封包结束以及在该封包结束之后的一部分的该空闲数据来形成两个连续的封包之间的该间隙,并且输出该封包结束以及该部分空闲数据至该缓冲器。
17.根据权利要求16所述的网络装置,其特征在于,该封包间隙产生器用来: 依据该封包结束,计算空闲字节的初始数量; 通过比较该初始空闲字节数量与空闲字节的平均数量,计算缺陷空闲数量; 在一个先前封包的封包结束之后,通过增加该缺陷空闲数量至缺陷空闲计数,针对空闲字节累加该缺陷空闲计数; 依据该累加的缺陷空闲计数,选择性地参考两个不同的查找表中的一个查找表来决定两个封包之间的该间隙的空闲字节的数量; 其中该两个查找表中的一个第一查找表与空闲字节的数量小于该平均数量的情况相关,并且该两个查找表中的一个第二查找表与空闲字节的数量不小于该平均数量的情况相关。
18.根据权利要求17所述的网络装置,其特征在于,当该缺陷空闲计数小于或者等于一个阈值数量,该封包间隙产生器通过参考该第一查找表与该封包的封包结束决定该空闲字节的数量,其中该缺陷空闲计数被增加,并且决定的该两个连续的封包之间的该间隙的空闲字节的数量不大于该平均数量;并且 当该缺陷空闲计数大于该阈值数量,该封包间隙产生器通过参考该第二查找表与该封包的封包结束决定并且补偿该空闲字节的数量,其中该缺陷空闲计数被减少,并且决定该两个连续的封包之间的该间隙的空闲字节的数量大于该平均数量。
19.根据权利要求18所述的网络装置,其特征在于,该阈值数量是一个数据行的字节的数量。
20.根据权利要求11所述的网络装置,其特征在于,该封包产生器以一个高于该数据总线频宽速率的频率来产生数据,来在该周期内在该封包结束之后产生该空闲数据,并且在该不同的周期产生该下一封包的该封包开始; 其中从该封包产生器传输的该数据被该封包间隙产生器以该高于该数据总线频宽速率的频率来处理。
21.根据权利要求20所述的网络装置,其特征在于,进一步包含: 先进先出电路,耦接在该封包间隙产生器与该总线之间,用来以高于该数据总线频宽的速率的频率读出从该封包间隙产生器传输的数据,并且用来以该数据总线频宽的速率输出数据至该总线。
【文档编号】H04L12/951GK104283818SQ201410320279
【公开日】2015年1月14日 申请日期:2014年7月7日 优先权日:2013年7月11日
【发明者】林奇锋, 陈威仁 申请人:联发科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1