net: Make flow cache paths use a const struct flowi.
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
					parent
					
						
							
								4ca2e68511
							
						
					
				
			
			
				commit
				
					
						dee9f4bceb
					
				
			
		
					 4 changed files with 23 additions and 18 deletions
				
			
		| 
						 | 
					@ -428,20 +428,22 @@ enum {
 | 
				
			||||||
struct flowi;
 | 
					struct flowi;
 | 
				
			||||||
#ifndef CONFIG_XFRM
 | 
					#ifndef CONFIG_XFRM
 | 
				
			||||||
static inline int xfrm_lookup(struct net *net, struct dst_entry **dst_p,
 | 
					static inline int xfrm_lookup(struct net *net, struct dst_entry **dst_p,
 | 
				
			||||||
			      struct flowi *fl, struct sock *sk, int flags)
 | 
								      const struct flowi *fl, struct sock *sk,
 | 
				
			||||||
 | 
								      int flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
} 
 | 
					} 
 | 
				
			||||||
static inline int __xfrm_lookup(struct net *net, struct dst_entry **dst_p,
 | 
					static inline int __xfrm_lookup(struct net *net, struct dst_entry **dst_p,
 | 
				
			||||||
				struct flowi *fl, struct sock *sk, int flags)
 | 
									const struct flowi *fl, struct sock *sk,
 | 
				
			||||||
 | 
									int flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
extern int xfrm_lookup(struct net *net, struct dst_entry **dst_p,
 | 
					extern int xfrm_lookup(struct net *net, struct dst_entry **dst_p,
 | 
				
			||||||
		       struct flowi *fl, struct sock *sk, int flags);
 | 
							       const struct flowi *fl, struct sock *sk, int flags);
 | 
				
			||||||
extern int __xfrm_lookup(struct net *net, struct dst_entry **dst_p,
 | 
					extern int __xfrm_lookup(struct net *net, struct dst_entry **dst_p,
 | 
				
			||||||
			 struct flowi *fl, struct sock *sk, int flags);
 | 
								 const struct flowi *fl, struct sock *sk, int flags);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -102,11 +102,11 @@ struct flow_cache_ops {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct flow_cache_object *(*flow_resolve_t)(
 | 
					typedef struct flow_cache_object *(*flow_resolve_t)(
 | 
				
			||||||
		struct net *net, struct flowi *key, u16 family,
 | 
							struct net *net, const struct flowi *key, u16 family,
 | 
				
			||||||
		u8 dir, struct flow_cache_object *oldobj, void *ctx);
 | 
							u8 dir, struct flow_cache_object *oldobj, void *ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern struct flow_cache_object *flow_cache_lookup(
 | 
					extern struct flow_cache_object *flow_cache_lookup(
 | 
				
			||||||
		struct net *net, struct flowi *key, u16 family,
 | 
							struct net *net, const struct flowi *key, u16 family,
 | 
				
			||||||
		u8 dir, flow_resolve_t resolver, void *ctx);
 | 
							u8 dir, flow_resolve_t resolver, void *ctx);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
extern void flow_cache_flush(void);
 | 
					extern void flow_cache_flush(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -172,9 +172,9 @@ static void flow_new_hash_rnd(struct flow_cache *fc,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static u32 flow_hash_code(struct flow_cache *fc,
 | 
					static u32 flow_hash_code(struct flow_cache *fc,
 | 
				
			||||||
			  struct flow_cache_percpu *fcp,
 | 
								  struct flow_cache_percpu *fcp,
 | 
				
			||||||
			  struct flowi *key)
 | 
								  const struct flowi *key)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	u32 *k = (u32 *) key;
 | 
						const u32 *k = (const u32 *) key;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return jhash2(k, (sizeof(*key) / sizeof(u32)), fcp->hash_rnd)
 | 
						return jhash2(k, (sizeof(*key) / sizeof(u32)), fcp->hash_rnd)
 | 
				
			||||||
		& (flow_cache_hash_size(fc) - 1);
 | 
							& (flow_cache_hash_size(fc) - 1);
 | 
				
			||||||
| 
						 | 
					@ -186,17 +186,17 @@ typedef unsigned long flow_compare_t;
 | 
				
			||||||
 * important assumptions that we can here, such as alignment and
 | 
					 * important assumptions that we can here, such as alignment and
 | 
				
			||||||
 * constant size.
 | 
					 * constant size.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
static int flow_key_compare(struct flowi *key1, struct flowi *key2)
 | 
					static int flow_key_compare(const struct flowi *key1, const struct flowi *key2)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	flow_compare_t *k1, *k1_lim, *k2;
 | 
						const flow_compare_t *k1, *k1_lim, *k2;
 | 
				
			||||||
	const int n_elem = sizeof(struct flowi) / sizeof(flow_compare_t);
 | 
						const int n_elem = sizeof(struct flowi) / sizeof(flow_compare_t);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUILD_BUG_ON(sizeof(struct flowi) % sizeof(flow_compare_t));
 | 
						BUILD_BUG_ON(sizeof(struct flowi) % sizeof(flow_compare_t));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	k1 = (flow_compare_t *) key1;
 | 
						k1 = (const flow_compare_t *) key1;
 | 
				
			||||||
	k1_lim = k1 + n_elem;
 | 
						k1_lim = k1 + n_elem;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	k2 = (flow_compare_t *) key2;
 | 
						k2 = (const flow_compare_t *) key2;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
		if (*k1++ != *k2++)
 | 
							if (*k1++ != *k2++)
 | 
				
			||||||
| 
						 | 
					@ -207,7 +207,7 @@ static int flow_key_compare(struct flowi *key1, struct flowi *key2)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct flow_cache_object *
 | 
					struct flow_cache_object *
 | 
				
			||||||
flow_cache_lookup(struct net *net, struct flowi *key, u16 family, u8 dir,
 | 
					flow_cache_lookup(struct net *net, const struct flowi *key, u16 family, u8 dir,
 | 
				
			||||||
		  flow_resolve_t resolver, void *ctx)
 | 
							  flow_resolve_t resolver, void *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct flow_cache *fc = &flow_cache_global;
 | 
						struct flow_cache *fc = &flow_cache_global;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -954,7 +954,7 @@ __xfrm_policy_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct flow_cache_object *
 | 
					static struct flow_cache_object *
 | 
				
			||||||
xfrm_policy_lookup(struct net *net, struct flowi *fl, u16 family,
 | 
					xfrm_policy_lookup(struct net *net, const struct flowi *fl, u16 family,
 | 
				
			||||||
		   u8 dir, struct flow_cache_object *old_obj, void *ctx)
 | 
							   u8 dir, struct flow_cache_object *old_obj, void *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct xfrm_policy *pol;
 | 
						struct xfrm_policy *pol;
 | 
				
			||||||
| 
						 | 
					@ -990,7 +990,8 @@ static inline int policy_to_flow_dir(int dir)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct xfrm_policy *xfrm_sk_policy_lookup(struct sock *sk, int dir, struct flowi *fl)
 | 
					static struct xfrm_policy *xfrm_sk_policy_lookup(struct sock *sk, int dir,
 | 
				
			||||||
 | 
											 const struct flowi *fl)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct xfrm_policy *pol;
 | 
						struct xfrm_policy *pol;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1629,7 +1630,7 @@ xfrm_resolve_and_create_bundle(struct xfrm_policy **pols, int num_pols,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static struct flow_cache_object *
 | 
					static struct flow_cache_object *
 | 
				
			||||||
xfrm_bundle_lookup(struct net *net, struct flowi *fl, u16 family, u8 dir,
 | 
					xfrm_bundle_lookup(struct net *net, const struct flowi *fl, u16 family, u8 dir,
 | 
				
			||||||
		   struct flow_cache_object *oldflo, void *ctx)
 | 
							   struct flow_cache_object *oldflo, void *ctx)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct dst_entry *dst_orig = (struct dst_entry *)ctx;
 | 
						struct dst_entry *dst_orig = (struct dst_entry *)ctx;
 | 
				
			||||||
| 
						 | 
					@ -1733,7 +1734,8 @@ error:
 | 
				
			||||||
 * At the moment we eat a raw IP route. Mostly to speed up lookups
 | 
					 * At the moment we eat a raw IP route. Mostly to speed up lookups
 | 
				
			||||||
 * on interfaces with disabled IPsec.
 | 
					 * on interfaces with disabled IPsec.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int __xfrm_lookup(struct net *net, struct dst_entry **dst_p, struct flowi *fl,
 | 
					int __xfrm_lookup(struct net *net, struct dst_entry **dst_p,
 | 
				
			||||||
 | 
							  const struct flowi *fl,
 | 
				
			||||||
		  struct sock *sk, int flags)
 | 
							  struct sock *sk, int flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX];
 | 
						struct xfrm_policy *pols[XFRM_POLICY_TYPE_MAX];
 | 
				
			||||||
| 
						 | 
					@ -1889,7 +1891,8 @@ dropdst:
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(__xfrm_lookup);
 | 
					EXPORT_SYMBOL(__xfrm_lookup);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int xfrm_lookup(struct net *net, struct dst_entry **dst_p, struct flowi *fl,
 | 
					int xfrm_lookup(struct net *net, struct dst_entry **dst_p,
 | 
				
			||||||
 | 
							const struct flowi *fl,
 | 
				
			||||||
		struct sock *sk, int flags)
 | 
							struct sock *sk, int flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	int err = __xfrm_lookup(net, dst_p, fl, sk, flags);
 | 
						int err = __xfrm_lookup(net, dst_p, fl, sk, flags);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue