Hi Javier, even using 100ms still causes problems. Maybe I should give an idea of my setup. I have 6 mesh nodes within range of each other. They all transmit TCP traffic at a constant bit rate (500Kbps in my test) to an external laptop through a mesh portal. With the current implementation and the default values, to refresh a path a burst of preq are queued and transmitted during one second. Also each PREQ is a broadcast to the all the mesh nodes. This puts a lot of unnecessary load on the mesh. I also noticed that in mesh_queue_preq() ifmsh->last_preq is not updated until the preq is sent out, which will cause more preqs to be queued if tx rate < rx rate. The spec does specify minpreqinterval to be 100ms, it also specify dot11MeshHWMPmaintenanceInterval to be 2000. "This attribute specifies the minimum interval of time (in TUs) during which a mesh STA can send only one Action frame containing PREQ element for path maintenance." With that in mind I think a path should be refreshed at that rate regardless of the path expiration time. Even in nl8022.h the refresh time is specified as follows: "* @NL80211_MESHCONF_PATH_REFRESH_TIME: how frequently to refresh mesh paths * (in milliseconds)"
The core of the change would look like this: (note: an extra variable: last_refresh_time is added to the path struct) mpath = mesh_path_lookup(target_addr, sdata); @@ -931,15 +941,20 @@ } if (mpath->flags & MESH_PATH_ACTIVE) { - if (time_after(jiffies, - mpath->exp_time - - msecs_to_jiffies(sdata->u.mesh.mshcfg.path_refresh_time)) && + if (time_after_eq(jiffies, + mpath->last_refresh_time + + msecs_to_jiffies(sdata->u.mesh.mshcfg.path_refresh_time)) && !memcmp(sdata->vif.addr, hdr->addr4, ETH_ALEN) && !(mpath->flags & MESH_PATH_RESOLVING) && !(mpath->flags & MESH_PATH_FIXED)) { mesh_queue_preq(mpath, PREQ_Q_F_START | PREQ_Q_F_REFRESH); + mpath->last_refresh_time = jiffies; } What do you think? --Fabrice _______________________________________________ Devel mailing list Devel@lists.open80211s.org http://open80211s.com/mailman/listinfo/devel