mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
mac80211: Let userspace enable and configure vendor specific path selection.
Userspace will now be allowed to toggle between the default path selection algorithm (HWMP, implemented in the kernel), and a vendor specific alternative. Also in the same patch, allow userspace to add information elements to mesh beacons. This is accordance with the Extensible Path Selection Framework specified in version 7.0 of the 802.11s draft. Signed-off-by: Javier Cardona <javier@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
24bdd9f4c9
commit
c80d545da3
12 changed files with 214 additions and 36 deletions
|
@ -50,17 +50,19 @@ const struct mesh_config default_mesh_config = {
|
|||
.min_discovery_timeout = MESH_MIN_DISCOVERY_TIMEOUT,
|
||||
};
|
||||
|
||||
const struct mesh_setup default_mesh_setup = {
|
||||
.path_sel_proto = IEEE80211_PATH_PROTOCOL_HWMP,
|
||||
.path_metric = IEEE80211_PATH_METRIC_AIRTIME,
|
||||
.vendor_ie = NULL,
|
||||
.vendor_ie_len = 0,
|
||||
};
|
||||
|
||||
int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
|
||||
struct net_device *dev,
|
||||
const u8 *mesh_id, u8 mesh_id_len,
|
||||
const struct mesh_setup *setup,
|
||||
const struct mesh_config *conf)
|
||||
{
|
||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
struct mesh_setup setup = {
|
||||
.mesh_id = mesh_id,
|
||||
.mesh_id_len = mesh_id_len,
|
||||
};
|
||||
int err;
|
||||
|
||||
BUILD_BUG_ON(IEEE80211_MAX_SSID_LEN != IEEE80211_MAX_MESH_ID_LEN);
|
||||
|
@ -73,16 +75,16 @@ int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
|
|||
if (wdev->mesh_id_len)
|
||||
return -EALREADY;
|
||||
|
||||
if (!mesh_id_len)
|
||||
if (!setup->mesh_id_len)
|
||||
return -EINVAL;
|
||||
|
||||
if (!rdev->ops->join_mesh)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
err = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, &setup);
|
||||
err = rdev->ops->join_mesh(&rdev->wiphy, dev, conf, setup);
|
||||
if (!err) {
|
||||
memcpy(wdev->ssid, mesh_id, mesh_id_len);
|
||||
wdev->mesh_id_len = mesh_id_len;
|
||||
memcpy(wdev->ssid, setup->mesh_id, setup->mesh_id_len);
|
||||
wdev->mesh_id_len = setup->mesh_id_len;
|
||||
}
|
||||
|
||||
return err;
|
||||
|
@ -90,14 +92,14 @@ int __cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
|
|||
|
||||
int cfg80211_join_mesh(struct cfg80211_registered_device *rdev,
|
||||
struct net_device *dev,
|
||||
const u8 *mesh_id, u8 mesh_id_len,
|
||||
const struct mesh_setup *setup,
|
||||
const struct mesh_config *conf)
|
||||
{
|
||||
struct wireless_dev *wdev = dev->ieee80211_ptr;
|
||||
int err;
|
||||
|
||||
wdev_lock(wdev);
|
||||
err = __cfg80211_join_mesh(rdev, dev, mesh_id, mesh_id_len, conf);
|
||||
err = __cfg80211_join_mesh(rdev, dev, setup, conf);
|
||||
wdev_unlock(wdev);
|
||||
|
||||
return err;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue