With the 2.6.28.1 kernel with attached well-known AP-enable patches on an x86-64 host with AR5414 hardware, I can get hostapd 0.6.7 running [1], but both fail to see the network with scans/probes, and fail to associate with it [1] from a known-good client.
I'm using libnl 1.1 and you can assume that the kernel and hostapd are logically and well configured; there are no revealing kernel messages... Could this relate to bad packet padding or another known issue perhaps? Let me know what other information could be useful for debugging this and if [1] is known/expected. Many thanks! Daniel --- [1] But, only if I configure hostapd to not set the channel. Otherwise, is it expected I get this? # ./hostapd -dd hostapd.conf Configuration file: hostapd.conf ctrl_interface_group=0 Opening raw packet socket for ifindex 818250241 BSS count 1, BSSID mask ff:ff:ff:ff:ff:ff (0 bits) SIOCGIWRANGE: WE(compiled)=22 WE(source)=21 enc_capa=0xf wlan0: IEEE 802.11 Fetching hardware channel/rate support not supported. Flushing old station entries Deauthenticate all stations Mode: IEEE 802.11g Channel: 3 Frequency: 0 MHz Could not set channel for kernel driver wlan0: Unable to setup interface. rmdir[ctrl_interface]: No such file or directory # --- [2] ./hostapd -dd hostapd.conf Configuration file: hostapd.conf ctrl_interface_group=0 Opening raw packet socket for ifindex -966067119 BSS count 1, BSSID mask ff:ff:ff:ff:ff:ff (0 bits) SIOCGIWRANGE: WE(compiled)=22 WE(source)=21 enc_capa=0xf wlan0: IEEE 802.11 Fetching hardware channel/rate support not supported. Flushing old station entries Deauthenticate all stations Using interface wlan0 with hwaddr 00:14:85:2d:b6:xx and ssid 'initialising' SSID - hexdump_ascii(len=12): 69 6e 69 74 69 61 6c 69 73 69 6e 67 initialising PSK (ASCII passphrase) - hexdump_ascii(len=9): 61 63 63 65 73 73 6e 6f 77 accessnow PSK (from passphrase) - hexdump(len=32): 1f 29 c4 56 f5 f1 5b 2d 2e ff d5 d8 89 02 06 50 a6 65 13 b4 dd 0f 04 7f cc a4 58 e5 27 ff f7 a3 WPA: group state machine entering state GTK_INIT (VLAN-ID 0) GMK - hexdump(len=32): [REMOVED] GTK - hexdump(len=32): [REMOVED] WPA: group state machine entering state SETKEYSDONE (VLAN-ID 0) wlan0: Setup of interface done. MGMT (TX callback) ACK Wireless event: cmd=0x8b04 len=16 STA 00:16:ea:b1:cd:yy sent probe request for broadcast SSID MGMT (TX callback) ACK mgmt::proberesp cb STA 00:16:ea:b1:cd:yy sent probe request for broadcast SSID STA 00:16:ea:b1:cd:yy sent probe request for broadcast SSID MGMT (TX callback) ACK mgmt::proberesp cb mgmt::proberesp cb STA 00:16:ea:b1:cd:yy sent probe request for our SSID MGMT (TX callback) ACK mgmt::proberesp cb STA 00:16:ea:b1:cd:yy sent probe request for broadcast SSID STA 00:16:ea:b1:cd:yy sent probe request for broadcast SSID -- Daniel J Blueman
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c index 2d14255..97714f5 100644 --- a/drivers/net/wireless/ath5k/base.c +++ b/drivers/net/wireless/ath5k/base.c @@ -238,8 +238,7 @@ static int ath5k_get_tx_stats(struct ieee80211_hw *hw, struct ieee80211_tx_queue_stats *stats); static u64 ath5k_get_tsf(struct ieee80211_hw *hw); static void ath5k_reset_tsf(struct ieee80211_hw *hw); -static int ath5k_beacon_update(struct ieee80211_hw *hw, - struct sk_buff *skb); +static int ath5k_beacon_update(struct ath5k_softc *sc, struct sk_buff *skb); static void ath5k_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_bss_conf *bss_conf, @@ -504,6 +503,7 @@ ath5k_pci_probe(struct pci_dev *pdev, hw->wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) | + BIT(NL80211_IFTYPE_AP) | BIT(NL80211_IFTYPE_ADHOC) | BIT(NL80211_IFTYPE_MESH_POINT); @@ -2143,8 +2143,6 @@ ath5k_beacon_update_timers(struct ath5k_softc *sc, u64 bc_tsf) * * In IBSS mode we use a self-linked tx descriptor if possible. We enable SWBA * interrupts to detect TSF updates only. - * - * AP mode is missing. */ static void ath5k_beacon_config(struct ath5k_softc *sc) @@ -2157,7 +2155,8 @@ ath5k_beacon_config(struct ath5k_softc *sc) if (sc->opmode == NL80211_IFTYPE_STATION) { sc->imask |= AR5K_INT_BMISS; - } else if (sc->opmode == NL80211_IFTYPE_ADHOC) { + } else if (sc->opmode == NL80211_IFTYPE_ADHOC || + sc->opmode == NL80211_IFTYPE_AP) { /* * In IBSS mode we use a self-linked tx descriptor and let the * hardware send the beacons automatically. We have to load it @@ -2169,13 +2168,15 @@ ath5k_beacon_config(struct ath5k_softc *sc) sc->imask |= AR5K_INT_SWBA; - if (ath5k_hw_hasveol(ah)) { - spin_lock(&sc->block); - ath5k_beacon_send(sc); - spin_unlock(&sc->block); - } + if (sc->opmode == NL80211_IFTYPE_ADHOC) { + if (ath5k_hw_hasveol(ah)) { + spin_lock(&sc->block); + ath5k_beacon_send(sc); + spin_unlock(&sc->block); + } + } else + ath5k_beacon_update_timers(sc, -1); } - /* TODO else AP */ ath5k_hw_set_imr(ah, sc->imask); } @@ -2746,6 +2747,7 @@ static int ath5k_add_interface(struct ieee80211_hw *hw, sc->vif = conf->vif; switch (conf->type) { + case NL80211_IFTYPE_AP: case NL80211_IFTYPE_STATION: case NL80211_IFTYPE_ADHOC: case NL80211_IFTYPE_MONITOR: @@ -2809,7 +2811,7 @@ ath5k_config_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif, ret = -EIO; goto unlock; } - if (conf->bssid) { + if (conf->changed & IEEE80211_IFCC_BSSID && conf->bssid) { /* Cache for later use during resets */ memcpy(ah->ah_bssid, conf->bssid, ETH_ALEN); /* XXX: assoc id is set to 0 for now, mac80211 doesn't have @@ -2817,18 +2819,16 @@ ath5k_config_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif, ath5k_hw_set_associd(ah, ah->ah_bssid, 0); mmiowb(); } - if (conf->changed & IEEE80211_IFCC_BEACON && - vif->type == NL80211_IFTYPE_ADHOC) { + (vif->type == NL80211_IFTYPE_ADHOC || + vif->type == NL80211_IFTYPE_AP)) { struct sk_buff *beacon = ieee80211_beacon_get(hw, vif); if (!beacon) { ret = -ENOMEM; goto unlock; } - /* call old handler for now */ - ath5k_beacon_update(hw, beacon); + ath5k_beacon_update(sc, beacon); } - mutex_unlock(&sc->lock); return ath5k_reset_wake(sc); @@ -3060,19 +3060,13 @@ ath5k_reset_tsf(struct ieee80211_hw *hw) } static int -ath5k_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb) +ath5k_beacon_update(struct ath5k_softc *sc, struct sk_buff *skb) { - struct ath5k_softc *sc = hw->priv; unsigned long flags; int ret; ath5k_debug_dump_skb(sc, skb, "BC ", 1); - if (sc->opmode != NL80211_IFTYPE_ADHOC) { - ret = -EIO; - goto end; - } - spin_lock_irqsave(&sc->block, flags); ath5k_txbuf_free(sc, sc->bbuf); sc->bbuf->skb = skb; @@ -3085,7 +3079,6 @@ ath5k_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb) mmiowb(); } -end: return ret; } static void diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 855126a..1201e22 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -27,6 +27,8 @@ EXPORT_SYMBOL(wiphy_to_hw); static bool nl80211_type_check(enum nl80211_iftype type) { switch (type) { + case NL80211_IFTYPE_AP: + case NL80211_IFTYPE_AP_VLAN: case NL80211_IFTYPE_ADHOC: case NL80211_IFTYPE_STATION: case NL80211_IFTYPE_MONITOR:
_______________________________________________ ath5k-devel mailing list ath5k-devel@lists.ath5k.org https://lists.ath5k.org/mailman/listinfo/ath5k-devel