提交 383c1f88 编写于 作者: X Xin Long 提交者: David S. Miller

ip6_tunnel: add the process for redirect in ip6_tnl_err

The same process for redirect in "ip6_gre: add the process for redirect
in ip6gre_err" is needed by ip4ip6 and ip6ip6 as well.
Signed-off-by: NXin Long <lucien.xin@gmail.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 fe1a4ca0
...@@ -471,15 +471,16 @@ static int ...@@ -471,15 +471,16 @@ static int
ip6_tnl_err(struct sk_buff *skb, __u8 ipproto, struct inet6_skb_parm *opt, ip6_tnl_err(struct sk_buff *skb, __u8 ipproto, struct inet6_skb_parm *opt,
u8 *type, u8 *code, int *msg, __u32 *info, int offset) u8 *type, u8 *code, int *msg, __u32 *info, int offset)
{ {
const struct ipv6hdr *ipv6h = (const struct ipv6hdr *) skb->data; const struct ipv6hdr *ipv6h = (const struct ipv6hdr *)skb->data;
struct ip6_tnl *t; struct net *net = dev_net(skb->dev);
int rel_msg = 0;
u8 rel_type = ICMPV6_DEST_UNREACH; u8 rel_type = ICMPV6_DEST_UNREACH;
u8 rel_code = ICMPV6_ADDR_UNREACH; u8 rel_code = ICMPV6_ADDR_UNREACH;
u8 tproto;
__u32 rel_info = 0; __u32 rel_info = 0;
__u16 len; struct ip6_tnl *t;
int err = -ENOENT; int err = -ENOENT;
int rel_msg = 0;
u8 tproto;
__u16 len;
/* If the packet doesn't contain the original IPv6 header we are /* If the packet doesn't contain the original IPv6 header we are
in trouble since we might need the source address for further in trouble since we might need the source address for further
...@@ -543,6 +544,10 @@ ip6_tnl_err(struct sk_buff *skb, __u8 ipproto, struct inet6_skb_parm *opt, ...@@ -543,6 +544,10 @@ ip6_tnl_err(struct sk_buff *skb, __u8 ipproto, struct inet6_skb_parm *opt,
rel_msg = 1; rel_msg = 1;
} }
break; break;
case NDISC_REDIRECT:
ip6_redirect(skb, net, skb->dev->ifindex, 0,
sock_net_uid(net, NULL));
break;
} }
*type = rel_type; *type = rel_type;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册