• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * netlink/route/route.h	Routes
3   *
4   *	This library is free software; you can redistribute it and/or
5   *	modify it under the terms of the GNU Lesser General Public
6   *	License as published by the Free Software Foundation version 2.1
7   *	of the License.
8   *
9   * Copyright (c) 2003-2012 Thomas Graf <tgraf@suug.ch>
10   */
11  
12  #ifndef NETLINK_ROUTE_H_
13  #define NETLINK_ROUTE_H_
14  
15  #include <netlink/netlink.h>
16  #include <netlink/cache.h>
17  #include <netlink/addr.h>
18  #include <netlink/data.h>
19  #include <netlink/route/nexthop.h>
20  #include <netlink/route/rtnl.h>
21  #include <linux/in_route.h>
22  
23  #ifdef __cplusplus
24  extern "C" {
25  #endif
26  
27  /**
28   * @ingroup route
29   * When passed to rtnl_route_alloc_cache() the cache will
30   * correspond to the contents of the routing cache instead
31   * of the actual routes.
32   */
33  #define ROUTE_CACHE_CONTENT	1
34  
35  struct rtnl_route;
36  
37  struct rtnl_rtcacheinfo
38  {
39  	uint32_t	rtci_clntref;
40  	uint32_t	rtci_last_use;
41  	uint32_t	rtci_expires;
42  	int32_t		rtci_error;
43  	uint32_t	rtci_used;
44  	uint32_t	rtci_id;
45  	uint32_t	rtci_ts;
46  	uint32_t	rtci_tsage;
47  };
48  
49  extern struct nl_object_ops route_obj_ops;
50  
51  extern struct rtnl_route *	rtnl_route_alloc(void);
52  extern void	rtnl_route_put(struct rtnl_route *);
53  extern int	rtnl_route_alloc_cache(struct nl_sock *, int, int,
54  				       struct nl_cache **);
55  
56  extern void	rtnl_route_get(struct rtnl_route *);
57  
58  extern int	rtnl_route_parse(struct nlmsghdr *, struct rtnl_route **);
59  extern int	rtnl_route_build_msg(struct nl_msg *, struct rtnl_route *);
60  
61  extern int	rtnl_route_build_add_request(struct rtnl_route *, int,
62  					     struct nl_msg **);
63  extern int	rtnl_route_add(struct nl_sock *, struct rtnl_route *, int);
64  extern int	rtnl_route_build_del_request(struct rtnl_route *, int,
65  					     struct nl_msg **);
66  extern int	rtnl_route_delete(struct nl_sock *, struct rtnl_route *, int);
67  
68  extern void	rtnl_route_set_table(struct rtnl_route *, uint32_t);
69  extern uint32_t	rtnl_route_get_table(struct rtnl_route *);
70  extern void	rtnl_route_set_scope(struct rtnl_route *, uint8_t);
71  extern uint8_t	rtnl_route_get_scope(struct rtnl_route *);
72  extern void	rtnl_route_set_tos(struct rtnl_route *, uint8_t);
73  extern uint8_t	rtnl_route_get_tos(struct rtnl_route *);
74  extern void	rtnl_route_set_protocol(struct rtnl_route *, uint8_t);
75  extern uint8_t	rtnl_route_get_protocol(struct rtnl_route *);
76  extern void	rtnl_route_set_priority(struct rtnl_route *, uint32_t);
77  extern uint32_t	rtnl_route_get_priority(struct rtnl_route *);
78  extern int	rtnl_route_set_family(struct rtnl_route *, uint8_t);
79  extern uint8_t	rtnl_route_get_family(struct rtnl_route *);
80  extern int	rtnl_route_set_type(struct rtnl_route *, uint8_t);
81  extern uint8_t	rtnl_route_get_type(struct rtnl_route *);
82  extern void	rtnl_route_set_flags(struct rtnl_route *, uint32_t);
83  extern void	rtnl_route_unset_flags(struct rtnl_route *, uint32_t);
84  extern uint32_t	rtnl_route_get_flags(struct rtnl_route *);
85  extern int	rtnl_route_set_metric(struct rtnl_route *, int, unsigned int);
86  extern int	rtnl_route_unset_metric(struct rtnl_route *, int);
87  extern int	rtnl_route_get_metric(struct rtnl_route *, int, uint32_t *);
88  extern int	rtnl_route_set_dst(struct rtnl_route *, struct nl_addr *);
89  extern struct nl_addr *rtnl_route_get_dst(struct rtnl_route *);
90  extern int	rtnl_route_set_src(struct rtnl_route *, struct nl_addr *);
91  extern struct nl_addr *rtnl_route_get_src(struct rtnl_route *);
92  extern int	rtnl_route_set_pref_src(struct rtnl_route *, struct nl_addr *);
93  extern struct nl_addr *rtnl_route_get_pref_src(struct rtnl_route *);
94  extern void	rtnl_route_set_iif(struct rtnl_route *, int);
95  extern int	rtnl_route_get_iif(struct rtnl_route *);
96  extern int	rtnl_route_get_src_len(struct rtnl_route *);
97  
98  extern void	rtnl_route_add_nexthop(struct rtnl_route *,
99  				       struct rtnl_nexthop *);
100  extern void	rtnl_route_remove_nexthop(struct rtnl_route *,
101  					  struct rtnl_nexthop *);
102  extern struct nl_list_head *rtnl_route_get_nexthops(struct rtnl_route *);
103  extern int	rtnl_route_get_nnexthops(struct rtnl_route *);
104  
105  extern void	rtnl_route_foreach_nexthop(struct rtnl_route *r,
106                                   void (*cb)(struct rtnl_nexthop *, void *),
107                                   void *arg);
108  
109  extern struct rtnl_nexthop * rtnl_route_nexthop_n(struct rtnl_route *r, int n);
110  
111  extern int	rtnl_route_guess_scope(struct rtnl_route *);
112  
113  extern char *	rtnl_route_table2str(int, char *, size_t);
114  extern int	rtnl_route_str2table(const char *);
115  extern int	rtnl_route_read_table_names(const char *);
116  
117  extern char *	rtnl_route_proto2str(int, char *, size_t);
118  extern int	rtnl_route_str2proto(const char *);
119  extern int	rtnl_route_read_protocol_names(const char *);
120  
121  extern char *	rtnl_route_metric2str(int, char *, size_t);
122  extern int	rtnl_route_str2metric(const char *);
123  
124  #ifdef __cplusplus
125  }
126  #endif
127  
128  #endif
129