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