--- Begin Message ---
On Sun, May 8, 2022 at 11:15 PM Guy Harris <ghar...@sonic.net> wrote:
> On May 8, 2022, at 1:30 PM, Michael Richardson <m...@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