2005-04-17 02:20:36 +04:00
# ifndef _FIB_LOOKUP_H
# define _FIB_LOOKUP_H
# include <linux/types.h>
# include <linux/list.h>
# include <net/ip_fib.h>
struct fib_alias {
struct list_head fa_list ;
2005-08-26 00:01:03 +04:00
struct rcu_head rcu ;
2005-04-17 02:20:36 +04:00
struct fib_info * fa_info ;
u8 fa_tos ;
u8 fa_type ;
u8 fa_scope ;
u8 fa_state ;
} ;
# define FA_S_ACCESSED 0x01
/* Exported by fib_semantics.c */
extern int fib_semantic_match ( struct list_head * head ,
const struct flowi * flp ,
2006-09-27 09:20:56 +04:00
struct fib_result * res , __be32 zone , __be32 mask ,
2005-04-17 02:20:36 +04:00
int prefixlen ) ;
extern void fib_release_info ( struct fib_info * ) ;
2006-08-18 05:14:52 +04:00
extern struct fib_info * fib_create_info ( struct fib_config * cfg ) ;
extern int fib_nh_match ( struct fib_config * cfg , struct fib_info * fi ) ;
2005-04-17 02:20:36 +04:00
extern int fib_dump_info ( struct sk_buff * skb , u32 pid , u32 seq , int event ,
2006-09-28 05:40:00 +04:00
u32 tb_id , u8 type , u8 scope , __be32 dst ,
2005-06-19 09:54:12 +04:00
int dst_len , u8 tos , struct fib_info * fi ,
unsigned int ) ;
2006-09-28 05:40:00 +04:00
extern void rtmsg_fib ( int event , __be32 key , struct fib_alias * fa ,
2007-05-24 01:55:06 +04:00
int dst_len , u32 tb_id , struct nl_info * info ,
unsigned int nlm_flags ) ;
2005-04-17 02:20:36 +04:00
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 ,
2007-12-08 11:22:13 +03:00
int * last_idx , int dflt ) ;
2005-04-17 02:20:36 +04:00
2007-12-08 11:31:44 +03:00
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 ) ;
}
2005-04-17 02:20:36 +04:00
# endif /* _FIB_LOOKUP_H */