diff options
Diffstat (limited to 'include/net/ip_fib.h')
| -rw-r--r-- | include/net/ip_fib.h | 17 |
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 | ||
| 150 | extern int fib_table_lookup(struct fib_table *tb, const struct flowi *flp, | 151 | extern 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); |
| 152 | extern int fib_table_insert(struct fib_table *, struct fib_config *); | 153 | extern int fib_table_insert(struct fib_table *, struct fib_config *); |
| 153 | extern int fib_table_delete(struct fib_table *, struct fib_config *); | 154 | extern int fib_table_delete(struct fib_table *, struct fib_config *); |
| 154 | extern int fib_table_dump(struct fib_table *table, struct sk_buff *skb, | 155 | extern 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 | ||
| 257 | static 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 |
| 268 | extern int __net_init fib_proc_init(struct net *net); | 259 | extern int __net_init fib_proc_init(struct net *net); |
| 269 | extern void __net_exit fib_proc_exit(struct net *net); | 260 | extern void __net_exit fib_proc_exit(struct net *net); |
