tcpdump mailing list archives

Re: Speed specific Link-Layer Header Types for USB 2.0


From: Tomasz Moń via tcpdump-workers <tcpdump-workers () lists tcpdump org>
Date: Mon, 9 May 2022 08:09:59 +0200

--- Begin Message --- From: Tomasz Moń <desowin () gmail com>
Date: Mon, 9 May 2022 08:09:59 +0200
On Sun, May 8, 2022 at 11:15 PM Guy Harris <gharris () sonic net> wrote:
On May 8, 2022, at 1:30 PM, Michael Richardson <mcr () sandelman ca> wrote:
I guess I would have thought that a physical bus could have a mix of
different devices which operate at different speeds.  As such, I wondered if
you really needed pcapng to be able to mix LINKTYPES in the same file, or
a different bit of meta-data to indicate bus speed for each frame captured.

In most cases all the packets will be at the same speed. The only
corner case is how the full/low speed is being handled. This dates
back to the original USB 1.0 specification and is kept for
compatibility reasons.

But, maybe I'm wrong and that actually requires there to be a USB hub out there.

The hub is the complex part. Between host and device, with no
intermediate hubs in the path, all packets are always sent at the same
speed.

I think a point-to-point connection between the host and another entity may always run at a single speed, as well as 
a connection between a hub and a function.

It might also be the case that a hub-to-hub connection also runs at a single speed.  Section 11.14 "Transaction 
Translator" says:

        A hub has a special responsibility when it is operating in high-speed and has full-/low-speed devices 
connected on downstream facing ports. In this case, the hub must isolate the high-speed signaling environment from 
the full-/low-speed signaling environment. This function is performed by the Transaction Translator (TT) portion of 
the hub.

so if you have a full-speed or low-speed device plugged into a USB 2.0 hub, and that hub is connected to a host, the 
host-to-hub link is high-speed, and the hub-to-device link is full-speed or low-speed, and the hub does the 
translation.  That way, you can plug a high-speed device and a full-speed or low-speed device into the hub, and the 
host will be able to talk at high speed to the high-speed device.

All packets between high speed host and high speed hub are at high
speed (including the packets that are intended for a full or low speed
devices). Transaction Translator basically buffers the data and
sends/receives packets to/from downstream devices at the correct speed
(full/low). Determining the target device speed during (the high speed
traffic from host to hub) dissection is simple as the speed is
indicated in the SPLIT packet.

USB isn't a shared bus like non-switched Ethernet; it's more like switched Ethernet or point-to-point Ethernet, with 
links being point-to-point, either a direct connection between end nodes or connections to a switching device that 
handles speed translation if two end nodes of different speed capabilities are communicating.

Note that end nodes cannot directly communicate with each other. The
communication is always between host and a device. Device to device
communication is not possible. If Transaction-Translator is involved,
it essentially fulfills the speed translation from host (when reading
from downstream device Transaction Translator does keep issuing IN
until the device responds with data or stalls the endpoint; as long as
NAKs are received Transaction Translator will keep responding to the
host SPLIT COMPLETE with NYET).

--- End Message ---
_______________________________________________
tcpdump-workers mailing list
tcpdump-workers () lists tcpdump org
https://lists.sandelman.ca/mailman/listinfo/tcpdump-workers

Current thread: