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

Reply via email to