Deleted Added
full compact
64c64
< __FBSDID("$FreeBSD: head/sys/netinet6/icmp6.c 191340 2009-04-20 22:45:21Z rwatson $");
---
> __FBSDID("$FreeBSD: head/sys/netinet6/icmp6.c 191672 2009-04-29 19:19:13Z bms $");
150,151d149
<
< mld6_init();
431a430,446
> * Check multicast group membership.
> * Note: SSM filters are not applied for ICMPv6 traffic.
> */
> if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) {
> struct ifnet *ifp;
> struct in6_multi *inm;
>
> ifp = m->m_pkthdr.rcvif;
> inm = in6m_lookup(ifp, &ip6->ip6_dst);
> if (inm == NULL) {
> IP6STAT_INC(ip6s_notmember);
> in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_discard);
> goto freeit;
> }
> }
>
> /*
618,627c633,640
< if (icmp6len < sizeof(struct mld_hdr))
< goto badlen;
< if (icmp6->icmp6_type == MLD_LISTENER_QUERY) /* XXX: ugly... */
< icmp6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_mldquery);
< else
< icmp6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_mldreport);
< if ((n = m_copym(m, 0, M_COPYALL, M_DONTWAIT)) == NULL) {
< /* give up local */
< mld6_input(m, off);
< m = NULL;
---
> case MLD_LISTENER_DONE:
> case MLDV2_LISTENER_REPORT:
> /*
> * Drop MLD traffic which is not link-local.
> * XXX Should we also sanity check that these messages
> * were directed to a link-local multicast prefix?
> */
> if (ip6->ip6_hlim != 1)
629,630c642,643
< }
< mld6_input(n, off);
---
> if (mld_input(m, off, icmp6len) != 0)
> return (IPPROTO_DONE);
634,645d646
< case MLD_LISTENER_DONE:
< icmp6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_mlddone);
< if (icmp6len < sizeof(struct mld_hdr)) /* necessary? */
< goto badlen;
< break; /* nothing to be done in kernel */
<
< case MLD_MTRACE_RESP:
< case MLD_MTRACE:
< /* XXX: these two are experimental. not officially defined. */
< /* XXX: per-interface statistics? */
< break; /* just pass it to applications */
<
2053c2054
< V_ip6stat.ip6s_delivered--;
---
> IP6STAT_DEC(ip6s_delivered);
2225c2226
< return;
---
> mld_fasttimo();
2227a2229,2235
> void
> icmp6_slowtimo(void)
> {
>
> mld_slowtimo();
> }
>