aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4/ip_gre.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-01-27 18:01:08 -0500
committerDavid S. Miller <davem@davemloft.net>2012-01-27 21:00:07 -0500
commit0ec88662041e172acf33d7a15a2020841ee82afb (patch)
tree2d8d0103e050a9ad08932b369ad52eb3e7f1ab25 /net/ipv4/ip_gre.c
parentf5e261e626eb3fe07adf484aaad2ecfc757feba3 (diff)
ipv4: ip_gre: Convert to dst_neigh_lookup()
The conversion is very similar to that made to ipv6's SIT code. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ip_gre.c')
-rw-r--r--net/ipv4/ip_gre.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c
index 05f7419ed7c5..bf9541648b96 100644
--- a/net/ipv4/ip_gre.c
+++ b/net/ipv4/ip_gre.c
@@ -730,10 +730,12 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev
730 } 730 }
731#if IS_ENABLED(CONFIG_IPV6) 731#if IS_ENABLED(CONFIG_IPV6)
732 else if (skb->protocol == htons(ETH_P_IPV6)) { 732 else if (skb->protocol == htons(ETH_P_IPV6)) {
733 struct neighbour *neigh = dst_get_neighbour_noref(skb_dst(skb));
734 const struct in6_addr *addr6; 733 const struct in6_addr *addr6;
734 struct neighbour *neigh;
735 bool do_tx_error_icmp;
735 int addr_type; 736 int addr_type;
736 737
738 neigh = dst_neigh_lookup(skb_dst(skb), &ipv6_hdr(skb)->daddr);
737 if (neigh == NULL) 739 if (neigh == NULL)
738 goto tx_error; 740 goto tx_error;
739 741
@@ -746,9 +748,14 @@ static netdev_tx_t ipgre_tunnel_xmit(struct sk_buff *skb, struct net_device *dev
746 } 748 }
747 749
748 if ((addr_type & IPV6_ADDR_COMPATv4) == 0) 750 if ((addr_type & IPV6_ADDR_COMPATv4) == 0)
751 do_tx_error_icmp = true;
752 else {
753 do_tx_error_icmp = false;
754 dst = addr6->s6_addr32[3];
755 }
756 neigh_release(neigh);
757 if (do_tx_error_icmp)
749 goto tx_error_icmp; 758 goto tx_error_icmp;
750
751 dst = addr6->s6_addr32[3];
752 } 759 }
753#endif 760#endif
754 else 761 else