ip6_output.c (6548698f929814375fa5d62ae1db96959b0418c1) | ip6_output.c (7ad6848c7e81a603605fad3f3575841aab004eea) |
---|---|
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 --- 107 unchanged lines hidden (view full) --- 116{ 117 struct dst_entry *dst = skb_dst(skb); 118 struct net_device *dev = dst->dev; 119 120 skb->protocol = htons(ETH_P_IPV6); 121 skb->dev = dev; 122 123 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) { | 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 --- 107 unchanged lines hidden (view full) --- 116{ 117 struct dst_entry *dst = skb_dst(skb); 118 struct net_device *dev = dst->dev; 119 120 skb->protocol = htons(ETH_P_IPV6); 121 skb->dev = dev; 122 123 if (ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr)) { |
124 struct ipv6_pinfo* np = skb->sk ? inet6_sk(skb->sk) : NULL; | |
125 struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); 126 | 124 struct inet6_dev *idev = ip6_dst_idev(skb_dst(skb)); 125 |
127 if (!(dev->flags & IFF_LOOPBACK) && (!np || np->mc_loop) && | 126 if (!(dev->flags & IFF_LOOPBACK) && sk_mc_loop(skb->sk) && |
128 ((mroute6_socket(dev_net(dev)) && 129 !(IP6CB(skb)->flags & IP6SKB_FORWARDED)) || 130 ipv6_chk_mcast_addr(dev, &ipv6_hdr(skb)->daddr, 131 &ipv6_hdr(skb)->saddr))) { 132 struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); 133 134 /* Do not check for IFF_ALLMULTI; multicast routing 135 is not supported in any case. --- 1404 unchanged lines hidden --- | 127 ((mroute6_socket(dev_net(dev)) && 128 !(IP6CB(skb)->flags & IP6SKB_FORWARDED)) || 129 ipv6_chk_mcast_addr(dev, &ipv6_hdr(skb)->daddr, 130 &ipv6_hdr(skb)->saddr))) { 131 struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); 132 133 /* Do not check for IFF_ALLMULTI; multicast routing 134 is not supported in any case. --- 1404 unchanged lines hidden --- |