提交 dee9f4bc 编写于 作者: D David S. Miller

net: Make flow cache paths use a const struct flowi.

Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 4ca2e685
...@@ -428,20 +428,22 @@ enum { ...@@ -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 { ...@@ -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, ...@@ -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; ...@@ -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) ...@@ -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 ...@@ -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) ...@@ -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, ...@@ -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 @@ xfrm_bundle_lookup(struct net *net, struct flowi *fl, u16 family, u8 dir, ...@@ -1733,7 +1734,8 @@ xfrm_bundle_lookup(struct net *net, struct flowi *fl, u16 family, u8 dir,
* 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 @@ int __xfrm_lookup(struct net *net, struct dst_entry **dst_p, struct flowi *fl, ...@@ -1889,7 +1891,8 @@ int __xfrm_lookup(struct net *net, struct dst_entry **dst_p, struct flowi *fl,
} }
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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册