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