diff options
Diffstat (limited to 'include/net/ip6_fib.h')
| -rw-r--r-- | include/net/ip6_fib.h | 35 | 
1 files changed, 34 insertions, 1 deletions
diff --git a/include/net/ip6_fib.h b/include/net/ip6_fib.h index 0ae759a6c76..0fedbd8d747 100644 --- a/include/net/ip6_fib.h +++ b/include/net/ip6_fib.h @@ -86,6 +86,8 @@ struct fib6_table;  struct rt6_info {  	struct dst_entry		dst; +	struct neighbour		*n; +  	/*  	 * Tail elements of dst_entry (__refcnt etc.)  	 * and these elements (rarely used in hot path) are in @@ -107,7 +109,7 @@ struct rt6_info {  	u32				rt6i_peer_genid;  	struct inet6_dev		*rt6i_idev; -	struct inet_peer		*rt6i_peer; +	unsigned long			_rt6i_peer;  #ifdef CONFIG_XFRM  	u32				rt6i_flow_cache_genid; @@ -118,6 +120,36 @@ struct rt6_info {  	u8				rt6i_protocol;  }; +static inline struct inet_peer *rt6_peer_ptr(struct rt6_info *rt) +{ +	return inetpeer_ptr(rt->_rt6i_peer); +} + +static inline bool rt6_has_peer(struct rt6_info *rt) +{ +	return inetpeer_ptr_is_peer(rt->_rt6i_peer); +} + +static inline void __rt6_set_peer(struct rt6_info *rt, struct inet_peer *peer) +{ +	__inetpeer_ptr_set_peer(&rt->_rt6i_peer, peer); +} + +static inline bool rt6_set_peer(struct rt6_info *rt, struct inet_peer *peer) +{ +	return inetpeer_ptr_set_peer(&rt->_rt6i_peer, peer); +} + +static inline void rt6_init_peer(struct rt6_info *rt, struct inet_peer_base *base) +{ +	inetpeer_init_ptr(&rt->_rt6i_peer, base); +} + +static inline void rt6_transfer_peer(struct rt6_info *rt, struct rt6_info *ort) +{ +	inetpeer_transfer_peer(&rt->_rt6i_peer, &ort->_rt6i_peer); +} +  static inline struct inet6_dev *ip6_dst_idev(struct dst_entry *dst)  {  	return ((struct rt6_info *)dst)->rt6i_idev; @@ -207,6 +239,7 @@ struct fib6_table {  	u32			tb6_id;  	rwlock_t		tb6_lock;  	struct fib6_node	tb6_root; +	struct inet_peer_base	tb6_peers;  };  #define RT6_TABLE_UNSPEC	RT_TABLE_UNSPEC  |