Hi Johannes, since this function was added by you, may be you can help here (commit f09603a259). ath9k_htc support max 8 STAs in AP or ADHOC mode. If more then 8 stations connected, driver will return error, but sta_info_insert_drv_state() setting it to zero. What was initial purpose of this? net/mac80211/sta_info.c: if (sdata->vif.type == NL80211_IFTYPE_ADHOC) { sdata_info(sdata, "failed to move IBSS STA %pM to state %d (%d) - keeping it anyway\n", sta->sta.addr, state + 1, err); err = 0; } Am 18.10.2014 um 09:46 schrieb Li, Hongchun: > I’m building an IBSS network using TP-Link TL-WN722N USB WiFi dongle. > > I find that it is drived by ath9k. > > > > Here is a problem I encountered. > > First, I build an IBSS network with more than 8 devices. > > For example, a network consists of 9 devices, N1, N2, …, N9. > > All devices have same WiFi module. > > > > When N9 joined network, kernel throws a warning, “Unable to move IBSS > STA MAC_ADDR to state 3 (-105)”. > > However, the network works correctly. Any node can communicate with each > other. > > > > But if I turn off one device, for example N3, the network crashes after > a few minutes. > > Ping command fails between any two devices in network. > > Get no warning/error message from kernel. > > After N3 is turned off and network crashes, I turned on N3 and network > works correctly again. > > > > I find the number 8 is an macro in device driver code: > drivers/net/wireless/ath/ath9k/htc.h > > 252 <http://lxr.free-electrons.com/source/drivers/net/wireless/ath/ath9k/htc.h?v=3.11#L252> #define ATH9K_HTC_MAX_STA <http://lxr.free-electrons.com/ident?v=3.11;i=ATH9K_HTC_MAX_STA> 8 > > It seems like that when there are more than 8 devices in network, driver > returns an error ENOBUFS(-105). > > > > But in linux kernel source: net/mac80211/sta_info.c, I found this, > > 436 > <http://lxr.free-electrons.com/source/net/mac80211/sta_info.c?v=3.11#L436> > if (sdata <http://lxr.free-electrons.com/ident?v=3.11;i=sdata>->vif.type > <http://lxr.free-electrons.com/ident?v=3.11;i=type> == > NL80211_IFTYPE_ADHOC) { > > 437 > <http://lxr.free-electrons.com/source/net/mac80211/sta_info.c?v=3.11#L437> > sdata_info > <http://lxr.free-electrons.com/ident?v=3.11;i=sdata_info>(sdata > <http://lxr.free-electrons.com/ident?v=3.11;i=sdata>, > > 438 > <http://lxr.free-electrons.com/source/net/mac80211/sta_info.c?v=3.11#L438> > "failed to move IBSS STA %pM to state %d (%d) - keeping > it anyway\n", > > 439 > <http://lxr.free-electrons.com/source/net/mac80211/sta_info.c?v=3.11#L439> > sta->sta.addr > <http://lxr.free-electrons.com/ident?v=3.11;i=addr>, state > <http://lxr.free-electrons.com/ident?v=3.11;i=state> + 1, err > <http://lxr.free-electrons.com/ident?v=3.11;i=err>); > > 440 > <http://lxr.free-electrons.com/source/net/mac80211/sta_info.c?v=3.11#L440> > err <http://lxr.free-electrons.com/ident?v=3.11;i=err> = 0; > > 441 > <http://lxr.free-electrons.com/source/net/mac80211/sta_info.c?v=3.11#L441> > } > > So when it is an ad hoc network, kernel just ignore errors from driver. > > This answers why ibss network work correctly when there are more than 8 > devices. > > > > But I cannot figure out why the network crashes after one device is > turned off. > > Does anyone have any idea how to solve this problem? > > > > Li Chun > > > > > > _______________________________________________ > ath9k-devel mailing list > ath9k-devel@xxxxxxxxxxxxxxx > https://lists.ath9k.org/mailman/listinfo/ath9k-devel > -- Regards, Oleksij
Attachment:
signature.asc
Description: OpenPGP digital signature