xref: /aosp_15_r20/external/libnl/include/netlink/route/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-2012 Thomas Graf <[email protected]>
4*4dc78e53SAndroid Build Coastguard Worker  */
5*4dc78e53SAndroid Build Coastguard Worker 
6*4dc78e53SAndroid Build Coastguard Worker #ifndef NETLINK_ROUTE_H_
7*4dc78e53SAndroid Build Coastguard Worker #define NETLINK_ROUTE_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/addr.h>
12*4dc78e53SAndroid Build Coastguard Worker #include <netlink/data.h>
13*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/nexthop.h>
14*4dc78e53SAndroid Build Coastguard Worker #include <netlink/route/rtnl.h>
15*4dc78e53SAndroid Build Coastguard Worker #include <linux/in_route.h>
16*4dc78e53SAndroid Build Coastguard Worker 
17*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus
18*4dc78e53SAndroid Build Coastguard Worker extern "C" {
19*4dc78e53SAndroid Build Coastguard Worker #endif
20*4dc78e53SAndroid Build Coastguard Worker 
21*4dc78e53SAndroid Build Coastguard Worker /**
22*4dc78e53SAndroid Build Coastguard Worker  * @ingroup route
23*4dc78e53SAndroid Build Coastguard Worker  * When passed to rtnl_route_alloc_cache() the cache will
24*4dc78e53SAndroid Build Coastguard Worker  * correspond to the contents of the routing cache instead
25*4dc78e53SAndroid Build Coastguard Worker  * of the actual routes.
26*4dc78e53SAndroid Build Coastguard Worker  */
27*4dc78e53SAndroid Build Coastguard Worker #define ROUTE_CACHE_CONTENT	1
28*4dc78e53SAndroid Build Coastguard Worker 
29*4dc78e53SAndroid Build Coastguard Worker struct rtnl_route;
30*4dc78e53SAndroid Build Coastguard Worker 
31*4dc78e53SAndroid Build Coastguard Worker struct rtnl_rtcacheinfo
32*4dc78e53SAndroid Build Coastguard Worker {
33*4dc78e53SAndroid Build Coastguard Worker 	uint32_t	rtci_clntref;
34*4dc78e53SAndroid Build Coastguard Worker 	uint32_t	rtci_last_use;
35*4dc78e53SAndroid Build Coastguard Worker 	uint32_t	rtci_expires;
36*4dc78e53SAndroid Build Coastguard Worker 	int32_t		rtci_error;
37*4dc78e53SAndroid Build Coastguard Worker 	uint32_t	rtci_used;
38*4dc78e53SAndroid Build Coastguard Worker 	uint32_t	rtci_id;
39*4dc78e53SAndroid Build Coastguard Worker 	uint32_t	rtci_ts;
40*4dc78e53SAndroid Build Coastguard Worker 	uint32_t	rtci_tsage;
41*4dc78e53SAndroid Build Coastguard Worker };
42*4dc78e53SAndroid Build Coastguard Worker 
43*4dc78e53SAndroid Build Coastguard Worker extern struct nl_object_ops route_obj_ops;
44*4dc78e53SAndroid Build Coastguard Worker 
45*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_route *	rtnl_route_alloc(void);
46*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_put(struct rtnl_route *);
47*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_alloc_cache(struct nl_sock *, int, int,
48*4dc78e53SAndroid Build Coastguard Worker 				       struct nl_cache **);
49*4dc78e53SAndroid Build Coastguard Worker 
50*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_get(struct rtnl_route *);
51*4dc78e53SAndroid Build Coastguard Worker 
52*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_parse(struct nlmsghdr *, struct rtnl_route **);
53*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_build_msg(struct nl_msg *, struct rtnl_route *);
54*4dc78e53SAndroid Build Coastguard Worker 
55*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_lookup(struct nl_sock *sk, struct nl_addr *dst,
56*4dc78e53SAndroid Build Coastguard Worker 				  struct rtnl_route **result);
57*4dc78e53SAndroid Build Coastguard Worker 
58*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_build_add_request(struct rtnl_route *, int,
59*4dc78e53SAndroid Build Coastguard Worker 					     struct nl_msg **);
60*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_add(struct nl_sock *, struct rtnl_route *, int);
61*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_build_del_request(struct rtnl_route *, int,
62*4dc78e53SAndroid Build Coastguard Worker 					     struct nl_msg **);
63*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_delete(struct nl_sock *, struct rtnl_route *, int);
64*4dc78e53SAndroid Build Coastguard Worker 
65*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_set_table(struct rtnl_route *, uint32_t);
66*4dc78e53SAndroid Build Coastguard Worker extern uint32_t	rtnl_route_get_table(struct rtnl_route *);
67*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_set_scope(struct rtnl_route *, uint8_t);
68*4dc78e53SAndroid Build Coastguard Worker extern uint8_t	rtnl_route_get_scope(struct rtnl_route *);
69*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_set_tos(struct rtnl_route *, uint8_t);
70*4dc78e53SAndroid Build Coastguard Worker extern uint8_t	rtnl_route_get_tos(struct rtnl_route *);
71*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_set_protocol(struct rtnl_route *, uint8_t);
72*4dc78e53SAndroid Build Coastguard Worker extern uint8_t	rtnl_route_get_protocol(struct rtnl_route *);
73*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_set_priority(struct rtnl_route *, uint32_t);
74*4dc78e53SAndroid Build Coastguard Worker extern uint32_t	rtnl_route_get_priority(struct rtnl_route *);
75*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_set_family(struct rtnl_route *, uint8_t);
76*4dc78e53SAndroid Build Coastguard Worker extern uint8_t	rtnl_route_get_family(struct rtnl_route *);
77*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_set_type(struct rtnl_route *, uint8_t);
78*4dc78e53SAndroid Build Coastguard Worker extern uint8_t	rtnl_route_get_type(struct rtnl_route *);
79*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_set_flags(struct rtnl_route *, uint32_t);
80*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_unset_flags(struct rtnl_route *, uint32_t);
81*4dc78e53SAndroid Build Coastguard Worker extern uint32_t	rtnl_route_get_flags(struct rtnl_route *);
82*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_set_metric(struct rtnl_route *, int, unsigned int);
83*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_unset_metric(struct rtnl_route *, int);
84*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_get_metric(struct rtnl_route *, int, uint32_t *);
85*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_set_dst(struct rtnl_route *, struct nl_addr *);
86*4dc78e53SAndroid Build Coastguard Worker extern struct nl_addr *rtnl_route_get_dst(struct rtnl_route *);
87*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_set_src(struct rtnl_route *, struct nl_addr *);
88*4dc78e53SAndroid Build Coastguard Worker extern struct nl_addr *rtnl_route_get_src(struct rtnl_route *);
89*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_set_pref_src(struct rtnl_route *, struct nl_addr *);
90*4dc78e53SAndroid Build Coastguard Worker extern struct nl_addr *rtnl_route_get_pref_src(struct rtnl_route *);
91*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_set_iif(struct rtnl_route *, int);
92*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_get_iif(struct rtnl_route *);
93*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_get_src_len(struct rtnl_route *);
94*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_set_ttl_propagate(struct rtnl_route *route,
95*4dc78e53SAndroid Build Coastguard Worker 					     uint8_t ttl_prop);
96*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_get_ttl_propagate(struct rtnl_route *route);
97*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_set_nhid(struct rtnl_route *, uint32_t);
98*4dc78e53SAndroid Build Coastguard Worker extern uint32_t	rtnl_route_get_nhid(struct rtnl_route *);
99*4dc78e53SAndroid Build Coastguard Worker 
100*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_add_nexthop(struct rtnl_route *,
101*4dc78e53SAndroid Build Coastguard Worker 				       struct rtnl_nexthop *);
102*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_remove_nexthop(struct rtnl_route *,
103*4dc78e53SAndroid Build Coastguard Worker 					  struct rtnl_nexthop *);
104*4dc78e53SAndroid Build Coastguard Worker extern struct nl_list_head *rtnl_route_get_nexthops(struct rtnl_route *);
105*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_get_nnexthops(struct rtnl_route *);
106*4dc78e53SAndroid Build Coastguard Worker 
107*4dc78e53SAndroid Build Coastguard Worker extern void	rtnl_route_foreach_nexthop(struct rtnl_route *r,
108*4dc78e53SAndroid Build Coastguard Worker                                  void (*cb)(struct rtnl_nexthop *, void *),
109*4dc78e53SAndroid Build Coastguard Worker                                  void *arg);
110*4dc78e53SAndroid Build Coastguard Worker 
111*4dc78e53SAndroid Build Coastguard Worker extern struct rtnl_nexthop * rtnl_route_nexthop_n(struct rtnl_route *r, int n);
112*4dc78e53SAndroid Build Coastguard Worker 
113*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_guess_scope(struct rtnl_route *);
114*4dc78e53SAndroid Build Coastguard Worker 
115*4dc78e53SAndroid Build Coastguard Worker extern char *	rtnl_route_table2str(int, char *, size_t);
116*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_str2table(const char *);
117*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_read_table_names(const char *);
118*4dc78e53SAndroid Build Coastguard Worker 
119*4dc78e53SAndroid Build Coastguard Worker extern char *	rtnl_route_proto2str(int, char *, size_t);
120*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_str2proto(const char *);
121*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_read_protocol_names(const char *);
122*4dc78e53SAndroid Build Coastguard Worker 
123*4dc78e53SAndroid Build Coastguard Worker extern char *	rtnl_route_metric2str(int, char *, size_t);
124*4dc78e53SAndroid Build Coastguard Worker extern int	rtnl_route_str2metric(const char *);
125*4dc78e53SAndroid Build Coastguard Worker 
126*4dc78e53SAndroid Build Coastguard Worker #ifdef __cplusplus
127*4dc78e53SAndroid Build Coastguard Worker }
128*4dc78e53SAndroid Build Coastguard Worker #endif
129*4dc78e53SAndroid Build Coastguard Worker 
130*4dc78e53SAndroid Build Coastguard Worker #endif
131