From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from sirokuusama.dnainternet.net ([83.102.40.133]:37022 "EHLO sirokuusama.dnainternet.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752495AbZHFTeI convert rfc822-to-8bit (ORCPT ); Thu, 6 Aug 2009 15:34:08 -0400 Message-ID: <20090806223406.27393zuzztewms74@hayate.sektori.org> Date: Thu, 06 Aug 2009 22:34:06 +0300 From: "Jussi Kivilinna" To: "Johannes Berg" Cc: linux-wireless@vger.kernel.org, linville@tuxdriver.com, "Jouni Malinen" Subject: Re: [PATCH] rndis_wlan: wait association to complete References: <20090806181746.31308.15687.stgit@fate.lan> <1249584385.28278.124.camel@johannes.local> In-Reply-To: <1249584385.28278.124.camel@johannes.local> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; DelSp=Yes format=flowed Sender: linux-wireless-owner@vger.kernel.org List-ID: Quoting "Johannes Berg" : > On Thu, 2009-08-06 at 21:17 +0300, Jussi Kivilinna wrote: >> Fix WPA authentication problems by waiting to association to complete. >> Otherwise userspace (wpa_supplicant) receives authentication packets before >> association events from driver. > >> + /* If we return now, userspace would get association events too late >> + * (after receiving first packets from access point). This causes >> + * WPA authentication to fail. > > This is a bit weird, shouldn't you just send the event later then? > rndis_wlan bases on rndis_host/usbnet. Problem is that rndis_host uses polling for rndis_command() results to avoid more complex interrupt based solution. Because rndis_host and therefore rndis_wlan doesn't handle interrupts on command channel, rndis_wlan knows about completed association too late. 'Too late' means here that device starts receiving packets from AP, which end up ignored because userspace thinks device isn't assosiated yet (I think). So this patch adds waiting in set_essid() and active polling for association completion in worker. Real fix would probably be to hold on data channel until association is complete, but that would mean touching usbnet/rndis_host little bit too much than I'd like to.