Deleted Added
full compact
66c66
< __FBSDID("$FreeBSD: head/sys/netinet6/udp6_usrreq.c 190963 2009-04-12 11:53:12Z rwatson $");
---
> __FBSDID("$FreeBSD: head/sys/netinet6/udp6_usrreq.c 191672 2009-04-29 19:19:13Z bms $");
179a180
> struct ifnet *ifp;
186a188
> ifp = m->m_pkthdr.rcvif;
241a244
> struct ip6_moptions *imo;
264,269d266
< /*
< * XXX: Do not check source port of incoming datagram
< * unless inp_connect() has been called to bind the
< * fport part of the 4-tuple; the source could be
< * trying to talk to us with an ephemeral port.
< */
284a282,310
> INP_RLOCK(inp);
>
> /*
> * Handle socket delivery policy for any-source
> * and source-specific multicast. [RFC3678]
> */
> imo = inp->in6p_moptions;
> if (imo && IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) {
> struct sockaddr_in6 mcaddr;
> int blocked;
>
> bzero(&mcaddr, sizeof(struct sockaddr_in6));
> mcaddr.sin6_len = sizeof(struct sockaddr_in6);
> mcaddr.sin6_family = AF_INET6;
> mcaddr.sin6_addr = ip6->ip6_dst;
>
> blocked = im6o_mc_filter(imo, ifp,
> (struct sockaddr *)&mcaddr,
> (struct sockaddr *)&fromsa);
> if (blocked != MCAST_PASS) {
> if (blocked == MCAST_NOTGMEMBER)
> IP6STAT_INC(ip6s_notmember);
> if (blocked == MCAST_NOTSMEMBER ||
> blocked == MCAST_MUTED)
> UDPSTAT_INC(udps_filtermcast);
> INP_RUNLOCK(inp);
> continue;
> }
> }
399a426,427
> if (inp)
> INP_RUNLOCK(inp);