Hi all,
as discussed several times in this mailing list, using the ATH9K_HTC driver
(e.g. TL-WN722N) can be problematic in dense 11s network as a station limit
(=8, meaning 7 peer links plus the info about the node itself) exists. This
means that a dense network (every node can 'hear' every other node) of 8 nodes
will fully fill the neighbour tables (of the ATH9K_HTC driver) of all nodes. A
9th node, trying to connect to such a network, won't be able to establish any
connection to any other node in the network.
There was the suggestion to use black/whitelisting to solve this issue. This of
course works but is a static and therefore not really nice solution for certain
scenarios.
Because of that I'm currently working on an algorithm to solve that dynamically
(at runtime):
1) Node detects that it is isolated from the network (i.e. no peer links
established to other nodes): Done!
2) Isolated node inform others about its isolation: Done!
3) Nodes will collect neighbour information and a peer link to remove will be
examined: Done!
4) Remove the link and add a new link to the isolated node: OPEN!!!
Let's assume there is a connection between node A and B which should be removed
and a connection A to C (= the isolated node) should be established instead.
On A I know that I have to remove the link to B. To do that in the mac80211
module I did/tried this so far:
1) "sta = sta_info_get(sdata, sta_to_remove_addr);" to get the sta pointer of B.
2) " mesh_plink_fsm(sdata, sta, CLS_ACPT, WLAN_REASON_MESH_NEIGHBOUR_ISOLATED);
" to close the peer link. Both under "rcu_read_lock();".
Step 2) sends a message to B to inform about the " CLS_ACPT " event but doesn't
really remove the sta B. (Just setting the link to HOLDING).
I additionally tried to use " sta_info_destroy_addr(sdata,sta_to_remove_addr);
" but this crashes the system... :)
--> I will have to find a way to remove the sta info of B
- in mac80211
- in the driver: this can be done by calling
int drv_sta_state (driver-ops.h, mac80211)
static inline void drv_sta_remove (driver-ops.h, mac80211)
static int ath9k_htc_remove_station (ATH9K_HTC)
Can you give me any hint on how to remove the sta correctly? How to start?
Which functions to use? Or is there a good example hidden somewhere in the code
on how to do it?
Would be really cool!!!
Best regards and thanks in advance,
Marco
_______________________________________________
Devel mailing list
[email protected]
http://lists.open80211s.org/mailman/listinfo/devel