diff --git a/core/rmnet_config.h b/core/rmnet_config.h index 46d4352ab885..7d8fb8ef7f72 100644 --- a/core/rmnet_config.h +++ b/core/rmnet_config.h @@ -140,6 +140,10 @@ struct rmnet_coal_stats { u64 coal_trans_invalid; struct rmnet_coal_close_stats close; u64 coal_veid[RMNET_MAX_VEID]; + u64 coal_tcp; + u64 coal_tcp_bytes; + u64 coal_udp; + u64 coal_udp_bytes; }; struct rmnet_priv_stats { diff --git a/core/rmnet_descriptor.c b/core/rmnet_descriptor.c index 618f453e70e5..1df9855ef961 100644 --- a/core/rmnet_descriptor.c +++ b/core/rmnet_descriptor.c @@ -812,11 +812,17 @@ rmnet_frag_segment_coal_data(struct rmnet_frag_descriptor *coal_desc, th = (struct tcphdr *)((u8 *)iph + coal_desc->ip_len); coal_desc->trans_len = th->doff * 4; + priv->stats.coal.coal_tcp++; + priv->stats.coal.coal_tcp_bytes += + skb_frag_size(&coal_desc->frag); } else if (coal_desc->trans_proto == IPPROTO_UDP) { struct udphdr *uh; uh = (struct udphdr *)((u8 *)iph + coal_desc->ip_len); coal_desc->trans_len = sizeof(*uh); + priv->stats.coal.coal_udp++; + priv->stats.coal.coal_udp_bytes += + skb_frag_size(&coal_desc->frag); if (coal_desc->ip_proto == 4 && !uh->check) zero_csum = true; } else { diff --git a/core/rmnet_vnd.c b/core/rmnet_vnd.c index 096b19ffcc10..5b36fe88e764 100644 --- a/core/rmnet_vnd.c +++ b/core/rmnet_vnd.c @@ -231,6 +231,10 @@ static const char rmnet_gstrings_stats[][ETH_GSTRING_LEN] = { "Coalescing packets over VEID1", "Coalescing packets over VEID2", "Coalescing packets over VEID3", + "Coalescing TCP frames", + "Coalescing TCP bytes", + "Coalescing UDP frames", + "Coalescing UDP bytes", "Uplink priority packets", };