校验数据完整性的制作方法

文档序号:7634857阅读:299来源:国知局
专利名称:校验数据完整性的制作方法
技术领域
本发明涉及一种网络接口,例如将计算机连接到网络的接口设备。


图1是如网络接口卡(NIC)等网络接口设备及可将该设备用于其中的系统的总体架构的原理图。网络接口设备10通过数据链路5连接到处理设备如计算机1,并且通过数据链路14连接到数据网络20。另外的网络接口设备如处理设备30也与网络相连,用于在网络和另外的处理设备如处理设备40之间提供接口。
例如,计算机1可以是个人计算机、服务器或专用处理设备例如数据记录器或控制器。在本例中,它包括处理器2、程序存储器4和存储器3。程序存储器存储定义操作系统和可以在操作系统上运行的应用程序的指令。操作系统提供驱动程序和接口库等工具,利用该工具应用程序可以访问连接于计算机的外围硬件装置。
网络接口设备最好能够在用户级支持如TCP、RDMA和ISCSI等标准传输协议即,通过一种方式可使它们能够访问运行在计算机1上的应用程序。这种支持使得能够进行需要使用标准协议的数据传送,而不需数据通过内核栈。在本例的网络接口设备中,在计算机1的操作系统可访问的传输库中实现标准传输协议。
图2说明了这样的一个实现。在这个架构中,实现了两次TCP(以及其它)协议如图2中TCP1和TCP2所示。在一个典型的操作系统中,TCP2是内置于计算机的操作系统中的TCP协议的标准实现。为了控制网络接口设备和/或与网络接口设备通信,运行在计算机上的应用程序可发出API(应用程序编程接口)调用。已提供的支持网络接口设备的传输库能够处理一些API调用。对于应用程序直接可用的传输库所不能处理的API调用,通常通过应用程序和操作系统之间的接口传送由操作系统可用的库处理。对于具有多个操作系统的实现,方便的做法是令传输库经由OS接口,使用现有的基于Ethernet/IP的控制平面架构,例如SNMP和ARP协议。
在用户级实现传输协议具有很多困难。到目前为止的多数实现均是基于把预先存在的内核代码基础移植到用户级。这样的例子有Arsenic和Jet-stream。这证明了用户级传输的潜力,但是没有解决取得一个完善的、鲁棒的、高性能的、商业上可行的实现所需的诸多问题。
图3示出一个使用标准内核TCP传输(TCPk)的架构。
该架构的操作如下当从网络接口硬件(例如网络接口卡(NIC))进行分组接收时,NIC将数据送入预先分配的数据缓冲区(a),并通过中断线调用OS中断处理程序(步骤i)。中断处理程序管理硬件接口,例如公布新的接收缓冲区,并且传递已接收的(在本例中,通过Ethernet)寻找协议信息的分组。如果一个分组被识别为指定了有效的协议,例如TCP/IP,就将其传递(不复制)到适当的接收协议处理块(步骤ii)。
进行TCP接收侧的处理并且从分组识别目的部分。如果分组包含端口的有效数据,那么将分组加入到端口的数据队列(步骤iii),把该端口标记为(可能需要调度程序和被阻止的进程的唤醒)持有有效数据。
TCP接收处理可能需要其它分组已经传送(步骤iv),例如,如果应当再次传送此前已传送的数据或者可以现在传送之前已入队的数据(或许因为TCP窗口已经打开)。在这种情况下,分组与用于传送的OS“NDIS”驱动程序一起排队。
为了使一个应用程序能够检索数据缓冲区,它必须引用OS API(步骤v),例如使用recv(),select()或poll()等调用。如此做具有这样的效果通知应用程序数据已经收到并且(在recv()调用的情况下)将数据从内核缓冲区复制到应用程序缓冲区。复制使内核(OS)能够重新使用它的网络缓冲区,该缓冲区具有如DMA可访问的特殊属性并意味着应用程序不必在网络所提供的单元中处理数据,否则应用程序需要预先知道数据的最终目的地,应用程序必须预先分配以后能够用于数据接收的缓冲区。
应当注意的是,在接收侧具有至少两个不同的异步交互的控制线程来自中断的向上调用和来自应用程序的系统调用。许多操作系统也将向上调用分开,以避免在中断优先级执行太多的代码,例如通过“软中断”或“延迟程序调用”技术。
除了通常存在一条执行路径外,发送过程以类似的方式运作。应用程序通过加以要传送的数据调用操作系统API(例如,使用send()调用)(步骤vi)。该调用将数据复制到内核数据缓冲区中并且引用用TCP发送处理。此时,应用了协议且完好形成的TCP/IP分组与接口驱动程序一起排队用于传送。
如果成功的话,系统调用返回一个对经调度的(由硬件)用于传送的数据的指示。然而,在一些情况下,网络接口设备无法使数据入队。例如,传输协议使未决的确认或窗口更新进行排队,设备驱动程序使到硬件的未决的数据传送请求以软件的形式进行排队。
由必须根据时间变化执行的动作生成贯穿系统的一个第三控制流。一个例子是,对重发算法的触发。通常,操作系统为所有OS模块提供时间和调度服务(由硬件时钟中断驱动),使TCP栈能实现在基于每个连接的定时器。
如果在用户级实现标准内核栈,那么架构通常如图4中所示。应用程序与传输库链接而不是直接与OS接口链接。该架构与具有由用户级程序包提供的如定时器支持等服务的内核栈实现,以及由用户级虚拟接口模块替代的装置驱动程序接口很相似。然而,为了提供TCP实现所需要的一个异步处理模型,在传输库内必需有一些活动的执行线程(i)由应用程序提供的系统API调用(ii)定时器生成协议代码的的调用(iii)虚拟网络接口和协议代码内合成的向上调用的管理(对于一些架构,可将ii和iii组合)然而,这样安排带来一些问题(a)在这些线程间的上下文转换和实现闭锁以保护共享数据架构的开销可能是巨大的,从而消耗了大量的处理时间。
(b)通常使用提供定时器/时间支持的操作系统来操作用户级定时器代码。来自定时器模块的系统调用所产生的大的开销导致系统不能获得满意的阻止操作系统和数据路径间相互作用的目的。
(c)可能有许多独立的应用程序,每个应用程序管理网络连接的一个子集;一些是通过它们自己的传输库,一些是通过现有的内核栈传输库。NIC必须能够有效地解析分组,并将他们传送到基于如IP端口和主地址位等协议信息的适当的虚拟接口(或OS)。
(d)一个应用程序可能将对特定网络连接的控制传送到另一个应用程序,例如在Unix操作系统上的fork()系统调用期间。这要求将需要一个完全不同的传输库例访问连接状态。更糟糕的是,许多应用程序可能共享一个网络连接,意味着传输库通过(进程间通信)技术共享所有权。现有的用户级传输不支持这样。
(e)通常要求传输协议命令网络连接的寿命长于其所连接的应用程序。
例如,使用TCP协议,传输必须竭力进行发送,除了不被确认的数据,当发送应用程序退出或失效时适当的关闭一个连接。对于内核栈实现,不管应用程序的状态如何,都能够将“定时器”输入到协议栈是没有问题的,但是如果应用程序退出、失效或者在调试程序中终止,对于将消失(可能是不适当地)的传输库则存在问题。
另外,RDMA(远程直接存储器存取)和ISCSI(Internet小型计算机系统接口)为这样的协议允许一个诸如计算机的设备直接存取网络上把该设备与其连接的另一个设备(“对象”)的存储器的内容。这些协议涉及向传统网络分组嵌入定义了根据协议所执行的操作的数据串。例如,为执行一个把数据写至远程计算机的存储器的RDMA操作,可以向该计算机发送一个TCP分组,该TCP分组具有一个包含由下列内容组成的串的有效载荷(payload)一个标记RDMA数据的开始的标记符、一个指示把数据写至存储器中何处的标签、数据本身、以及一个允许在接收时验证数据的完整性的CRC块。一个单一的TCP分组可以包括多个这样的串。当接收到TCP分组时,可以将其有效载荷中的数据标识为RDMA数据,并相应地对这些数据进行处理,以执行所希望的写操作。
可以由对象设备本身的一个处理器,或者由对象设备的一个网络接口设备执行对分组处理以抽取、验证以及解释RDMA数据。然而,这一处理一般都由网络接口设备执行,因为这样做可以使往返于对象的存储器的数据的传递效率更高。如果由对象设备的一个处理器执行这一处理,则将需要两个存储器写操作,因为首先必须把RDMA数据串传递于设备的存储器的一个缓冲区域中,以进行处理,然后,当已确定了数据的目标地址时,其会被拷贝至该地址。相比之下,如果在网络接口设备上执行RDMA处理,则可以在其中确定数据的目标地址,然后可以把数据直接写至该地址,从而节省了否则将需要的拷贝操作。出于这一原因,最好采用在网络接口设备上处理RDMA或ISCSI数据的方案。然而,其缺点是,要求网络接口设备具有相当大的处理能力。这增大的花费,特别是,由于在诸如网络接口设备的设备上所嵌入的处理能力通常比主处理器能力更为昂贵。
人们希望提供一种支持诸如RDMA和ISCSI的协议的改进的装置。
根据本发明的一个方面,提供了一种网络接口设备,用于与数据处理设备和数据网络的连接,以在数据处理设备和网络之间提供一个接口,以支持某一传送协议的分组的网络,把网络接口设备设置为能够在这样的分组数据的有效载荷中标识一个进一步的协议,进一步的协议的数据包含该进一步协议的有效载荷数据和该进一步的协议的成帧数据,成帧数据包括准许验证有效载荷数据完整性的验证数据;当如此标识进一步的协议的数据时,至少处理用于确定其完整性的有效载荷数据,并且向数据处理设备传输至少某些成帧数据以及一个对所述处理的结果加以指示的指示信息。
权利要求中阐述了本发明的进一步的方面和优选特性。
本发明的其它方面和优选特征在权利要求中陈述。
现在结合附图通过例子来说明本发明,其中图1是一个通用的网络接口设备的原理图;图2示出了传输库架构的一个实现;图3示出使用用户级TCP传输的标准内核TCP传输的架构;图4示出在用户级实现标准内核栈的架构;图5示出一个TCP传输架构的例子;图5示出一个TCP传输架构的例子,该架构适合在如图1中的设备10的网络接口设备和如图1的计算机1的计算机之间提供一个接口。该架构不限于这个实现。
图5中例子的架构和传统架构之间的主要区别如下。
(i)代表网络连接执行协议处理的TCP代码既位于传输库又在OS内核中。该代码执行协议处理的事实是非常重要的。
(ii)连接状态和数据缓冲区保持在内核存储器和映射在传输库的地址空间的存储器中。
(iii)内核与传输库代码均可访问针对和代表某一特殊网络连接的虚拟硬件接口。
(iv)通过虚拟硬件接口可管理定时器(这些定时器对应于网络接口设备上的真实定时器),不需系统调用来对他们设置和清零。NIC生成定时器事件,由网络接口设备驱动程序接收该事件并将其传送到设备的TCP支持代码上。
应当注意的是,网络接口设备的TCP支持代码是一般OS TCP的实现的补充。这能够很好的与网络接口设备栈共存。
为该架构的效果如下。
(a)要求多个线程活动于传输库中由于既能作为系统API调用的结果在传输库中执行TCP代码(例如recv())(见图5步骤i),也可作为定时器事件的结果由内核执行TCP代码(见图5步骤ii),对于图5的架构,不存在这一需求。在这两种情况中,均可以管理VI(虚拟接口)且两个代码路径可以访问连接状态或数据缓冲区,可以由共享存储器锁管理对他们的保护和他们间的互斥。并且能够去除在传输库级的线程切换的开销,该特点能够应用程序制止它们的线程和信号处理假设的需求例如在一些情况下,要求一个单线程的应用程序与一个多线程的库链接是不能接受的。
(b)替换针对定时器管理的系统调用由于网络接口设备能够实现一些可分配在特殊虚拟接口例的多个定时器例如,每个活动的TCP传输库可有一个定时器,因此这一需求没有表现在图5的架构中。可以通过由存储器映射的VI使这些定时器成为可编程的(见图5步骤iii),并且导致发布事件(见图5步骤iv)。因为不用系统调用就可以设置和清零定时器,可大大降低定时器管理的开销。
(c)至多传输库的分组的正确送达网络接口设备可以包括或者访问内容可寻址存储器,这能够匹配从进入的分组标头所取得的比特,作为并行硬件匹配操作。可以将取得的匹配结果指示必须用于送达的目的虚拟接口,并且硬件可以开始将已经被推进VI的分组的送达缓冲区。下面将说明匹配处理的一种可能的配置。可以扩展下面说明的配置来对与IPv6关联的更大的主地址解复用,尽管与所描述的配置相比这将要求对应每个分组更宽的CAM查找或多CAM查找。
为了这个目的使用CAM的一个选择是使用散列算法,该算法允许来自分组标头的数据被处理以确定要被使用的虚拟接口。
(d)在进程/应用程序/线程之间连接的切换当切换网络连接时,可以在应用程序间传送相同系统宽的资源句柄。例如,可以是文档描述符。网络接口设备的架构能够将所有与网络连接相关联的状态附加于(例如)该文件描述符,并要求传输库存储器映射至这个状态。网络连接切换后,尽管新的应用程序在不同的地址空间中执行,新的应用程序(无论是应用程序、线程或进程)也能够进行存储器映射并且继续使用该状态。另外,通过使用与在内核和传输库之间使用的相同的返回源语,任何应用程序能够共享具有由标准系统APIs指定的相同的语义的网络连接的使用。
(e)当传输库停止、失效或解除时,完成传输协议操作在网络接口设备的架构中可以完成这个步骤,因为连接状态和协议代码能够驻留于内核。可以按照与通用TCP(TCPk)协议栈相同的方式通知OS内核代码应用程序状态的改变。被停止的应用程序将不会提供线程去进行协议执行,但是协议将通过定时器事件继续,例如,对于现有技术内核栈协议,这是人们所熟悉的。
有很多新出现的协议如IETF RDMA和iSCSI。至少其中一些协议设计为运行在TCP和其它协议代码执行在网络接口设备上的环境中。现在来说明这种协议能够在主CPU上执行的工具(即使用连接有网络接口卡的计算机的处理装置)。这种实现是先进的,因为其使用户能够利用主CPU技术相对于协处理器技术的价格性能比优势。
RDMA规范中给出了RDMA指令的格式,这一规范可得于www.rdmaconsortium.org。
如RDMA等协议涉及在TCP流内的成帧信息的嵌入和循环冗余校验。成帧信息在协议库内的计算是微不足道的,而CRC的计算(对比校验和)运算量大且最好由硬件完成。为了适应这一点,当TCP流带有RDMA或相似的封包(encapsulation)时,可以在虚拟接口内进行选择,例如通过标志位。当检测到这个选择时,NIC在传送期间将解析传送中的每个分组,恢复RDMA帧,使用RDMA CRC算法以及快速插入CCRC。相对如iSCSI等对误差校验数据的运算的运算密度相对较大的其它协议,使用类比程序是有益的。
根据这一系统,网络接口设备还能使用相似的逻辑验证所接收的分组上的CRC。例如,可以用类似于标准TCP校验和卸载技术的方式来执行校验。
为了执行这一设置,较佳的做法是令所执行的步骤如下。当按一个RDMA可兼容的模式进行操作时,NIC对每一个所接收的TCP分组的有效载荷进行分析,以识别其是否包含RDMA数据。可以通过校验RDMA成帧数据(即,RDMA头标和脚标),特别是RDMA头标是否存在于有效载荷中,进行这一识别。如果其不存在,则如通常那样处理分组。如果其存在,则由NIC根据RDMACRC算法处理分组的有效载荷,以针对所接收数据计算RDMA CRC。一旦已经进行了这一计算,则可以使用两条路线之一。在第一路线中,把RDMA数据随所计算的CRC一起传递于主计算机。然后,主计算机可以把所计算CRC与RDMA数据中所接收的CRC进行比较,以确定是否已正确地接收到数据。做为选择,在第二路线中,可在NIC处进行所述比较,并且把RDMA数据和所述比较结果的指示信息(例如在一个1比特的标志中)传递至主计算机。因此,接下来,在这两种情况的每一情况中,主计算机可以处理RDMA数据。因此,如果CRC校验的结果表明已经正确地接收到数据,则其可以执行数据所表示的RDMA命令(通常为一个读或写命令)。否则,其不能执行该命令,而且在该情况下,其可以自动地执行一个错误恢复动作,例如启动一个对数据进行重新传输的请求。
如果除了其计算外,NIC还执行对CRC的校验,则如果其断定还没有有效地接收到数据,则其不需要把相应RDMA数据的有效载荷传输至主计算机。其仅需要根据传送协议分组的头标(通常为一个TCP头标)以及RDMA成帧信息传输允许主计算机请求重新传输的足够的信息即可。其可以传输整个头标和成帧信息,其也可以只传输所述头标和成帧信息的某些部分。最好基于每RDMA数据单位进行这一操作。因此,如果一个TCP分组包含一个单一的RDMA数据单位,则其为传递于主计算机的同一数据单位的成帧数据和同一分组的头标(或其一部分)。如果一个TCP分组包含多个RDMA数据单位,则如果断定任何一个RDMA数据出现问题,则把其成帧数据和整个分组的头标(或其一部分)传输于主PC。
诸如RDMA的协议也可能要求附加的操作,例如在传统的实现中要求网络接口设备上附加智能的RDMA读操作。如以上所示,这一类型的实现已导致这样一个普遍的认同应该通过一个协同处理器网络接口设备实现RDMA/TCP。在此处所描述的类型的架构中,可以对一个特定的硬件滤波程序进行编码,以捕获对某一具体网络连接的这样的较上级协议的请求。在这样一种情况下,NIC可以生成一个类似于定时器事件的事件,以通过运行在所附接计算机上的软件以及一条提交数据消息请求动作。通过以这样的一种方法触发一个事件,NIC可以实现这样一种效果传输库或内核帮助程序,可以立即对请求采取动作。这可以避免内核扩展在调度传输库之前不执行的潜在问题,并且如果需要的话,可将其施用于其它较上级协议。
较佳的作法是,使用NIC的专用硬件进行CRC的计算,因为这样做为执行这样的逐比特操作提供了一种特别有效的方式。相类似,上述方法也适用于计算除CRC计算之外的计算,例如,这些其它的计算可以包括认证、加密以及解密操作。
尽管已参照RDMA描述了这一例子,但其也适用于其它协议。
据此,本申请人独立地公开了此处所描述的各个特性,以及两或两个以上这样的特性的任何组合,以致,总体上,依据这一技术领域中普通熟练技术人员共同的一般知识,能够根据本说明书执行这样的特性或组合,而不管这样的特性或特性组合是否解决此处所公开的任何问题,而且对权利要求的范围未加以限制。本申请人表示本发明的各个方面可由任何这样的单个特性或特性的组合组成。鉴于以上的描述,这一技术领域中的熟练技术人员将会明显意识到,可以在本发明的范围内对本发明进行多方面的修改。
权利要求
1.一种网络接口设备,用于与数据处理设备和数据网络的连接,以在数据处理设备和网络之间提供一个接口,以支持某一传送协议的分组的网络,把网络接口设备设置为能够在这样的分组数据的有效载荷中标识一个进一步的协议的数据,该进一步的协议的数据包括进一步的协议的有效载荷数据和该进一步的协议的成帧数据,成帧数据包括准许验证有效载荷数据完整性的验证数据;当如此标识进一步的协议的数据时,至少处理用于确定其完整性的有效载荷数据,并且向数据处理设备传输至少某些成帧数据以及一个对所述处理的结果加以指示的指示信息。
2.根据权利要求1中所要求的一种网络接口设备,其中,把网络接口设备设置为能够通过把一个预先确定的函数施用于有效载荷数据,处理有效载荷数据,以形成一个验证结果。
3.根据权利要求1中所要求的一种网络接口设备,其中,所述验证结果为结果的所述指示信息。
4.根据权利要求3中所要求的一种网络接口设备,其中,把网络接口设备设置为能够把有效载荷数据随至少某些成帧数据一起传输至数据处理设备。
5.根据权利要求2中所要求的一种网络接口设备,其中,把网络接口设备进一步设置为能够通过把验证结果与核实数据进行比较,处理有效载荷数据,这一比较的结果为结果的所述指示信息。
6.根据权利要求5中所要求的一种网络接口设备,其中,把网络接口设备设置为如果所述比较的结果为验证结果与验证数据相匹配,则把有效载荷数据随至少某些成帧数据一起传输至数据处理设备。
7.根据权利要求5或6中所述的一种网络接口设备,其中,把网络接口设备设置为如果所述比较的结果为验证结果与验证数据不相匹配,则不把有效载荷数据传输至数据处理设备。
8.根据权利要求2至7中任何一个权利要求中所述的一种网络接口设备,其中,预先确定的函数为一个循环冗余校验函数。
9.根据权利要求2至7中任何一个权利要求中所述的一种网络接口设备,其中,预先确定的函数为一个认证函数。
10.根据权利要求2~9中任何一个权利要求中所述的一种网络接口设备,其中,预先确定的函数为一个涉及有效载荷数据的逐字节处理的函数。
11.根据任何先前权利要求中所述的一种网络接口设备,其中,传送协议的分组包括该协议的分组头标,并且把网络接口设备设置为当标识进一步的协议的数据时,能够把载有有效载荷数据的传送协议的一或多个分组的一或多个头标的至少某些随有效载荷数据一起传输至数据处理设备。
13.一种网络接口设备,其中,把网络接口设备设置为能够通过把数据传输至一个数据处理设备所支持的传输库,执行向数据处理设备的传输。
14.根据任何先前权利要求中所述的一种网络接口设备,其中,传送协议为TCP(传输控制协议)协议。
15.一种网络接口设备,其中,进一步的协议为一个针对远程直接存储器存取的协议。
16.根据权利要求15中所述的一种网络接口设备,其中,进一步的协议为这样的协议其支持存储器写指令,其中,成帧数据包括指示把至少某些有效载荷数据写至其中的数据处理设备的存储器地址的信息。
17.根据权利要求15或16中所述的一种网络接口设备,其中,进一步的协议为RDMA(远程直接存储器存取)或ISCSI(Internet小型计算机串行接口)协议。
18.根据任何先前权利要求中所述的一种网络接口设备,其中,把网络接口设备设置为当标识进一步的协议的至少某些形式的数据时,能够在数据处理装置上引发一个中断。
19.根据权利要求18中所述的一种网络接口设备,其中,所述形式的数据包括存储器读指令。
20.根据权利要求18中所述的一种网络接口设备,其中,所述形式的数据包括存储器写指令。
21.根据权利要求19或20中所述的一种网络接口设备,其中,所述指令包括指示在其处执行所述读/写的一个存储器地址的信息。
22.一种数据处理系统,包括一个网络接口设备,该网络接口设备用于与数据处理设备和数据网络的连接,以在数据处理设备和网络之间提供一个接口,以支持某一传送协议的分组的网络,把网络接口设备设置为能够在这样的分组数据的有效载荷中标识一个进一步的协议的数据,该进一步的协议的数据包括进一步的协议的有效载荷数据和该进一步的协议的成帧数据,成帧数据包括准许验证有效载荷数据完整性的验证数据;当如此标识进一步的协议的数据时,至少处理用于确定其完整性的有效载荷数据,并且向数据处理设备传输至少某些成帧数据以及一个对所述处理的结果加以指示的指示信息。以及所述数据处理设备。
23.一种数据处理方法,使用了一个网络接口设备,该网络接口设备用于与数据处理设备和数据网络的连接,以在数据处理设备和网络之间提供一个接口,以支持某一传送协议的分组的网络,该方法包括通过网络接口设备执行下列步骤在这样的分组数据的有效载荷中标识一个进一步的协议的数据,该进一步的协议的数据包括进一步的协议的有效载荷数据和该进一步的协议的成帧数据,成帧数据包括准许验证有效载荷数据完整性的验证数据;当如此标识进一步的协议的数据时,至少处理用于确定其完整性的有效载荷数据,并且向数据处理设备传输至少某些成帧数据以及一个对所述处理的结果加以指示的指示信息。
全文摘要
一种网络接口设备,用于与数据处理设备和数据网络的连接,以在数据处理设备和网络之间提供一个接口,以支持某一传送协议的分组的网络,把网络接口设备配置为能够在这样的分组数据的有效载荷中标识一个进一步的协议的数据,该进一步的协议的数据包括进一步的协议的有效载荷数据和该进一步的协议的成帧数据,成帧数据包括准许验证有效载荷数据完整性的验证数据;当如此标识进一步的协议的数据时,至少处理用于确定其完整性的有效载荷数据,并且向数据处理设备传输至少某些成帧数据以及一个对所述处理的结果加以指示的指示信息。
文档编号H04L29/06GK1961559SQ200580012678
公开日2007年5月9日 申请日期2005年4月8日 优先权日2004年4月21日
发明者斯蒂夫·莱斯利·蒲柏, 德瑞克·爱华兹·罗伯茨, 戴维·詹姆斯·里多克 申请人:Level5网络有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1