On 4/23/18 11:57 PM, Sukumar Gopalakrishnan wrote: > Get master device address from (skb->dev) and pass master to socket > lookup up function for Ipv6 Linklocal/Multicast address. > > ipv6_raw_deliver() > { > int mdif; > .. > .. > mdif = (((nexthdr == IPPROTO_PIM || nexthdr == 89 /* IPPROTO_OSPF */ > || > nexthdr == IPPROTO_ICMPV6 || nexthdr == 112 /*IPPROTO_VRRP*/) > && > (ipv6_addr_type(daddr) & > (IPV6_ADDR_MULTICAST | IPV6_ADDR_LINKLOCAL))) ? > l3mdev_master_ifindex_rcu(skb->dev) : inet6_iif(skb)); > > > sk = __raw_v6_lookup(net, sk, nexthdr, daddr, saddr, mdif, > inet6_sdif(skb)); >
Packets destined to a linklocal and mcast address stay bound to the actual ingress device as that is their scope.