Commit d150946e authored by Yangbo Lu's avatar Yangbo Lu Committed by David S. Miller

docs: networking: timestamping: update for DSA switches

Update timestamping doc for DSA switches to describe current
implementation accurately. On TX, the skb cloning is no longer
in DSA generic code.
Signed-off-by: default avatarYangbo Lu <yangbo.lu@nxp.com>
Acked-by: default avatarRichard Cochran <richardcochran@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c4b364ce
...@@ -630,30 +630,45 @@ hardware timestamping on it. This is because the SO_TIMESTAMPING API does not ...@@ -630,30 +630,45 @@ hardware timestamping on it. This is because the SO_TIMESTAMPING API does not
allow the delivery of multiple hardware timestamps for the same packet, so allow the delivery of multiple hardware timestamps for the same packet, so
anybody else except for the DSA switch port must be prevented from doing so. anybody else except for the DSA switch port must be prevented from doing so.
In code, DSA provides for most of the infrastructure for timestamping already, In the generic layer, DSA provides the following infrastructure for PTP
in generic code: a BPF classifier (``ptp_classify_raw``) is used to identify timestamping:
PTP event messages (any other packets, including PTP general messages, are not
timestamped), and provides two hooks to drivers: - ``.port_txtstamp()``: a hook called prior to the transmission of
packets with a hardware TX timestamping request from user space.
- ``.port_txtstamp()``: The driver is passed a clone of the timestampable skb This is required for two-step timestamping, since the hardware
to be transmitted, before actually transmitting it. Typically, a switch will timestamp becomes available after the actual MAC transmission, so the
have a PTP TX timestamp register (or sometimes a FIFO) where the timestamp driver must be prepared to correlate the timestamp with the original
becomes available. There may be an IRQ that is raised upon this timestamp's packet so that it can re-enqueue the packet back into the socket's
availability, or the driver might have to poll after invoking error queue. To save the packet for when the timestamp becomes
``dev_queue_xmit()`` towards the host interface. Either way, in the available, the driver can call ``skb_clone_sk`` , save the clone pointer
``.port_txtstamp()`` method, the driver only needs to save the clone for in skb->cb and enqueue a tx skb queue. Typically, a switch will have a
later use (when the timestamp becomes available). Each skb is annotated with PTP TX timestamp register (or sometimes a FIFO) where the timestamp
a pointer to its clone, in ``DSA_SKB_CB(skb)->clone``, to ease the driver's becomes available. In case of a FIFO, the hardware might store
job of keeping track of which clone belongs to which skb. key-value pairs of PTP sequence ID/message type/domain number and the
actual timestamp. To perform the correlation correctly between the
- ``.port_rxtstamp()``: The original (and only) timestampable skb is provided packets in a queue waiting for timestamping and the actual timestamps,
to the driver, for it to annotate it with a timestamp, if that is immediately drivers can use a BPF classifier (``ptp_classify_raw``) to identify
available, or defer to later. On reception, timestamps might either be the PTP transport type, and ``ptp_parse_header`` to interpret the PTP
available in-band (through metadata in the DSA header, or attached in other header fields. There may be an IRQ that is raised upon this
ways to the packet), or out-of-band (through another RX timestamping FIFO). timestamp's availability, or the driver might have to poll after
Deferral on RX is typically necessary when retrieving the timestamp needs a invoking ``dev_queue_xmit()`` towards the host interface.
sleepable context. In that case, it is the responsibility of the DSA driver One-step TX timestamping do not require packet cloning, since there is
to call ``netif_rx_ni()`` on the freshly timestamped skb. no follow-up message required by the PTP protocol (because the
TX timestamp is embedded into the packet by the MAC), and therefore
user space does not expect the packet annotated with the TX timestamp
to be re-enqueued into its socket's error queue.
- ``.port_rxtstamp()``: On RX, the BPF classifier is run by DSA to
identify PTP event messages (any other packets, including PTP general
messages, are not timestamped). The original (and only) timestampable
skb is provided to the driver, for it to annotate it with a timestamp,
if that is immediately available, or defer to later. On reception,
timestamps might either be available in-band (through metadata in the
DSA header, or attached in other ways to the packet), or out-of-band
(through another RX timestamping FIFO). Deferral on RX is typically
necessary when retrieving the timestamp needs a sleepable context. In
that case, it is the responsibility of the DSA driver to call
``netif_rx_ni()`` on the freshly timestamped skb.
3.2.2 Ethernet PHYs 3.2.2 Ethernet PHYs
^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment