forked from mirrors/linux
		
	ipv6: Add "offload" and "trap" indications to routes
In a similar fashion to previous patch, add "offload" and "trap" indication to IPv6 routes. This is done by using two unused bits in 'struct fib6_info' to hold these indications. Capable drivers are expected to set these when processing the various in-kernel route notifications. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> Reviewed-by: David Ahern <dsahern@gmail.com> Acked-by: Roopa Prabhu <roopa@cumulusnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									90b93f1b31
								
							
						
					
					
						commit
						bb3c4ab93e
					
				
					 2 changed files with 17 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -192,7 +192,9 @@ struct fib6_info {
 | 
			
		|||
					dst_nopolicy:1,
 | 
			
		||||
					dst_host:1,
 | 
			
		||||
					fib6_destroying:1,
 | 
			
		||||
					unused:3;
 | 
			
		||||
					offload:1,
 | 
			
		||||
					trap:1,
 | 
			
		||||
					unused:1;
 | 
			
		||||
 | 
			
		||||
	struct rcu_head			rcu;
 | 
			
		||||
	struct nexthop			*nh;
 | 
			
		||||
| 
						 | 
				
			
			@ -329,6 +331,13 @@ static inline void fib6_info_release(struct fib6_info *f6i)
 | 
			
		|||
		call_rcu(&f6i->rcu, fib6_info_destroy_rcu);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void fib6_info_hw_flags_set(struct fib6_info *f6i, bool offload,
 | 
			
		||||
					  bool trap)
 | 
			
		||||
{
 | 
			
		||||
	f6i->offload = offload;
 | 
			
		||||
	f6i->trap = trap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
enum fib6_walk_state {
 | 
			
		||||
#ifdef CONFIG_IPV6_SUBTREES
 | 
			
		||||
	FWS_S,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5576,6 +5576,13 @@ static int rt6_fill_node(struct net *net, struct sk_buff *skb,
 | 
			
		|||
		expires -= jiffies;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!dst) {
 | 
			
		||||
		if (rt->offload)
 | 
			
		||||
			rtm->rtm_flags |= RTM_F_OFFLOAD;
 | 
			
		||||
		if (rt->trap)
 | 
			
		||||
			rtm->rtm_flags |= RTM_F_TRAP;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (rtnl_put_cacheinfo(skb, dst, 0, expires, dst ? dst->error : 0) < 0)
 | 
			
		||||
		goto nla_put_failure;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue