11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __LINUX_GEN_STATS_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __LINUX_GEN_STATS_H
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h>
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsenum {
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	TCA_STATS_UNSPEC,
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	TCA_STATS_BASIC,
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	TCA_STATS_RATE_EST,
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	TCA_STATS_QUEUE,
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	TCA_STATS_APP,
1245203a3b380cee28f570475c0d28c169f908c209Eric Dumazet	TCA_STATS_RATE_EST64,
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__TCA_STATS_MAX,
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TCA_STATS_MAX (__TCA_STATS_MAX - 1)
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * struct gnet_stats_basic - byte/packet throughput statistics
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @bytes: number of seen bytes
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @packets: number of seen packets
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
22d94d9fee9fa4e66a0b91640a694b8b10177075b3Eric Dumazetstruct gnet_stats_basic {
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u64	bytes;
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32	packets;
25c1a8f1f1c8e01eab5862c8db39b49ace814e6c66Eric Dumazet};
26d94d9fee9fa4e66a0b91640a694b8b10177075b3Eric Dumazetstruct gnet_stats_basic_packed {
27c1a8f1f1c8e01eab5862c8db39b49ace814e6c66Eric Dumazet	__u64	bytes;
28c1a8f1f1c8e01eab5862c8db39b49ace814e6c66Eric Dumazet	__u32	packets;
295e140dfc1fe87eae27846f193086724806b33c7dEric Dumazet} __attribute__ ((packed));
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * struct gnet_stats_rate_est - rate estimator
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @bps: current byte rate
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @pps: current packet rate
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
36d94d9fee9fa4e66a0b91640a694b8b10177075b3Eric Dumazetstruct gnet_stats_rate_est {
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32	bps;
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32	pps;
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**
4245203a3b380cee28f570475c0d28c169f908c209Eric Dumazet * struct gnet_stats_rate_est64 - rate estimator
4345203a3b380cee28f570475c0d28c169f908c209Eric Dumazet * @bps: current byte rate
4445203a3b380cee28f570475c0d28c169f908c209Eric Dumazet * @pps: current packet rate
4545203a3b380cee28f570475c0d28c169f908c209Eric Dumazet */
4645203a3b380cee28f570475c0d28c169f908c209Eric Dumazetstruct gnet_stats_rate_est64 {
4745203a3b380cee28f570475c0d28c169f908c209Eric Dumazet	__u64	bps;
4845203a3b380cee28f570475c0d28c169f908c209Eric Dumazet	__u64	pps;
4945203a3b380cee28f570475c0d28c169f908c209Eric Dumazet};
5045203a3b380cee28f570475c0d28c169f908c209Eric Dumazet
5145203a3b380cee28f570475c0d28c169f908c209Eric Dumazet/**
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * struct gnet_stats_queue - queuing statistics
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @qlen: queue length
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @backlog: backlog size of queue
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @drops: number of dropped packets
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @requeues: number of requeues
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @overlimits: number of enqueues over the limit
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
59d94d9fee9fa4e66a0b91640a694b8b10177075b3Eric Dumazetstruct gnet_stats_queue {
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32	qlen;
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32	backlog;
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32	drops;
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32	requeues;
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u32	overlimits;
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * struct gnet_estimator - rate estimator configuration
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @interval: sampling period
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * @ewma_log: the log of measurement window weight
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
72d94d9fee9fa4e66a0b91640a694b8b10177075b3Eric Dumazetstruct gnet_estimator {
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	signed char	interval;
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char	ewma_log;
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __LINUX_GEN_STATS_H */
79