ip6_output.c (74d83b7eedab14e4b963a2220ff76f98fa6d4cb8) | ip6_output.c (f6b72b6217f8c24f2a54988e58af858b4e66024d) |
---|---|
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 --- 86 unchanged lines hidden (view full) --- 95 netif_rx_ni(newskb); 96 return 0; 97} 98 99static int ip6_finish_output2(struct sk_buff *skb) 100{ 101 struct dst_entry *dst = skb_dst(skb); 102 struct net_device *dev = dst->dev; | 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 --- 86 unchanged lines hidden (view full) --- 95 netif_rx_ni(newskb); 96 return 0; 97} 98 99static int ip6_finish_output2(struct sk_buff *skb) 100{ 101 struct dst_entry *dst = skb_dst(skb); 102 struct net_device *dev = dst->dev; |
103 struct neighbour *neigh; |
|
103 104 skb->protocol = htons(ETH_P_IPV6); 105 skb->dev = dev; 106 107 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) { 108 struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); 109 110 if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(skb->sk) && --- 18 unchanged lines hidden (view full) --- 129 return 0; 130 } 131 } 132 133 IP6_UPD_PO_STATS(dev_net(dev), idev, IPSTATS_MIB_OUTMCAST, 134 skb->len); 135 } 136 | 104 105 skb->protocol = htons(ETH_P_IPV6); 106 skb->dev = dev; 107 108 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) { 109 struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); 110 111 if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(skb->sk) && --- 18 unchanged lines hidden (view full) --- 130 return 0; 131 } 132 } 133 134 IP6_UPD_PO_STATS(dev_net(dev), idev, IPSTATS_MIB_OUTMCAST, 135 skb->len); 136 } 137 |
137 if (dst->hh) 138 return neigh_hh_output(dst->hh, skb); 139 else if (dst->neighbour) 140 return dst->neighbour->output(skb); 141 | 138 neigh = dst->neighbour; 139 if (neigh) { 140 struct hh_cache *hh = &neigh->hh; 141 if (hh->hh_len) 142 return neigh_hh_output(hh, skb); 143 else 144 return dst->neighbour->output(skb); 145 } |
142 IP6_INC_STATS_BH(dev_net(dst->dev), 143 ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES); 144 kfree_skb(skb); 145 return -EINVAL; 146} 147 148static int ip6_finish_output(struct sk_buff *skb) 149{ --- 1457 unchanged lines hidden --- | 146 IP6_INC_STATS_BH(dev_net(dst->dev), 147 ip6_dst_idev(dst), IPSTATS_MIB_OUTNOROUTES); 148 kfree_skb(skb); 149 return -EINVAL; 150} 151 152static int ip6_finish_output(struct sk_buff *skb) 153{ --- 1457 unchanged lines hidden --- |