Add option to run callback that when the PMC agent receives signaling messages.
Signed-off-by: Maciek Machnikowski <mac...@machnikowski.net> --- pmc_agent.c | 19 ++++++++++++++++++- pmc_agent.h | 7 +++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/pmc_agent.c b/pmc_agent.c index 62d1a86..7ffcec8 100644 --- a/pmc_agent.c +++ b/pmc_agent.c @@ -42,6 +42,7 @@ struct pmc_agent { bool dds_valid; int leap; int pmc_ds_requested; + bool signaling_cb_ena; bool stay_subscribed; int sync_offset; int utc_offset_traceable; @@ -127,6 +128,7 @@ static int run_pmc(struct pmc_agent *node, int timeout, int ds_id, #define N_FD 1 struct pollfd pollfd[N_FD]; int cnt, res; + bool skip_cb; while (1) { pollfd[0].fd = pmc_get_transport_fd(node->pmc); @@ -178,7 +180,16 @@ static int run_pmc(struct pmc_agent *node, int timeout, int ds_id, node->pmc_ds_requested = 0; return RUN_PMC_NODEV; } - if (res <= 0 || + + /* Skip callback if message is not management */ + skip_cb = (res <= 0) ? true : false; + + /* Run the callback on signaling messages if configured */ + if (node->signaling_cb_ena && (msg_type(*msg) == SIGNALING)) { + skip_cb = false; + } + + if (skip_cb || node->recv_subscribed(node->recv_context, *msg, ds_id) || management_tlv_id(*msg) != ds_id) { msg_put(*msg); @@ -430,3 +441,9 @@ bool pmc_agent_utc_offset_traceable(struct pmc_agent *agent) { return agent->utc_offset_traceable; } + +void pmc_agent_enable_signaling_cb(struct pmc_agent *agent, bool enable) +{ + agent->signaling_cb_ena = enable; +} + diff --git a/pmc_agent.h b/pmc_agent.h index 2fb1cc8..9ae37f7 100644 --- a/pmc_agent.h +++ b/pmc_agent.h @@ -170,4 +170,11 @@ int pmc_agent_update(struct pmc_agent *agent); */ bool pmc_agent_utc_offset_traceable(struct pmc_agent *agent); +/** + * Enables or disables callback on signaling messages + * @param agent Pointer to a PMC instance obtained via @ref pmc_agent_create(). + * @param enable - if set to true, callback will be called on signaling msgs + */ +void pmc_agent_enable_signaling_cb(struct pmc_agent *agent, bool enable); + #endif -- 2.30.2 _______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel