diff options
Diffstat (limited to 'net/ipv6/sit.c')
-rw-r--r-- | net/ipv6/sit.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index d6bfaec3bbbf..8ce38f10a547 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c | |||
@@ -606,8 +606,9 @@ static int ipip6_rcv(struct sk_buff *skb) | |||
606 | return 0; | 606 | return 0; |
607 | } | 607 | } |
608 | 608 | ||
609 | icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0); | 609 | /* no tunnel matched, let upstream know, ipsec may handle it */ |
610 | rcu_read_unlock(); | 610 | rcu_read_unlock(); |
611 | return 1; | ||
611 | out: | 612 | out: |
612 | kfree_skb(skb); | 613 | kfree_skb(skb); |
613 | return 0; | 614 | return 0; |
@@ -730,10 +731,9 @@ static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb, | |||
730 | } | 731 | } |
731 | 732 | ||
732 | { | 733 | { |
733 | struct flowi fl = { .nl_u = { .ip4_u = | 734 | struct flowi fl = { .fl4_dst = dst, |
734 | { .daddr = dst, | 735 | .fl4_src = tiph->saddr, |
735 | .saddr = tiph->saddr, | 736 | .fl4_tos = RT_TOS(tos), |
736 | .tos = RT_TOS(tos) } }, | ||
737 | .oif = tunnel->parms.link, | 737 | .oif = tunnel->parms.link, |
738 | .proto = IPPROTO_IPV6 }; | 738 | .proto = IPPROTO_IPV6 }; |
739 | if (ip_route_output_key(dev_net(dev), &rt, &fl)) { | 739 | if (ip_route_output_key(dev_net(dev), &rt, &fl)) { |
@@ -855,10 +855,9 @@ static void ipip6_tunnel_bind_dev(struct net_device *dev) | |||
855 | iph = &tunnel->parms.iph; | 855 | iph = &tunnel->parms.iph; |
856 | 856 | ||
857 | if (iph->daddr) { | 857 | if (iph->daddr) { |
858 | struct flowi fl = { .nl_u = { .ip4_u = | 858 | struct flowi fl = { .fl4_dst = iph->daddr, |
859 | { .daddr = iph->daddr, | 859 | .fl4_src = iph->saddr, |
860 | .saddr = iph->saddr, | 860 | .fl4_tos = RT_TOS(iph->tos), |
861 | .tos = RT_TOS(iph->tos) } }, | ||
862 | .oif = tunnel->parms.link, | 861 | .oif = tunnel->parms.link, |
863 | .proto = IPPROTO_IPV6 }; | 862 | .proto = IPPROTO_IPV6 }; |
864 | struct rtable *rt; | 863 | struct rtable *rt; |