ip6_output.c (a43e61842ec55baa486d60eed2a19af67ba78b9f) | ip6_output.c (97a7a37a7b7bf3dd16f6fa13cfd7ffacd01a352f) |
---|---|
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 --- 53 unchanged lines hidden (view full) --- 62static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *skb) 63{ 64 struct dst_entry *dst = skb_dst(skb); 65 struct net_device *dev = dst->dev; 66 struct neighbour *neigh; 67 struct in6_addr *nexthop; 68 int ret; 69 | 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 --- 53 unchanged lines hidden (view full) --- 62static int ip6_finish_output2(struct net *net, struct sock *sk, struct sk_buff *skb) 63{ 64 struct dst_entry *dst = skb_dst(skb); 65 struct net_device *dev = dst->dev; 66 struct neighbour *neigh; 67 struct in6_addr *nexthop; 68 int ret; 69 |
70 skb->protocol = htons(ETH_P_IPV6); 71 skb->dev = dev; 72 | |
73 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) { 74 struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); 75 76 if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(sk) && 77 ((mroute6_socket(net, skb) && 78 !(IP6CB(skb)->flags & IP6SKB_FORWARDED)) || 79 ipv6_chk_mcast_addr(dev, &ipv6_hdr(skb)->daddr, 80 &ipv6_hdr(skb)->saddr))) { --- 68 unchanged lines hidden (view full) --- 149 return ip6_finish_output2(net, sk, skb); 150} 151 152int ip6_output(struct net *net, struct sock *sk, struct sk_buff *skb) 153{ 154 struct net_device *dev = skb_dst(skb)->dev; 155 struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); 156 | 70 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) { 71 struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); 72 73 if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(sk) && 74 ((mroute6_socket(net, skb) && 75 !(IP6CB(skb)->flags & IP6SKB_FORWARDED)) || 76 ipv6_chk_mcast_addr(dev, &ipv6_hdr(skb)->daddr, 77 &ipv6_hdr(skb)->saddr))) { --- 68 unchanged lines hidden (view full) --- 146 return ip6_finish_output2(net, sk, skb); 147} 148 149int ip6_output(struct net *net, struct sock *sk, struct sk_buff *skb) 150{ 151 struct net_device *dev = skb_dst(skb)->dev; 152 struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); 153 |
154 skb->protocol = htons(ETH_P_IPV6); 155 skb->dev = dev; 156 |
|
157 if (unlikely(idev->cnf.disable_ipv6)) { 158 IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS); 159 kfree_skb(skb); 160 return 0; 161 } 162 163 return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING, 164 net, sk, skb, NULL, dev, --- 1667 unchanged lines hidden --- | 157 if (unlikely(idev->cnf.disable_ipv6)) { 158 IP6_INC_STATS(net, idev, IPSTATS_MIB_OUTDISCARDS); 159 kfree_skb(skb); 160 return 0; 161 } 162 163 return NF_HOOK_COND(NFPROTO_IPV6, NF_INET_POST_ROUTING, 164 net, sk, skb, NULL, dev, --- 1667 unchanged lines hidden --- |