mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 05:30:52 +07:00
{nl,mac}80211: add dot11MeshConnectedToMeshGate to meshconf
When userspace is controlling mesh routing, it may have better knowledge about whether a mesh STA is connected to a mesh gate than the kernel mpath table. Add dot11MeshConnectedToMeshGate to the mesh config so that such applications can explicitly signal that a mesh STA is connected to a gate, which will then be advertised in the beacon. Signed-off-by: Bob Copeland <bobcopeland@fb.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
dbdaee7aa6
commit
01d66fbd5b
@ -1562,6 +1562,10 @@ struct bss_parameters {
|
||||
* @plink_timeout: If no tx activity is seen from a STA we've established
|
||||
* peering with for longer than this time (in seconds), then remove it
|
||||
* from the STA's list of peers. Default is 30 minutes.
|
||||
* @dot11MeshConnectedToMeshGate: if set to true, advertise that this STA is
|
||||
* connected to a mesh gate in mesh formation info. If false, the
|
||||
* value in mesh formation is determined by the presence of root paths
|
||||
* in the mesh path table
|
||||
*/
|
||||
struct mesh_config {
|
||||
u16 dot11MeshRetryTimeout;
|
||||
@ -1581,6 +1585,7 @@ struct mesh_config {
|
||||
u16 dot11MeshHWMPperrMinInterval;
|
||||
u16 dot11MeshHWMPnetDiameterTraversalTime;
|
||||
u8 dot11MeshHWMPRootMode;
|
||||
bool dot11MeshConnectedToMeshGate;
|
||||
u16 dot11MeshHWMPRannInterval;
|
||||
bool dot11MeshGateAnnouncementProtocol;
|
||||
bool dot11MeshForwarding;
|
||||
|
@ -3117,7 +3117,7 @@ enum nl80211_sta_bss_param {
|
||||
* some packets with an FCS error due to TA corruption. Hence this counter
|
||||
* might not be fully accurate.
|
||||
* @NL80211_STA_INFO_CONNECTED_TO_GATE: set to true if STA has a path to a
|
||||
* mesh gate
|
||||
* mesh gate (u8, 0 or 1)
|
||||
* @__NL80211_STA_INFO_AFTER_LAST: internal
|
||||
* @NL80211_STA_INFO_MAX: highest possible station info attribute
|
||||
*/
|
||||
@ -3940,6 +3940,11 @@ enum nl80211_mesh_power_mode {
|
||||
* remove it from the STA's list of peers. You may set this to 0 to disable
|
||||
* the removal of the STA. Default is 30 minutes.
|
||||
*
|
||||
* @NL80211_MESHCONF_CONNECTED_TO_GATE: If set to true then this mesh STA
|
||||
* will advertise that it is connected to a gate in the mesh formation
|
||||
* field. If left unset then the mesh formation field will only
|
||||
* advertise such if there is an active root mesh path.
|
||||
*
|
||||
* @__NL80211_MESHCONF_ATTR_AFTER_LAST: internal use
|
||||
*/
|
||||
enum nl80211_meshconf_params {
|
||||
@ -3972,6 +3977,7 @@ enum nl80211_meshconf_params {
|
||||
NL80211_MESHCONF_POWER_MODE,
|
||||
NL80211_MESHCONF_AWAKE_WINDOW,
|
||||
NL80211_MESHCONF_PLINK_TIMEOUT,
|
||||
NL80211_MESHCONF_CONNECTED_TO_GATE,
|
||||
|
||||
/* keep last */
|
||||
__NL80211_MESHCONF_ATTR_AFTER_LAST,
|
||||
|
@ -2028,6 +2028,9 @@ static int ieee80211_update_mesh_config(struct wiphy *wiphy,
|
||||
nconf->dot11MeshAwakeWindowDuration;
|
||||
if (_chg_mesh_attr(NL80211_MESHCONF_PLINK_TIMEOUT, mask))
|
||||
conf->plink_timeout = nconf->plink_timeout;
|
||||
if (_chg_mesh_attr(NL80211_MESHCONF_CONNECTED_TO_GATE, mask))
|
||||
conf->dot11MeshConnectedToMeshGate =
|
||||
nconf->dot11MeshConnectedToMeshGate;
|
||||
ieee80211_mbss_info_change_notify(sdata, BSS_CHANGED_BEACON);
|
||||
return 0;
|
||||
}
|
||||
|
@ -641,6 +641,8 @@ IEEE80211_IF_FILE(dot11MeshHWMPconfirmationInterval,
|
||||
IEEE80211_IF_FILE(power_mode, u.mesh.mshcfg.power_mode, DEC);
|
||||
IEEE80211_IF_FILE(dot11MeshAwakeWindowDuration,
|
||||
u.mesh.mshcfg.dot11MeshAwakeWindowDuration, DEC);
|
||||
IEEE80211_IF_FILE(dot11MeshConnectedToMeshGate,
|
||||
u.mesh.mshcfg.dot11MeshConnectedToMeshGate, DEC);
|
||||
#endif
|
||||
|
||||
#define DEBUGFS_ADD_MODE(name, mode) \
|
||||
@ -762,6 +764,7 @@ static void add_mesh_config(struct ieee80211_sub_if_data *sdata)
|
||||
MESHPARAMS_ADD(dot11MeshHWMPconfirmationInterval);
|
||||
MESHPARAMS_ADD(power_mode);
|
||||
MESHPARAMS_ADD(dot11MeshAwakeWindowDuration);
|
||||
MESHPARAMS_ADD(dot11MeshConnectedToMeshGate);
|
||||
#undef MESHPARAMS_ADD
|
||||
}
|
||||
#endif
|
||||
|
@ -255,7 +255,8 @@ int mesh_add_meshconf_ie(struct ieee80211_sub_if_data *sdata,
|
||||
u8 *pos, neighbors;
|
||||
u8 meshconf_len = sizeof(struct ieee80211_meshconf_ie);
|
||||
bool is_connected_to_gate = ifmsh->num_gates > 0 ||
|
||||
ifmsh->mshcfg.dot11MeshGateAnnouncementProtocol;
|
||||
ifmsh->mshcfg.dot11MeshGateAnnouncementProtocol ||
|
||||
ifmsh->mshcfg.dot11MeshConnectedToMeshGate;
|
||||
|
||||
if (skb_tailroom(skb) < 2 + meshconf_len)
|
||||
return -ENOMEM;
|
||||
|
@ -6275,7 +6275,9 @@ static int nl80211_get_mesh_config(struct sk_buff *skb,
|
||||
nla_put_u16(msg, NL80211_MESHCONF_AWAKE_WINDOW,
|
||||
cur_params.dot11MeshAwakeWindowDuration) ||
|
||||
nla_put_u32(msg, NL80211_MESHCONF_PLINK_TIMEOUT,
|
||||
cur_params.plink_timeout))
|
||||
cur_params.plink_timeout) ||
|
||||
nla_put_u8(msg, NL80211_MESHCONF_CONNECTED_TO_GATE,
|
||||
cur_params.dot11MeshConnectedToMeshGate))
|
||||
goto nla_put_failure;
|
||||
nla_nest_end(msg, pinfoattr);
|
||||
genlmsg_end(msg, hdr);
|
||||
@ -6332,6 +6334,7 @@ nl80211_meshconf_params_policy[NL80211_MESHCONF_ATTR_MAX+1] = {
|
||||
NL80211_MESH_POWER_MAX),
|
||||
[NL80211_MESHCONF_AWAKE_WINDOW] = { .type = NLA_U16 },
|
||||
[NL80211_MESHCONF_PLINK_TIMEOUT] = { .type = NLA_U32 },
|
||||
[NL80211_MESHCONF_CONNECTED_TO_GATE] = NLA_POLICY_RANGE(NLA_U8, 0, 1),
|
||||
};
|
||||
|
||||
static const struct nla_policy
|
||||
@ -6443,6 +6446,9 @@ do { \
|
||||
FILL_IN_MESH_PARAM_IF_SET(tb, cfg, rssi_threshold, mask,
|
||||
NL80211_MESHCONF_RSSI_THRESHOLD,
|
||||
nla_get_s32);
|
||||
FILL_IN_MESH_PARAM_IF_SET(tb, cfg, dot11MeshConnectedToMeshGate, mask,
|
||||
NL80211_MESHCONF_CONNECTED_TO_GATE,
|
||||
nla_get_u8);
|
||||
/*
|
||||
* Check HT operation mode based on
|
||||
* IEEE 802.11-2016 9.4.2.57 HT Operation element.
|
||||
|
Loading…
Reference in New Issue
Block a user