summaryrefslogtreecommitdiffstats
path: root/net/ipv6/ip6_tunnel.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-07-12 09:25:15 +0200
committerDavid S. Miller <davem@davemloft.net>2012-07-12 09:25:15 +0200
commitec18d9a2691d69cd14b48f9b919fddcef28b7f5c (patch)
tree4d10135edfe25d4ff56e39330b0f7797b2034b8a /net/ipv6/ip6_tunnel.c
parentipv6: Add ip6_redirect() and ip6_sk_redirect() helper functions. (diff)
downloadlinux-ec18d9a2691d69cd14b48f9b919fddcef28b7f5c.tar.xz
linux-ec18d9a2691d69cd14b48f9b919fddcef28b7f5c.zip
ipv6: Add redirect support to all protocol icmp error handlers.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/ip6_tunnel.c')
-rw-r--r--net/ipv6/ip6_tunnel.c7
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,
rel_type = ICMP_DEST_UNREACH;
rel_code = ICMP_FRAG_NEEDED;
break;
+ case NDISC_REDIRECT:
+ rel_type = ICMP_REDIRECT;
+ rel_code = ICMP_REDIR_HOST;
default:
return 0;
}
@@ -608,6 +611,10 @@ ip4ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt,
skb_dst(skb2)->ops->update_pmtu(skb_dst(skb2), rel_info);
}
+ if (rel_type == ICMP_REDIRECT) {
+ if (skb_dst(skb2)->ops->redirect)
+ skb_dst(skb2)->ops->redirect(skb_dst(skb2), skb2);
+ }
icmp_send(skb2, rel_type, rel_code, htonl(rel_info));