xref: /aosp_15_r20/external/libnl/lib/route/nl-route.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-2013 Thomas Graf <[email protected]>
4*4dc78e53SAndroid Build Coastguard Worker  * Copyright (c) 2013 Sassano Systems LLC <[email protected]>
5*4dc78e53SAndroid Build Coastguard Worker  */
6*4dc78e53SAndroid Build Coastguard Worker 
7*4dc78e53SAndroid Build Coastguard Worker #ifndef __LIB_ROUTE_NL_ROUTE_H__
8*4dc78e53SAndroid Build Coastguard Worker #define __LIB_ROUTE_NL_ROUTE_H__
9*4dc78e53SAndroid Build Coastguard Worker 
10*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/tc.h>
11*4dc78e53SAndroid Build Coastguard Worker 
12*4dc78e53SAndroid Build Coastguard Worker #include "nl-priv-dynamic-core/object-api.h"
13*4dc78e53SAndroid Build Coastguard Worker #include "nl-priv-dynamic-route/nl-priv-dynamic-route.h"
14*4dc78e53SAndroid Build Coastguard Worker #include "nl-aux-core/nl-core.h"
15*4dc78e53SAndroid Build Coastguard Worker 
16*4dc78e53SAndroid Build Coastguard Worker /*****************************************************************************/
17*4dc78e53SAndroid Build Coastguard Worker 
18*4dc78e53SAndroid Build Coastguard Worker struct rtnl_link_map {
19*4dc78e53SAndroid Build Coastguard Worker 	uint64_t lm_mem_start;
20*4dc78e53SAndroid Build Coastguard Worker 	uint64_t lm_mem_end;
21*4dc78e53SAndroid Build Coastguard Worker 	uint64_t lm_base_addr;
22*4dc78e53SAndroid Build Coastguard Worker 	uint16_t lm_irq;
23*4dc78e53SAndroid Build Coastguard Worker 	uint8_t lm_dma;
24*4dc78e53SAndroid Build Coastguard Worker 	uint8_t lm_port;
25*4dc78e53SAndroid Build Coastguard Worker };
26*4dc78e53SAndroid Build Coastguard Worker 
27*4dc78e53SAndroid Build Coastguard Worker #define IFQDISCSIZ 32
28*4dc78e53SAndroid Build Coastguard Worker 
29*4dc78e53SAndroid Build Coastguard Worker struct rtnl_link {
30*4dc78e53SAndroid Build Coastguard Worker 	NLHDR_COMMON
31*4dc78e53SAndroid Build Coastguard Worker 
32*4dc78e53SAndroid Build Coastguard Worker 	char l_name[IFNAMSIZ];
33*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_family;
34*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_arptype;
35*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_index;
36*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_flags;
37*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_change;
38*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_mtu;
39*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_link;
40*4dc78e53SAndroid Build Coastguard Worker 	int32_t l_link_netnsid;
41*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_txqlen;
42*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_weight;
43*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_master;
44*4dc78e53SAndroid Build Coastguard Worker 	struct nl_addr *l_addr;
45*4dc78e53SAndroid Build Coastguard Worker 	struct nl_addr *l_bcast;
46*4dc78e53SAndroid Build Coastguard Worker 	char l_qdisc[IFQDISCSIZ];
47*4dc78e53SAndroid Build Coastguard Worker 	struct rtnl_link_map l_map;
48*4dc78e53SAndroid Build Coastguard Worker 	uint64_t l_stats[RTNL_LINK_STATS_MAX + 1];
49*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_flag_mask;
50*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_num_vf;
51*4dc78e53SAndroid Build Coastguard Worker 	uint8_t l_operstate;
52*4dc78e53SAndroid Build Coastguard Worker 	uint8_t l_linkmode;
53*4dc78e53SAndroid Build Coastguard Worker 	/* 2 byte hole */
54*4dc78e53SAndroid Build Coastguard Worker 	char *l_info_kind;
55*4dc78e53SAndroid Build Coastguard Worker 	char *l_info_slave_kind;
56*4dc78e53SAndroid Build Coastguard Worker 	struct rtnl_link_info_ops *l_info_ops;
57*4dc78e53SAndroid Build Coastguard Worker 	void *l_af_data[AF_MAX];
58*4dc78e53SAndroid Build Coastguard Worker 	void *l_info;
59*4dc78e53SAndroid Build Coastguard Worker 	char *l_ifalias;
60*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_promiscuity;
61*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_num_tx_queues;
62*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_num_rx_queues;
63*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_gso_max_segs;
64*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_gso_max_size;
65*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_group;
66*4dc78e53SAndroid Build Coastguard Worker 	uint8_t l_carrier;
67*4dc78e53SAndroid Build Coastguard Worker 	/* 3 byte hole */
68*4dc78e53SAndroid Build Coastguard Worker 	uint32_t l_carrier_changes;
69*4dc78e53SAndroid Build Coastguard Worker 	struct rtnl_link_af_ops *l_af_ops;
70*4dc78e53SAndroid Build Coastguard Worker 	struct nl_data *l_phys_port_id;
71*4dc78e53SAndroid Build Coastguard Worker 	char l_phys_port_name[IFNAMSIZ];
72*4dc78e53SAndroid Build Coastguard Worker 	struct nl_data *l_phys_switch_id;
73*4dc78e53SAndroid Build Coastguard Worker 	int l_ns_fd;
74*4dc78e53SAndroid Build Coastguard Worker 	pid_t l_ns_pid;
75*4dc78e53SAndroid Build Coastguard Worker 	struct rtnl_link_vf *l_vf_list;
76*4dc78e53SAndroid Build Coastguard Worker };
77*4dc78e53SAndroid Build Coastguard Worker 
78*4dc78e53SAndroid Build Coastguard Worker struct rtnl_nh_encap {
79*4dc78e53SAndroid Build Coastguard Worker 	struct nh_encap_ops *ops;
80*4dc78e53SAndroid Build Coastguard Worker 	void *priv; /* private data for encap type */
81*4dc78e53SAndroid Build Coastguard Worker };
82*4dc78e53SAndroid Build Coastguard Worker 
83*4dc78e53SAndroid Build Coastguard Worker struct rtnl_ratespec {
84*4dc78e53SAndroid Build Coastguard Worker 	uint64_t rs_rate64;
85*4dc78e53SAndroid Build Coastguard Worker 	uint16_t rs_overhead;
86*4dc78e53SAndroid Build Coastguard Worker 	int16_t rs_cell_align;
87*4dc78e53SAndroid Build Coastguard Worker 	uint16_t rs_mpu;
88*4dc78e53SAndroid Build Coastguard Worker 	uint8_t rs_cell_log;
89*4dc78e53SAndroid Build Coastguard Worker };
90*4dc78e53SAndroid Build Coastguard Worker 
91*4dc78e53SAndroid Build Coastguard Worker #define TCKINDSIZ 32
92*4dc78e53SAndroid Build Coastguard Worker 
93*4dc78e53SAndroid Build Coastguard Worker #define NL_TC_GENERIC(pre)                           \
94*4dc78e53SAndroid Build Coastguard Worker 	NLHDR_COMMON                                 \
95*4dc78e53SAndroid Build Coastguard Worker 	uint32_t pre##_family;                       \
96*4dc78e53SAndroid Build Coastguard Worker 	uint32_t pre##_ifindex;                      \
97*4dc78e53SAndroid Build Coastguard Worker 	uint32_t pre##_handle;                       \
98*4dc78e53SAndroid Build Coastguard Worker 	uint32_t pre##_parent;                       \
99*4dc78e53SAndroid Build Coastguard Worker 	uint32_t pre##_info;                         \
100*4dc78e53SAndroid Build Coastguard Worker 	uint32_t pre##_mtu;                          \
101*4dc78e53SAndroid Build Coastguard Worker 	uint32_t pre##_mpu;                          \
102*4dc78e53SAndroid Build Coastguard Worker 	uint32_t pre##_overhead;                     \
103*4dc78e53SAndroid Build Coastguard Worker 	uint32_t pre##_linktype;                     \
104*4dc78e53SAndroid Build Coastguard Worker 	char pre##_kind[TCKINDSIZ];                  \
105*4dc78e53SAndroid Build Coastguard Worker 	struct nl_data *pre##_opts;                  \
106*4dc78e53SAndroid Build Coastguard Worker 	uint64_t pre##_stats[RTNL_TC_STATS_MAX + 1]; \
107*4dc78e53SAndroid Build Coastguard Worker 	struct nl_data *pre##_xstats;                \
108*4dc78e53SAndroid Build Coastguard Worker 	struct nl_data *pre##_subdata;               \
109*4dc78e53SAndroid Build Coastguard Worker 	struct rtnl_link *pre##_link;                \
110*4dc78e53SAndroid Build Coastguard Worker 	struct rtnl_tc_ops *pre##_ops;               \
111*4dc78e53SAndroid Build Coastguard Worker 	enum rtnl_tc_type pre##_type;                \
112*4dc78e53SAndroid Build Coastguard Worker 	uint32_t pre##_chain
113*4dc78e53SAndroid Build Coastguard Worker 
114*4dc78e53SAndroid Build Coastguard Worker struct rtnl_tc {
115*4dc78e53SAndroid Build Coastguard Worker 	NL_TC_GENERIC(tc);
116*4dc78e53SAndroid Build Coastguard Worker };
117*4dc78e53SAndroid Build Coastguard Worker 
118*4dc78e53SAndroid Build Coastguard Worker struct rtnl_qdisc {
119*4dc78e53SAndroid Build Coastguard Worker 	NL_TC_GENERIC(q);
120*4dc78e53SAndroid Build Coastguard Worker };
121*4dc78e53SAndroid Build Coastguard Worker 
122*4dc78e53SAndroid Build Coastguard Worker struct rtnl_act {
123*4dc78e53SAndroid Build Coastguard Worker 	NL_TC_GENERIC(c);
124*4dc78e53SAndroid Build Coastguard Worker 	struct rtnl_act *a_next;
125*4dc78e53SAndroid Build Coastguard Worker };
126*4dc78e53SAndroid Build Coastguard Worker 
127*4dc78e53SAndroid Build Coastguard Worker /*****************************************************************************/
128*4dc78e53SAndroid Build Coastguard Worker 
rtnl_copy_ratespec(struct rtnl_ratespec * dst,struct tc_ratespec * src)129*4dc78e53SAndroid Build Coastguard Worker static inline void rtnl_copy_ratespec(struct rtnl_ratespec *dst,
130*4dc78e53SAndroid Build Coastguard Worker 				      struct tc_ratespec *src)
131*4dc78e53SAndroid Build Coastguard Worker {
132*4dc78e53SAndroid Build Coastguard Worker 	dst->rs_cell_log = src->cell_log;
133*4dc78e53SAndroid Build Coastguard Worker 	dst->rs_overhead = src->overhead;
134*4dc78e53SAndroid Build Coastguard Worker 	dst->rs_cell_align = src->cell_align;
135*4dc78e53SAndroid Build Coastguard Worker 	dst->rs_mpu = src->mpu;
136*4dc78e53SAndroid Build Coastguard Worker 	dst->rs_rate64 = src->rate;
137*4dc78e53SAndroid Build Coastguard Worker }
138*4dc78e53SAndroid Build Coastguard Worker 
rtnl_rcopy_ratespec(struct tc_ratespec * dst,struct rtnl_ratespec * src)139*4dc78e53SAndroid Build Coastguard Worker static inline void rtnl_rcopy_ratespec(struct tc_ratespec *dst,
140*4dc78e53SAndroid Build Coastguard Worker 				       struct rtnl_ratespec *src)
141*4dc78e53SAndroid Build Coastguard Worker {
142*4dc78e53SAndroid Build Coastguard Worker 	dst->cell_log = src->rs_cell_log;
143*4dc78e53SAndroid Build Coastguard Worker 	dst->overhead = src->rs_overhead;
144*4dc78e53SAndroid Build Coastguard Worker 	dst->cell_align = src->rs_cell_align;
145*4dc78e53SAndroid Build Coastguard Worker 	dst->mpu = src->rs_mpu;
146*4dc78e53SAndroid Build Coastguard Worker 	dst->rate = src->rs_rate64 > 0xFFFFFFFFull ? 0xFFFFFFFFull :
147*4dc78e53SAndroid Build Coastguard Worker 						     (uint32_t)src->rs_rate64;
148*4dc78e53SAndroid Build Coastguard Worker }
149*4dc78e53SAndroid Build Coastguard Worker 
150*4dc78e53SAndroid Build Coastguard Worker /*****************************************************************************/
151*4dc78e53SAndroid Build Coastguard Worker 
build_sysconf_path(char ** strp,const char * filename)152*4dc78e53SAndroid Build Coastguard Worker static inline int build_sysconf_path(char **strp, const char *filename)
153*4dc78e53SAndroid Build Coastguard Worker {
154*4dc78e53SAndroid Build Coastguard Worker 	char *sysconfdir;
155*4dc78e53SAndroid Build Coastguard Worker 
156*4dc78e53SAndroid Build Coastguard Worker 	sysconfdir = getenv("NLSYSCONFDIR");
157*4dc78e53SAndroid Build Coastguard Worker 
158*4dc78e53SAndroid Build Coastguard Worker 	if (!sysconfdir)
159*4dc78e53SAndroid Build Coastguard Worker 		sysconfdir = _NL_SYSCONFDIR_LIBNL;
160*4dc78e53SAndroid Build Coastguard Worker 
161*4dc78e53SAndroid Build Coastguard Worker 	return asprintf(strp, "%s/%s", sysconfdir, filename);
162*4dc78e53SAndroid Build Coastguard Worker }
163*4dc78e53SAndroid Build Coastguard Worker 
164*4dc78e53SAndroid Build Coastguard Worker /*****************************************************************************/
165*4dc78e53SAndroid Build Coastguard Worker 
rtnl_tc_calc_txtime64(int bufsize,uint64_t rate)166*4dc78e53SAndroid Build Coastguard Worker static inline int rtnl_tc_calc_txtime64(int bufsize, uint64_t rate)
167*4dc78e53SAndroid Build Coastguard Worker {
168*4dc78e53SAndroid Build Coastguard Worker 	return ((double)bufsize / (double)rate) * 1000000.0;
169*4dc78e53SAndroid Build Coastguard Worker }
170*4dc78e53SAndroid Build Coastguard Worker 
rtnl_tc_calc_bufsize64(int txtime,uint64_t rate)171*4dc78e53SAndroid Build Coastguard Worker static inline int rtnl_tc_calc_bufsize64(int txtime, uint64_t rate)
172*4dc78e53SAndroid Build Coastguard Worker {
173*4dc78e53SAndroid Build Coastguard Worker 	return ((double)txtime * (double)rate) / 1000000.0;
174*4dc78e53SAndroid Build Coastguard Worker }
175*4dc78e53SAndroid Build Coastguard Worker 
176*4dc78e53SAndroid Build Coastguard Worker #endif /* __LIB_ROUTE_NL_ROUTE_H__ */
177