diff options
Diffstat (limited to 'net/ipv4/xfrm4_policy.c')
-rw-r--r-- | net/ipv4/xfrm4_policy.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c index c63de0a72aba..2ad24ba31f9d 100644 --- a/net/ipv4/xfrm4_policy.c +++ b/net/ipv4/xfrm4_policy.c | |||
@@ -18,7 +18,8 @@ | |||
18 | static struct dst_ops xfrm4_dst_ops; | 18 | static struct dst_ops xfrm4_dst_ops; |
19 | static struct xfrm_policy_afinfo xfrm4_policy_afinfo; | 19 | static struct xfrm_policy_afinfo xfrm4_policy_afinfo; |
20 | 20 | ||
21 | static struct dst_entry *xfrm4_dst_lookup(int tos, xfrm_address_t *saddr, | 21 | static struct dst_entry *xfrm4_dst_lookup(struct net *net, int tos, |
22 | xfrm_address_t *saddr, | ||
22 | xfrm_address_t *daddr) | 23 | xfrm_address_t *daddr) |
23 | { | 24 | { |
24 | struct flowi fl = { | 25 | struct flowi fl = { |
@@ -36,19 +37,20 @@ static struct dst_entry *xfrm4_dst_lookup(int tos, xfrm_address_t *saddr, | |||
36 | if (saddr) | 37 | if (saddr) |
37 | fl.fl4_src = saddr->a4; | 38 | fl.fl4_src = saddr->a4; |
38 | 39 | ||
39 | err = __ip_route_output_key(&init_net, &rt, &fl); | 40 | err = __ip_route_output_key(net, &rt, &fl); |
40 | dst = &rt->u.dst; | 41 | dst = &rt->u.dst; |
41 | if (err) | 42 | if (err) |
42 | dst = ERR_PTR(err); | 43 | dst = ERR_PTR(err); |
43 | return dst; | 44 | return dst; |
44 | } | 45 | } |
45 | 46 | ||
46 | static int xfrm4_get_saddr(xfrm_address_t *saddr, xfrm_address_t *daddr) | 47 | static int xfrm4_get_saddr(struct net *net, |
48 | xfrm_address_t *saddr, xfrm_address_t *daddr) | ||
47 | { | 49 | { |
48 | struct dst_entry *dst; | 50 | struct dst_entry *dst; |
49 | struct rtable *rt; | 51 | struct rtable *rt; |
50 | 52 | ||
51 | dst = xfrm4_dst_lookup(0, NULL, daddr); | 53 | dst = xfrm4_dst_lookup(net, 0, NULL, daddr); |
52 | if (IS_ERR(dst)) | 54 | if (IS_ERR(dst)) |
53 | return -EHOSTUNREACH; | 55 | return -EHOSTUNREACH; |
54 | 56 | ||
@@ -65,7 +67,7 @@ __xfrm4_find_bundle(struct flowi *fl, struct xfrm_policy *policy) | |||
65 | 67 | ||
66 | read_lock_bh(&policy->lock); | 68 | read_lock_bh(&policy->lock); |
67 | for (dst = policy->bundles; dst; dst = dst->next) { | 69 | for (dst = policy->bundles; dst; dst = dst->next) { |
68 | struct xfrm_dst *xdst = (struct xfrm_dst*)dst; | 70 | struct xfrm_dst *xdst = (struct xfrm_dst *)dst; |
69 | if (xdst->u.rt.fl.oif == fl->oif && /*XXX*/ | 71 | if (xdst->u.rt.fl.oif == fl->oif && /*XXX*/ |
70 | xdst->u.rt.fl.fl4_dst == fl->fl4_dst && | 72 | xdst->u.rt.fl.fl4_dst == fl->fl4_dst && |
71 | xdst->u.rt.fl.fl4_src == fl->fl4_src && | 73 | xdst->u.rt.fl.fl4_src == fl->fl4_src && |
@@ -187,7 +189,7 @@ _decode_session4(struct sk_buff *skb, struct flowi *fl, int reverse) | |||
187 | 189 | ||
188 | static inline int xfrm4_garbage_collect(struct dst_ops *ops) | 190 | static inline int xfrm4_garbage_collect(struct dst_ops *ops) |
189 | { | 191 | { |
190 | xfrm4_policy_afinfo.garbage_collect(); | 192 | xfrm4_policy_afinfo.garbage_collect(&init_net); |
191 | return (atomic_read(&xfrm4_dst_ops.entries) > xfrm4_dst_ops.gc_thresh*2); | 193 | return (atomic_read(&xfrm4_dst_ops.entries) > xfrm4_dst_ops.gc_thresh*2); |
192 | } | 194 | } |
193 | 195 | ||
@@ -246,7 +248,6 @@ static struct dst_ops xfrm4_dst_ops = { | |||
246 | .ifdown = xfrm4_dst_ifdown, | 248 | .ifdown = xfrm4_dst_ifdown, |
247 | .local_out = __ip_local_out, | 249 | .local_out = __ip_local_out, |
248 | .gc_thresh = 1024, | 250 | .gc_thresh = 1024, |
249 | .entry_size = sizeof(struct xfrm_dst), | ||
250 | .entries = ATOMIC_INIT(0), | 251 | .entries = ATOMIC_INIT(0), |
251 | }; | 252 | }; |
252 | 253 | ||