Add callback that will act on signaling messages.

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

Reply via email to