diff options
author | Jamal Hadi Salim <hadi@cyberus.ca> | 2010-02-22 19:20:22 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-02-22 19:20:22 -0500 |
commit | bd55775c8dd656fc69b3a42a1c4ab32abb7e8af9 (patch) | |
tree | 766b30d5fc29d5d4849a10a290db51fe0f7c3ad7 /net/ipv4/ipcomp.c | |
parent | bf825f81b454fae2ffe1b675f3a549656726440e (diff) |
xfrm: SA lookups signature with mark
pass mark to all SA lookups to prepare them for when we add code
to have them search.
Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ipcomp.c')
-rw-r--r-- | net/ipv4/ipcomp.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/net/ipv4/ipcomp.c b/net/ipv4/ipcomp.c index 83ed71500898..629067571f02 100644 --- a/net/ipv4/ipcomp.c +++ b/net/ipv4/ipcomp.c | |||
@@ -36,7 +36,7 @@ static void ipcomp4_err(struct sk_buff *skb, u32 info) | |||
36 | return; | 36 | return; |
37 | 37 | ||
38 | spi = htonl(ntohs(ipch->cpi)); | 38 | spi = htonl(ntohs(ipch->cpi)); |
39 | x = xfrm_state_lookup(net, (xfrm_address_t *)&iph->daddr, | 39 | x = xfrm_state_lookup(net, skb->mark, (xfrm_address_t *)&iph->daddr, |
40 | spi, IPPROTO_COMP, AF_INET); | 40 | spi, IPPROTO_COMP, AF_INET); |
41 | if (!x) | 41 | if (!x) |
42 | return; | 42 | return; |
@@ -63,6 +63,7 @@ static struct xfrm_state *ipcomp_tunnel_create(struct xfrm_state *x) | |||
63 | t->props.mode = x->props.mode; | 63 | t->props.mode = x->props.mode; |
64 | t->props.saddr.a4 = x->props.saddr.a4; | 64 | t->props.saddr.a4 = x->props.saddr.a4; |
65 | t->props.flags = x->props.flags; | 65 | t->props.flags = x->props.flags; |
66 | memcpy(&t->mark, &x->mark, sizeof(t->mark)); | ||
66 | 67 | ||
67 | if (xfrm_init_state(t)) | 68 | if (xfrm_init_state(t)) |
68 | goto error; | 69 | goto error; |
@@ -87,8 +88,9 @@ static int ipcomp_tunnel_attach(struct xfrm_state *x) | |||
87 | struct net *net = xs_net(x); | 88 | struct net *net = xs_net(x); |
88 | int err = 0; | 89 | int err = 0; |
89 | struct xfrm_state *t; | 90 | struct xfrm_state *t; |
91 | u32 mark = x->mark.v & x->mark.m; | ||
90 | 92 | ||
91 | t = xfrm_state_lookup(net, (xfrm_address_t *)&x->id.daddr.a4, | 93 | t = xfrm_state_lookup(net, mark, (xfrm_address_t *)&x->id.daddr.a4, |
92 | x->props.saddr.a4, IPPROTO_IPIP, AF_INET); | 94 | x->props.saddr.a4, IPPROTO_IPIP, AF_INET); |
93 | if (!t) { | 95 | if (!t) { |
94 | t = ipcomp_tunnel_create(x); | 96 | t = ipcomp_tunnel_create(x); |