ip6_output.c (77d4015ba1ce22987bbf41e6469fa94cd72cb8d7) | ip6_output.c (550bab42f83308c9d6ab04a980cc4333cef1c8fa) |
---|---|
1/* 2 * IPv6 output functions 3 * Linux INET6 implementation 4 * 5 * Authors: 6 * Pedro Roque <roque@di.fc.ul.pt> 7 * 8 * Based on linux/net/ipv4/ip_output.c --- 91 unchanged lines hidden (view full) --- 100 IPV6_ADDR_SCOPE_NODELOCAL && 101 !(dev->flags & IFF_LOOPBACK)) { 102 kfree_skb(skb); 103 return 0; 104 } 105 } 106 107 rcu_read_lock_bh(); | 1/* 2 * IPv6 output functions 3 * Linux INET6 implementation 4 * 5 * Authors: 6 * Pedro Roque <roque@di.fc.ul.pt> 7 * 8 * Based on linux/net/ipv4/ip_output.c --- 91 unchanged lines hidden (view full) --- 100 IPV6_ADDR_SCOPE_NODELOCAL && 101 !(dev->flags & IFF_LOOPBACK)) { 102 kfree_skb(skb); 103 return 0; 104 } 105 } 106 107 rcu_read_lock_bh(); |
108 nexthop = rt6_nexthop((struct rt6_info *)dst, &ipv6_hdr(skb)->daddr); | 108 nexthop = rt6_nexthop((struct rt6_info *)dst); |
109 neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop); 110 if (unlikely(!neigh)) 111 neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false); 112 if (!IS_ERR(neigh)) { 113 ret = dst_neigh_output(dst, neigh, skb); 114 rcu_read_unlock_bh(); 115 return ret; 116 } --- 752 unchanged lines hidden (view full) --- 869 * has a neighbour entry that is in the INCOMPLETE 870 * state and the src address from the flow is 871 * marked as OPTIMISTIC, we release the found 872 * dst entry and replace it instead with the 873 * dst entry of the nexthop router 874 */ 875 rt = (struct rt6_info *) *dst; 876 rcu_read_lock_bh(); | 109 neigh = __ipv6_neigh_lookup_noref(dst->dev, nexthop); 110 if (unlikely(!neigh)) 111 neigh = __neigh_create(&nd_tbl, nexthop, dst->dev, false); 112 if (!IS_ERR(neigh)) { 113 ret = dst_neigh_output(dst, neigh, skb); 114 rcu_read_unlock_bh(); 115 return ret; 116 } --- 752 unchanged lines hidden (view full) --- 869 * has a neighbour entry that is in the INCOMPLETE 870 * state and the src address from the flow is 871 * marked as OPTIMISTIC, we release the found 872 * dst entry and replace it instead with the 873 * dst entry of the nexthop router 874 */ 875 rt = (struct rt6_info *) *dst; 876 rcu_read_lock_bh(); |
877 n = __ipv6_neigh_lookup_noref(rt->dst.dev, rt6_nexthop(rt, &fl6->daddr)); | 877 n = __ipv6_neigh_lookup_noref(rt->dst.dev, rt6_nexthop(rt)); |
878 err = n && !(n->nud_state & NUD_VALID) ? -EINVAL : 0; 879 rcu_read_unlock_bh(); 880 881 if (err) { 882 struct inet6_ifaddr *ifp; 883 struct flowi6 fl_gw6; 884 int redirect; 885 --- 675 unchanged lines hidden --- | 878 err = n && !(n->nud_state & NUD_VALID) ? -EINVAL : 0; 879 rcu_read_unlock_bh(); 880 881 if (err) { 882 struct inet6_ifaddr *ifp; 883 struct flowi6 fl_gw6; 884 int redirect; 885 --- 675 unchanged lines hidden --- |