xref: /aosp_15_r20/external/libnl/include/netlink/utils.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-2012 Thomas Graf <[email protected]>
4*4dc78e53SAndroid Build Coastguard Worker  */
5*4dc78e53SAndroid Build Coastguard Worker 
6*4dc78e53SAndroid Build Coastguard Worker #ifndef NETLINK_UTILS_H_
7*4dc78e53SAndroid Build Coastguard Worker #define NETLINK_UTILS_H_
8*4dc78e53SAndroid Build Coastguard Worker 
9*4dc78e53SAndroid Build Coastguard Worker #include <netlink/netlink.h>
10*4dc78e53SAndroid Build Coastguard Worker #include <netlink/list.h>
11*4dc78e53SAndroid Build Coastguard Worker 
12*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus
13*4dc78e53SAndroid Build Coastguard Worker extern "C" {
14*4dc78e53SAndroid Build Coastguard Worker #endif
15*4dc78e53SAndroid Build Coastguard Worker 
16*4dc78e53SAndroid Build Coastguard Worker #if defined(__GNUC__) && __GNUC__ > 5
17*4dc78e53SAndroid Build Coastguard Worker #define _nl_attribute_printf(a, b) __attribute__((__format__(printf, a, b)))
18*4dc78e53SAndroid Build Coastguard Worker #else
19*4dc78e53SAndroid Build Coastguard Worker #define _nl_attribute_printf(a, b)
20*4dc78e53SAndroid Build Coastguard Worker #endif
21*4dc78e53SAndroid Build Coastguard Worker 
22*4dc78e53SAndroid Build Coastguard Worker /**
23*4dc78e53SAndroid Build Coastguard Worker  * @name Probability Constants
24*4dc78e53SAndroid Build Coastguard Worker  * @{
25*4dc78e53SAndroid Build Coastguard Worker  */
26*4dc78e53SAndroid Build Coastguard Worker 
27*4dc78e53SAndroid Build Coastguard Worker /**
28*4dc78e53SAndroid Build Coastguard Worker  * Lower probability limit
29*4dc78e53SAndroid Build Coastguard Worker  * @ingroup utils
30*4dc78e53SAndroid Build Coastguard Worker  */
31*4dc78e53SAndroid Build Coastguard Worker #define NL_PROB_MIN 0x0
32*4dc78e53SAndroid Build Coastguard Worker 
33*4dc78e53SAndroid Build Coastguard Worker /**
34*4dc78e53SAndroid Build Coastguard Worker  * Upper probability limit nl_dump_type
35*4dc78e53SAndroid Build Coastguard Worker  * @ingroup utils
36*4dc78e53SAndroid Build Coastguard Worker  */
37*4dc78e53SAndroid Build Coastguard Worker #define NL_PROB_MAX 0xffffffff
38*4dc78e53SAndroid Build Coastguard Worker 
39*4dc78e53SAndroid Build Coastguard Worker /** @} */
40*4dc78e53SAndroid Build Coastguard Worker 
41*4dc78e53SAndroid Build Coastguard Worker enum {
42*4dc78e53SAndroid Build Coastguard Worker 	NL_BYTE_RATE,
43*4dc78e53SAndroid Build Coastguard Worker 	NL_BIT_RATE,
44*4dc78e53SAndroid Build Coastguard Worker };
45*4dc78e53SAndroid Build Coastguard Worker 
46*4dc78e53SAndroid Build Coastguard Worker /* unit pretty-printing */
47*4dc78e53SAndroid Build Coastguard Worker extern double	nl_cancel_down_bytes(unsigned long long, char **);
48*4dc78e53SAndroid Build Coastguard Worker extern double	nl_cancel_down_bits(unsigned long long, char **);
49*4dc78e53SAndroid Build Coastguard Worker extern int	nl_rate2str(unsigned long long, int, char *, size_t);
50*4dc78e53SAndroid Build Coastguard Worker extern double	nl_cancel_down_us(uint32_t, char **);
51*4dc78e53SAndroid Build Coastguard Worker 
52*4dc78e53SAndroid Build Coastguard Worker /* generic unit translations */
53*4dc78e53SAndroid Build Coastguard Worker extern long	nl_size2int(const char *);
54*4dc78e53SAndroid Build Coastguard Worker extern char *	nl_size2str(const size_t, char *, const size_t);
55*4dc78e53SAndroid Build Coastguard Worker extern long	nl_prob2int(const char *);
56*4dc78e53SAndroid Build Coastguard Worker 
57*4dc78e53SAndroid Build Coastguard Worker /* time translations */
58*4dc78e53SAndroid Build Coastguard Worker extern int	nl_get_user_hz(void);
59*4dc78e53SAndroid Build Coastguard Worker extern int	nl_get_psched_hz(void);
60*4dc78e53SAndroid Build Coastguard Worker extern uint32_t	nl_us2ticks(uint32_t);
61*4dc78e53SAndroid Build Coastguard Worker extern uint32_t	nl_ticks2us(uint32_t);
62*4dc78e53SAndroid Build Coastguard Worker extern int	nl_str2msec(const char *, uint64_t *);
63*4dc78e53SAndroid Build Coastguard Worker extern char *	nl_msec2str(uint64_t, char *, size_t);
64*4dc78e53SAndroid Build Coastguard Worker 
65*4dc78e53SAndroid Build Coastguard Worker /* link layer protocol translations */
66*4dc78e53SAndroid Build Coastguard Worker extern char *	nl_llproto2str(int, char *, size_t);
67*4dc78e53SAndroid Build Coastguard Worker extern int	nl_str2llproto(const char *);
68*4dc78e53SAndroid Build Coastguard Worker 
69*4dc78e53SAndroid Build Coastguard Worker /* ethernet protocol translations */
70*4dc78e53SAndroid Build Coastguard Worker extern char *	nl_ether_proto2str(int, char *, size_t);
71*4dc78e53SAndroid Build Coastguard Worker extern int	nl_str2ether_proto(const char *);
72*4dc78e53SAndroid Build Coastguard Worker 
73*4dc78e53SAndroid Build Coastguard Worker /* IP protocol translations */
74*4dc78e53SAndroid Build Coastguard Worker extern char *	nl_ip_proto2str(int, char *, size_t);
75*4dc78e53SAndroid Build Coastguard Worker extern int	nl_str2ip_proto(const char *);
76*4dc78e53SAndroid Build Coastguard Worker 
77*4dc78e53SAndroid Build Coastguard Worker /* Dumping helpers */
78*4dc78e53SAndroid Build Coastguard Worker extern void	nl_new_line(struct nl_dump_params *);
79*4dc78e53SAndroid Build Coastguard Worker extern void	nl_dump(struct nl_dump_params *, const char *, ...) _nl_attribute_printf(2, 3);
80*4dc78e53SAndroid Build Coastguard Worker extern void	nl_dump_line(struct nl_dump_params *, const char *, ...) _nl_attribute_printf(2, 3);
81*4dc78e53SAndroid Build Coastguard Worker 
82*4dc78e53SAndroid Build Coastguard Worker enum {
83*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_NONE,
84*4dc78e53SAndroid Build Coastguard Worker 
85*4dc78e53SAndroid Build Coastguard Worker 	/**
86*4dc78e53SAndroid Build Coastguard Worker 	 * rtnl_route_build_msg() no longer guesses the route scope
87*4dc78e53SAndroid Build Coastguard Worker 	 * if explicitly set to RT_SCOPE_NOWHERE.
88*4dc78e53SAndroid Build Coastguard Worker 	 * @ingroup utils
89*4dc78e53SAndroid Build Coastguard Worker 	 */
90*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_ROUTE_BUILD_MSG_SET_SCOPE         = 1,
91*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_ROUTE_BUILD_MSG_SET_SCOPE NL_CAPABILITY_ROUTE_BUILD_MSG_SET_SCOPE
92*4dc78e53SAndroid Build Coastguard Worker 
93*4dc78e53SAndroid Build Coastguard Worker 	/**
94*4dc78e53SAndroid Build Coastguard Worker 	 * rtnl_link_veth_get_peer() now returns a reference that is owned by the
95*4dc78e53SAndroid Build Coastguard Worker 	 * caller and must be released by the caller with rtnl_link_put().
96*4dc78e53SAndroid Build Coastguard Worker 	 */
97*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_ROUTE_LINK_VETH_GET_PEER_OWN_REFERENCE = 2,
98*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_ROUTE_LINK_VETH_GET_PEER_OWN_REFERENCE NL_CAPABILITY_ROUTE_LINK_VETH_GET_PEER_OWN_REFERENCE
99*4dc78e53SAndroid Build Coastguard Worker 
100*4dc78e53SAndroid Build Coastguard Worker 	/**
101*4dc78e53SAndroid Build Coastguard Worker 	 * rtnl_u32_add_action() and rtnl_basic_add_action() now grab a reference to act
102*4dc78e53SAndroid Build Coastguard Worker 	 * caller are free to release its own
103*4dc78e53SAndroid Build Coastguard Worker 	 */
104*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_ROUTE_LINK_CLS_ADD_ACT_OWN_REFERENCE = 3,
105*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_ROUTE_LINK_CLS_ADD_ACT_OWN_REFERENCE NL_CAPABILITY_ROUTE_LINK_CLS_ADD_ACT_OWN_REFERENCE
106*4dc78e53SAndroid Build Coastguard Worker 
107*4dc78e53SAndroid Build Coastguard Worker 	/**
108*4dc78e53SAndroid Build Coastguard Worker 	 * Indicate that the local port is unspecified until the user accesses
109*4dc78e53SAndroid Build Coastguard Worker 	 * it (via nl_socket_get_local_port()) or until nl_connect(). More importantly,
110*4dc78e53SAndroid Build Coastguard Worker 	 * if the port is left unspecified, nl_connect() will retry generating another
111*4dc78e53SAndroid Build Coastguard Worker 	 * port when bind() fails with ADDRINUSE.
112*4dc78e53SAndroid Build Coastguard Worker 	 */
113*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_NL_CONNECT_RETRY_GENERATE_PORT_ON_ADDRINUSE = 4,
114*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_NL_CONNECT_RETRY_GENERATE_PORT_ON_ADDRINUSE NL_CAPABILITY_NL_CONNECT_RETRY_GENERATE_PORT_ON_ADDRINUSE
115*4dc78e53SAndroid Build Coastguard Worker 
116*4dc78e53SAndroid Build Coastguard Worker 	/**
117*4dc78e53SAndroid Build Coastguard Worker 	 * Indicate that rtnl_link_get_kernel() fails with -NLE_OPNOTSUPP in case
118*4dc78e53SAndroid Build Coastguard Worker 	 * of older kernals not supporting lookup by ifname. This changes behavior
119*4dc78e53SAndroid Build Coastguard Worker 	 * from returning -NLE_INVAL to return -NLE_OPNOTSUPP.
120*4dc78e53SAndroid Build Coastguard Worker 	 */
121*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_ROUTE_LINK_GET_KERNEL_FAIL_OPNOTSUPP = 5,
122*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_ROUTE_LINK_GET_KERNEL_FAIL_OPNOTSUPP NL_CAPABILITY_ROUTE_LINK_GET_KERNEL_FAIL_OPNOTSUPP
123*4dc78e53SAndroid Build Coastguard Worker 
124*4dc78e53SAndroid Build Coastguard Worker 	/**
125*4dc78e53SAndroid Build Coastguard Worker 	 * Also consider the a_cacheinfo field (ADDR_ATTR_CACHEINFO) that contains the
126*4dc78e53SAndroid Build Coastguard Worker 	 * address timestamps and expiry when comparing struct rtnl_addr objects with
127*4dc78e53SAndroid Build Coastguard Worker 	 * nl_object_diff().
128*4dc78e53SAndroid Build Coastguard Worker 	 */
129*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_ROUTE_ADDR_COMPARE_CACHEINFO = 6,
130*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_ROUTE_ADDR_COMPARE_CACHEINFO NL_CAPABILITY_ROUTE_ADDR_COMPARE_CACHEINFO
131*4dc78e53SAndroid Build Coastguard Worker 
132*4dc78e53SAndroid Build Coastguard Worker 	/**
133*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.2.26 or newer. This capability should never be backported.
134*4dc78e53SAndroid Build Coastguard Worker 	 */
135*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_2_26 = 7,
136*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_2_26 NL_CAPABILITY_VERSION_3_2_26
137*4dc78e53SAndroid Build Coastguard Worker 
138*4dc78e53SAndroid Build Coastguard Worker 	/**
139*4dc78e53SAndroid Build Coastguard Worker 	 * nl_recv() fails with NLE_MSG_TRUNC if a message got truncated
140*4dc78e53SAndroid Build Coastguard Worker 	 * with NL_MSG_PEEK disabled. Previously, the failed message was wrongly
141*4dc78e53SAndroid Build Coastguard Worker 	 * discarded and the next message received.
142*4dc78e53SAndroid Build Coastguard Worker 	 */
143*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK = 8,
144*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK NL_CAPABILITY_NL_RECV_FAIL_TRUNC_NO_PEEK
145*4dc78e53SAndroid Build Coastguard Worker 
146*4dc78e53SAndroid Build Coastguard Worker 	/**
147*4dc78e53SAndroid Build Coastguard Worker 	 * rtnl_link_build_change_request() and rtnl_link_change() would set ifi.ifi_flags but leave
148*4dc78e53SAndroid Build Coastguard Worker 	 * ifi.ifi_change at zero. This was later fixed to set ifi.ifi_change to the flags that are actually
149*4dc78e53SAndroid Build Coastguard Worker 	 * set in changes.
150*4dc78e53SAndroid Build Coastguard Worker 	 */
151*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_LINK_BUILD_CHANGE_REQUEST_SET_CHANGE = 9,
152*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_LINK_BUILD_CHANGE_REQUEST_SET_CHANGE NL_CAPABILITY_LINK_BUILD_CHANGE_REQUEST_SET_CHANGE
153*4dc78e53SAndroid Build Coastguard Worker 
154*4dc78e53SAndroid Build Coastguard Worker 	/**
155*4dc78e53SAndroid Build Coastguard Worker 	 * Between 3.2.14 (64fcb47a36ec12d7e7f00605f6a8952ce985dd08) and 3.2.22 (8571f58f23763d8db7365d02c9b27832ad3d7005),
156*4dc78e53SAndroid Build Coastguard Worker 	 * rtnl_neigh_get() behaved differently and only returned objects with family AF_UNSPEC.
157*4dc78e53SAndroid Build Coastguard Worker 	 * This capability indicates, that the function was fixed. The absense of the capability,
158*4dc78e53SAndroid Build Coastguard Worker 	 * doesn't indicate however which behavior the function will have. So beware. */
159*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_RTNL_NEIGH_GET_FILTER_AF_UNSPEC_FIX = 10,
160*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_RTNL_NEIGH_GET_FILTER_AF_UNSPEC_FIX NL_CAPABILITY_RTNL_NEIGH_GET_FILTER_AF_UNSPEC_FIX
161*4dc78e53SAndroid Build Coastguard Worker 
162*4dc78e53SAndroid Build Coastguard Worker 	/**
163*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.2.27 or newer. This capability should never be backported.
164*4dc78e53SAndroid Build Coastguard Worker 	 */
165*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_2_27 = 11,
166*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_2_27 NL_CAPABILITY_VERSION_3_2_27
167*4dc78e53SAndroid Build Coastguard Worker 
168*4dc78e53SAndroid Build Coastguard Worker 	/**
169*4dc78e53SAndroid Build Coastguard Worker 	 * Properly serialize vlan protocol IFLA_VLAN_PROTOCOL.
170*4dc78e53SAndroid Build Coastguard Worker 	 */
171*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_RTNL_LINK_VLAN_PROTOCOL_SERIALZE = 12,
172*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_RTNL_LINK_VLAN_PROTOCOL_SERIALZE NL_CAPABILITY_RTNL_LINK_VLAN_PROTOCOL_SERIALZE
173*4dc78e53SAndroid Build Coastguard Worker 
174*4dc78e53SAndroid Build Coastguard Worker 	/**
175*4dc78e53SAndroid Build Coastguard Worker 	 * Properly read gre REMOTE port.
176*4dc78e53SAndroid Build Coastguard Worker 	 */
177*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_RTNL_LINK_PARSE_GRE_REMOTE = 13,
178*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_RTNL_LINK_PARSE_GRE_REMOTE NL_CAPABILITY_RTNL_LINK_PARSE_GRE_REMOTE
179*4dc78e53SAndroid Build Coastguard Worker 
180*4dc78e53SAndroid Build Coastguard Worker 	/**
181*4dc78e53SAndroid Build Coastguard Worker 	 * Don't skip over vlan ingress-map entries with "to" field zero when serializing
182*4dc78e53SAndroid Build Coastguard Worker 	 * a netlink message. Previously such entires would be ignored which inhibits the
183*4dc78e53SAndroid Build Coastguard Worker 	 * user from clearing ingress map entries.
184*4dc78e53SAndroid Build Coastguard Worker 	 */
185*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_RTNL_LINK_VLAN_INGRESS_MAP_CLEAR = 14,
186*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_RTNL_LINK_VLAN_INGRESS_MAP_CLEAR NL_CAPABILITY_RTNL_LINK_VLAN_INGRESS_MAP_CLEAR
187*4dc78e53SAndroid Build Coastguard Worker 
188*4dc78e53SAndroid Build Coastguard Worker 	/**
189*4dc78e53SAndroid Build Coastguard Worker 	 * Consider vxlan link info for nl_object_diff().
190*4dc78e53SAndroid Build Coastguard Worker 	 */
191*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_RTNL_LINK_VXLAN_IO_COMPARE = 15,
192*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_RTNL_LINK_VXLAN_IO_COMPARE NL_CAPABILITY_RTNL_LINK_VXLAN_IO_COMPARE
193*4dc78e53SAndroid Build Coastguard Worker 
194*4dc78e53SAndroid Build Coastguard Worker 	/**
195*4dc78e53SAndroid Build Coastguard Worker 	 * Support 64 bit attributes for nl_object_diff().
196*4dc78e53SAndroid Build Coastguard Worker 	 */
197*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_NL_OBJECT_DIFF64 = 16,
198*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_NL_OBJECT_DIFF64 NL_CAPABILITY_NL_OBJECT_DIFF64
199*4dc78e53SAndroid Build Coastguard Worker 
200*4dc78e53SAndroid Build Coastguard Worker 	/**
201*4dc78e53SAndroid Build Coastguard Worker 	 * Support omitting @key argument to xfrmnl_sa_get_*_params() to check
202*4dc78e53SAndroid Build Coastguard Worker 	 * for required buffer size for key.
203*4dc78e53SAndroid Build Coastguard Worker 	 */
204*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_XFRM_SA_KEY_SIZE = 17,
205*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_XFRM_SA_KEY_SIZE NL_CAPABILITY_XFRM_SA_KEY_SIZE
206*4dc78e53SAndroid Build Coastguard Worker 
207*4dc78e53SAndroid Build Coastguard Worker 	/**
208*4dc78e53SAndroid Build Coastguard Worker 	 * Properly handle nl_object_identity() for AF_INET and AF_INET6 addresses
209*4dc78e53SAndroid Build Coastguard Worker 	 * and properly handle the peer/IFA_ADDRESS for IPv4 addresses.
210*4dc78e53SAndroid Build Coastguard Worker 	 */
211*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_RTNL_ADDR_PEER_FIX = 18,
212*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_RTNL_ADDR_PEER_FIX NL_CAPABILITY_RTNL_ADDR_PEER_FIX
213*4dc78e53SAndroid Build Coastguard Worker 
214*4dc78e53SAndroid Build Coastguard Worker 	/**
215*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.2.28 or newer. This capability should never be backported.
216*4dc78e53SAndroid Build Coastguard Worker 	 */
217*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_2_28 = 19,
218*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_2_28 NL_CAPABILITY_VERSION_3_2_28
219*4dc78e53SAndroid Build Coastguard Worker 
220*4dc78e53SAndroid Build Coastguard Worker 	/**
221*4dc78e53SAndroid Build Coastguard Worker 	 * After NL_CAPABILITY_RTNL_ADDR_PEER_FIX, a follow up regression to lookup
222*4dc78e53SAndroid Build Coastguard Worker 	 * IPv4 addresses in the cache was fixed (PR#105).
223*4dc78e53SAndroid Build Coastguard Worker 	 */
224*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX = 20,
225*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX NL_CAPABILITY_RTNL_ADDR_PEER_ID_FIX
226*4dc78e53SAndroid Build Coastguard Worker 
227*4dc78e53SAndroid Build Coastguard Worker 	/**
228*4dc78e53SAndroid Build Coastguard Worker 	 * nl_addr_fill_sockaddr() properly checks that the provided address to
229*4dc78e53SAndroid Build Coastguard Worker 	 * avoid read-out-of-bounds for invalid addresses.
230*4dc78e53SAndroid Build Coastguard Worker 	 */
231*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_NL_ADDR_FILL_SOCKADDR = 21,
232*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_NL_ADDR_FILL_SOCKADDR NL_CAPABILITY_NL_ADDR_FILL_SOCKADDR
233*4dc78e53SAndroid Build Coastguard Worker 
234*4dc78e53SAndroid Build Coastguard Worker 	/**
235*4dc78e53SAndroid Build Coastguard Worker 	 * Support omitting @ctx_str argument to xfrmnl_sa_get_sec_ctx() to check
236*4dc78e53SAndroid Build Coastguard Worker 	 * for required buffer size for context string.
237*4dc78e53SAndroid Build Coastguard Worker 	 */
238*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_XFRM_SEC_CTX_LEN = 22,
239*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_XFRM_SEC_CTX_LEN NL_CAPABILITY_XFRM_SEC_CTX_LEN
240*4dc78e53SAndroid Build Coastguard Worker 
241*4dc78e53SAndroid Build Coastguard Worker 	/**
242*4dc78e53SAndroid Build Coastguard Worker 	 * rtnl_link_build_add_request() would set ifi.ifi_flags but leave ifi.ifi_change at zero.
243*4dc78e53SAndroid Build Coastguard Worker 	 * This was later fixed to set ifi.ifi_change to the flags that are actually
244*4dc78e53SAndroid Build Coastguard Worker 	 * set
245*4dc78e53SAndroid Build Coastguard Worker 	 */
246*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_LINK_BUILD_ADD_REQUEST_SET_CHANGE = 23,
247*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_LINK_BUILD_ADD_REQUEST_SET_CHANGE NL_CAPABILITY_LINK_BUILD_ADD_REQUEST_SET_CHANGE
248*4dc78e53SAndroid Build Coastguard Worker 
249*4dc78e53SAndroid Build Coastguard Worker 	/* Older versions of libnl3 would not use MSG_PEEK for nl_recvmsgs() unless calling
250*4dc78e53SAndroid Build Coastguard Worker 	 * nl_socket_enable_msg_peek(). Instead, the user had to specify the buffer size via
251*4dc78e53SAndroid Build Coastguard Worker 	 * nl_socket_set_msg_buf_size(), which in turn would default to 4*getpagesize().
252*4dc78e53SAndroid Build Coastguard Worker 	 *
253*4dc78e53SAndroid Build Coastguard Worker 	 * The default value might not be large enough, so users who were not aware of the
254*4dc78e53SAndroid Build Coastguard Worker 	 * problem easily ended up using a too small receive buffer. Usually, one wants to
255*4dc78e53SAndroid Build Coastguard Worker 	 * avoid MSG_PEEK for recvmsg() because it requires an additional syscall.
256*4dc78e53SAndroid Build Coastguard Worker 	 *
257*4dc78e53SAndroid Build Coastguard Worker 	 * Now, as indicated by this capability, nl_recvmsgs() would use MSG_PEEK by default. The
258*4dc78e53SAndroid Build Coastguard Worker 	 * user still can explicitly disable MSG_PEEK by calling nl_socket_disable_msg_peek() or
259*4dc78e53SAndroid Build Coastguard Worker 	 * by setting the nl_socket_set_msg_buf_size() to a non-zero value.
260*4dc78e53SAndroid Build Coastguard Worker 	 */
261*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_NL_RECVMSGS_PEEK_BY_DEFAULT = 24,
262*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_NL_RECVMSGS_PEEK_BY_DEFAULT NL_CAPABILITY_NL_RECVMSGS_PEEK_BY_DEFAULT
263*4dc78e53SAndroid Build Coastguard Worker 
264*4dc78e53SAndroid Build Coastguard Worker 	/**
265*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.2.29 or newer. This capability should never be backported.
266*4dc78e53SAndroid Build Coastguard Worker 	 */
267*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_2_29 = 25,
268*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_2_29 NL_CAPABILITY_VERSION_3_2_29
269*4dc78e53SAndroid Build Coastguard Worker 
270*4dc78e53SAndroid Build Coastguard Worker 	/**
271*4dc78e53SAndroid Build Coastguard Worker 	 * Support omitting @ctx_str argument to xfrmnl_sp_get_sec_ctx() to check
272*4dc78e53SAndroid Build Coastguard Worker 	 * for required buffer size for context string.
273*4dc78e53SAndroid Build Coastguard Worker 	 */
274*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_XFRM_SP_SEC_CTX_LEN = 26,
275*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_XFRM_SP_SEC_CTX_LEN NL_CAPABILITY_XFRM_SP_SEC_CTX_LEN
276*4dc78e53SAndroid Build Coastguard Worker 
277*4dc78e53SAndroid Build Coastguard Worker 	/**
278*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.3.0 or newer. This capability should never be backported.
279*4dc78e53SAndroid Build Coastguard Worker 	 */
280*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_3_0 = 27,
281*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_3_0 NL_CAPABILITY_VERSION_3_3_0
282*4dc78e53SAndroid Build Coastguard Worker 
283*4dc78e53SAndroid Build Coastguard Worker 	/**
284*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.4.0 or newer. This capability should never be backported.
285*4dc78e53SAndroid Build Coastguard Worker 	 */
286*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_4_0 = 28,
287*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_4_0 NL_CAPABILITY_VERSION_3_4_0
288*4dc78e53SAndroid Build Coastguard Worker 
289*4dc78e53SAndroid Build Coastguard Worker 	/**
290*4dc78e53SAndroid Build Coastguard Worker 	 * Fixed memory corruption in rtnl_link_vlan_set_egress_map(). Previously, if you tried
291*4dc78e53SAndroid Build Coastguard Worker 	 * to add more then 4 mappings, a buffer overflow occured. Also fixed nl_object_clone()
292*4dc78e53SAndroid Build Coastguard Worker 	 * for VLAN links.
293*4dc78e53SAndroid Build Coastguard Worker 	 */
294*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_ROUTE_FIX_VLAN_SET_EGRESS_MAP = 29,
295*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_ROUTE_FIX_VLAN_SET_EGRESS_MAP NL_CAPABILITY_ROUTE_FIX_VLAN_SET_EGRESS_MAP
296*4dc78e53SAndroid Build Coastguard Worker 
297*4dc78e53SAndroid Build Coastguard Worker 	/**
298*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.5.0 or newer. This capability should never be backported.
299*4dc78e53SAndroid Build Coastguard Worker 	 */
300*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_5_0 = 30,
301*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_5_0 NL_CAPABILITY_VERSION_3_5_0
302*4dc78e53SAndroid Build Coastguard Worker 
303*4dc78e53SAndroid Build Coastguard Worker 	/**
304*4dc78e53SAndroid Build Coastguard Worker 	 * nl_object_identical() can consider objects identical, if they both lack the same
305*4dc78e53SAndroid Build Coastguard Worker 	 * set of ID attributes.
306*4dc78e53SAndroid Build Coastguard Worker 	 */
307*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_NL_OBJECT_IDENTICAL_PARTIAL = 31,
308*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_NL_OBJECT_IDENTICAL_PARTIAL NL_CAPABILITY_NL_OBJECT_IDENTICAL_PARTIAL
309*4dc78e53SAndroid Build Coastguard Worker 
310*4dc78e53SAndroid Build Coastguard Worker 	/**
311*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.6.0 or newer. This capability should never be backported.
312*4dc78e53SAndroid Build Coastguard Worker 	 */
313*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_6_0 = 32,
314*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_6_0 NL_CAPABILITY_VERSION_3_6_0
315*4dc78e53SAndroid Build Coastguard Worker 
316*4dc78e53SAndroid Build Coastguard Worker 	/**
317*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.7.0 or newer. This capability should never be backported.
318*4dc78e53SAndroid Build Coastguard Worker 	 */
319*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_7_0 = 33,
320*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_7_0 NL_CAPABILITY_VERSION_3_7_0
321*4dc78e53SAndroid Build Coastguard Worker 
322*4dc78e53SAndroid Build Coastguard Worker 	/**
323*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.8.0 or newer. This capability should never be backported.
324*4dc78e53SAndroid Build Coastguard Worker 	 */
325*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_8_0 = 34,
326*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_8_0 NL_CAPABILITY_VERSION_3_8_0
327*4dc78e53SAndroid Build Coastguard Worker 
328*4dc78e53SAndroid Build Coastguard Worker 	/**
329*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.9.0 or newer. This capability should never be backported.
330*4dc78e53SAndroid Build Coastguard Worker 	 */
331*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_9_0 = 35,
332*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_9_0 NL_CAPABILITY_VERSION_3_9_0
333*4dc78e53SAndroid Build Coastguard Worker 
334*4dc78e53SAndroid Build Coastguard Worker 	/**
335*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.10.0 or newer. This capability should never be backported.
336*4dc78e53SAndroid Build Coastguard Worker 	 */
337*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_10_0 = 36,
338*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_10_0 NL_CAPABILITY_VERSION_3_10_0
339*4dc78e53SAndroid Build Coastguard Worker 
340*4dc78e53SAndroid Build Coastguard Worker 	/**
341*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.11.0 or newer. This capability should never be backported.
342*4dc78e53SAndroid Build Coastguard Worker 	 */
343*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_11_0 = 37,
344*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_11_0 NL_CAPABILITY_VERSION_3_11_0
345*4dc78e53SAndroid Build Coastguard Worker 
346*4dc78e53SAndroid Build Coastguard Worker 	/**
347*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.12.0 or newer. This capability should never be backported.
348*4dc78e53SAndroid Build Coastguard Worker 	 */
349*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_12_0 = 38,
350*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_12_0 NL_CAPABILITY_VERSION_3_12_0
351*4dc78e53SAndroid Build Coastguard Worker 
352*4dc78e53SAndroid Build Coastguard Worker 	/**
353*4dc78e53SAndroid Build Coastguard Worker 	 * The library version is libnl3 3.13.0 or newer. This capability should never be backported.
354*4dc78e53SAndroid Build Coastguard Worker 	 */
355*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_VERSION_3_13_0 = 39,
356*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_VERSION_3_13_0 NL_CAPABILITY_VERSION_3_13_0
357*4dc78e53SAndroid Build Coastguard Worker 
358*4dc78e53SAndroid Build Coastguard Worker 	__NL_CAPABILITY_MAX,
359*4dc78e53SAndroid Build Coastguard Worker 	NL_CAPABILITY_MAX = (__NL_CAPABILITY_MAX - 1),
360*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_MAX NL_CAPABILITY_MAX
361*4dc78e53SAndroid Build Coastguard Worker 
362*4dc78e53SAndroid Build Coastguard Worker 	/**
363*4dc78e53SAndroid Build Coastguard Worker 	 * The range 0x7000 to 0x7FFF is reserved for private capabilities. Upstream libnl3 will
364*4dc78e53SAndroid Build Coastguard Worker 	 * not register capabilities in this range. However, instead of adding private capabilities,
365*4dc78e53SAndroid Build Coastguard Worker 	 * better register their number with upstream libnl3. */
366*4dc78e53SAndroid Build Coastguard Worker #define NL_CAPABILITY_IS_USER_RESERVED(cap)    ( ((cap) & ~0x0FFF) == 0x7000 )
367*4dc78e53SAndroid Build Coastguard Worker };
368*4dc78e53SAndroid Build Coastguard Worker int nl_has_capability (int capability);
369*4dc78e53SAndroid Build Coastguard Worker 
370*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus
371*4dc78e53SAndroid Build Coastguard Worker }
372*4dc78e53SAndroid Build Coastguard Worker #endif
373*4dc78e53SAndroid Build Coastguard Worker 
374*4dc78e53SAndroid Build Coastguard Worker #endif
375