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
Linuxptp-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel

Reply via email to