From 4da6e392810cf42135cdaac5be504540b9fc3bf8 Mon Sep 17 00:00:00 2001 From: hackerman-kl Date: Wed, 29 Apr 2026 07:50:44 +0200 Subject: [PATCH] milan-avb: gptp: handle MANAGEMENT_ERROR_STATUS TLV as stale-data signal --- src/modules/module-avb/gptp.c | 13 ++++++++++++- src/modules/module-avb/gptp.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/modules/module-avb/gptp.c b/src/modules/module-avb/gptp.c index a6c835692..4a09260e8 100644 --- a/src/modules/module-avb/gptp.c +++ b/src/modules/module-avb/gptp.c @@ -588,8 +588,19 @@ static void on_ptp_mgmt_data(void *data, int fd, uint32_t mask) continue; } + if (ntohs(res.tlv_type_be) == PTP_TLV_TYPE_MGMT_ERROR_STATUS) { + pw_log_debug("PTP management error TLV for id=%04x seq=%u", + mgmt_id, seq); + gptp->req_in_flight = false; + gptp->consecutive_timeouts++; + if (gptp->consecutive_timeouts >= PTP_LOST_TIMEOUT_THRESHOLD) { + gptp_invalidate_state(gptp); + } + continue; + } + if (ntohs(res.tlv_type_be) != PTP_TLV_TYPE_MGMT) { - pw_log_warn("PTP management returned tlv type %d, expected management", + pw_log_debug("PTP management returned unexpected tlv type %d", ntohs(res.tlv_type_be)); gptp->req_in_flight = false; continue; diff --git a/src/modules/module-avb/gptp.h b/src/modules/module-avb/gptp.h index 35b20f4f6..7cf0bc6b1 100644 --- a/src/modules/module-avb/gptp.h +++ b/src/modules/module-avb/gptp.h @@ -24,6 +24,7 @@ extern "C" { #define PTP_MGMT_ACTION_GET 0 #define PTP_MGMT_ACTION_RESPONSE 2 #define PTP_TLV_TYPE_MGMT 0x0001 +#define PTP_TLV_TYPE_MGMT_ERROR_STATUS 0x0002 #define PTP_MGMT_ID_DEFAULT_DATA_SET 0x2000 #define PTP_MGMT_ID_CURRENT_DATA_SET 0x2001 #define PTP_MGMT_ID_PARENT_DATA_SET 0x2002