xref: /aosp_15_r20/external/libnl/include/netlink/route/tc.h (revision 4dc78e53d49367fa8e61b07018507c90983a077d)
1*4dc78e53SAndroid Build Coastguard Worker /* SPDX-License-Identifier: LGPL-2.1-only */
2*4dc78e53SAndroid Build Coastguard Worker /*
3*4dc78e53SAndroid Build Coastguard Worker  * Copyright (c) 2003-2011 Thomas Graf <[email protected]>
4*4dc78e53SAndroid Build Coastguard Worker  */
5*4dc78e53SAndroid Build Coastguard Worker 
6*4dc78e53SAndroid Build Coastguard Worker #ifndef NETLINK_TC_H_
7*4dc78e53SAndroid Build Coastguard Worker #define NETLINK_TC_H_
8*4dc78e53SAndroid Build Coastguard Worker 
9*4dc78e53SAndroid Build Coastguard Worker #include <netlink/netlink.h>
10*4dc78e53SAndroid Build Coastguard Worker #include <netlink/cache.h>
11*4dc78e53SAndroid Build Coastguard Worker #include <netlink/data.h>
12*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/link.h>
13*4dc78e53SAndroid Build Coastguard Worker #include <linux/pkt_sched.h>
14*4dc78e53SAndroid Build Coastguard Worker #include <linux/pkt_cls.h>
15*4dc78e53SAndroid Build Coastguard Worker 
16*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus
17*4dc78e53SAndroid Build Coastguard Worker extern "C" {
18*4dc78e53SAndroid Build Coastguard Worker #endif
19*4dc78e53SAndroid Build Coastguard Worker 
20*4dc78e53SAndroid Build Coastguard Worker enum rtnl_tc_type {
21*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_TYPE_QDISC,
22*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_TYPE_CLASS,
23*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_TYPE_CLS,
24*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_TYPE_ACT,
25*4dc78e53SAndroid Build Coastguard Worker 	__RTNL_TC_TYPE_MAX,
26*4dc78e53SAndroid Build Coastguard Worker };
27*4dc78e53SAndroid Build Coastguard Worker 
28*4dc78e53SAndroid Build Coastguard Worker #define RTNL_TC_TYPE_MAX (__RTNL_TC_TYPE_MAX - 1)
29*4dc78e53SAndroid Build Coastguard Worker 
30*4dc78e53SAndroid Build Coastguard Worker /**
31*4dc78e53SAndroid Build Coastguard Worker  * Compute tc handle based on major and minor parts
32*4dc78e53SAndroid Build Coastguard Worker  * @ingroup tc
33*4dc78e53SAndroid Build Coastguard Worker  */
34*4dc78e53SAndroid Build Coastguard Worker #define TC_HANDLE(maj, min)	(TC_H_MAJ((maj) << 16) | TC_H_MIN(min))
35*4dc78e53SAndroid Build Coastguard Worker 
36*4dc78e53SAndroid Build Coastguard Worker /**
37*4dc78e53SAndroid Build Coastguard Worker  * Traffic control object
38*4dc78e53SAndroid Build Coastguard Worker  * @ingroup tc
39*4dc78e53SAndroid Build Coastguard Worker  */
40*4dc78e53SAndroid Build Coastguard Worker struct rtnl_tc;
41*4dc78e53SAndroid Build Coastguard Worker 
42*4dc78e53SAndroid Build Coastguard Worker /**
43*4dc78e53SAndroid Build Coastguard Worker  * Macro to cast qdisc/class/classifier to tc object
44*4dc78e53SAndroid Build Coastguard Worker  * @ingroup tc
45*4dc78e53SAndroid Build Coastguard Worker  *
46*4dc78e53SAndroid Build Coastguard Worker  * @code
47*4dc78e53SAndroid Build Coastguard Worker  * rtnl_tc_set_mpu(TC_CAST(qdisc), 40);
48*4dc78e53SAndroid Build Coastguard Worker  * @endcode
49*4dc78e53SAndroid Build Coastguard Worker  */
50*4dc78e53SAndroid Build Coastguard Worker #define TC_CAST(ptr)		((struct rtnl_tc *) (ptr))
51*4dc78e53SAndroid Build Coastguard Worker 
52*4dc78e53SAndroid Build Coastguard Worker /**
53*4dc78e53SAndroid Build Coastguard Worker  * Traffic control statistical identifier
54*4dc78e53SAndroid Build Coastguard Worker  * @ingroup tc
55*4dc78e53SAndroid Build Coastguard Worker  *
56*4dc78e53SAndroid Build Coastguard Worker  * @code
57*4dc78e53SAndroid Build Coastguard Worker  * uint64_t n = rtnl_tc_get_stat(TC_CAST(class), RTNL_TC_PACKETS);
58*4dc78e53SAndroid Build Coastguard Worker  * @endcode
59*4dc78e53SAndroid Build Coastguard Worker  */
60*4dc78e53SAndroid Build Coastguard Worker enum rtnl_tc_stat {
61*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_PACKETS,	/**< Number of packets seen */
62*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_BYTES,		/**< Total bytes seen */
63*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_RATE_BPS,	/**< Current bits/s (rate estimator) */
64*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_RATE_PPS,	/**< Current packet/s (rate estimator) */
65*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_QLEN,		/**< Current queue length */
66*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_BACKLOG,	/**< Current backlog length */
67*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_DROPS,		/**< Total number of packets dropped */
68*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_REQUEUES,	/**< Total number of requeues */
69*4dc78e53SAndroid Build Coastguard Worker 	RTNL_TC_OVERLIMITS,	/**< Total number of overlimits */
70*4dc78e53SAndroid Build Coastguard Worker 	__RTNL_TC_STATS_MAX,
71*4dc78e53SAndroid Build Coastguard Worker };
72*4dc78e53SAndroid Build Coastguard Worker 
73*4dc78e53SAndroid Build Coastguard Worker #define RTNL_TC_STATS_MAX (__RTNL_TC_STATS_MAX - 1)
74*4dc78e53SAndroid Build Coastguard Worker 
75*4dc78e53SAndroid Build Coastguard Worker extern void		rtnl_tc_set_ifindex(struct rtnl_tc *, int);
76*4dc78e53SAndroid Build Coastguard Worker extern int		rtnl_tc_get_ifindex(struct rtnl_tc *);
77*4dc78e53SAndroid Build Coastguard Worker extern void		rtnl_tc_set_link(struct rtnl_tc *, struct rtnl_link *);
78*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_link *rtnl_tc_get_link(struct rtnl_tc *);
79*4dc78e53SAndroid Build Coastguard Worker extern void		rtnl_tc_set_mtu(struct rtnl_tc *, uint32_t);
80*4dc78e53SAndroid Build Coastguard Worker extern uint32_t		rtnl_tc_get_mtu(struct rtnl_tc *);
81*4dc78e53SAndroid Build Coastguard Worker extern void		rtnl_tc_set_mpu(struct rtnl_tc *, uint32_t);
82*4dc78e53SAndroid Build Coastguard Worker extern uint32_t		rtnl_tc_get_mpu(struct rtnl_tc *);
83*4dc78e53SAndroid Build Coastguard Worker extern void		rtnl_tc_set_overhead(struct rtnl_tc *, uint32_t);
84*4dc78e53SAndroid Build Coastguard Worker extern uint32_t		rtnl_tc_get_overhead(struct rtnl_tc *);
85*4dc78e53SAndroid Build Coastguard Worker extern void		rtnl_tc_set_linktype(struct rtnl_tc *, uint32_t);
86*4dc78e53SAndroid Build Coastguard Worker extern uint32_t		rtnl_tc_get_linktype(struct rtnl_tc *);
87*4dc78e53SAndroid Build Coastguard Worker extern void		rtnl_tc_set_handle(struct rtnl_tc *, uint32_t);
88*4dc78e53SAndroid Build Coastguard Worker extern uint32_t		rtnl_tc_get_handle(struct rtnl_tc *);
89*4dc78e53SAndroid Build Coastguard Worker extern void		rtnl_tc_set_parent(struct rtnl_tc *, uint32_t);
90*4dc78e53SAndroid Build Coastguard Worker extern uint32_t		rtnl_tc_get_parent(struct rtnl_tc *);
91*4dc78e53SAndroid Build Coastguard Worker extern int		rtnl_tc_set_kind(struct rtnl_tc *, const char *);
92*4dc78e53SAndroid Build Coastguard Worker extern char *		rtnl_tc_get_kind(struct rtnl_tc *);
93*4dc78e53SAndroid Build Coastguard Worker extern uint64_t		rtnl_tc_get_stat(struct rtnl_tc *, enum rtnl_tc_stat);
94*4dc78e53SAndroid Build Coastguard Worker extern char *		rtnl_tc_stat2str(enum rtnl_tc_stat, char *, size_t);
95*4dc78e53SAndroid Build Coastguard Worker extern int		rtnl_tc_str2stat(const char *);
96*4dc78e53SAndroid Build Coastguard Worker 
97*4dc78e53SAndroid Build Coastguard Worker extern int		rtnl_tc_calc_txtime(int, int);
98*4dc78e53SAndroid Build Coastguard Worker extern int		rtnl_tc_calc_bufsize(int, int);
99*4dc78e53SAndroid Build Coastguard Worker extern int		rtnl_tc_calc_cell_log(int);
100*4dc78e53SAndroid Build Coastguard Worker 
101*4dc78e53SAndroid Build Coastguard Worker extern int		rtnl_tc_read_classid_file(void);
102*4dc78e53SAndroid Build Coastguard Worker extern char *		rtnl_tc_handle2str(uint32_t, char *, size_t);
103*4dc78e53SAndroid Build Coastguard Worker extern int		rtnl_tc_str2handle(const char *, uint32_t *);
104*4dc78e53SAndroid Build Coastguard Worker extern int		rtnl_classid_generate(const char *, uint32_t *,
105*4dc78e53SAndroid Build Coastguard Worker 					      uint32_t);
106*4dc78e53SAndroid Build Coastguard Worker extern void		rtnl_tc_set_chain(struct rtnl_tc *, uint32_t);
107*4dc78e53SAndroid Build Coastguard Worker extern int              rtnl_tc_get_chain(struct rtnl_tc *, uint32_t *);
108*4dc78e53SAndroid Build Coastguard Worker 
109*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus
110*4dc78e53SAndroid Build Coastguard Worker }
111*4dc78e53SAndroid Build Coastguard Worker #endif
112*4dc78e53SAndroid Build Coastguard Worker 
113*4dc78e53SAndroid Build Coastguard Worker #endif
114