Oleksij Rempel
2014-10-20 19:09:19 UTC
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-***@lists.ath9k.org
> https://lists.ath9k.org/mailman/listinfo/ath9k-devel
>
--
Regards,
Oleksij
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-***@lists.ath9k.org
> https://lists.ath9k.org/mailman/listinfo/ath9k-devel
>
--
Regards,
Oleksij