libnl
3.2.3
|
00001 /* 00002 * netlink/route/route.h Routes 00003 * 00004 * This library is free software; you can redistribute it and/or 00005 * modify it under the terms of the GNU Lesser General Public 00006 * License as published by the Free Software Foundation version 2.1 00007 * of the License. 00008 * 00009 * Copyright (c) 2003-2008 Thomas Graf <tgraf@suug.ch> 00010 */ 00011 00012 #ifndef NETLINK_ROUTE_H_ 00013 #define NETLINK_ROUTE_H_ 00014 00015 #include <netlink/netlink.h> 00016 #include <netlink/cache.h> 00017 #include <netlink/addr.h> 00018 #include <netlink/data.h> 00019 #include <netlink/route/nexthop.h> 00020 #include <netlink/route/rtnl.h> 00021 #include <linux/in_route.h> 00022 00023 #ifdef __cplusplus 00024 extern "C" { 00025 #endif 00026 00027 /* flags */ 00028 #define ROUTE_CACHE_CONTENT 1 00029 00030 struct rtnl_route; 00031 00032 struct rtnl_rtcacheinfo 00033 { 00034 uint32_t rtci_clntref; 00035 uint32_t rtci_last_use; 00036 uint32_t rtci_expires; 00037 int32_t rtci_error; 00038 uint32_t rtci_used; 00039 uint32_t rtci_id; 00040 uint32_t rtci_ts; 00041 uint32_t rtci_tsage; 00042 }; 00043 00044 extern struct nl_object_ops route_obj_ops; 00045 00046 extern struct rtnl_route * rtnl_route_alloc(void); 00047 extern void rtnl_route_put(struct rtnl_route *); 00048 extern int rtnl_route_alloc_cache(struct nl_sock *, int, int, 00049 struct nl_cache **); 00050 00051 extern void rtnl_route_get(struct rtnl_route *); 00052 extern void rtnl_route_put(struct rtnl_route *); 00053 00054 extern int rtnl_route_parse(struct nlmsghdr *, struct rtnl_route **); 00055 extern int rtnl_route_build_msg(struct nl_msg *, struct rtnl_route *); 00056 00057 extern int rtnl_route_build_add_request(struct rtnl_route *, int, 00058 struct nl_msg **); 00059 extern int rtnl_route_add(struct nl_sock *, struct rtnl_route *, int); 00060 extern int rtnl_route_build_del_request(struct rtnl_route *, int, 00061 struct nl_msg **); 00062 extern int rtnl_route_delete(struct nl_sock *, struct rtnl_route *, int); 00063 00064 extern void rtnl_route_set_table(struct rtnl_route *, uint32_t); 00065 extern uint32_t rtnl_route_get_table(struct rtnl_route *); 00066 extern void rtnl_route_set_scope(struct rtnl_route *, uint8_t); 00067 extern uint8_t rtnl_route_get_scope(struct rtnl_route *); 00068 extern void rtnl_route_set_tos(struct rtnl_route *, uint8_t); 00069 extern uint8_t rtnl_route_get_tos(struct rtnl_route *); 00070 extern void rtnl_route_set_protocol(struct rtnl_route *, uint8_t); 00071 extern uint8_t rtnl_route_get_protocol(struct rtnl_route *); 00072 extern void rtnl_route_set_priority(struct rtnl_route *, uint32_t); 00073 extern uint32_t rtnl_route_get_priority(struct rtnl_route *); 00074 extern int rtnl_route_set_family(struct rtnl_route *, uint8_t); 00075 extern uint8_t rtnl_route_get_family(struct rtnl_route *); 00076 extern int rtnl_route_set_type(struct rtnl_route *, uint8_t); 00077 extern uint8_t rtnl_route_get_type(struct rtnl_route *); 00078 extern void rtnl_route_set_flags(struct rtnl_route *, uint32_t); 00079 extern void rtnl_route_unset_flags(struct rtnl_route *, uint32_t); 00080 extern uint32_t rtnl_route_get_flags(struct rtnl_route *); 00081 extern int rtnl_route_set_metric(struct rtnl_route *, int, unsigned int); 00082 extern int rtnl_route_unset_metric(struct rtnl_route *, int); 00083 extern int rtnl_route_get_metric(struct rtnl_route *, int, uint32_t *); 00084 extern int rtnl_route_set_dst(struct rtnl_route *, struct nl_addr *); 00085 extern struct nl_addr *rtnl_route_get_dst(struct rtnl_route *); 00086 extern int rtnl_route_set_src(struct rtnl_route *, struct nl_addr *); 00087 extern struct nl_addr *rtnl_route_get_src(struct rtnl_route *); 00088 extern int rtnl_route_set_pref_src(struct rtnl_route *, struct nl_addr *); 00089 extern struct nl_addr *rtnl_route_get_pref_src(struct rtnl_route *); 00090 extern void rtnl_route_set_iif(struct rtnl_route *, int); 00091 extern int rtnl_route_get_iif(struct rtnl_route *); 00092 extern int rtnl_route_get_src_len(struct rtnl_route *); 00093 00094 extern void rtnl_route_add_nexthop(struct rtnl_route *, 00095 struct rtnl_nexthop *); 00096 extern void rtnl_route_remove_nexthop(struct rtnl_route *, 00097 struct rtnl_nexthop *); 00098 extern struct nl_list_head *rtnl_route_get_nexthops(struct rtnl_route *); 00099 extern int rtnl_route_get_nnexthops(struct rtnl_route *); 00100 00101 extern void rtnl_route_foreach_nexthop(struct rtnl_route *r, 00102 void (*cb)(struct rtnl_nexthop *, void *), 00103 void *arg); 00104 00105 extern struct rtnl_nexthop * rtnl_route_nexthop_n(struct rtnl_route *r, int n); 00106 00107 extern int rtnl_route_guess_scope(struct rtnl_route *); 00108 00109 extern char * rtnl_route_table2str(int, char *, size_t); 00110 extern int rtnl_route_str2table(const char *); 00111 extern int rtnl_route_read_table_names(const char *); 00112 00113 extern char * rtnl_route_proto2str(int, char *, size_t); 00114 extern int rtnl_route_str2proto(const char *); 00115 extern int rtnl_route_read_protocol_names(const char *); 00116 00117 extern char * rtnl_route_metric2str(int, char *, size_t); 00118 extern int rtnl_route_str2metric(const char *); 00119 00120 #ifdef __cplusplus 00121 } 00122 #endif 00123 00124 #endif