diff options
author | Alexey Dobriyan <adobriyan@gmail.com> | 2010-01-25 05:39:09 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-01-28 09:31:06 -0500 |
commit | d74340d31bf1dbeb00acadddd8697666528a7846 (patch) | |
tree | a52af136a0022ebb2239803e480fb0758d677597 /net | |
parent | a92df2545402c1a08e7a158f4477a52dea0eeeed (diff) |
netns xfrm: ipcomp6 support
Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv6/ipcomp6.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/net/ipv6/ipcomp6.c b/net/ipv6/ipcomp6.c index 1d1faf757c9a..a9fbb151bb79 100644 --- a/net/ipv6/ipcomp6.c +++ b/net/ipv6/ipcomp6.c | |||
@@ -53,6 +53,7 @@ | |||
53 | static void ipcomp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | 53 | static void ipcomp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, |
54 | u8 type, u8 code, int offset, __be32 info) | 54 | u8 type, u8 code, int offset, __be32 info) |
55 | { | 55 | { |
56 | struct net *net = dev_net(skb->dev); | ||
56 | __be32 spi; | 57 | __be32 spi; |
57 | struct ipv6hdr *iph = (struct ipv6hdr*)skb->data; | 58 | struct ipv6hdr *iph = (struct ipv6hdr*)skb->data; |
58 | struct ip_comp_hdr *ipcomph = | 59 | struct ip_comp_hdr *ipcomph = |
@@ -63,7 +64,7 @@ static void ipcomp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
63 | return; | 64 | return; |
64 | 65 | ||
65 | spi = htonl(ntohs(ipcomph->cpi)); | 66 | spi = htonl(ntohs(ipcomph->cpi)); |
66 | x = xfrm_state_lookup(&init_net, (xfrm_address_t *)&iph->daddr, spi, IPPROTO_COMP, AF_INET6); | 67 | x = xfrm_state_lookup(net, (xfrm_address_t *)&iph->daddr, spi, IPPROTO_COMP, AF_INET6); |
67 | if (!x) | 68 | if (!x) |
68 | return; | 69 | return; |
69 | 70 | ||
@@ -74,14 +75,15 @@ static void ipcomp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
74 | 75 | ||
75 | static struct xfrm_state *ipcomp6_tunnel_create(struct xfrm_state *x) | 76 | static struct xfrm_state *ipcomp6_tunnel_create(struct xfrm_state *x) |
76 | { | 77 | { |
78 | struct net *net = xs_net(x); | ||
77 | struct xfrm_state *t = NULL; | 79 | struct xfrm_state *t = NULL; |
78 | 80 | ||
79 | t = xfrm_state_alloc(&init_net); | 81 | t = xfrm_state_alloc(net); |
80 | if (!t) | 82 | if (!t) |
81 | goto out; | 83 | goto out; |
82 | 84 | ||
83 | t->id.proto = IPPROTO_IPV6; | 85 | t->id.proto = IPPROTO_IPV6; |
84 | t->id.spi = xfrm6_tunnel_alloc_spi(&init_net, (xfrm_address_t *)&x->props.saddr); | 86 | t->id.spi = xfrm6_tunnel_alloc_spi(net, (xfrm_address_t *)&x->props.saddr); |
85 | if (!t->id.spi) | 87 | if (!t->id.spi) |
86 | goto error; | 88 | goto error; |
87 | 89 | ||
@@ -108,13 +110,14 @@ error: | |||
108 | 110 | ||
109 | static int ipcomp6_tunnel_attach(struct xfrm_state *x) | 111 | static int ipcomp6_tunnel_attach(struct xfrm_state *x) |
110 | { | 112 | { |
113 | struct net *net = xs_net(x); | ||
111 | int err = 0; | 114 | int err = 0; |
112 | struct xfrm_state *t = NULL; | 115 | struct xfrm_state *t = NULL; |
113 | __be32 spi; | 116 | __be32 spi; |
114 | 117 | ||
115 | spi = xfrm6_tunnel_spi_lookup(&init_net, (xfrm_address_t *)&x->props.saddr); | 118 | spi = xfrm6_tunnel_spi_lookup(net, (xfrm_address_t *)&x->props.saddr); |
116 | if (spi) | 119 | if (spi) |
117 | t = xfrm_state_lookup(&init_net, (xfrm_address_t *)&x->id.daddr, | 120 | t = xfrm_state_lookup(net, (xfrm_address_t *)&x->id.daddr, |
118 | spi, IPPROTO_IPV6, AF_INET6); | 121 | spi, IPPROTO_IPV6, AF_INET6); |
119 | if (!t) { | 122 | if (!t) { |
120 | t = ipcomp6_tunnel_create(x); | 123 | t = ipcomp6_tunnel_create(x); |