nl80211: Move peer link state definition to nl80211
These definitions need to be exposed now that we can set the peer link states via NL80211_ATTR_STA_PLINK_STATE. They were already being (opaquely) reported by NL80211_STA_INFO_PLINK_STATE. Signed-off-by: Javier Cardona <javier@cozybit.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
108697c44b
commit
57cf8043a6
@@ -973,9 +973,10 @@ enum nl80211_commands {
|
|||||||
* @NL80211_ATTR_SUPPORT_MESH_AUTH: Currently, this means the underlying driver
|
* @NL80211_ATTR_SUPPORT_MESH_AUTH: Currently, this means the underlying driver
|
||||||
* allows auth frames in a mesh to be passed to userspace for processing via
|
* allows auth frames in a mesh to be passed to userspace for processing via
|
||||||
* the @NL80211_MESH_SETUP_USERSPACE_AUTH flag.
|
* the @NL80211_MESH_SETUP_USERSPACE_AUTH flag.
|
||||||
* @NL80211_ATTR_STA_PLINK_STATE: The state of a mesh peer link. Used when
|
* @NL80211_ATTR_STA_PLINK_STATE: The state of a mesh peer link as
|
||||||
* userspace is driving the peer link management state machine.
|
* defined in &enum nl80211_plink_state. Used when userspace is
|
||||||
* @NL80211_MESH_SETUP_USERSPACE_AMPE must be enabled.
|
* driving the peer link management state machine.
|
||||||
|
* @NL80211_MESH_SETUP_USERSPACE_AMPE must be enabled.
|
||||||
*
|
*
|
||||||
* @NL80211_ATTR_WOWLAN_SUPPORTED: indicates, as part of the wiphy capabilities,
|
* @NL80211_ATTR_WOWLAN_SUPPORTED: indicates, as part of the wiphy capabilities,
|
||||||
* the supported WoWLAN triggers
|
* the supported WoWLAN triggers
|
||||||
@@ -1396,6 +1397,7 @@ enum nl80211_sta_bss_param {
|
|||||||
* @NL80211_STA_INFO_LLID: the station's mesh LLID
|
* @NL80211_STA_INFO_LLID: the station's mesh LLID
|
||||||
* @NL80211_STA_INFO_PLID: the station's mesh PLID
|
* @NL80211_STA_INFO_PLID: the station's mesh PLID
|
||||||
* @NL80211_STA_INFO_PLINK_STATE: peer link state for the station
|
* @NL80211_STA_INFO_PLINK_STATE: peer link state for the station
|
||||||
|
* (see %enum nl80211_plink_state)
|
||||||
* @NL80211_STA_INFO_RX_BITRATE: last unicast data frame rx rate, nested
|
* @NL80211_STA_INFO_RX_BITRATE: last unicast data frame rx rate, nested
|
||||||
* attribute, like NL80211_STA_INFO_TX_BITRATE.
|
* attribute, like NL80211_STA_INFO_TX_BITRATE.
|
||||||
* @NL80211_STA_INFO_BSS_PARAM: current station's view of BSS, nested attribute
|
* @NL80211_STA_INFO_BSS_PARAM: current station's view of BSS, nested attribute
|
||||||
@@ -2326,4 +2328,37 @@ enum nl80211_if_combination_attrs {
|
|||||||
MAX_NL80211_IFACE_COMB = NUM_NL80211_IFACE_COMB - 1
|
MAX_NL80211_IFACE_COMB = NUM_NL80211_IFACE_COMB - 1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum nl80211_plink_state - state of a mesh peer link finite state machine
|
||||||
|
*
|
||||||
|
* @NL80211_PLINK_LISTEN: initial state, considered the implicit
|
||||||
|
* state of non existant mesh peer links
|
||||||
|
* @NL80211_PLINK_OPN_SNT: mesh plink open frame has been sent to
|
||||||
|
* this mesh peer
|
||||||
|
* @NL80211_PLINK_OPN_RCVD: mesh plink open frame has been received
|
||||||
|
* from this mesh peer
|
||||||
|
* @NL80211_PLINK_CNF_RCVD: mesh plink confirm frame has been
|
||||||
|
* received from this mesh peer
|
||||||
|
* @NL80211_PLINK_ESTAB: mesh peer link is established
|
||||||
|
* @NL80211_PLINK_HOLDING: mesh peer link is being closed or cancelled
|
||||||
|
* @NL80211_PLINK_BLOCKED: all frames transmitted from this mesh
|
||||||
|
* plink are discarded
|
||||||
|
* @NUM_NL80211_PLINK_STATES: number of peer link states
|
||||||
|
* @MAX_NL80211_PLINK_STATES: highest numerical value of plink states
|
||||||
|
*/
|
||||||
|
enum nl80211_plink_state {
|
||||||
|
NL80211_PLINK_LISTEN,
|
||||||
|
NL80211_PLINK_OPN_SNT,
|
||||||
|
NL80211_PLINK_OPN_RCVD,
|
||||||
|
NL80211_PLINK_CNF_RCVD,
|
||||||
|
NL80211_PLINK_ESTAB,
|
||||||
|
NL80211_PLINK_HOLDING,
|
||||||
|
NL80211_PLINK_BLOCKED,
|
||||||
|
|
||||||
|
/* keep last */
|
||||||
|
NUM_NL80211_PLINK_STATES,
|
||||||
|
MAX_NL80211_PLINK_STATES = NUM_NL80211_PLINK_STATES - 1
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* __LINUX_NL80211_H */
|
#endif /* __LINUX_NL80211_H */
|
||||||
|
@@ -371,33 +371,6 @@ enum plink_actions {
|
|||||||
PLINK_ACTION_BLOCK,
|
PLINK_ACTION_BLOCK,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* enum plink_states - state of a mesh peer link finite state machine
|
|
||||||
*
|
|
||||||
* @PLINK_LISTEN: initial state, considered the implicit state of non
|
|
||||||
* existant mesh peer links
|
|
||||||
* @PLINK_OPN_SNT: mesh plink open frame has been sent to this mesh
|
|
||||||
* peer @PLINK_OPN_RCVD: mesh plink open frame has been received from
|
|
||||||
* this mesh peer
|
|
||||||
* @PLINK_CNF_RCVD: mesh plink confirm frame has been received from
|
|
||||||
* this mesh peer
|
|
||||||
* @PLINK_ESTAB: mesh peer link is established
|
|
||||||
* @PLINK_HOLDING: mesh peer link is being closed or cancelled
|
|
||||||
* @PLINK_BLOCKED: all frames transmitted from this mesh plink are
|
|
||||||
* discarded
|
|
||||||
* @PLINK_INVALID: reserved
|
|
||||||
*/
|
|
||||||
enum plink_state {
|
|
||||||
PLINK_LISTEN,
|
|
||||||
PLINK_OPN_SNT,
|
|
||||||
PLINK_OPN_RCVD,
|
|
||||||
PLINK_CNF_RCVD,
|
|
||||||
PLINK_ESTAB,
|
|
||||||
PLINK_HOLDING,
|
|
||||||
PLINK_BLOCKED,
|
|
||||||
PLINK_INVALID,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct station_parameters - station parameters
|
* struct station_parameters - station parameters
|
||||||
*
|
*
|
||||||
|
@@ -730,9 +730,9 @@ static void sta_apply_parameters(struct ieee80211_local *local,
|
|||||||
#ifdef CONFIG_MAC80211_MESH
|
#ifdef CONFIG_MAC80211_MESH
|
||||||
if (sdata->u.mesh.security & IEEE80211_MESH_SEC_SECURED)
|
if (sdata->u.mesh.security & IEEE80211_MESH_SEC_SECURED)
|
||||||
switch (params->plink_state) {
|
switch (params->plink_state) {
|
||||||
case PLINK_LISTEN:
|
case NL80211_PLINK_LISTEN:
|
||||||
case PLINK_ESTAB:
|
case NL80211_PLINK_ESTAB:
|
||||||
case PLINK_BLOCKED:
|
case NL80211_PLINK_BLOCKED:
|
||||||
sta->plink_state = params->plink_state;
|
sta->plink_state = params->plink_state;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@@ -83,7 +83,7 @@ void mesh_plink_dec_estab_count(struct ieee80211_sub_if_data *sdata)
|
|||||||
*/
|
*/
|
||||||
static inline void mesh_plink_fsm_restart(struct sta_info *sta)
|
static inline void mesh_plink_fsm_restart(struct sta_info *sta)
|
||||||
{
|
{
|
||||||
sta->plink_state = PLINK_LISTEN;
|
sta->plink_state = NL80211_PLINK_LISTEN;
|
||||||
sta->llid = sta->plid = sta->reason = 0;
|
sta->llid = sta->plid = sta->reason = 0;
|
||||||
sta->plink_retries = 0;
|
sta->plink_retries = 0;
|
||||||
}
|
}
|
||||||
@@ -126,11 +126,11 @@ static bool __mesh_plink_deactivate(struct sta_info *sta)
|
|||||||
struct ieee80211_sub_if_data *sdata = sta->sdata;
|
struct ieee80211_sub_if_data *sdata = sta->sdata;
|
||||||
bool deactivated = false;
|
bool deactivated = false;
|
||||||
|
|
||||||
if (sta->plink_state == PLINK_ESTAB) {
|
if (sta->plink_state == NL80211_PLINK_ESTAB) {
|
||||||
mesh_plink_dec_estab_count(sdata);
|
mesh_plink_dec_estab_count(sdata);
|
||||||
deactivated = true;
|
deactivated = true;
|
||||||
}
|
}
|
||||||
sta->plink_state = PLINK_BLOCKED;
|
sta->plink_state = NL80211_PLINK_BLOCKED;
|
||||||
mesh_path_flush_by_nexthop(sta);
|
mesh_path_flush_by_nexthop(sta);
|
||||||
|
|
||||||
return deactivated;
|
return deactivated;
|
||||||
@@ -268,7 +268,7 @@ void mesh_neighbour_update(u8 *hw_addr, u32 rates,
|
|||||||
sta->last_rx = jiffies;
|
sta->last_rx = jiffies;
|
||||||
sta->sta.supp_rates[local->hw.conf.channel->band] = rates;
|
sta->sta.supp_rates[local->hw.conf.channel->band] = rates;
|
||||||
if (mesh_peer_accepts_plinks(elems) &&
|
if (mesh_peer_accepts_plinks(elems) &&
|
||||||
sta->plink_state == PLINK_LISTEN &&
|
sta->plink_state == NL80211_PLINK_LISTEN &&
|
||||||
sdata->u.mesh.accepting_plinks &&
|
sdata->u.mesh.accepting_plinks &&
|
||||||
sdata->u.mesh.mshcfg.auto_open_plinks)
|
sdata->u.mesh.mshcfg.auto_open_plinks)
|
||||||
mesh_plink_open(sta);
|
mesh_plink_open(sta);
|
||||||
@@ -308,8 +308,8 @@ static void mesh_plink_timer(unsigned long data)
|
|||||||
sdata = sta->sdata;
|
sdata = sta->sdata;
|
||||||
|
|
||||||
switch (sta->plink_state) {
|
switch (sta->plink_state) {
|
||||||
case PLINK_OPN_RCVD:
|
case NL80211_PLINK_OPN_RCVD:
|
||||||
case PLINK_OPN_SNT:
|
case NL80211_PLINK_OPN_SNT:
|
||||||
/* retry timer */
|
/* retry timer */
|
||||||
if (sta->plink_retries < dot11MeshMaxRetries(sdata)) {
|
if (sta->plink_retries < dot11MeshMaxRetries(sdata)) {
|
||||||
u32 rand;
|
u32 rand;
|
||||||
@@ -328,17 +328,17 @@ static void mesh_plink_timer(unsigned long data)
|
|||||||
}
|
}
|
||||||
reason = cpu_to_le16(MESH_MAX_RETRIES);
|
reason = cpu_to_le16(MESH_MAX_RETRIES);
|
||||||
/* fall through on else */
|
/* fall through on else */
|
||||||
case PLINK_CNF_RCVD:
|
case NL80211_PLINK_CNF_RCVD:
|
||||||
/* confirm timer */
|
/* confirm timer */
|
||||||
if (!reason)
|
if (!reason)
|
||||||
reason = cpu_to_le16(MESH_CONFIRM_TIMEOUT);
|
reason = cpu_to_le16(MESH_CONFIRM_TIMEOUT);
|
||||||
sta->plink_state = PLINK_HOLDING;
|
sta->plink_state = NL80211_PLINK_HOLDING;
|
||||||
mod_plink_timer(sta, dot11MeshHoldingTimeout(sdata));
|
mod_plink_timer(sta, dot11MeshHoldingTimeout(sdata));
|
||||||
spin_unlock_bh(&sta->lock);
|
spin_unlock_bh(&sta->lock);
|
||||||
mesh_plink_frame_tx(sdata, PLINK_CLOSE, sta->sta.addr, llid, plid,
|
mesh_plink_frame_tx(sdata, PLINK_CLOSE, sta->sta.addr, llid, plid,
|
||||||
reason);
|
reason);
|
||||||
break;
|
break;
|
||||||
case PLINK_HOLDING:
|
case NL80211_PLINK_HOLDING:
|
||||||
/* holding timer */
|
/* holding timer */
|
||||||
del_timer(&sta->plink_timer);
|
del_timer(&sta->plink_timer);
|
||||||
mesh_plink_fsm_restart(sta);
|
mesh_plink_fsm_restart(sta);
|
||||||
@@ -386,11 +386,11 @@ int mesh_plink_open(struct sta_info *sta)
|
|||||||
spin_lock_bh(&sta->lock);
|
spin_lock_bh(&sta->lock);
|
||||||
get_random_bytes(&llid, 2);
|
get_random_bytes(&llid, 2);
|
||||||
sta->llid = llid;
|
sta->llid = llid;
|
||||||
if (sta->plink_state != PLINK_LISTEN) {
|
if (sta->plink_state != NL80211_PLINK_LISTEN) {
|
||||||
spin_unlock_bh(&sta->lock);
|
spin_unlock_bh(&sta->lock);
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
sta->plink_state = PLINK_OPN_SNT;
|
sta->plink_state = NL80211_PLINK_OPN_SNT;
|
||||||
mesh_plink_timer_set(sta, dot11MeshRetryTimeout(sdata));
|
mesh_plink_timer_set(sta, dot11MeshRetryTimeout(sdata));
|
||||||
spin_unlock_bh(&sta->lock);
|
spin_unlock_bh(&sta->lock);
|
||||||
mpl_dbg("Mesh plink: starting establishment with %pM\n",
|
mpl_dbg("Mesh plink: starting establishment with %pM\n",
|
||||||
@@ -407,7 +407,7 @@ void mesh_plink_block(struct sta_info *sta)
|
|||||||
|
|
||||||
spin_lock_bh(&sta->lock);
|
spin_lock_bh(&sta->lock);
|
||||||
deactivated = __mesh_plink_deactivate(sta);
|
deactivated = __mesh_plink_deactivate(sta);
|
||||||
sta->plink_state = PLINK_BLOCKED;
|
sta->plink_state = NL80211_PLINK_BLOCKED;
|
||||||
spin_unlock_bh(&sta->lock);
|
spin_unlock_bh(&sta->lock);
|
||||||
|
|
||||||
if (deactivated)
|
if (deactivated)
|
||||||
@@ -430,13 +430,13 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
__le16 plid, llid, reason;
|
__le16 plid, llid, reason;
|
||||||
#ifdef CONFIG_MAC80211_VERBOSE_MPL_DEBUG
|
#ifdef CONFIG_MAC80211_VERBOSE_MPL_DEBUG
|
||||||
static const char *mplstates[] = {
|
static const char *mplstates[] = {
|
||||||
[PLINK_LISTEN] = "LISTEN",
|
[NL80211_PLINK_LISTEN] = "LISTEN",
|
||||||
[PLINK_OPN_SNT] = "OPN-SNT",
|
[NL80211_PLINK_OPN_SNT] = "OPN-SNT",
|
||||||
[PLINK_OPN_RCVD] = "OPN-RCVD",
|
[NL80211_PLINK_OPN_RCVD] = "OPN-RCVD",
|
||||||
[PLINK_CNF_RCVD] = "CNF_RCVD",
|
[NL80211_PLINK_CNF_RCVD] = "CNF_RCVD",
|
||||||
[PLINK_ESTAB] = "ESTAB",
|
[NL80211_PLINK_ESTAB] = "ESTAB",
|
||||||
[PLINK_HOLDING] = "HOLDING",
|
[NL80211_PLINK_HOLDING] = "HOLDING",
|
||||||
[PLINK_BLOCKED] = "BLOCKED"
|
[NL80211_PLINK_BLOCKED] = "BLOCKED"
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -502,7 +502,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sta && sta->plink_state == PLINK_BLOCKED) {
|
if (sta && sta->plink_state == NL80211_PLINK_BLOCKED) {
|
||||||
rcu_read_unlock();
|
rcu_read_unlock();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -572,7 +572,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
event = CNF_ACPT;
|
event = CNF_ACPT;
|
||||||
break;
|
break;
|
||||||
case PLINK_CLOSE:
|
case PLINK_CLOSE:
|
||||||
if (sta->plink_state == PLINK_ESTAB)
|
if (sta->plink_state == NL80211_PLINK_ESTAB)
|
||||||
/* Do not check for llid or plid. This does not
|
/* Do not check for llid or plid. This does not
|
||||||
* follow the standard but since multiple plinks
|
* follow the standard but since multiple plinks
|
||||||
* per sta are not supported, it is necessary in
|
* per sta are not supported, it is necessary in
|
||||||
@@ -607,14 +607,14 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
reason = 0;
|
reason = 0;
|
||||||
switch (sta->plink_state) {
|
switch (sta->plink_state) {
|
||||||
/* spin_unlock as soon as state is updated at each case */
|
/* spin_unlock as soon as state is updated at each case */
|
||||||
case PLINK_LISTEN:
|
case NL80211_PLINK_LISTEN:
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case CLS_ACPT:
|
case CLS_ACPT:
|
||||||
mesh_plink_fsm_restart(sta);
|
mesh_plink_fsm_restart(sta);
|
||||||
spin_unlock_bh(&sta->lock);
|
spin_unlock_bh(&sta->lock);
|
||||||
break;
|
break;
|
||||||
case OPN_ACPT:
|
case OPN_ACPT:
|
||||||
sta->plink_state = PLINK_OPN_RCVD;
|
sta->plink_state = NL80211_PLINK_OPN_RCVD;
|
||||||
sta->plid = plid;
|
sta->plid = plid;
|
||||||
get_random_bytes(&llid, 2);
|
get_random_bytes(&llid, 2);
|
||||||
sta->llid = llid;
|
sta->llid = llid;
|
||||||
@@ -631,7 +631,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLINK_OPN_SNT:
|
case NL80211_PLINK_OPN_SNT:
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case OPN_RJCT:
|
case OPN_RJCT:
|
||||||
case CNF_RJCT:
|
case CNF_RJCT:
|
||||||
@@ -640,7 +640,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
if (!reason)
|
if (!reason)
|
||||||
reason = cpu_to_le16(MESH_CLOSE_RCVD);
|
reason = cpu_to_le16(MESH_CLOSE_RCVD);
|
||||||
sta->reason = reason;
|
sta->reason = reason;
|
||||||
sta->plink_state = PLINK_HOLDING;
|
sta->plink_state = NL80211_PLINK_HOLDING;
|
||||||
if (!mod_plink_timer(sta,
|
if (!mod_plink_timer(sta,
|
||||||
dot11MeshHoldingTimeout(sdata)))
|
dot11MeshHoldingTimeout(sdata)))
|
||||||
sta->ignore_plink_timer = true;
|
sta->ignore_plink_timer = true;
|
||||||
@@ -652,7 +652,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
break;
|
break;
|
||||||
case OPN_ACPT:
|
case OPN_ACPT:
|
||||||
/* retry timer is left untouched */
|
/* retry timer is left untouched */
|
||||||
sta->plink_state = PLINK_OPN_RCVD;
|
sta->plink_state = NL80211_PLINK_OPN_RCVD;
|
||||||
sta->plid = plid;
|
sta->plid = plid;
|
||||||
llid = sta->llid;
|
llid = sta->llid;
|
||||||
spin_unlock_bh(&sta->lock);
|
spin_unlock_bh(&sta->lock);
|
||||||
@@ -660,7 +660,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
plid, 0);
|
plid, 0);
|
||||||
break;
|
break;
|
||||||
case CNF_ACPT:
|
case CNF_ACPT:
|
||||||
sta->plink_state = PLINK_CNF_RCVD;
|
sta->plink_state = NL80211_PLINK_CNF_RCVD;
|
||||||
if (!mod_plink_timer(sta,
|
if (!mod_plink_timer(sta,
|
||||||
dot11MeshConfirmTimeout(sdata)))
|
dot11MeshConfirmTimeout(sdata)))
|
||||||
sta->ignore_plink_timer = true;
|
sta->ignore_plink_timer = true;
|
||||||
@@ -673,7 +673,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLINK_OPN_RCVD:
|
case NL80211_PLINK_OPN_RCVD:
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case OPN_RJCT:
|
case OPN_RJCT:
|
||||||
case CNF_RJCT:
|
case CNF_RJCT:
|
||||||
@@ -682,7 +682,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
if (!reason)
|
if (!reason)
|
||||||
reason = cpu_to_le16(MESH_CLOSE_RCVD);
|
reason = cpu_to_le16(MESH_CLOSE_RCVD);
|
||||||
sta->reason = reason;
|
sta->reason = reason;
|
||||||
sta->plink_state = PLINK_HOLDING;
|
sta->plink_state = NL80211_PLINK_HOLDING;
|
||||||
if (!mod_plink_timer(sta,
|
if (!mod_plink_timer(sta,
|
||||||
dot11MeshHoldingTimeout(sdata)))
|
dot11MeshHoldingTimeout(sdata)))
|
||||||
sta->ignore_plink_timer = true;
|
sta->ignore_plink_timer = true;
|
||||||
@@ -700,7 +700,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
break;
|
break;
|
||||||
case CNF_ACPT:
|
case CNF_ACPT:
|
||||||
del_timer(&sta->plink_timer);
|
del_timer(&sta->plink_timer);
|
||||||
sta->plink_state = PLINK_ESTAB;
|
sta->plink_state = NL80211_PLINK_ESTAB;
|
||||||
spin_unlock_bh(&sta->lock);
|
spin_unlock_bh(&sta->lock);
|
||||||
mesh_plink_inc_estab_count(sdata);
|
mesh_plink_inc_estab_count(sdata);
|
||||||
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
|
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
|
||||||
@@ -713,7 +713,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLINK_CNF_RCVD:
|
case NL80211_PLINK_CNF_RCVD:
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case OPN_RJCT:
|
case OPN_RJCT:
|
||||||
case CNF_RJCT:
|
case CNF_RJCT:
|
||||||
@@ -722,7 +722,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
if (!reason)
|
if (!reason)
|
||||||
reason = cpu_to_le16(MESH_CLOSE_RCVD);
|
reason = cpu_to_le16(MESH_CLOSE_RCVD);
|
||||||
sta->reason = reason;
|
sta->reason = reason;
|
||||||
sta->plink_state = PLINK_HOLDING;
|
sta->plink_state = NL80211_PLINK_HOLDING;
|
||||||
if (!mod_plink_timer(sta,
|
if (!mod_plink_timer(sta,
|
||||||
dot11MeshHoldingTimeout(sdata)))
|
dot11MeshHoldingTimeout(sdata)))
|
||||||
sta->ignore_plink_timer = true;
|
sta->ignore_plink_timer = true;
|
||||||
@@ -734,7 +734,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
break;
|
break;
|
||||||
case OPN_ACPT:
|
case OPN_ACPT:
|
||||||
del_timer(&sta->plink_timer);
|
del_timer(&sta->plink_timer);
|
||||||
sta->plink_state = PLINK_ESTAB;
|
sta->plink_state = NL80211_PLINK_ESTAB;
|
||||||
spin_unlock_bh(&sta->lock);
|
spin_unlock_bh(&sta->lock);
|
||||||
mesh_plink_inc_estab_count(sdata);
|
mesh_plink_inc_estab_count(sdata);
|
||||||
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
|
ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_BEACON);
|
||||||
@@ -749,13 +749,13 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PLINK_ESTAB:
|
case NL80211_PLINK_ESTAB:
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case CLS_ACPT:
|
case CLS_ACPT:
|
||||||
reason = cpu_to_le16(MESH_CLOSE_RCVD);
|
reason = cpu_to_le16(MESH_CLOSE_RCVD);
|
||||||
sta->reason = reason;
|
sta->reason = reason;
|
||||||
deactivated = __mesh_plink_deactivate(sta);
|
deactivated = __mesh_plink_deactivate(sta);
|
||||||
sta->plink_state = PLINK_HOLDING;
|
sta->plink_state = NL80211_PLINK_HOLDING;
|
||||||
llid = sta->llid;
|
llid = sta->llid;
|
||||||
mod_plink_timer(sta, dot11MeshHoldingTimeout(sdata));
|
mod_plink_timer(sta, dot11MeshHoldingTimeout(sdata));
|
||||||
spin_unlock_bh(&sta->lock);
|
spin_unlock_bh(&sta->lock);
|
||||||
@@ -775,7 +775,7 @@ void mesh_rx_plink_frame(struct ieee80211_sub_if_data *sdata, struct ieee80211_m
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PLINK_HOLDING:
|
case NL80211_PLINK_HOLDING:
|
||||||
switch (event) {
|
switch (event) {
|
||||||
case CLS_ACPT:
|
case CLS_ACPT:
|
||||||
if (del_timer(&sta->plink_timer))
|
if (del_timer(&sta->plink_timer))
|
||||||
|
@@ -490,7 +490,7 @@ ieee80211_rx_mesh_check(struct ieee80211_rx_data *rx)
|
|||||||
* establisment frame, beacon or probe, drop the frame.
|
* establisment frame, beacon or probe, drop the frame.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!rx->sta || sta_plink_state(rx->sta) != PLINK_ESTAB) {
|
if (!rx->sta || sta_plink_state(rx->sta) != NL80211_PLINK_ESTAB) {
|
||||||
struct ieee80211_mgmt *mgmt;
|
struct ieee80211_mgmt *mgmt;
|
||||||
|
|
||||||
if (!ieee80211_is_mgmt(hdr->frame_control))
|
if (!ieee80211_is_mgmt(hdr->frame_control))
|
||||||
|
@@ -277,7 +277,7 @@ struct sta_info *sta_info_alloc(struct ieee80211_sub_if_data *sdata,
|
|||||||
#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */
|
#endif /* CONFIG_MAC80211_VERBOSE_DEBUG */
|
||||||
|
|
||||||
#ifdef CONFIG_MAC80211_MESH
|
#ifdef CONFIG_MAC80211_MESH
|
||||||
sta->plink_state = PLINK_LISTEN;
|
sta->plink_state = NL80211_PLINK_LISTEN;
|
||||||
init_timer(&sta->plink_timer);
|
init_timer(&sta->plink_timer);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -318,7 +318,7 @@ struct sta_info {
|
|||||||
u8 plink_retries;
|
u8 plink_retries;
|
||||||
bool ignore_plink_timer;
|
bool ignore_plink_timer;
|
||||||
bool plink_timer_was_running;
|
bool plink_timer_was_running;
|
||||||
enum plink_state plink_state;
|
enum nl80211_plink_state plink_state;
|
||||||
u32 plink_timeout;
|
u32 plink_timeout;
|
||||||
struct timer_list plink_timer;
|
struct timer_list plink_timer;
|
||||||
#endif
|
#endif
|
||||||
@@ -336,12 +336,12 @@ struct sta_info {
|
|||||||
struct ieee80211_sta sta;
|
struct ieee80211_sta sta;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline enum plink_state sta_plink_state(struct sta_info *sta)
|
static inline enum nl80211_plink_state sta_plink_state(struct sta_info *sta)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_MAC80211_MESH
|
#ifdef CONFIG_MAC80211_MESH
|
||||||
return sta->plink_state;
|
return sta->plink_state;
|
||||||
#endif
|
#endif
|
||||||
return PLINK_LISTEN;
|
return NL80211_PLINK_LISTEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void set_sta_flags(struct sta_info *sta, const u32 flags)
|
static inline void set_sta_flags(struct sta_info *sta, const u32 flags)
|
||||||
|
@@ -2335,7 +2335,7 @@ static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info)
|
|||||||
memset(¶ms, 0, sizeof(params));
|
memset(¶ms, 0, sizeof(params));
|
||||||
|
|
||||||
params.listen_interval = -1;
|
params.listen_interval = -1;
|
||||||
params.plink_state = PLINK_INVALID;
|
params.plink_state = -1;
|
||||||
|
|
||||||
if (info->attrs[NL80211_ATTR_STA_AID])
|
if (info->attrs[NL80211_ATTR_STA_AID])
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
Reference in New Issue
Block a user