From owner-freebsd-current@FreeBSD.ORG Wed Sep 23 16:22:15 2009 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 52337106566C for ; Wed, 23 Sep 2009 16:22:15 +0000 (UTC) (envelope-from dhorn2000@gmail.com) Received: from mail-yx0-f171.google.com (mail-yx0-f171.google.com [209.85.210.171]) by mx1.freebsd.org (Postfix) with ESMTP id 08EB68FC08 for ; Wed, 23 Sep 2009 16:22:14 +0000 (UTC) Received: by yxe1 with SMTP id 1so1043632yxe.3 for ; Wed, 23 Sep 2009 09:22:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:date:message-id:subject :from:to:content-type; bh=omxDVBMCvQqA+Xw/K1Pru3C7xdfKUNqgc2euMx02VdM=; b=xDVI0O7Krn0FGs+CLCcDQJJsOr7IddiWwoZWW3BUyAQ4QHPoEF+pYpP25y3NABq8ke mH7OqfIuSTdkT6q7ZQlthsifQ5d00zCjD3Ys7I6ljUKgOw9iDYNQWA5Mekob/G4T59mN 1ACLssUeKGod2vtf/XMiQUUkFWP8pf0kwrSSw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=h+mvcSsv/giZR55axjswcaTQ4LT+us56YfVhxcLMggRXXhIwZ5zHPYuPsgOZEZKe2X HoqSLoJbRMuIrv+QNm158ynpX0i5QgTEBV05RfMy/XsYda/OeoYkzidQTq2cFiQ5+wWo qhHVdlLJ/4ykf9h4OnXxTI06v3ZUEUi3QMvJc= MIME-Version: 1.0 Received: by 10.101.165.2 with SMTP id s2mr2744636ano.16.1253722933482; Wed, 23 Sep 2009 09:22:13 -0700 (PDT) Date: Wed, 23 Sep 2009 12:22:13 -0400 Message-ID: <25ff90d60909230922h22db6493u525cad33a047ccc@mail.gmail.com> From: David Horn To: freebsd-current@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 Subject: lagg + wlan0 boot timing (EBUSY) X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 23 Sep 2009 16:22:15 -0000 Tracking 8/stable branch on this particular machine (although I do have access to -current for testing as needed) uname -a: FreeBSD lagg 8.0-RC1 FreeBSD 8.0-RC1 #11 r197417: Wed Sep 23 01:05:15 EDT 2009 root@lagg:/usr/obj/usr/src/sys/GENERIC amd64 I have been trying to track down a problem with my lagg connection sometimes not properly enabling wlan as fallback on boot. It would work properly about 60% of the time. The other times, it would fail with SIOCSLAGGPORT: Device busy Here is the relevant rc.conf entries: ifconfig_bfe0="up" wlans_iwn0="wlan0" ifconfig_wlan0="WPA" ifconfig_iwn0="ether 00:1c:23:98:2c:5d" cloned_interfaces="lagg0" ipv6_network_interfaces="lagg0" ifconfig_lagg0="laggproto failover laggport bfe0 laggport wlan0 DHCP" ipv6_enable="YES" So, I turned on some logging of all ifconfig commands with timestamps and stdout/stderr/returncode, and noticed this: Wed Sep 23 01:39:56 EDT 2009 ifconfig: lagg0 create ; ;; Wed Sep 23 01:39:56 EDT 2009 lagg0 rc='0' end. Wed Sep 23 01:39:56 EDT 2009 ifconfig: -l ; iwn0 bfe0 fwe0 fwip0 lo0 lagg0 ;; Wed Sep 23 01:39:56 EDT 2009 -l rc='0' end. Wed Sep 23 01:39:56 EDT 2009 ifconfig: -l ; iwn0 bfe0 fwe0 fwip0 lo0 lagg0 ;; Wed Sep 23 01:39:56 EDT 2009 -l rc='0' end. Wed Sep 23 01:39:56 EDT 2009 ifconfig: lo0 inet 127.0.0.1 ; ;; Wed Sep 23 01:39:56 EDT 2009 lo0 rc='0' end. Wed Sep 23 01:39:56 EDT 2009 ifconfig: lo0 up ; ;; Wed Sep 23 01:39:56 EDT 2009 lo0 rc='0' end. Wed Sep 23 01:39:56 EDT 2009 ifconfig: iwn0 ether 00:1c:23:98:2c:5d ; ;; Wed Sep 23 01:39:56 EDT 2009 iwn0 rc='0' end. Wed Sep 23 01:39:56 EDT 2009 ifconfig: iwn0 up ; ;; Wed Sep 23 01:39:56 EDT 2009 iwn0 rc='0' end. Wed Sep 23 01:39:56 EDT 2009 ifconfig: wlan0 create wlandev iwn0 ; ;; Wed Sep 23 01:39:56 EDT 2009 wlan0 rc='0' end. Wed Sep 23 01:39:56 EDT 2009 ifconfig: wlan0 ; wlan0: flags=8802 metric 0 mtu 1500 ether 00:1c:23:98:2c:5d media: IEEE 802.11 Wireless Ethernet autoselect (autoselect) status: no carrier ssid "" channel 1 (2412 Mhz 11b) country US authmode OPEN privacy OFF txpower 14 bmiss 10 scanvalid 60 wme bintval 0 ;; Wed Sep 23 01:39:56 EDT 2009 wlan0 rc='0' end. Wed Sep 23 01:39:57 EDT 2009 ifconfig: lagg0 laggproto failover laggport bfe0 laggport wlan0 ; ifconfig.real: SIOCSLAGGPORT: Device busy ;; Wed Sep 23 01:39:57 EDT 2009 lagg0 rc='1' end. So, I started looking at the /sys/net/if_lagg.c source, and found the EBUSY response cases: This one /* New lagg port has to be in an idle state */ if (ifp->if_drv_flags & IFF_DRV_OACTIVE) return (EBUSY); seems to be the culprit, but unfortunately, I'm not familiar enough with the code to take this much further. I did build a kernel without this check, and everything seems to be fixed, but this is obviously not a real fix to the problem. So, I would say the fact that wpa_supplicant is talking to wlan0 (trying to scan/associate/auth) while lagg is trying to add wlan0 to the portlist is the timing issue. I confirmed this behavior as follows: ifconfig wlan0 destroy ifconfig lagg0 destroy ifconfig lagg0 create ifconfig wlan0 create wlandev iwn0 & ; ifconfig lagg0 laggproto failover laggport bfe0 laggport wlan0 results in: ifconfig: SIOCSLAGGPORT: Device busy Someone more clueful than me know of a correct way to fix this contention issue ? Want me to file a PR for tracking purposes ? Thanks in advance. --Dave H