On Wed, 24 Aug 2022 at 12:37, SyncMonk Technologies <servi...@syncmonk.net> wrote:
> adding TLV support for MID_PORT_PTSF_DATA_NP > As you suggest adding a new management TLV. Please provide explanation, why we need it. What are the benefits? And why not using a standard management TLV? > > 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 >
_______________________________________________ Linuxptp-devel mailing list Linuxptp-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linuxptp-devel