aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/ipcomp6.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv6/ipcomp6.c')
-rw-r--r--net/ipv6/ipcomp6.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/net/ipv6/ipcomp6.c b/net/ipv6/ipcomp6.c
index 92832385a8ef..7af5aee75d98 100644
--- a/net/ipv6/ipcomp6.c
+++ b/net/ipv6/ipcomp6.c
@@ -64,7 +64,9 @@ static void ipcomp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
64 (struct ip_comp_hdr *)(skb->data + offset); 64 (struct ip_comp_hdr *)(skb->data + offset);
65 struct xfrm_state *x; 65 struct xfrm_state *x;
66 66
67 if (type != ICMPV6_DEST_UNREACH && type != ICMPV6_PKT_TOOBIG) 67 if (type != ICMPV6_DEST_UNREACH &&
68 type != ICMPV6_PKT_TOOBIG &&
69 type != NDISC_REDIRECT)
68 return; 70 return;
69 71
70 spi = htonl(ntohs(ipcomph->cpi)); 72 spi = htonl(ntohs(ipcomph->cpi));
@@ -73,9 +75,10 @@ static void ipcomp6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
73 if (!x) 75 if (!x)
74 return; 76 return;
75 77
76 pr_debug("pmtu discovery on SA IPCOMP/%08x/%pI6\n", 78 if (type == NDISC_REDIRECT)
77 spi, &iph->daddr); 79 ip6_redirect(skb, net, 0, 0);
78 ip6_update_pmtu(skb, net, info, 0, 0); 80 else
81 ip6_update_pmtu(skb, net, info, 0, 0);
79 xfrm_state_put(x); 82 xfrm_state_put(x);
80} 83}
81 84