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 ;
struct fib_info * fa_info ;
u8 fa_tos ;
u8 fa_type ;
u8 fa_state ;
2008-01-18 14:33:26 +03:00
struct rcu_head rcu ;
2005-04-17 02:20:36 +04:00
} ;
# define FA_S_ACCESSED 0x01
2010-10-21 02:03:38 +04:00
/* Dont write on fa_state unless needed, to keep it shared on all cpus */
static inline void fib_alias_accessed ( struct fib_alias * fa )
{
if ( ! ( fa - > fa_state & FA_S_ACCESSED ) )
fa - > fa_state | = FA_S_ACCESSED ;
}
2005-04-17 02:20:36 +04:00
/* Exported by fib_semantics.c */
2013-10-19 00:48:24 +04:00
void fib_release_info ( struct fib_info * ) ;
struct fib_info * fib_create_info ( struct fib_config * cfg ) ;
int fib_nh_match ( struct fib_config * cfg , struct fib_info * fi ) ;
int fib_dump_info ( struct sk_buff * skb , u32 pid , u32 seq , int event , u32 tb_id ,
u8 type , __be32 dst , int dst_len , u8 tos , struct fib_info * fi ,
unsigned int ) ;
void rtmsg_fib ( int event , __be32 key , struct fib_alias * fa , int dst_len ,
u32 tb_id , const struct nl_info * info , unsigned int nlm_flags ) ;
struct fib_alias * fib_find_alias ( struct list_head * fah , u8 tos , u32 prio ) ;
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 )
{
2010-11-04 04:21:39 +03:00
/* we used to play games with refcounts, but we now use RCU */
2007-12-08 11:31:44 +03:00
res - > fi = fi ;
}
2011-03-08 02:01:10 +03:00
struct fib_prop {
int error ;
u8 scope ;
} ;
extern const struct fib_prop fib_props [ RTN_MAX + 1 ] ;
2005-04-17 02:20:36 +04:00
# endif /* _FIB_LOOKUP_H */