integ/base/linuxptp/debian/patches/0018-Find-a-better-home-for-the-management-TLV-data-helpe.patch
Andre Mauricio Zelak deeacbcdf3 Redundant HA PTP timing clock sources support
Enhanced phc2sys to support multiple PTP timing clock sources, to
select the best clock source available according to the clocks
statuses.

A series of changes were patched back from a newer version of the
linuxptp package. They contain the support for multiple pmc nodes,
necessary to communicate with multiple ptp4l instances.

The phc2sys is now able to automatically select the best clock
according to the clocks statuses, and also monitors any clock
status change and act to keep the system synchronized to the
best clock source available.

A new set of configuration options were added to control the behavior
of the automatic clock selection algorithm and to configure the clock
source interfaces.

And a new command interface was added to phc2sys to gather statuses
about the clocks configured and the HA algorithm. This interface also
provides commands to control the clock source selection for debug and
maintenance proposes.

Test plan:
PASS: Verify the linuxptp package is built containing all the patches.
PASS: Verify the .deb package produced in the build install and that
all the PTP different deployments new and existing are OK.
PASS: Verify that a new image containing the linuxptp packed can be
installed and that all the PTP different deployments new and existing
are OK.

Story: 2010723
Task: 48642
Change-Id: Ic8c4d9bd335c582a91f1f4418947a81fc5e8b4f9
Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
2023-08-18 10:05:14 -03:00

133 lines
3.9 KiB
Diff

From 6e4f8ea8531b7678a44a9b3ed021fda94eccdc27 Mon Sep 17 00:00:00 2001
From: Andre Mauricio Zelak <andre.zelak@windriver.com>
Date: Mon, 12 Jun 2023 14:59:57 -0300
Subject: [PATCH 18/47] Find a better home for the management TLV data helper
function.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
[commit 5dd47c873cae8e0a2815b43c1ef3a86b9aca9dac upstream]
Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
---
msg.h | 12 ++++++++++++
phc2sys.c | 2 +-
pmc_agent.c | 18 +++++-------------
pmc_agent.h | 1 -
4 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/msg.h b/msg.h
index b600ff0..84380da 100644
--- a/msg.h
+++ b/msg.h
@@ -247,6 +247,18 @@ static inline uint8_t management_action(struct ptp_message *m)
return m->management.flags & 0x0f;
}
+/**
+ * Obtain the data field from the TLV in a management message.
+ * @param m A management message.
+ * @return A pointer to the TLV data field.
+ */
+static inline void *management_tlv_data(struct ptp_message *msg)
+{
+ struct management_tlv *mgt;
+ mgt = (struct management_tlv *) msg->management.suffix;
+ return mgt->data;
+}
+
/**
* Obtain the ID field from the TLV in a management message.
* @param m A management message.
diff --git a/phc2sys.c b/phc2sys.c
index 1f74f27..280e249 100644
--- a/phc2sys.c
+++ b/phc2sys.c
@@ -824,7 +824,7 @@ static int phc2sys_recv_subscribed(void *context, struct ptp_message *msg,
return 0;
switch (mgt_id) {
case TLV_PORT_DATA_SET:
- pds = get_mgt_data(msg);
+ pds = management_tlv_data(msg);
port = port_get(priv, pds->portIdentity.portNumber);
if (!port) {
pr_info("received data for unknown port %s",
diff --git a/pmc_agent.c b/pmc_agent.c
index 6dfb3ca..6e9c023 100644
--- a/pmc_agent.c
+++ b/pmc_agent.c
@@ -85,14 +85,6 @@ static int is_msg_mgt(struct ptp_message *msg)
return 0;
}
-void *get_mgt_data(struct ptp_message *msg)
-{
- struct management_tlv *mgt;
-
- mgt = (struct management_tlv *) msg->management.suffix;
- return mgt->data;
-}
-
static int get_mgt_err_id(struct ptp_message *msg)
{
struct management_error_status *mgt;
@@ -188,7 +180,7 @@ int run_pmc_wait_sync(struct pmc_agent *node, int timeout)
if (res <= 0)
return res;
- data = get_mgt_data(msg);
+ data = management_tlv_data(msg);
portState = ((struct portDS *)data)->portState;
msg_put(msg);
@@ -212,7 +204,7 @@ int run_pmc_get_utc_offset(struct pmc_agent *node, int timeout)
if (res <= 0)
return res;
- tds = (struct timePropertiesDS *)get_mgt_data(msg);
+ tds = (struct timePropertiesDS *) management_tlv_data(msg);
if (tds->flags & PTP_TIMESCALE) {
node->sync_offset = tds->currentUtcOffset;
if (tds->flags & LEAP_61)
@@ -242,7 +234,7 @@ int run_pmc_get_number_ports(struct pmc_agent *node, int timeout)
if (res <= 0)
return res;
- dds = (struct defaultDS *)get_mgt_data(msg);
+ dds = (struct defaultDS *) management_tlv_data(msg);
res = dds->numberPorts;
msg_put(msg);
return res;
@@ -281,7 +273,7 @@ int run_pmc_port_properties(struct pmc_agent *node, int timeout,
if (res <= 0)
goto out;
- ppn = get_mgt_data(msg);
+ ppn = management_tlv_data(msg);
if (ppn->portIdentity.portNumber != port) {
msg_put(msg);
continue;
@@ -314,7 +306,7 @@ int run_pmc_clock_identity(struct pmc_agent *node, int timeout)
if (res <= 0)
return res;
- dds = (struct defaultDS *)get_mgt_data(msg);
+ dds = (struct defaultDS *) management_tlv_data(msg);
memcpy(&node->clock_identity, &dds->clockIdentity,
sizeof(struct ClockIdentity));
node->clock_identity_set = 1;
diff --git a/pmc_agent.h b/pmc_agent.h
index 09249ff..f3a26fe 100644
--- a/pmc_agent.h
+++ b/pmc_agent.h
@@ -43,7 +43,6 @@ int run_pmc_port_properties(struct pmc_agent *agent, int timeout,
unsigned int port, int *state,
int *tstamping, char *iface);
int run_pmc_get_utc_offset(struct pmc_agent *agent, int timeout);
-void *get_mgt_data(struct ptp_message *msg);
/**
--
2.25.1