diff options
Diffstat (limited to 'net/ipv6/ipcomp6.c')
-rw-r--r-- | net/ipv6/ipcomp6.c | 11 |
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 | ||