diff options
| author | Steffen Klassert <steffen.klassert@secunet.com> | 2014-03-14 07:28:07 +0100 | 
|---|---|---|
| committer | Steffen Klassert <steffen.klassert@secunet.com> | 2014-03-14 07:28:07 +0100 | 
| commit | d5860c5ccfcc20131634527ee3bc4a11a5168dd7 (patch) | |
| tree | 3edb33bc57023a836c3f3b286f825932aec95aaf /net/ipv6 | |
| parent | 7e14ea1521d9249d9de7f0ea39c9af054745eebd (diff) | |
| download | linux-d5860c5ccfcc20131634527ee3bc4a11a5168dd7.tar.bz2 | |
esp6: Use the IPsec protocol multiplexer API
Switch esp6 to use the new IPsec protocol multiplexer.
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Diffstat (limited to 'net/ipv6')
| -rw-r--r-- | net/ipv6/esp6.c | 26 | 
1 files changed, 17 insertions, 9 deletions
| diff --git a/net/ipv6/esp6.c b/net/ipv6/esp6.c index 6eef8a7e35f2..d15da1377149 100644 --- a/net/ipv6/esp6.c +++ b/net/ipv6/esp6.c @@ -421,8 +421,8 @@ static u32 esp6_get_mtu(struct xfrm_state *x, int mtu)  		 net_adj) & ~(blksize - 1)) + net_adj - 2;  } -static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, -		     u8 type, u8 code, int offset, __be32 info) +static int esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, +		    u8 type, u8 code, int offset, __be32 info)  {  	struct net *net = dev_net(skb->dev);  	const struct ipv6hdr *iph = (const struct ipv6hdr *)skb->data; @@ -431,18 +431,20 @@ static void esp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,  	if (type != ICMPV6_PKT_TOOBIG &&  	    type != NDISC_REDIRECT) -		return; +		return 0;  	x = xfrm_state_lookup(net, skb->mark, (const xfrm_address_t *)&iph->daddr,  			      esph->spi, IPPROTO_ESP, AF_INET6);  	if (!x) -		return; +		return 0;  	if (type == NDISC_REDIRECT)  		ip6_redirect(skb, net, skb->dev->ifindex, 0);  	else  		ip6_update_pmtu(skb, net, info, 0, 0);  	xfrm_state_put(x); + +	return 0;  }  static void esp6_destroy(struct xfrm_state *x) @@ -614,6 +616,11 @@ error:  	return err;  } +static int esp6_rcv_cb(struct sk_buff *skb, int err) +{ +	return 0; +} +  static const struct xfrm_type esp6_type =  {  	.description	= "ESP6", @@ -628,10 +635,11 @@ static const struct xfrm_type esp6_type =  	.hdr_offset	= xfrm6_find_1stfragopt,  }; -static const struct inet6_protocol esp6_protocol = { -	.handler 	=	xfrm6_rcv, +static struct xfrm6_protocol esp6_protocol = { +	.handler	=	xfrm6_rcv, +	.cb_handler	=	esp6_rcv_cb,  	.err_handler	=	esp6_err, -	.flags		=	INET6_PROTO_NOPOLICY, +	.priority	=	0,  };  static int __init esp6_init(void) @@ -640,7 +648,7 @@ static int __init esp6_init(void)  		pr_info("%s: can't add xfrm type\n", __func__);  		return -EAGAIN;  	} -	if (inet6_add_protocol(&esp6_protocol, IPPROTO_ESP) < 0) { +	if (xfrm6_protocol_register(&esp6_protocol, IPPROTO_ESP) < 0) {  		pr_info("%s: can't add protocol\n", __func__);  		xfrm_unregister_type(&esp6_type, AF_INET6);  		return -EAGAIN; @@ -651,7 +659,7 @@ static int __init esp6_init(void)  static void __exit esp6_fini(void)  { -	if (inet6_del_protocol(&esp6_protocol, IPPROTO_ESP) < 0) +	if (xfrm6_protocol_deregister(&esp6_protocol, IPPROTO_ESP) < 0)  		pr_info("%s: can't remove protocol\n", __func__);  	if (xfrm_unregister_type(&esp6_type, AF_INET6) < 0)  		pr_info("%s: can't remove xfrm type\n", __func__); |