> -----Original Message-----
> From: Petr Machata [mailto:[email protected]]
> Sent: Tuesday, September 10, 2019 5:24 AM
> To: [email protected]
> Cc: Petr Machata <[email protected]>; Keller, Jacob E
> <[email protected]>
> Subject: [PATCH v2 1/2] port: Introduce per-port stats for received and
> transmitted
> messages
>
> Add struct PortStats to keep per-port number of messages sent and received,
> split by message type. Bump TX counters after messages are sent
> successfully, and RX counters after a message is received. To keep things
> simple, reserve one counter for each theoretically possible message type,
> including the reserved ones.
>
> Signed-off-by: Petr Machata <[email protected]>
> ---
>
> Notes:
> v2:
> - Add MAX_MESSAGE_TYPES with comment instead of using a bare constant.
>
Great, thanks!
-Jake
> ddt.h | 7 +++++++
> port.c | 25 +++++++++++++++++++++++--
> port_private.h | 1 +
> 3 files changed, 31 insertions(+), 2 deletions(-)
>
> diff --git a/ddt.h b/ddt.h
> index 4acaa4f..56449a3 100644
> --- a/ddt.h
> +++ b/ddt.h
> @@ -100,4 +100,11 @@ struct FaultRecord {
> struct PTPText faultDescription;
> };
>
> +/* Four bits are dedicated to messageType field */
> +#define MAX_MESSAGE_TYPES 16
> +struct PortStats {
> + uint64_t rxMsgType[MAX_MESSAGE_TYPES];
> + uint64_t txMsgType[MAX_MESSAGE_TYPES];
> +};
> +
> #endif
> diff --git a/port.c b/port.c
> index 5a4a116..471e6f4 100644
> --- a/port.c
> +++ b/port.c
> @@ -580,6 +580,16 @@ static int path_trace_ignore(struct port *p, struct
> ptp_message *m)
> return 0;
> }
>
> +static void port_stats_inc_rx(struct port *p, const struct ptp_message *msg)
> +{
> + p->stats.rxMsgType[msg_type(msg)]++;
> +}
> +
> +static void port_stats_inc_tx(struct port *p, const struct ptp_message *msg)
> +{
> + p->stats.txMsgType[msg_type(msg)]++;
> +}
> +
> static int peer_prepare_and_send(struct port *p, struct ptp_message *msg,
> enum transport_event event)
> {
> @@ -595,6 +605,7 @@ static int peer_prepare_and_send(struct port *p, struct
> ptp_message *msg,
> if (cnt <= 0) {
> return -1;
> }
> + port_stats_inc_tx(p, msg);
> if (msg_sots_valid(msg)) {
> ts_add(&msg->hwts.ts, p->tx_timestamp_offset);
> }
> @@ -2627,6 +2638,7 @@ static enum fsm_event bc_event(struct port *p, int
> fd_index)
> msg_put(msg);
> return EV_NONE;
> }
> + port_stats_inc_rx(p, msg);
> if (port_ignore(p, msg)) {
> msg_put(msg);
> return EV_NONE;
> @@ -2691,14 +2703,22 @@ int port_forward(struct port *p, struct ptp_message
> *msg)
> {
> int cnt;
> cnt = transport_send(p->trp, &p->fda, TRANS_GENERAL, msg);
> - return cnt <= 0 ? -1 : 0;
> + if (cnt <= 0) {
> + return -1;
> + }
> + port_stats_inc_tx(p, msg);
> + return 0;
> }
>
> int port_forward_to(struct port *p, struct ptp_message *msg)
> {
> int cnt;
> cnt = transport_sendto(p->trp, &p->fda, TRANS_GENERAL, msg);
> - return cnt <= 0 ? -1 : 0;
> + if (cnt <= 0) {
> + return -1;
> + }
> + port_stats_inc_tx(p, msg);
> + return 0;
> }
>
> int port_prepare_and_send(struct port *p, struct ptp_message *msg,
> @@ -2717,6 +2737,7 @@ int port_prepare_and_send(struct port *p, struct
> ptp_message *msg,
> if (cnt <= 0) {
> return -1;
> }
> + port_stats_inc_tx(p, msg);
> if (msg_sots_valid(msg)) {
> ts_add(&msg->hwts.ts, p->tx_timestamp_offset);
> }
> diff --git a/port_private.h b/port_private.h
> index 9a5022d..5789fbb 100644
> --- a/port_private.h
> +++ b/port_private.h
> @@ -139,6 +139,7 @@ struct port {
> struct fault_interval flt_interval_pertype[FT_CNT];
> enum fault_type last_fault_type;
> unsigned int versionNumber; /*UInteger4*/
> + struct PortStats stats;
> /* foreignMasterDS */
> LIST_HEAD(fm, foreign_clock) foreign_masters;
> /* TC book keeping */
> --
> 2.20.1
_______________________________________________
Linuxptp-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linuxptp-devel