diff options
Diffstat (limited to 'net/ipv6/icmp.c')
| -rw-r--r-- | net/ipv6/icmp.c | 12 | 
1 files changed, 12 insertions, 0 deletions
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index b4a9fd51dae..fff5bdd8b68 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c @@ -81,10 +81,22 @@ static inline struct sock *icmpv6_sk(struct net *net)  	return net->ipv6.icmp_sk[smp_processor_id()];  } +static void icmpv6_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); + +	if (type == ICMPV6_PKT_TOOBIG) +		ip6_update_pmtu(skb, net, info, 0, 0); +	else if (type == NDISC_REDIRECT) +		ip6_redirect(skb, net, 0, 0); +} +  static int icmpv6_rcv(struct sk_buff *skb);  static const struct inet6_protocol icmpv6_protocol = {  	.handler	=	icmpv6_rcv, +	.err_handler	=	icmpv6_err,  	.flags		=	INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,  };  |