我正在尝试在Haskell中编写一个虚拟USB设备。因此,对于https://docs.kernel.org/usb/usbip_protocol.html来说,这看起来像是协议的规范。
我已经编写了足够多的代码来解码发送到服务器的所有数据包(并且不再是),并且编写了足够多的代码来编写发送到客户端的所有数据包(并且不再是),至少按照之前引用的规范。除了iso_packet_descriptor,其大小看起来从未被指定,并且看起来不像是用于其派生的指令。
那么,我应该期待什么尺寸?,如果它是所有其余大小的包,我应该如何实现它?
1条答案
按热度按时间bfnvny8b1#
对于非ISO端点,字段大小始终为零。对于ISO端点,该字段将包含一个ISO描述符数组,每个16字节长,数据包中的描述符数量由数据包的
number_of_packets
字段给出。需要注意的是,尽管文档 * 说 * 对于非ISO端点,
number_of_packets
应该设置为0xFFFFFFFF
,但Linux USB/IP实现并没有这样做。非ISO终结点的此值由发送方设置为0x 0000000,接收方将忽略该值。尽管如此,您应该能够通过检查
number_of_packets
安全地计算字段大小。如果是0xFFFFFFFF
或0
,则字段长度为零。否则,它是number_of_packets * 16
。请注意,如果您正在为不支持ISO传输的虚拟设备编写代码,则该字段的长度将始终为零,您无需为此担心。