125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __LINUX_GEN_STATS_H
3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __LINUX_GEN_STATS_H
4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h>
6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengenum {
8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STATS_UNSPEC,
9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STATS_BASIC,
10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STATS_RATE_EST,
11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STATS_QUEUE,
12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	TCA_STATS_APP,
13e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	TCA_STATS_RATE_EST64,
14ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris	TCA_STATS_PAD,
15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__TCA_STATS_MAX,
16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define TCA_STATS_MAX (__TCA_STATS_MAX - 1)
18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * struct gnet_stats_basic - byte/packet throughput statistics
21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @bytes: number of seen bytes
22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @packets: number of seen packets
23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct gnet_stats_basic {
25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64	bytes;
26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	packets;
27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct gnet_stats_basic_packed {
29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u64	bytes;
30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	packets;
31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng} __attribute__ ((packed));
32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * struct gnet_stats_rate_est - rate estimator
35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @bps: current byte rate
36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @pps: current packet rate
37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct gnet_stats_rate_est {
39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	bps;
40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	pps;
41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
44e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris * struct gnet_stats_rate_est64 - rate estimator
45e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris * @bps: current byte rate
46e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris * @pps: current packet rate
47e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris */
48e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferrisstruct gnet_stats_rate_est64 {
49e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__u64	bps;
50e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris	__u64	pps;
51e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris};
52e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris
53e084501669a4e4931c9d648351ecd7d595b81b79Christopher Ferris/**
54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * struct gnet_stats_queue - queuing statistics
55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @qlen: queue length
56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @backlog: backlog size of queue
57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @drops: number of dropped packets
58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @requeues: number of requeues
59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @overlimits: number of enqueues over the limit
60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct gnet_stats_queue {
62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	qlen;
63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	backlog;
64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	drops;
65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	requeues;
66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	__u32	overlimits;
67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/**
70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * struct gnet_estimator - rate estimator configuration
71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @interval: sampling period
72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * @ewma_log: the log of measurement window weight
73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */
74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct gnet_estimator {
75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	signed char	interval;
76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng	unsigned char	ewma_log;
77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng};
78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng
80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* __LINUX_GEN_STATS_H */
81