On Fri, 31 Mar 2023 at 13:35, Maciek Machnikowski <mac...@machnikowski.net> wrote:
> Add callback that will act on signaling messages. > Adding a second callback seems like an unnecessary overhead. All you need is a simple boolean flag for adding signalling using the same callback to receive both management and signaling messages. In https://github.com/erezgeva/libptpmgmt/, I added an option to filter signalling messages by their ID. Erez > > Signed-off-by: Maciek Machnikowski <mac...@machnikowski.net> > --- > phc2sys.c | 4 ++-- > pmc_agent.c | 17 ++++++++++++++++- > pmc_agent.h | 7 +++++-- > ts2phc.c | 2 +- > 4 files changed, 24 insertions(+), 6 deletions(-) > > diff --git a/phc2sys.c b/phc2sys.c > index 19e8012..16fd335 100644 > --- a/phc2sys.c > +++ b/phc2sys.c > @@ -1329,7 +1329,7 @@ int main(int argc, char *argv[]) > > if (autocfg) { > if (init_pmc_node(cfg, priv.agent, uds_local, > - phc2sys_recv_subscribed, &priv)) > + phc2sys_recv_subscribed, &priv, NULL, > NULL)) > goto end; > if (auto_init_ports(&priv, rt) < 0) > goto end; > @@ -1346,7 +1346,7 @@ int main(int argc, char *argv[]) > > if (wait_sync) { > if (init_pmc_node(cfg, priv.agent, uds_local, > - phc2sys_recv_subscribed, &priv)) > + phc2sys_recv_subscribed, &priv, NULL, > NULL)) > goto end; > > while (is_running()) { > diff --git a/pmc_agent.c b/pmc_agent.c > index 62d1a86..b9e3371 100644 > --- a/pmc_agent.c > +++ b/pmc_agent.c > @@ -49,6 +49,10 @@ struct pmc_agent { > /* Callback on message reception */ > pmc_node_recv_subscribed_t *recv_subscribed; > void *recv_context; > + > + /* Callback on signaling message reception */ > + pmc_node_recv_subscribed_t *recv_signaling; > + void *signaling_context; > }; > > static void send_subscription(struct pmc_agent *node) > @@ -178,6 +182,12 @@ static int run_pmc(struct pmc_agent *node, int > timeout, int ds_id, > node->pmc_ds_requested = 0; > return RUN_PMC_NODEV; > } > + > + if (msg_type(*msg) == SIGNALING && node->recv_signaling) { > + node->recv_signaling(node->signaling_context, *msg, > + ds_id); > + } > + > if (res <= 0 || > node->recv_subscribed(node->recv_context, *msg, ds_id) > || > management_tlv_id(*msg) != ds_id) { > @@ -230,7 +240,9 @@ int run_pmc_wait_sync(struct pmc_agent *node, int > timeout) > } > > int init_pmc_node(struct config *cfg, struct pmc_agent *node, const char > *uds, > - pmc_node_recv_subscribed_t *recv_subscribed, void > *context) > + pmc_node_recv_subscribed_t *recv_subscribed, void > *context, > + pmc_node_recv_subscribed_t *signaling_subscribed, > + void *signaling_context) > { > node->pmc = pmc_create(cfg, TRANS_UDS, uds, 0, > config_get_int(cfg, NULL, "domainNumber"), > @@ -242,6 +254,9 @@ int init_pmc_node(struct config *cfg, struct pmc_agent > *node, const char *uds, > node->recv_subscribed = recv_subscribed; > node->recv_context = context; > > + node->recv_signaling = signaling_subscribed; > + node->signaling_context = signaling_context; > + > return 0; > } > > diff --git a/pmc_agent.h b/pmc_agent.h > index 2fb1cc8..8a418ef 100644 > --- a/pmc_agent.h > +++ b/pmc_agent.h > @@ -32,8 +32,11 @@ struct pmc_agent; > typedef int pmc_node_recv_subscribed_t(void *context, struct ptp_message > *msg, > int excluded); > > -int init_pmc_node(struct config *cfg, struct pmc_agent *agent, const char > *uds, > - pmc_node_recv_subscribed_t *recv_subscribed, void > *context); > +int init_pmc_node(struct config *cfg, struct pmc_agent *node, const char > *uds, > + pmc_node_recv_subscribed_t *recv_subscribed, void > *context, > + pmc_node_recv_subscribed_t *signaling_subscribed, > + void *signaling_context); > + > int run_pmc_wait_sync(struct pmc_agent *agent, int timeout); > > /** > diff --git a/ts2phc.c b/ts2phc.c > index 4393059..b83ba3a 100644 > --- a/ts2phc.c > +++ b/ts2phc.c > @@ -668,7 +668,7 @@ int main(int argc, char *argv[]) > > if (autocfg) { > err = init_pmc_node(cfg, priv.agent, uds_local, > - ts2phc_recv_subscribed, &priv); > + ts2phc_recv_subscribed, &priv, NULL, > NULL); > if (err) { > ts2phc_cleanup(&priv); > return -1; > -- > 2.30.2 > > > > _______________________________________________ > Linuxptp-devel mailing list > Linuxptp-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linuxptp-devel >
_______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel