netns xfrm: ipcomp support
[safe/jmp/linux-2.6] / net / ipv4 / fib_lookup.h
index ac4485f..637b133 100644 (file)
@@ -12,6 +12,9 @@ struct fib_alias {
        u8                      fa_type;
        u8                      fa_scope;
        u8                      fa_state;
+#ifdef CONFIG_IP_FIB_TRIE
+       struct rcu_head         rcu;
+#endif
 };
 
 #define FA_S_ACCESSED  0x01
@@ -19,25 +22,31 @@ struct fib_alias {
 /* Exported by fib_semantics.c */
 extern int fib_semantic_match(struct list_head *head,
                              const struct flowi *flp,
-                             struct fib_result *res, __u32 zone, __u32 mask,
-                               int prefixlen);
+                             struct fib_result *res, int prefixlen);
 extern void fib_release_info(struct fib_info *);
-extern struct fib_info *fib_create_info(const struct rtmsg *r,
-                                       struct kern_rta *rta,
-                                       const struct nlmsghdr *,
-                                       int *err);
-extern int fib_nh_match(struct rtmsg *r, struct nlmsghdr *,
-                       struct kern_rta *rta, struct fib_info *fi);
+extern struct fib_info *fib_create_info(struct fib_config *cfg);
+extern int fib_nh_match(struct fib_config *cfg, struct fib_info *fi);
 extern int fib_dump_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
-                        u8 tb_id, u8 type, u8 scope, void *dst,
-                        int dst_len, u8 tos, struct fib_info *fi);
-extern void rtmsg_fib(int event, u32 key, struct fib_alias *fa,
-                     int z, int tb_id,
-                     struct nlmsghdr *n, struct netlink_skb_parms *req);
+                        u32 tb_id, u8 type, u8 scope, __be32 dst,
+                        int dst_len, u8 tos, struct fib_info *fi,
+                        unsigned int);
+extern void rtmsg_fib(int event, __be32 key, struct fib_alias *fa,
+                     int dst_len, u32 tb_id, struct nl_info *info,
+                     unsigned int nlm_flags);
 extern struct fib_alias *fib_find_alias(struct list_head *fah,
                                        u8 tos, u32 prio);
 extern int fib_detect_death(struct fib_info *fi, int order,
                            struct fib_info **last_resort,
-                           int *last_idx, int *dflt);
+                           int *last_idx, int dflt);
+
+static inline void fib_result_assign(struct fib_result *res,
+                                    struct fib_info *fi)
+{
+       if (res->fi != NULL)
+               fib_info_put(res->fi);
+       res->fi = fi;
+       if (fi != NULL)
+               atomic_inc(&fi->fib_clntref);
+}
 
 #endif /* _FIB_LOOKUP_H */