adding TLV support for MID_PORT_PTSF_DATA_NP

Signed-off-by: Greg Armstrong <greg.armstrong...@renesas.com>
Signed-off-by: Leon Goldin <leon.goldin...@renesas.com>
Signed-off-by: Devasish Dey <devasish....@syncmonk.net>
Signed-off-by: Vipin Sharma <vipin.sha...@syncmonk.net>
---
 pmc.c        | 16 ++++++++++++++++
 pmc_common.c |  1 +
 port.c       |  8 ++++++++
 tlv.c        | 11 +++++++++++
 tlv.h        |  5 +++++
 5 files changed, 41 insertions(+)

diff --git a/pmc.c b/pmc.c
index cdc76c8..34c9609 100644
--- a/pmc.c
+++ b/pmc.c
@@ -176,6 +176,7 @@ static void pmc_show(struct ptp_message *msg, FILE *fp)
        struct currentDS *cds;
        struct parentDS *pds;
        struct portDS *p;
+       struct port_ptsf_data_np *ptsf_data;
        struct TLV *tlv;
        uint8_t *buf;
        int action;
@@ -607,6 +608,21 @@ static void pmc_show(struct ptp_message *msg, FILE *fp)
                fprintf(fp, "LOG_MIN_PDELAY_REQ_INTERVAL "
                        IFMT "logMinPdelayReqInterval %hhd", mtd->val);
                break;
+       case MID_PORT_PTSF_DATA_NP:
+               ptsf_data = (struct port_ptsf_data_np *) mgt->data;
+               fprintf(fp, "PORT_PTSF_DATA_NP "
+                       IFMT "signalFail                %hu"
+                       IFMT "PTSF.lossSync             %d"
+                       IFMT "PTSF.syncMsgLoss          %d"
+                       IFMT "PTSF.delayRespMsgLoss     %d"
+                       IFMT "PTSF.unusable             %d",
+                       ptsf_data->signalFail  ? 1 : 0,
+                       ((ptsf_data->signalFail & PDS_PTSF_LOSS_SYNC) |
+                        (ptsf_data->signalFail & PDS_PTSF_LOSS_DELAY_RESP)) ? 
1 : 0,
+                       ptsf_data->signalFail & PDS_PTSF_LOSS_SYNC ? 1 : 0,
+                       ptsf_data->signalFail & PDS_PTSF_LOSS_DELAY_RESP ? 1 : 
0,
+                       ptsf_data->signalFail & PDS_PTSF_UNUSABLE ? 1 : 0);
+               break;
        }
 out:
        fprintf(fp, "\n");
diff --git a/pmc_common.c b/pmc_common.c
index 1dd89f6..9570841 100644
--- a/pmc_common.c
+++ b/pmc_common.c
@@ -154,6 +154,7 @@ struct management_id idtab[] = {
        { "PORT_SERVICE_STATS_NP", MID_PORT_SERVICE_STATS_NP, do_get_action },
        { "UNICAST_MASTER_TABLE_NP", MID_UNICAST_MASTER_TABLE_NP, do_get_action 
},
        { "PORT_HWCLOCK_NP", MID_PORT_HWCLOCK_NP, do_get_action },
+       { "PORT_PTSF_DATA_NP", MID_PORT_PTSF_DATA_NP, do_get_action },
 };
 
 static void do_get_action(struct pmc *pmc, int action, int index, char *str)
diff --git a/port.c b/port.c
index 8075896..ff00e46 100644
--- a/port.c
+++ b/port.c
@@ -852,6 +852,7 @@ static int port_management_fill_response(struct port 
*target,
        struct PortIdentity pid;
        const char *ts_label;
        struct portDS *pds;
+       struct port_ptsf_data_np *ptsf_data;
        uint16_t u16;
        uint8_t *buf;
        int datalen;
@@ -1074,6 +1075,12 @@ static int port_management_fill_response(struct port 
*target,
                        PORT_HWCLOCK_VCLOCK : 0;
                datalen = sizeof(*phn);
                break;
+       case MID_PORT_PTSF_DATA_NP:
+               ptsf_data = (struct port_ptsf_data_np *)tlv->data;
+               ptsf_data->portIdentity = target->portIdentity;
+               ptsf_data->signalFail = target->signalFail;
+               datalen = sizeof(*ptsf_data);
+               break;
        default:
                /* The caller should *not* respond to this message. */
                tlv_extra_recycle(extra);
@@ -1118,6 +1125,7 @@ static int port_management_set(struct port *target,
        int respond = 0;
        struct management_tlv *tlv;
        struct port_ds_np *pdsnp;
+
        tlv = (struct management_tlv *) req->management.suffix;
 
        switch (id) {
diff --git a/tlv.c b/tlv.c
index 1c13460..745c96a 100644
--- a/tlv.c
+++ b/tlv.c
@@ -130,6 +130,7 @@ static int mgt_post_recv(struct management_tlv *m, uint16_t 
data_len,
        struct defaultDS *dds;
        struct parentDS *pds;
        struct portDS *p;
+       struct port_ptsf_data_np *ptsf_data;
        uint8_t *buf;
        uint16_t u16;
 
@@ -407,6 +408,10 @@ static int mgt_post_recv(struct management_tlv *m, 
uint16_t data_len,
                if (data_len != 0)
                        goto bad_length;
                break;
+       case MID_PORT_PTSF_DATA_NP:
+               ptsf_data = (struct port_ptsf_data_np *) m->data;
+               ptsf_data->portIdentity.portNumber = 
ntohs(ptsf_data->portIdentity.portNumber);
+               break;
        }
        if (extra_len) {
                if (extra_len % 2)
@@ -437,6 +442,7 @@ static void mgt_pre_send(struct management_tlv *m, struct 
tlv_extra *extra)
        struct currentDS *cds;
        struct parentDS *pds;
        struct portDS *p;
+       struct port_ptsf_data_np *ptsf_data;
        uint8_t *buf;
        int i;
 
@@ -569,6 +575,11 @@ static void mgt_pre_send(struct management_tlv *m, struct 
tlv_extra *extra)
                phn->portIdentity.portNumber = 
htons(phn->portIdentity.portNumber);
                phn->phc_index = htonl(phn->phc_index);
                break;
+       case MID_PORT_PTSF_DATA_NP:
+               ptsf_data = (struct port_ptsf_data_np *) m->data;
+               ptsf_data->portIdentity.portNumber =
+                       htons(ptsf_data->portIdentity.portNumber);
+               break;
        }
 }
 
diff --git a/tlv.h b/tlv.h
index 8966696..c29f5f2 100644
--- a/tlv.h
+++ b/tlv.h
@@ -128,6 +128,7 @@ enum management_action {
 #define MID_PORT_SERVICE_STATS_NP                      0xC007
 #define MID_UNICAST_MASTER_TABLE_NP                    0xC008
 #define MID_PORT_HWCLOCK_NP                            0xC009
+#define MID_PORT_PTSF_DATA_NP                          0xC00A
 
 /* Management error ID values */
 #define MID_RESPONSE_TOO_BIG                           0x0001
@@ -367,6 +368,10 @@ struct port_service_stats_np {
        struct PortServiceStats stats;
 } PACKED;
 
+struct port_ptsf_data_np {
+       struct PortIdentity portIdentity;
+       UInteger8 signalFail;
+} PACKED;
 struct unicast_master_table_np {
        uint16_t actual_table_size;
        struct unicast_master_entry unicast_masters[0];
-- 
2.25.1



_______________________________________________
Linuxptp-devel mailing list
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to