From owner-freebsd-arch@FreeBSD.ORG Tue Nov 5 18:23:17 2013 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 8130580; Tue, 5 Nov 2013 18:23:17 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from bigwig.baldwin.cx (bigwig.baldwin.cx [IPv6:2001:470:1f11:75::1]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 5773F2C2E; Tue, 5 Nov 2013 18:23:17 +0000 (UTC) Received: from jhbbsd.localnet (unknown [209.249.190.124]) by bigwig.baldwin.cx (Postfix) with ESMTPSA id 57349B968; Tue, 5 Nov 2013 13:23:15 -0500 (EST) From: John Baldwin To: freebsd-arch@freebsd.org Subject: Re: service netif restart [iface] runs a wpa_supplicant twice Date: Tue, 5 Nov 2013 11:54:18 -0500 User-Agent: KMail/1.13.5 (FreeBSD/8.4-CBSD-20130906; KDE/4.5.5; amd64; ; ) References: <1382572583.1862.39.camel@eva02.mbsd> <1383419596.3253.42.camel@eva02.mbsd> In-Reply-To: MIME-Version: 1.0 Message-Id: <201311051154.18872.jhb@freebsd.org> Content-Type: Text/Plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Greylist: Sender succeeded SMTP AUTH, not delayed by milter-greylist-4.2.7 (bigwig.baldwin.cx); Tue, 05 Nov 2013 13:23:15 -0500 (EST) Cc: clutton , Adrian Chadd , "freebsd-wireless@freebsd.org" X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Nov 2013 18:23:17 -0000 On Sunday, November 03, 2013 12:56:08 pm Adrian Chadd wrote: > On 2 November 2013 12:13, clutton wrote: > > [snip] > > > What was happened? netif tries to setup wlan0 (clone, wpa, dhcp, etc), > > when wlan0 interface occurs, devd runs another copy of netif. > > Well, it sounds like we need to pick an architecture _and_ fix the > behaviour here. > > Which is: > > > * I think wpa-supplicant should always run if it's required in /etc/rc.conf; > * netif should check if devd is configured and if so, just leave the > configuration up to devd > * if it isn't running, then devd should be responsible for > dhclient/add-to-wpa-config > > What we first have to establish is whether add_interface and > remove_interface (or whatever they're called) are correctly working, > for ethernet and wifi driver types. Then, we need to ensure they can > coexist (ie, one wpa_supplicant, but with both ethernet/wifi drivers > loaded and active on their relevant interfaces.) _then_ we can break > out the "stuff devd does" out of netif and have _either_ netif (x)or > devd call this new script to setup/teardown the interface runtime > state. > > How's that sound? Note that devd just runs netif (via /etc/pccard_ether), so it's already just one script, and having netif bail if devd is running would make netif not do anything in the common case. What normally happens during boot is that '/etc/rc.d/netif start' creates wlan0 and runs wpa_supplicant via 'childif_create' making a nested call to ifn_start for wlan0. That is, childif_create autoruns /etc/rc.d/netif explicitly after it creates the device. Probably that is what should be removed. That would let devd always start wpa_supplicant via /etc/pccard_ether. I've just tested this by doing a stop/start on iwn0 (parent of wlan0, so wlan0 gets destroyed and re-created) and it started wpa_supplicant correctly. Index: head/etc/network.subr =================================================================== --- network.subr (revision 257705) +++ network.subr (working copy) @@ -1429,9 +1429,6 @@ childif_create() fi ${IFCONFIG_CMD} $i name $child && cfg=0 fi - if autoif $child; then - ifn_start $child - fi done # Create vlan interfaces I also tested vlans created via vlans_ and they should use the same fix as well. Note that this model is more consistent with how cloned_interfaces works where ifn_start is not explicitly run when each interface is created. Instead, we rely on devd kicking off pccard_ether for those as well. -- John Baldwin