Add IEEE 1588-2019 Precision Time Protocol (PTP) support to DPDK via a
new header library in lib/net/. This patchset provides wire-format packet
structure definitions and inline helpers for Transparent Clock and
ordinary clock applications.

Design Rationale
================

Following DPDK conventions for protocol libraries (rte_tcp.h, rte_ip.h),
PTP definitions are provided as a header-only library with inline functions
for zero-overhead packet processing. All functions are suitable for
real-time, performance-critical code paths.

Contents
========

Patch 1: lib/net/rte_ptp.h - Header structures and inline helpers
  - rte_ptp_port_id: 10-byte port identity with EUI-64 clock ID
  - rte_ptp_hdr: 34-byte PTP v2 common message header with nibble
    bitfields for msg_type/transportSpecific and version/minorVersion
  - rte_ptp_timestamp: 10-byte nanosecond-precision timestamp
  - Message type constants (Sync, Delay_Req, Announce, etc.)
  - Flag field bits (two-step, unicast, leap indicator)
  - Port and MAC address constants (RTE_IPPORT_PTP_*, RTE_ETHER_ADDR_PTP_*)
  - Inline helpers: rte_ptp_is_event(), rte_ptp_is_two_step(),
    rte_ptp_add_correction(), rte_ptp_timestamp_to_ns()

Patch 2: examples/ptp_tap_relay_sw - Software PTP Transparent Clock relay
  - Relays PTP packets between a DPDK-bound physical NIC and Linux TAP
  - Software timestamp-based residence time measurement (CLOCK_MONOTONIC)
  - Accumulates residence time to correctionField per IEEE 1588-2019 §10.2
  - Handles L2, VLAN/QinQ, UDP/IPv4, UDP/IPv6 PTP encapsulations
  - Works with unmodified Linux kernel and stock DPDK (no patches required)
  - Compatible with standard linuxptp (ptp4l) tooling

Patch 3: doc/guides/rel_notes/release_26_07.rst - Release notes update

Patch 4: examples/ptpclient - Update to use lib/net PTP definitions
  - Replace local struct ptp_header with struct rte_ptp_hdr
  - Replace local struct tstamp with struct rte_ptp_timestamp
  - Replace local struct clock_id with uint8_t[8] arrays
  - Use RTE_PTP_MSGTYPE_* constants instead of local defines
  - Use hdr->msg_type bitfield and rte_be_to_cpu_16(hdr->sequence_id)
    for direct field access
  - Remove local PTP_PROTOCOL macro (use RTE_ETHER_TYPE_1588)
  - Add lib/net dependency in meson.build

Testing
=======

- Build: `ninja -C build` - clean compilation
- Examples: Both ptpclient and ptp_tap_relay_sw compile and link correctly
- Checkpatches: All 4 patches pass validation
- Functional: ptpclient tested with ptp4l in L2 mode (HW timestamps)
- Functional: ptp_tap_relay_sw tested with E810 master and TAP slave

Changelog
=========

v8 changes:
  - Renamed port macros: RTE_IPPORT_PTP_EVENT, RTE_IPPORT_PTP_GENERAL
  - Renamed MAC macros: RTE_ETHER_ADDR_PTP_MULTICAST,
    RTE_ETHER_ADDR_PTP_MULTICAST_PDELAY
  - Renamed RTE_PTP_MSGTYPE_FOLLOW_UP to RTE_PTP_MSGTYPE_FU for
    consistency with RTE_PTP_MSGTYPE_PDELAY_RESP_FU
  - Split msg_type and version bytes into 4-bit bitfields using
    __extension__ union pattern (matching rte_ipv4_hdr convention)
  - Changed flag bits to use UINT16_C(1) << N
  - Removed 6 accessor functions (rte_ptp_msg_type, rte_ptp_seq_id,
    rte_ptp_version, rte_ptp_domain, rte_ptp_transport_specific,
    rte_ptp_correction_ns) - use direct field access instead
  - Changed rte_ptp_is_event() parameter from int to const struct
    rte_ptp_hdr *
  - Changed rte_ptp_add_correction() parameter from int64_t to uint64_t
  - Used UINT64_C(1000000000) in rte_ptp_timestamp_to_ns()
  - Added "(general)" to PDELAY_RESP_FU description
  - Documented PTP timestamp epoch
  - Updated MAINTAINERS headline
  - Updated ptpclient and ptp_tap_relay_sw for direct field access

v7 changes:
  - Added sample app guide to sample_app_ug toctree to fix Sphinx warning
  - Fixed all checkpatch warnings (commit message line lengths <= 75 chars)
  - Refactored ptpclient to use shared lib/net/rte_ptp.h definitions
  - All 5 patches (cover + 4 functional) pass checkpatch validation

v6 changes:
  - Restructured to lib/net (header-only, following lib/net conventions)
  - Removed separate DPI library functions (moved to example local parser)
  - Removed app/test unit tests (header-only, example-driven testing)
  - Removed programmer's guide (lib/net headers use Doxygen API docs only)

Rajesh Kumar (4):
  lib/net: add IEEE 1588 PTP v2 protocol header definitions
  examples/ptp_tap_relay_sw: add PTP software transparent clock relay
  doc: update release notes for PTP protocol library
  examples/ptpclient: use shared PTP library definitions

 MAINTAINERS                                   |   6 +
 doc/guides/rel_notes/release_26_07.rst        |  12 +
 doc/guides/sample_app_ug/index.rst            |   1 +
 doc/guides/sample_app_ug/ptp_tap_relay_sw.rst | 212 +++++++++
 examples/ptp_tap_relay_sw/Makefile            |  41 ++
 examples/ptp_tap_relay_sw/meson.build         |  13 +
 examples/ptp_tap_relay_sw/ptp_parse.h         | 211 +++++++++
 examples/ptp_tap_relay_sw/ptp_tap_relay_sw.c  | 432 ++++++++++++++++++
 examples/ptpclient/meson.build                |   1 +
 examples/ptpclient/ptpclient.c                | 204 ++++-----
 lib/net/meson.build                           |   1 +
 lib/net/rte_ptp.h                             | 205 +++++++++
 12 files changed, 1215 insertions(+), 124 deletions(-)
 create mode 100644 doc/guides/sample_app_ug/ptp_tap_relay_sw.rst
 create mode 100644 examples/ptp_tap_relay_sw/Makefile
 create mode 100644 examples/ptp_tap_relay_sw/meson.build
 create mode 100644 examples/ptp_tap_relay_sw/ptp_parse.h
 create mode 100644 examples/ptp_tap_relay_sw/ptp_tap_relay_sw.c
 create mode 100644 lib/net/rte_ptp.h

-- 
2.53.0

Reply via email to