aboutsummaryrefslogtreecommitdiffstats
path: root/include/net/ip_fib.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/net/ip_fib.h')
-rw-r--r--include/net/ip_fib.h17
1 files changed, 4 insertions, 13 deletions
diff --git a/include/net/ip_fib.h b/include/net/ip_fib.h
index c93f94edc610..ba3666d31766 100644
--- a/include/net/ip_fib.h
+++ b/include/net/ip_fib.h
@@ -86,6 +86,7 @@ struct fib_info {
86#ifdef CONFIG_IP_ROUTE_MULTIPATH 86#ifdef CONFIG_IP_ROUTE_MULTIPATH
87 int fib_power; 87 int fib_power;
88#endif 88#endif
89 struct rcu_head rcu;
89 struct fib_nh fib_nh[0]; 90 struct fib_nh fib_nh[0];
90#define fib_dev fib_nh[0].nh_dev 91#define fib_dev fib_nh[0].nh_dev
91}; 92};
@@ -148,7 +149,7 @@ struct fib_table {
148}; 149};
149 150
150extern int fib_table_lookup(struct fib_table *tb, const struct flowi *flp, 151extern int fib_table_lookup(struct fib_table *tb, const struct flowi *flp,
151 struct fib_result *res); 152 struct fib_result *res, int fib_flags);
152extern int fib_table_insert(struct fib_table *, struct fib_config *); 153extern int fib_table_insert(struct fib_table *, struct fib_config *);
153extern int fib_table_delete(struct fib_table *, struct fib_config *); 154extern int fib_table_delete(struct fib_table *, struct fib_config *);
154extern int fib_table_dump(struct fib_table *table, struct sk_buff *skb, 155extern int fib_table_dump(struct fib_table *table, struct sk_buff *skb,
@@ -185,11 +186,11 @@ static inline int fib_lookup(struct net *net, const struct flowi *flp,
185 struct fib_table *table; 186 struct fib_table *table;
186 187
187 table = fib_get_table(net, RT_TABLE_LOCAL); 188 table = fib_get_table(net, RT_TABLE_LOCAL);
188 if (!fib_table_lookup(table, flp, res)) 189 if (!fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF))
189 return 0; 190 return 0;
190 191
191 table = fib_get_table(net, RT_TABLE_MAIN); 192 table = fib_get_table(net, RT_TABLE_MAIN);
192 if (!fib_table_lookup(table, flp, res)) 193 if (!fib_table_lookup(table, flp, res, FIB_LOOKUP_NOREF))
193 return 0; 194 return 0;
194 return -ENETUNREACH; 195 return -ENETUNREACH;
195} 196}
@@ -254,16 +255,6 @@ static inline void fib_info_put(struct fib_info *fi)
254 free_fib_info(fi); 255 free_fib_info(fi);
255} 256}
256 257
257static inline void fib_res_put(struct fib_result *res)
258{
259 if (res->fi)
260 fib_info_put(res->fi);
261#ifdef CONFIG_IP_MULTIPLE_TABLES
262 if (res->r)
263 fib_rule_put(res->r);
264#endif
265}
266
267#ifdef CONFIG_PROC_FS 258#ifdef CONFIG_PROC_FS
268extern int __net_init fib_proc_init(struct net *net); 259extern int __net_init fib_proc_init(struct net *net);
269extern void __net_exit fib_proc_exit(struct net *net); 260extern void __net_exit fib_proc_exit(struct net *net);