Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. =================================================================== RCS file: /ftp/cvs/cvsroot/src/sys/netinet/igmp.c,v rcsdiff: /ftp/cvs/cvsroot/src/sys/netinet/igmp.c,v: warning: Unknown phrases like `commitid ...;' are present. retrieving revision 1.24 retrieving revision 1.25 diff -u -p -r1.24 -r1.25 --- src/sys/netinet/igmp.c 2000/03/30 13:24:54 1.24 +++ src/sys/netinet/igmp.c 2000/06/16 20:21:26 1.25 @@ -1,4 +1,4 @@ -/* $NetBSD: igmp.c,v 1.24 2000/03/30 13:24:54 augustss Exp $ */ +/* $NetBSD: igmp.c,v 1.25 2000/06/16 20:21:26 matt Exp $ */ /* * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. @@ -62,7 +62,7 @@ #define IP_MULTICASTOPTS 0 -int igmp_timers_are_running; +int igmp_timers_are_running; static struct router_info *rti_head; void igmp_sendpkt __P((struct in_multi *, int)); @@ -164,10 +164,13 @@ igmp_input(m, va_alist) m_freem(m); return; } - if ((m->m_flags & M_EXT || m->m_len < minlen) && - (m = m_pullup(m, minlen)) == 0) { - ++igmpstat.igps_rcv_tooshort; - return; + if (((m->m_flags & M_EXT) && (ip->ip_src.s_addr & IN_CLASSA_NET) == 0) + || m->m_len < minlen) { + if ((m = m_pullup(m, minlen)) == 0) { + ++igmpstat.igps_rcv_tooshort; + return; + } + ip = mtod(m, struct ip *); } /* @@ -183,7 +186,6 @@ igmp_input(m, va_alist) } m->m_data -= iphlen; m->m_len += iphlen; - ip = mtod(m, struct ip *); switch (igmp->igmp_type) {