On Thu, Mar 11, 2021 at 01:02:36PM +0100, Erez Geva wrote:
> @@ -469,26 +480,26 @@ static void pmc_show(struct ptp_message *msg, FILE *fp)
> IFMT "tx_Signaling %" PRIu64
> IFMT "tx_Management %" PRIu64,
> pid2str(&pcp->portIdentity),
> - pcp->stats.rxMsgType[SYNC],
> - pcp->stats.rxMsgType[DELAY_REQ],
> - pcp->stats.rxMsgType[PDELAY_REQ],
> - pcp->stats.rxMsgType[PDELAY_RESP],
> - pcp->stats.rxMsgType[FOLLOW_UP],
> - pcp->stats.rxMsgType[DELAY_RESP],
> - pcp->stats.rxMsgType[PDELAY_RESP_FOLLOW_UP],
> - pcp->stats.rxMsgType[ANNOUNCE],
> - pcp->stats.rxMsgType[SIGNALING],
> - pcp->stats.rxMsgType[MANAGEMENT],
> - pcp->stats.txMsgType[SYNC],
> - pcp->stats.txMsgType[DELAY_REQ],
> - pcp->stats.txMsgType[PDELAY_REQ],
> - pcp->stats.txMsgType[PDELAY_RESP],
> - pcp->stats.txMsgType[FOLLOW_UP],
> - pcp->stats.txMsgType[DELAY_RESP],
> - pcp->stats.txMsgType[PDELAY_RESP_FOLLOW_UP],
> - pcp->stats.txMsgType[ANNOUNCE],
> - pcp->stats.txMsgType[SIGNALING],
> - pcp->stats.txMsgType[MANAGEMENT]);
> + getStat(pcp, true, SYNC),
All of the code for converting from network to host byte order lives
in the messaging layer. The call chain is:
msg_post_recv:
suffix_post_recv:
tlv_post_recv:
mgt_post_recv:
and then, in tlv.c,
switch (id) {
...
case TLV_PORT_STATS_NP:
...
}
That is the place to call le64_to_cpu() on the table of statistics.
In this way, every user of the message receive path always will have
the message in native byte order.
> + getStat(pcp, true, DELAY_REQ),
> + getStat(pcp, true, PDELAY_REQ),
> + getStat(pcp, true, PDELAY_RESP),
> + getStat(pcp, true, FOLLOW_UP),
> + getStat(pcp, true, DELAY_RESP),
> + getStat(pcp, true, PDELAY_RESP_FOLLOW_UP),
> + getStat(pcp, true, ANNOUNCE),
> + getStat(pcp, true, SIGNALING),
> + getStat(pcp, true, MANAGEMENT),
> + getStat(pcp, false, SYNC),
> + getStat(pcp, false, DELAY_REQ),
> + getStat(pcp, false, PDELAY_REQ),
> + getStat(pcp, false, PDELAY_RESP),
> + getStat(pcp, false, FOLLOW_UP),
> + getStat(pcp, false, DELAY_RESP),
> + getStat(pcp, false, PDELAY_RESP_FOLLOW_UP),
> + getStat(pcp, false, ANNOUNCE),
> + getStat(pcp, false, SIGNALING),
> + getStat(pcp, false, MANAGEMENT));
> break;
> case TLV_LOG_ANNOUNCE_INTERVAL:
> mtd = (struct management_tlv_datum *) mgt->data;
> diff --git a/port.c b/port.c
> index cefe780..7f45bf3 100644
> --- a/port.c
> +++ b/port.c
> @@ -806,6 +806,7 @@ static int port_management_fill_response(struct port
> *target,
> uint16_t u16;
> uint8_t *buf;
> int datalen;
> + int i;
>
> extra = tlv_extra_alloc();
> if (!extra) {
> @@ -958,7 +959,10 @@ static int port_management_fill_response(struct port
> *target,
> case TLV_PORT_STATS_NP:
> psn = (struct port_stats_np *)tlv->data;
> psn->portIdentity = target->portIdentity;
> - psn->stats = target->stats;
> + for (i = 0 ; i < MAX_MESSAGE_TYPES; i++) {
> + psn->stats.rxMsgType[i] =
> htole64(target->stats.rxMsgType[i]);
> + psn->stats.txMsgType[i] =
> htole64(target->stats.txMsgType[i]);
Similarly, this belongs in mgt_pre_send().
> + }
> datalen = sizeof(*psn);
> break;
> default:
> --
> 2.20.1
Thanks,
Richard
_______________________________________________
Linuxptp-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel