
Fix clock selection algorithm behavior where a clock source starts to match requirements but is not selected because it has the same ha_priority than active. In a HA configuration with two or more clocks configured with equal ha_priority if no clock source matches the requirements the first one in the configuration file is selected active. This is a standard behavior to always have a clock source, even when they are not synchronized. When one of the clock sources starts to match the requirements it must be selected active, regardless of the priority. But when a second clock source starts to match the requirements and has the same ha_priority as the active, the active remains the clock source. There is no need to switch active when they have equal ha_priority. Test plan: two sources with the same priority PASS: Verify a clock source is selected active when it starts to match the requirements and the current active doesn't match them, even if they have equal ha_priority. PASS: Verify a clock source isn't selected active when it starts to match the requirements and the current active also matches them. Regression: two sources with different priority PASS: Verify a clock source is selected active when it starts to match the requirements and the current active doesn't match them, even if their ha_priority is lower than the actives. PASS: Verify a clock source is selected active when it starts to match the requirements and the current active also matches them but has lower ha_priority configured. PASS: Verify a clock source isn't selected active when it starts to match the requirements and the current active also matches them and has higher ha_priority configured. Story: 2010723 Task: 48699 Change-Id: If80532b7b8febcc164f7c748a8d4122b4f10fd3b Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
213 lines
6.9 KiB
Diff
213 lines
6.9 KiB
Diff
From 82258917b8de7110545f3d4f99d3ac88a609f019 Mon Sep 17 00:00:00 2001
|
|
From: Andre Mauricio Zelak <andre.zelak@windriver.com>
|
|
Date: Mon, 12 Jun 2023 14:47:36 -0300
|
|
Subject: [PATCH 15/50] pmc_agent: Rename pmc_node to something more
|
|
descriptive.
|
|
|
|
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
|
|
|
|
[commit bb6865cdf59572fcb09c11d549828269281c6841 upstream]
|
|
Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
|
|
---
|
|
phc2sys.c | 4 ++--
|
|
pmc_agent.c | 26 +++++++++++++-------------
|
|
pmc_agent.h | 26 +++++++++++++-------------
|
|
3 files changed, 28 insertions(+), 28 deletions(-)
|
|
|
|
diff --git a/phc2sys.c b/phc2sys.c
|
|
index 648ba61..74ee9d1 100644
|
|
--- a/phc2sys.c
|
|
+++ b/phc2sys.c
|
|
@@ -103,7 +103,7 @@ struct phc2sys_private {
|
|
int forced_sync_offset;
|
|
int kernel_leap;
|
|
int state_changed;
|
|
- struct pmc_node node;
|
|
+ struct pmc_agent node;
|
|
LIST_HEAD(port_head, port) ports;
|
|
LIST_HEAD(clock_head, clock) clocks;
|
|
LIST_HEAD(dst_clock_head, clock) dst_clocks;
|
|
@@ -813,7 +813,7 @@ static int clock_compute_state(struct phc2sys_private *priv,
|
|
#define node_to_phc2sys(node) \
|
|
container_of(node, struct phc2sys_private, node)
|
|
|
|
-static int phc2sys_recv_subscribed(struct pmc_node *node,
|
|
+static int phc2sys_recv_subscribed(struct pmc_agent *node,
|
|
struct ptp_message *msg, int excluded)
|
|
{
|
|
struct phc2sys_private *priv = node_to_phc2sys(node);
|
|
diff --git a/pmc_agent.c b/pmc_agent.c
|
|
index 774e94d..e83895c 100644
|
|
--- a/pmc_agent.c
|
|
+++ b/pmc_agent.c
|
|
@@ -32,7 +32,7 @@
|
|
* renewed.
|
|
*/
|
|
|
|
-static void send_subscription(struct pmc_node *node)
|
|
+static void send_subscription(struct pmc_agent *node)
|
|
{
|
|
struct subscribe_events_np sen;
|
|
|
|
@@ -42,7 +42,7 @@ static void send_subscription(struct pmc_node *node)
|
|
pmc_send_set_action(node->pmc, TLV_SUBSCRIBE_EVENTS_NP, &sen, sizeof(sen));
|
|
}
|
|
|
|
-static int check_clock_identity(struct pmc_node *node, struct ptp_message *msg)
|
|
+static int check_clock_identity(struct pmc_agent *node, struct ptp_message *msg)
|
|
{
|
|
if (!node->clock_identity_set)
|
|
return 1;
|
|
@@ -98,7 +98,7 @@ static int get_mgt_err_id(struct ptp_message *msg)
|
|
* -1: error reported by the other side
|
|
* -2: local error, fatal
|
|
*/
|
|
-static int run_pmc(struct pmc_node *node, int timeout, int ds_id,
|
|
+static int run_pmc(struct pmc_agent *node, int timeout, int ds_id,
|
|
struct ptp_message **msg)
|
|
{
|
|
#define N_FD 1
|
|
@@ -166,7 +166,7 @@ static int run_pmc(struct pmc_node *node, int timeout, int ds_id,
|
|
}
|
|
}
|
|
|
|
-int run_pmc_wait_sync(struct pmc_node *node, int timeout)
|
|
+int run_pmc_wait_sync(struct pmc_agent *node, int timeout)
|
|
{
|
|
struct ptp_message *msg;
|
|
Enumeration8 portState;
|
|
@@ -192,7 +192,7 @@ int run_pmc_wait_sync(struct pmc_node *node, int timeout)
|
|
}
|
|
}
|
|
|
|
-int run_pmc_get_utc_offset(struct pmc_node *node, int timeout)
|
|
+int run_pmc_get_utc_offset(struct pmc_agent *node, int timeout)
|
|
{
|
|
struct ptp_message *msg;
|
|
int res;
|
|
@@ -222,7 +222,7 @@ int run_pmc_get_utc_offset(struct pmc_node *node, int timeout)
|
|
return 1;
|
|
}
|
|
|
|
-int run_pmc_get_number_ports(struct pmc_node *node, int timeout)
|
|
+int run_pmc_get_number_ports(struct pmc_agent *node, int timeout)
|
|
{
|
|
struct ptp_message *msg;
|
|
int res;
|
|
@@ -238,7 +238,7 @@ int run_pmc_get_number_ports(struct pmc_node *node, int timeout)
|
|
return res;
|
|
}
|
|
|
|
-int run_pmc_subscribe(struct pmc_node *node, int timeout)
|
|
+int run_pmc_subscribe(struct pmc_agent *node, int timeout)
|
|
{
|
|
struct ptp_message *msg;
|
|
int res;
|
|
@@ -250,14 +250,14 @@ int run_pmc_subscribe(struct pmc_node *node, int timeout)
|
|
return 1;
|
|
}
|
|
|
|
-void run_pmc_events(struct pmc_node *node)
|
|
+void run_pmc_events(struct pmc_agent *node)
|
|
{
|
|
struct ptp_message *msg;
|
|
|
|
run_pmc(node, 0, -1, &msg);
|
|
}
|
|
|
|
-int run_pmc_port_properties(struct pmc_node *node, int timeout,
|
|
+int run_pmc_port_properties(struct pmc_agent *node, int timeout,
|
|
unsigned int port, int *state,
|
|
int *tstamping, char *iface)
|
|
{
|
|
@@ -294,7 +294,7 @@ out:
|
|
return res;
|
|
}
|
|
|
|
-int run_pmc_clock_identity(struct pmc_node *node, int timeout)
|
|
+int run_pmc_clock_identity(struct pmc_agent *node, int timeout)
|
|
{
|
|
struct ptp_message *msg;
|
|
struct defaultDS *dds;
|
|
@@ -313,7 +313,7 @@ int run_pmc_clock_identity(struct pmc_node *node, int timeout)
|
|
}
|
|
|
|
/* Returns: -1 in case of error, 0 otherwise */
|
|
-int update_pmc_node(struct pmc_node *node, int subscribe)
|
|
+int update_pmc_node(struct pmc_agent *node, int subscribe)
|
|
{
|
|
struct timespec tp;
|
|
uint64_t ts;
|
|
@@ -336,7 +336,7 @@ int update_pmc_node(struct pmc_node *node, int subscribe)
|
|
return 0;
|
|
}
|
|
|
|
-int init_pmc_node(struct config *cfg, struct pmc_node *node, const char *uds,
|
|
+int init_pmc_node(struct config *cfg, struct pmc_agent *node, const char *uds,
|
|
pmc_node_recv_subscribed_t *recv_subscribed)
|
|
{
|
|
node->pmc = pmc_create(cfg, TRANS_UDS, uds, 0,
|
|
@@ -351,7 +351,7 @@ int init_pmc_node(struct config *cfg, struct pmc_node *node, const char *uds,
|
|
return 0;
|
|
}
|
|
|
|
-void close_pmc_node(struct pmc_node *node)
|
|
+void close_pmc_node(struct pmc_agent *node)
|
|
{
|
|
if (!node->pmc)
|
|
return;
|
|
diff --git a/pmc_agent.h b/pmc_agent.h
|
|
index 90245b1..10ef4b5 100644
|
|
--- a/pmc_agent.h
|
|
+++ b/pmc_agent.h
|
|
@@ -24,13 +24,13 @@
|
|
|
|
#include "pmc_common.h"
|
|
|
|
-struct pmc_node;
|
|
+struct pmc_agent;
|
|
|
|
-typedef int pmc_node_recv_subscribed_t(struct pmc_node *node,
|
|
+typedef int pmc_node_recv_subscribed_t(struct pmc_agent *agent,
|
|
struct ptp_message *msg,
|
|
int excluded);
|
|
|
|
-struct pmc_node {
|
|
+struct pmc_agent {
|
|
struct pmc *pmc;
|
|
int pmc_ds_requested;
|
|
uint64_t pmc_last_update;
|
|
@@ -42,19 +42,19 @@ struct pmc_node {
|
|
pmc_node_recv_subscribed_t *recv_subscribed;
|
|
};
|
|
|
|
-int init_pmc_node(struct config *cfg, struct pmc_node *node, const char *uds,
|
|
+int init_pmc_node(struct config *cfg, struct pmc_agent *agent, const char *uds,
|
|
pmc_node_recv_subscribed_t *recv_subscribed);
|
|
-void close_pmc_node(struct pmc_node *node);
|
|
-int update_pmc_node(struct pmc_node *node, int subscribe);
|
|
-int run_pmc_subscribe(struct pmc_node *node, int timeout);
|
|
-int run_pmc_clock_identity(struct pmc_node *node, int timeout);
|
|
-int run_pmc_wait_sync(struct pmc_node *node, int timeout);
|
|
-int run_pmc_get_number_ports(struct pmc_node *node, int timeout);
|
|
-void run_pmc_events(struct pmc_node *node);
|
|
-int run_pmc_port_properties(struct pmc_node *node, int timeout,
|
|
+void close_pmc_node(struct pmc_agent *agent);
|
|
+int update_pmc_node(struct pmc_agent *agent, int subscribe);
|
|
+int run_pmc_subscribe(struct pmc_agent *agent, int timeout);
|
|
+int run_pmc_clock_identity(struct pmc_agent *agent, int timeout);
|
|
+int run_pmc_wait_sync(struct pmc_agent *agent, int timeout);
|
|
+int run_pmc_get_number_ports(struct pmc_agent *agent, int timeout);
|
|
+void run_pmc_events(struct pmc_agent *agent);
|
|
+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_node *node, int timeout);
|
|
+int run_pmc_get_utc_offset(struct pmc_agent *agent, int timeout);
|
|
int get_mgt_id(struct ptp_message *msg);
|
|
void *get_mgt_data(struct ptp_message *msg);
|
|
|
|
--
|
|
2.25.1
|
|
|