From nobody@FreeBSD.org  Wed Jan  6 22:51:06 2010
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 952C81065679
	for <freebsd-gnats-submit@FreeBSD.org>; Wed,  6 Jan 2010 22:51:06 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 843B58FC08
	for <freebsd-gnats-submit@FreeBSD.org>; Wed,  6 Jan 2010 22:51:06 +0000 (UTC)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id o06Mp5BA053989
	for <freebsd-gnats-submit@FreeBSD.org>; Wed, 6 Jan 2010 22:51:05 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id o06Mp5Mc053988;
	Wed, 6 Jan 2010 22:51:05 GMT
	(envelope-from nobody)
Message-Id: <201001062251.o06Mp5Mc053988@www.freebsd.org>
Date: Wed, 6 Jan 2010 22:51:05 GMT
From: Michael Moll <kvedulv@kvedulv.de>
To: freebsd-gnats-submit@FreeBSD.org
Subject: bsnmpd triggers kernel panic when a second cloned WLAN interface was created before starting
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         142391
>Category:       kern
>Synopsis:       [panic] bsnmpd(8) triggers kernel panic when a second cloned WLAN interface was created before starting
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    syrinx
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jan 06 23:00:11 UTC 2010
>Closed-Date:    Sun Jan 31 11:35:50 UTC 2010
>Last-Modified:  Sun Jan 31 11:40:01 UTC 2010
>Originator:     Michael Moll
>Release:        8.0-RELEASE
>Organization:
>Environment:
FreeBSD geode.kvedulv.de 8.0-RELEASE-p1 FreeBSD 8.0-RELEASE-p1 #0: Wed Jan  6 23:12:22 CET 2010     root@buildhost.kvedulv.de:/usr/obj/usr/src/sys/GEODE_DB  i386
>Description:
I use following rc.conf entries to create a wlan0 interface:

wlans_ath0="wlan0"
create_args_wlan0="wlanmode hostap mode 11g country DE channel 3 ssid Kvedulv"
ifconfig_wlan0="inet 192.168.201.1 netmask 255.255.255.0"
ipv6_ifconfig_wlan0="2001:6f8:12f2:2::1/64"

bsnmpd is running perfectly with this config.

Now let's add a second VAP:
root@geode # ifconfig wlan1 create wlandev ath0 wlanmode hostap bssid mode 11g country DE channel 3 ssid IPV6
ifconfig: SIOCS80211: Device busy
root@geode # ifconfig wlan1 inet6 2001:6f8:12f2:3::1/64
root@geode # ifconfig wlan1 up
root@geode # ifconfig wlan1
wlan1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        ether 06:0b:6b:81:d4:5b
        inet6 2001:6f8:12f2:3::1 prefixlen 64
        inet6 fe80::40b:6bff:fe81:d45b%wlan1 prefixlen 64 scopeid 0xb
        media: IEEE 802.11 Wireless Ethernet autoselect mode 11g <hostap>
        status: running
        ssid IPV6 channel 3 (2422 Mhz 11g) bssid 06:0b:6b:81:d4:5b
        regdomain ETSI country DE ecm authmode OPEN privacy OFF txpower 30
        scanvalid 60 protmode CTS wme burst dtimperiod 1 -dfs

Everything OK, until (re)starting bsnmpd:

Fatal trap 12: page fault while in kernel mode
fault virtual address   = 0x44
fault code              = supervisor read, page not present
instruction pointer     = 0x20:0xc05c9479
stack pointer           = 0x28:0xcd0e4afc
frame pointer           = 0x28:0xcd0e4b6c
code segment            = base 0x0, limit 0xfffff, type 0x1b
                        = DPL 0, pres 1, def32 1, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 1721 (bsnmpd)
[thread pid 1721 tid 100082 ]
Stopped at      sysctl_rtsock+0x4f9:    movl    0x44(%eax),%eax
db> bt
Tracing pid 1721 tid 100082 td 0xc24e86c0
sysctl_rtsock(c07f60e0,cd0e4c20,4,cd0e4bac,6,...) at sysctl_rtsock+0x4f9
sysctl_root(cd0e4bac,c24e86c0,1,0,0,...) at sysctl_root+0xc7
userland_sysctl(c24e86c0,cd0e4c18,6,0,bfbfc558,0,0,0,cd0e4c78,0) at userland_sysctl+0x126
__sysctl(c24e86c0,cd0e4cf8,c07e4c78,c24e86c0,297,...) at __sysctl+0x63
syscall(cd0e4d38) at syscall+0x194
Xint0x80_syscall() at Xint0x80_syscall+0x20
--- syscall (202, FreeBSD ELF32, __sysctl), eip = 0x281a5177, esp = 0xbfbfc48c, ebp = 0xbfbfc4c8 ---
>How-To-Repeat:
See example commands in the problem description
>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-net 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Thu Jan 7 00:06:58 UTC 2010 
Responsible-Changed-Why:  
Over to maintainer(s). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142391 
Responsible-Changed-From-To: freebsd-net->syrinx 
Responsible-Changed-By: syrinx 
Responsible-Changed-When: Fri Jan 22 15:50:57 UTC 2010 
Responsible-Changed-Why:  
Take over responsibility for this PR 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142391 

From: Shteryana Shopova <syrinx@FreeBSD.org>
To: bug-followup@FreeBSD.org, kvedulv@kvedulv.de
Cc: freebsd-net@freebsd.org, syrinx@freebsd.org
Subject: Re: kern/142391: [panic] bsnmpd(8) triggers kernel panic when a 
	second cloned WLAN interface was created before starting
Date: Fri, 22 Jan 2010 17:57:18 +0200

 --000e0ce0b7a6c6e9ea047dc2df97
 Content-Type: text/plain; charset=UTF-8
 
 Could you please try attached patch and confim it fixes the panic.
 
 On Fri, Jan 22, 2010 at 5:51 PM,  <syrinx@freebsd.org> wrote:
 > Synopsis: [panic] bsnmpd(8) triggers kernel panic when a second cloned WLAN interface was created before starting
 >
 > Responsible-Changed-From-To: freebsd-net->syrinx
 > Responsible-Changed-By: syrinx
 > Responsible-Changed-When: Fri Jan 22 15:50:57 UTC 2010
 > Responsible-Changed-Why:
 > Take over responsibility for this PR
 >
 > http://www.freebsd.org/cgi/query-pr.cgi?pr=142391
 >
 
 --000e0ce0b7a6c6e9ea047dc2df97
 Content-Type: application/octet-stream; 
 	name="ieee80211_ioctl-20100121-01.diff"
 Content-Disposition: attachment; filename="ieee80211_ioctl-20100121-01.diff"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_g4r5gnn80
 
 SW5kZXg6IG5ldC9pZi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIG5ldC9pZi5jCShyZXZpc2lvbiAyMDIyOTIp
 CisrKyBuZXQvaWYuYwkod29ya2luZyBjb3B5KQpAQCAtNzQyLDcgKzc0MiwxMyBAQAogLyoKICAq
 IFJlbW92ZSBhbnkgbXVsdGljYXN0IG5ldHdvcmsgYWRkcmVzc2VzIGZyb20gYW4gaW50ZXJmYWNl
 LgogICovCi12b2lkCisvKgorICogc3lyaW54QGZyZWVic2Qub3JnIC0gMjAxMDAxMjAgRG8gbm90
 IGV4cG9ydCB0aGlzIEFQSSBjYWxsIGZvciBub3cKKyAqIGFzIGl0IE5VTExzIHRoZSBpZm11bHRp
 YWRkciBzdHJ1Y3R1cmVzJyByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBpbnRlcmZhY2UuCisgKiBB
 bnkgZXh0ZXJuYWwgc3Vic3lzdGVtIHRoYXQgd2FudHMgdG8gcHVyZ2UgdGhlIG11bHRpY2FzdCBh
 ZGRyZXNzZXMgb24KKyAqIGFuIGludGVyZmFjZSAobmV0ODAyMTEgb25seSBmb3Igbm93KSBzaG91
 bGQgdXNlIGlmX2RlbGFsbG11bHRpIGluc3RlYWQuCisgKi8KK3N0YXRpYyB2b2lkCiBpZl9wdXJn
 ZW1hZGRycyhzdHJ1Y3QgaWZuZXQgKmlmcCkKIHsKIAlzdHJ1Y3QgaWZtdWx0aWFkZHIgKmlmbWE7
 CkBAIC0yOTM5LDYgKzI5NDUsMjIgQEAKIH0KIAogLyoKKyAqIERlbGV0ZSBhbGwgbXVsdGljYXN0
 IGdyb3VwIG1lbWJlcnNoaXAgZm9yIGFuIGludGVyZmFjZS4KKyAqIFNob3VsZCBiZSB1c2VkIHRv
 IHF1aWNrbHkgZmx1c2ggYWxsIG11bHRpY2FzdCBmaWx0ZXJzLgorICovCit2b2lkCitpZl9kZWxh
 bGxtdWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgaWZtdWx0aWFkZHIgKmlmbWE7
 CisJc3RydWN0IGlmbXVsdGlhZGRyICpuZXh0OworCisJSUZfQUREUl9MT0NLKGlmcCk7CisJVEFJ
 TFFfRk9SRUFDSF9TQUZFKGlmbWEsICZpZnAtPmlmX211bHRpYWRkcnMsIGlmbWFfbGluaywgbmV4
 dCkKKwkJaWZfZGVsbXVsdGlfbG9ja2VkKGlmcCwgaWZtYSwgMCk7CisJSUZfQUREUl9VTkxPQ0so
 aWZwKTsKK30KKworLyoKICAqIERlbGV0ZSBhIG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwIGJ5
 IGdyb3VwIG1lbWJlcnNoaXAgcG9pbnRlci4KICAqIE5ldHdvcmstbGF5ZXIgcHJvdG9jb2wgZG9t
 YWlucyBtdXN0IHVzZSB0aGlzIHJvdXRpbmUuCiAgKgpJbmRleDogbmV0L2lmX3Zhci5oCj09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT0KLS0tIG5ldC9pZl92YXIuaAkocmV2aXNpb24gMjAyMjkyKQorKysgbmV0L2lmX3Zhci5o
 CSh3b3JraW5nIGNvcHkpCkBAIC04MzAsNyArODMwLDggQEAKIHZvaWQJaWZfZGV0YWNoKHN0cnVj
 dCBpZm5ldCAqKTsKIHZvaWQJaWZfdm1vdmUoc3RydWN0IGlmbmV0ICosIHN0cnVjdCB2bmV0ICop
 Owogdm9pZAlpZl9wdXJnZWFkZHJzKHN0cnVjdCBpZm5ldCAqKTsKLXZvaWQJaWZfcHVyZ2VtYWRk
 cnMoc3RydWN0IGlmbmV0ICopOworLyogdm9pZAlpZl9wdXJnZW1hZGRycyhzdHJ1Y3QgaWZuZXQg
 Kik7ICovCit2b2lkCWlmX2RlbGFsbG11bHRpKHN0cnVjdCBpZm5ldCAqaWZwKTsKIHZvaWQJaWZf
 ZG93bihzdHJ1Y3QgaWZuZXQgKik7CiBzdHJ1Y3QgaWZtdWx0aWFkZHIgKgogCWlmX2ZpbmRtdWx0
 aShzdHJ1Y3QgaWZuZXQgKiwgc3RydWN0IHNvY2thZGRyICopOwpJbmRleDogbmV0ODAyMTEvaWVl
 ZTgwMjExX2lvY3RsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbmV0ODAyMTEvaWVlZTgwMjExX2lvY3RsLmMJ
 KHJldmlzaW9uIDIwMjI5MikKKysrIG5ldDgwMjExL2llZWU4MDIxMV9pb2N0bC5jCSh3b3JraW5n
 IGNvcHkpCkBAIC0zMTk5LDE1ICszMTk5LDE4IEBACiAJdm9pZCAqaW9jdGw7CiAKIAlJRUVFODAy
 MTFfTE9DSyhpYyk7Ci0JaWZfcHVyZ2VtYWRkcnMocGFyZW50KTsKKwlpZl9kZWxhbGxtdWx0aShw
 YXJlbnQpOwogCWlvY3RsID0gcGFyZW50LT5pZl9pb2N0bDsJLyogWFhYIFdBUiBpZl9hbGxtdWx0
 aSAqLwogCXBhcmVudC0+aWZfaW9jdGwgPSBOVUxMOwogCVRBSUxRX0ZPUkVBQ0godmFwLCAmaWMt
 PmljX3ZhcHMsIGl2X25leHQpIHsKIAkJc3RydWN0IGlmbmV0ICppZnAgPSB2YXAtPml2X2lmcDsK
 IAkJc3RydWN0IGlmbXVsdGlhZGRyICppZm1hOwogCi0JCVRBSUxRX0ZPUkVBQ0goaWZtYSwgJmlm
 cC0+aWZfbXVsdGlhZGRycywgaWZtYV9saW5rKQorCQlUQUlMUV9GT1JFQUNIKGlmbWEsICZpZnAt
 PmlmX211bHRpYWRkcnMsIGlmbWFfbGluaykgeworCQkJaWYgKGlmbWEtPmlmbWFfYWRkci0+c2Ff
 ZmFtaWx5ICE9IEFGX0xJTkspCisJCQkJY29udGludWU7CiAJCQkodm9pZCkgaWZfYWRkbXVsdGko
 cGFyZW50LCBpZm1hLT5pZm1hX2FkZHIsIE5VTEwpOworCQl9CiAJfQogCXBhcmVudC0+aWZfaW9j
 dGwgPSBpb2N0bDsKIAlpZWVlODAyMTFfcnVudGFzayhpYywgJmljLT5pY19tY2FzdF90YXNrKTsK
 --000e0ce0b7a6c6e9ea047dc2df97--

From: Kvedulv / Michael Moll <kvedulv@kvedulv.de>
To: Shteryana Shopova <syrinx@FreeBSD.org>
Cc: bug-followup@FreeBSD.org, freebsd-net@freebsd.org
Subject: Re: kern/142391: [panic] bsnmpd(8) triggers kernel panic when a
 second cloned WLAN interface was created before starting
Date: Fri, 22 Jan 2010 21:34:32 +0100

 Hello Shteryana,
 
 On Fri, Jan 22, 2010 at 05:57:18PM +0200, Shteryana Shopova wrote:
 > Could you please try attached patch and confim it fixes the panic.
 
 Fixed, no panic anymore. Thanks a lot! :)
 -- 
 Michael Moll

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/142391: commit references a PR
Date: Sun, 24 Jan 2010 16:18:13 +0000 (UTC)

 Author: syrinx
 Date: Sun Jan 24 16:17:58 2010
 New Revision: 202935
 URL: http://svn.freebsd.org/changeset/base/202935
 
 Log:
   While flushing the multicast filter of an interface, do not zero the relevant
   ifmultiaddr structures' reference to the parent interface, unless the parent
   interface is really detaching. While here, program only link layer multicast
   filters to a wlan's hardware parent interface.
   
   PR:		kern/142391, kern/142392
   Reviewed by:	sam, rpaolo, bms
   MFC after:	1 week
 
 Modified:
   head/sys/net/if.c
   head/sys/net/if_var.h
   head/sys/net80211/ieee80211_ioctl.c
 
 Modified: head/sys/net/if.c
 ==============================================================================
 --- head/sys/net/if.c	Sun Jan 24 15:12:27 2010	(r202934)
 +++ head/sys/net/if.c	Sun Jan 24 16:17:58 2010	(r202935)
 @@ -740,9 +740,10 @@ if_purgeaddrs(struct ifnet *ifp)
  }
  
  /*
 - * Remove any multicast network addresses from an interface.
 + * Remove any multicast network addresses from an interface when an ifnet
 + * is going away.
   */
 -void
 +static void
  if_purgemaddrs(struct ifnet *ifp)
  {
  	struct ifmultiaddr *ifma;
 @@ -2940,6 +2941,22 @@ if_delmulti(struct ifnet *ifp, struct so
  }
  
  /*
 + * Delete all multicast group membership for an interface.
 + * Should be used to quickly flush all multicast filters.
 + */
 +void
 +if_delallmulti(struct ifnet *ifp)
 +{
 +	struct ifmultiaddr *ifma;
 +	struct ifmultiaddr *next;
 +
 +	IF_ADDR_LOCK(ifp);
 +	TAILQ_FOREACH_SAFE(ifma, &ifp->if_multiaddrs, ifma_link, next)
 +		if_delmulti_locked(ifp, ifma, 0);
 +	IF_ADDR_UNLOCK(ifp);
 +}
 +
 +/*
   * Delete a multicast group membership by group membership pointer.
   * Network-layer protocol domains must use this routine.
   *
 
 Modified: head/sys/net/if_var.h
 ==============================================================================
 --- head/sys/net/if_var.h	Sun Jan 24 15:12:27 2010	(r202934)
 +++ head/sys/net/if_var.h	Sun Jan 24 16:17:58 2010	(r202935)
 @@ -833,7 +833,7 @@ void	if_delmulti_ifma(struct ifmultiaddr
  void	if_detach(struct ifnet *);
  void	if_vmove(struct ifnet *, struct vnet *);
  void	if_purgeaddrs(struct ifnet *);
 -void	if_purgemaddrs(struct ifnet *);
 +void	if_delallmulti(struct ifnet *);
  void	if_down(struct ifnet *);
  struct ifmultiaddr *
  	if_findmulti(struct ifnet *, struct sockaddr *);
 
 Modified: head/sys/net80211/ieee80211_ioctl.c
 ==============================================================================
 --- head/sys/net80211/ieee80211_ioctl.c	Sun Jan 24 15:12:27 2010	(r202934)
 +++ head/sys/net80211/ieee80211_ioctl.c	Sun Jan 24 16:17:58 2010	(r202935)
 @@ -3199,15 +3199,18 @@ ieee80211_ioctl_updatemulti(struct ieee8
  	void *ioctl;
  
  	IEEE80211_LOCK(ic);
 -	if_purgemaddrs(parent);
 +	if_delallmulti(parent);
  	ioctl = parent->if_ioctl;	/* XXX WAR if_allmulti */
  	parent->if_ioctl = NULL;
  	TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) {
  		struct ifnet *ifp = vap->iv_ifp;
  		struct ifmultiaddr *ifma;
  
 -		TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
 +		TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
 +			if (ifma->ifma_addr->sa_family != AF_LINK)
 +				continue;
  			(void) if_addmulti(parent, ifma->ifma_addr, NULL);
 +		}
  	}
  	parent->if_ioctl = ioctl;
  	ieee80211_runtask(ic, &ic->ic_mcast_task);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: syrinx 
State-Changed-When: Sun Jan 24 16:21:45 UTC 2010 
State-Changed-Why:  
Pathc commited to CURRENT 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142391 
State-Changed-From-To: patched->closed 
State-Changed-By: syrinx 
State-Changed-When: Sun Jan 31 11:34:40 UTC 2010 
State-Changed-Why:  
This is fixed. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=142391 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/142391: commit references a PR
Date: Sun, 31 Jan 2010 11:30:38 +0000 (UTC)

 Author: syrinx
 Date: Sun Jan 31 11:30:28 2010
 New Revision: 203274
 URL: http://svn.freebsd.org/changeset/base/203274
 
 Log:
   MFC r202935:
   While flushing the multicast filter of an interface, do not zero the relevant
   ifmultiaddr structures' reference to the parent interface, unless the parent
   interface is really detaching. While here, program only link layer multicast
   filters to a wlan's hardware parent interface.
   
   PR:		kern/142391, kern/142392
   Reviewed by:	sam, rpaulo, bms
 
 Modified:
   stable/8/sys/net/if.c
   stable/8/sys/net/if_var.h
   stable/8/sys/net80211/ieee80211_ioctl.c
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
   stable/8/sys/dev/xen/xenpci/   (props changed)
 
 Modified: stable/8/sys/net/if.c
 ==============================================================================
 --- stable/8/sys/net/if.c	Sun Jan 31 11:20:27 2010	(r203273)
 +++ stable/8/sys/net/if.c	Sun Jan 31 11:30:28 2010	(r203274)
 @@ -773,9 +773,10 @@ if_purgeaddrs(struct ifnet *ifp)
  }
  
  /*
 - * Remove any multicast network addresses from an interface.
 + * Remove any multicast network addresses from an interface when an ifnet
 + * is going away.
   */
 -void
 +static void
  if_purgemaddrs(struct ifnet *ifp)
  {
  	struct ifmultiaddr *ifma;
 @@ -3005,6 +3006,22 @@ if_delmulti(struct ifnet *ifp, struct so
  }
  
  /*
 + * Delete all multicast group membership for an interface.
 + * Should be used to quickly flush all multicast filters.
 + */
 +void
 +if_delallmulti(struct ifnet *ifp)
 +{
 +	struct ifmultiaddr *ifma;
 +	struct ifmultiaddr *next;
 +
 +	IF_ADDR_LOCK(ifp);
 +	TAILQ_FOREACH_SAFE(ifma, &ifp->if_multiaddrs, ifma_link, next)
 +		if_delmulti_locked(ifp, ifma, 0);
 +	IF_ADDR_UNLOCK(ifp);
 +}
 +
 +/*
   * Delete a multicast group membership by group membership pointer.
   * Network-layer protocol domains must use this routine.
   *
 
 Modified: stable/8/sys/net/if_var.h
 ==============================================================================
 --- stable/8/sys/net/if_var.h	Sun Jan 31 11:20:27 2010	(r203273)
 +++ stable/8/sys/net/if_var.h	Sun Jan 31 11:30:28 2010	(r203274)
 @@ -832,7 +832,7 @@ void	if_delmulti_ifma(struct ifmultiaddr
  void	if_detach(struct ifnet *);
  void	if_vmove(struct ifnet *, struct vnet *);
  void	if_purgeaddrs(struct ifnet *);
 -void	if_purgemaddrs(struct ifnet *);
 +void	if_delallmulti(struct ifnet *);
  void	if_down(struct ifnet *);
  struct ifmultiaddr *
  	if_findmulti(struct ifnet *, struct sockaddr *);
 
 Modified: stable/8/sys/net80211/ieee80211_ioctl.c
 ==============================================================================
 --- stable/8/sys/net80211/ieee80211_ioctl.c	Sun Jan 31 11:20:27 2010	(r203273)
 +++ stable/8/sys/net80211/ieee80211_ioctl.c	Sun Jan 31 11:30:28 2010	(r203274)
 @@ -3199,15 +3199,18 @@ ieee80211_ioctl_updatemulti(struct ieee8
  	void *ioctl;
  
  	IEEE80211_LOCK(ic);
 -	if_purgemaddrs(parent);
 +	if_delallmulti(parent);
  	ioctl = parent->if_ioctl;	/* XXX WAR if_allmulti */
  	parent->if_ioctl = NULL;
  	TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) {
  		struct ifnet *ifp = vap->iv_ifp;
  		struct ifmultiaddr *ifma;
  
 -		TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link)
 +		TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
 +			if (ifma->ifma_addr->sa_family != AF_LINK)
 +				continue;
  			(void) if_addmulti(parent, ifma->ifma_addr, NULL);
 +		}
  	}
  	parent->if_ioctl = ioctl;
  	ieee80211_runtask(ic, &ic->ic_mcast_task);
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
>Unformatted:
