On Dec 9, 2016, at 1:37 PM, Scott Deandrea <sdeand...@apple.com> wrote:

> The link-layer header format is as follows:
> struct
> {
>    // Control information
>    uint16_t bcdVersion;        // version of this structure

What's the current version?  0, 1, or something else?

>    uint8_t  headerLength;      // length of this structure

Presumably length in bytes.

>    uint8_t  requestType;       // tAppleUSBHostPacketFilterRequestType

So what are the possible values for requestType?  (I don't see 
tAppleUSBHostPacketFilterRequestType anywhere in the public XNU source or any 
header from Xcode.)

>    // Transfer information
>    uint32_t ioLength;          // amount of data requested/transferred

Presumably length in bytes.

>    uint32_t ioStatus;          // IOReturn
>    uint32_t ioFrameCount;      // number of isoch frames following
>    uint64_t ioID;              // unique id for this I/O
> 
>    // Device information
>    uint32_t deviceLocation;    // locationID of the device
>    uint8_t  deviceSpeed;       // tEndpointSpeed

Is this an enumerated value, a bits/second value, or something else?

>    uint8_t  deviceAddress;     // tUSBHostDeviceAddress

So that's just a standard 7-bit USB device address, presumably, as per the USB 
3.1 spec:

        A 7-bit value representing the address of a device on the USB. The 
device address is the default address (00H) when the USB device is first 
powered or the device is reset. Devices are assigned a unique device address by 
the USB system software.

with the 8th bit zero?

>    uint8_t  endpointAddress;   // Address and Direction

So that's the endpoint in the lower 4 bits, and the direction somewhere in the 
upper 4 bits?  What are the representations for IN and OUT?

>    uint8_t  endpointType;      // tEndpointType

So what are the values for bulk, control, interrupt, and isochronous?

>    // Additional information

So the additional information's presence would be indicated by a greater 
headerLength and possibly also by a different bcdVersion value?

> } __attribute__((packed, aligned(sizeof(uint32_t))));
> 
> The packet payload is the raw USB data that was sent/received for I/O request.

So that would be the "data field" from section 8.3.4 "Data Field" from the USB 
2.0 spec and the DWORDs following the 16-byte header from the USB 3.1 spec?
_______________________________________________
tcpdump-workers mailing list
tcpdump-workers@lists.tcpdump.org
https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers

Reply via email to