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

Reply via email to