Return-path: Received: from mail-yx0-f174.google.com ([209.85.213.174]:53162 "EHLO mail-yx0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755833Ab1G2JOV (ORCPT ); Fri, 29 Jul 2011 05:14:21 -0400 Received: by yxi11 with SMTP id 11so2085123yxi.19 for ; Fri, 29 Jul 2011 02:14:20 -0700 (PDT) MIME-Version: 1.0 Date: Fri, 29 Jul 2011 11:14:20 +0200 Message-ID: (sfid-20110729_111434_023237_2252AE54) Subject: mac80211 + hostapd: EAPOL frames rate selection From: Helmut Schaa To: linux-wireless , hostap@lists.shmoo.com Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-wireless-owner@vger.kernel.org List-ID: Hi, I just noticed that EAPOL frames generated by hostapd during the 4-way handshake are sent out by mac80211 using a rate as selected by the rc algorithm for data frames. In my case minstrel_ht selects a MCS rate for 11n clients which sometimes results in a 4-way handshake timeout under low signal conditions. I haven't found anything in 802.11-2007 if EAPOL frames have to be sent at a low rate but I'd argue that it makes sense to send them at a basic rate just like it's done for management frames. We've got a nice little helper in mac80211 (rate_control_send_low) that allows the rc algorithm to check if a frame should be sent at a low rate. I thought I'd hook in there and just check skb->protocol to force EAPOL frames to the lowest rate. However, this didn't work out because in AP mode the EAPOL frames are injected through a monitor interface and as such skb->protocol is never initialized (ieee80211_monitor_start_xmit). The injected frames however already have an 802.11 header and therefore figuring out the ethertype of the injected frame is not as straightforward as I liked it to be :( Can I always be sure that an injected data frame (!=nullfunc) has a rfc1042 header following after the 802.11 header? Another option would be to let hostapd specify a fixed tx rate in the radiotap header (and extend mac80211 to understand it). However, since some drivers also make use of skb->protocol (to forbid aggregation for example) it sounds more sane to initialize it also for injected frames. Any other ideas? Thanks, Helmut