diff options
Diffstat (limited to 'net/ipv6/ip6_tunnel.c')
-rw-r--r-- | net/ipv6/ip6_tunnel.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index 6af3fcfdcbbd..0b5b60ec6f4a 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c | |||
@@ -550,6 +550,9 @@ ip4ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
550 | rel_type = ICMP_DEST_UNREACH; | 550 | rel_type = ICMP_DEST_UNREACH; |
551 | rel_code = ICMP_FRAG_NEEDED; | 551 | rel_code = ICMP_FRAG_NEEDED; |
552 | break; | 552 | break; |
553 | case NDISC_REDIRECT: | ||
554 | rel_type = ICMP_REDIRECT; | ||
555 | rel_code = ICMP_REDIR_HOST; | ||
553 | default: | 556 | default: |
554 | return 0; | 557 | return 0; |
555 | } | 558 | } |
@@ -608,6 +611,10 @@ ip4ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, | |||
608 | 611 | ||
609 | skb_dst(skb2)->ops->update_pmtu(skb_dst(skb2), rel_info); | 612 | skb_dst(skb2)->ops->update_pmtu(skb_dst(skb2), rel_info); |
610 | } | 613 | } |
614 | if (rel_type == ICMP_REDIRECT) { | ||
615 | if (skb_dst(skb2)->ops->redirect) | ||
616 | skb_dst(skb2)->ops->redirect(skb_dst(skb2), skb2); | ||
617 | } | ||
611 | 618 | ||
612 | icmp_send(skb2, rel_type, rel_code, htonl(rel_info)); | 619 | icmp_send(skb2, rel_type, rel_code, htonl(rel_info)); |
613 | 620 | ||