mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-03-06 19:51:13 +00:00
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next
This commit is contained in:
commit
d1f1030256
@ -3222,6 +3222,19 @@ void ieee80211_get_tkip_rx_p1k(struct ieee80211_key_conf *keyconf,
|
|||||||
void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf,
|
void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf,
|
||||||
struct sk_buff *skb, u8 *p2k);
|
struct sk_buff *skb, u8 *p2k);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ieee80211_aes_cmac_calculate_k1_k2 - calculate the AES-CMAC sub keys
|
||||||
|
*
|
||||||
|
* This function computes the two AES-CMAC sub-keys, based on the
|
||||||
|
* previously installed master key.
|
||||||
|
*
|
||||||
|
* @keyconf: the parameter passed with the set key
|
||||||
|
* @k1: a buffer to be filled with the 1st sub-key
|
||||||
|
* @k2: a buffer to be filled with the 2nd sub-key
|
||||||
|
*/
|
||||||
|
void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf,
|
||||||
|
u8 *k1, u8 *k2);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ieee80211_key_seq - key sequence counter
|
* struct ieee80211_key_seq - key sequence counter
|
||||||
*
|
*
|
||||||
|
@ -126,3 +126,20 @@ void ieee80211_aes_cmac_key_free(struct crypto_cipher *tfm)
|
|||||||
{
|
{
|
||||||
crypto_free_cipher(tfm);
|
crypto_free_cipher(tfm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ieee80211_aes_cmac_calculate_k1_k2(struct ieee80211_key_conf *keyconf,
|
||||||
|
u8 *k1, u8 *k2)
|
||||||
|
{
|
||||||
|
u8 l[AES_BLOCK_SIZE] = {};
|
||||||
|
struct ieee80211_key *key =
|
||||||
|
container_of(keyconf, struct ieee80211_key, conf);
|
||||||
|
|
||||||
|
crypto_cipher_encrypt_one(key->u.aes_cmac.tfm, l, l);
|
||||||
|
|
||||||
|
memcpy(k1, l, AES_BLOCK_SIZE);
|
||||||
|
gf_mulx(k1);
|
||||||
|
|
||||||
|
memcpy(k2, k1, AES_BLOCK_SIZE);
|
||||||
|
gf_mulx(k2);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(ieee80211_aes_cmac_calculate_k1_k2);
|
||||||
|
@ -751,7 +751,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
|
|||||||
if (comb->num_different_channels > 1)
|
if (comb->num_different_channels > 1)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
/*
|
/*
|
||||||
* WDS is currently prohibited when channel contexts are used
|
* WDS is currently prohibited when channel contexts are used
|
||||||
* because there's no clear definition of which channel WDS
|
* because there's no clear definition of which channel WDS
|
||||||
|
@ -703,8 +703,10 @@ static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
|
|||||||
ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen,
|
ieee802_11_parse_elems(mgmt->u.probe_resp.variable, len - baselen,
|
||||||
&elems);
|
&elems);
|
||||||
|
|
||||||
/* ignore beacons from secure mesh peers if our security is off */
|
/* ignore non-mesh or secure / unsecure mismatch */
|
||||||
if (elems.rsn_len && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE)
|
if ((!elems.mesh_id || !elems.mesh_config) ||
|
||||||
|
(elems.rsn && sdata->u.mesh.security == IEEE80211_MESH_SEC_NONE) ||
|
||||||
|
(!elems.rsn && sdata->u.mesh.security != IEEE80211_MESH_SEC_NONE))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (elems.ds_params && elems.ds_params_len == 1)
|
if (elems.ds_params && elems.ds_params_len == 1)
|
||||||
@ -717,8 +719,7 @@ static void ieee80211_mesh_rx_bcn_presp(struct ieee80211_sub_if_data *sdata,
|
|||||||
if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
|
if (!channel || channel->flags & IEEE80211_CHAN_DISABLED)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (elems.mesh_id && elems.mesh_config &&
|
if (mesh_matches_local(sdata, &elems))
|
||||||
mesh_matches_local(sdata, &elems))
|
|
||||||
mesh_neighbour_update(sdata, mgmt->sa, &elems);
|
mesh_neighbour_update(sdata, mgmt->sa, &elems);
|
||||||
|
|
||||||
if (ifmsh->sync_ops)
|
if (ifmsh->sync_ops)
|
||||||
|
@ -2433,7 +2433,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
|
|||||||
struct ieee80211_chanctx_conf *chanctx_conf;
|
struct ieee80211_chanctx_conf *chanctx_conf;
|
||||||
struct ieee80211_channel *chan;
|
struct ieee80211_channel *chan;
|
||||||
u32 changed = 0;
|
u32 changed = 0;
|
||||||
bool erp_valid, directed_tim = false;
|
bool erp_valid;
|
||||||
u8 erp_value = 0;
|
u8 erp_value = 0;
|
||||||
u32 ncrc;
|
u32 ncrc;
|
||||||
u8 *bssid;
|
u8 *bssid;
|
||||||
@ -2564,11 +2564,10 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
|
|||||||
len - baselen, &elems,
|
len - baselen, &elems,
|
||||||
care_about_ies, ncrc);
|
care_about_ies, ncrc);
|
||||||
|
|
||||||
if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK)
|
|
||||||
directed_tim = ieee80211_check_tim(elems.tim, elems.tim_len,
|
|
||||||
ifmgd->aid);
|
|
||||||
|
|
||||||
if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) {
|
if (local->hw.flags & IEEE80211_HW_PS_NULLFUNC_STACK) {
|
||||||
|
bool directed_tim = ieee80211_check_tim(elems.tim,
|
||||||
|
elems.tim_len,
|
||||||
|
ifmgd->aid);
|
||||||
if (directed_tim) {
|
if (directed_tim) {
|
||||||
if (local->hw.conf.dynamic_ps_timeout > 0) {
|
if (local->hw.conf.dynamic_ps_timeout > 0) {
|
||||||
if (local->hw.conf.flags & IEEE80211_CONF_PS) {
|
if (local->hw.conf.flags & IEEE80211_CONF_PS) {
|
||||||
|
@ -315,20 +315,33 @@ TRACE_EVENT(drv_bss_info_changed,
|
|||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
LOCAL_ENTRY
|
LOCAL_ENTRY
|
||||||
VIF_ENTRY
|
VIF_ENTRY
|
||||||
|
__field(u32, changed)
|
||||||
__field(bool, assoc)
|
__field(bool, assoc)
|
||||||
|
__field(bool, ibss_joined)
|
||||||
|
__field(bool, ibss_creator)
|
||||||
__field(u16, aid)
|
__field(u16, aid)
|
||||||
__field(bool, cts)
|
__field(bool, cts)
|
||||||
__field(bool, shortpre)
|
__field(bool, shortpre)
|
||||||
__field(bool, shortslot)
|
__field(bool, shortslot)
|
||||||
|
__field(bool, enable_beacon)
|
||||||
__field(u8, dtimper)
|
__field(u8, dtimper)
|
||||||
__field(u16, bcnint)
|
__field(u16, bcnint)
|
||||||
__field(u16, assoc_cap)
|
__field(u16, assoc_cap)
|
||||||
__field(u64, sync_tsf)
|
__field(u64, sync_tsf)
|
||||||
__field(u32, sync_device_ts)
|
__field(u32, sync_device_ts)
|
||||||
__field(u32, basic_rates)
|
__field(u32, basic_rates)
|
||||||
__field(u32, changed)
|
__array(int, mcast_rate, IEEE80211_NUM_BANDS)
|
||||||
__field(bool, enable_beacon)
|
|
||||||
__field(u16, ht_operation_mode)
|
__field(u16, ht_operation_mode)
|
||||||
|
__field(s32, cqm_rssi_thold);
|
||||||
|
__field(s32, cqm_rssi_hyst);
|
||||||
|
__field(u32, channel_type);
|
||||||
|
__dynamic_array(u32, arp_addr_list, info->arp_addr_cnt);
|
||||||
|
__field(bool, arp_filter_enabled);
|
||||||
|
__field(bool, qos);
|
||||||
|
__field(bool, idle);
|
||||||
|
__field(bool, ps);
|
||||||
|
__dynamic_array(u8, ssid, info->ssid_len);
|
||||||
|
__field(bool, hidden_ssid);
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
@ -337,17 +350,32 @@ TRACE_EVENT(drv_bss_info_changed,
|
|||||||
__entry->changed = changed;
|
__entry->changed = changed;
|
||||||
__entry->aid = info->aid;
|
__entry->aid = info->aid;
|
||||||
__entry->assoc = info->assoc;
|
__entry->assoc = info->assoc;
|
||||||
|
__entry->ibss_joined = info->ibss_joined;
|
||||||
|
__entry->ibss_creator = info->ibss_creator;
|
||||||
__entry->shortpre = info->use_short_preamble;
|
__entry->shortpre = info->use_short_preamble;
|
||||||
__entry->cts = info->use_cts_prot;
|
__entry->cts = info->use_cts_prot;
|
||||||
__entry->shortslot = info->use_short_slot;
|
__entry->shortslot = info->use_short_slot;
|
||||||
|
__entry->enable_beacon = info->enable_beacon;
|
||||||
__entry->dtimper = info->dtim_period;
|
__entry->dtimper = info->dtim_period;
|
||||||
__entry->bcnint = info->beacon_int;
|
__entry->bcnint = info->beacon_int;
|
||||||
__entry->assoc_cap = info->assoc_capability;
|
__entry->assoc_cap = info->assoc_capability;
|
||||||
__entry->sync_tsf = info->sync_tsf;
|
__entry->sync_tsf = info->sync_tsf;
|
||||||
__entry->sync_device_ts = info->sync_device_ts;
|
__entry->sync_device_ts = info->sync_device_ts;
|
||||||
__entry->basic_rates = info->basic_rates;
|
__entry->basic_rates = info->basic_rates;
|
||||||
__entry->enable_beacon = info->enable_beacon;
|
memcpy(__entry->mcast_rate, info->mcast_rate,
|
||||||
|
sizeof(__entry->mcast_rate));
|
||||||
__entry->ht_operation_mode = info->ht_operation_mode;
|
__entry->ht_operation_mode = info->ht_operation_mode;
|
||||||
|
__entry->cqm_rssi_thold = info->cqm_rssi_thold;
|
||||||
|
__entry->cqm_rssi_hyst = info->cqm_rssi_hyst;
|
||||||
|
__entry->channel_type = info->channel_type;
|
||||||
|
memcpy(__get_dynamic_array(arp_addr_list), info->arp_addr_list,
|
||||||
|
sizeof(u32) * info->arp_addr_cnt);
|
||||||
|
__entry->arp_filter_enabled = info->arp_filter_enabled;
|
||||||
|
__entry->qos = info->qos;
|
||||||
|
__entry->idle = info->idle;
|
||||||
|
__entry->ps = info->ps;
|
||||||
|
memcpy(__get_dynamic_array(ssid), info->ssid, info->ssid_len);
|
||||||
|
__entry->hidden_ssid = info->hidden_ssid;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk(
|
TP_printk(
|
||||||
|
@ -821,7 +821,7 @@ u32 ieee802_11_parse_elems_crc(u8 *start, size_t len,
|
|||||||
if (elem_parse_failed)
|
if (elem_parse_failed)
|
||||||
elems->parse_error = true;
|
elems->parse_error = true;
|
||||||
else
|
else
|
||||||
set_bit(id, seen_elems);
|
__set_bit(id, seen_elems);
|
||||||
|
|
||||||
left -= elen;
|
left -= elen;
|
||||||
pos += elen;
|
pos += elen;
|
||||||
|
@ -241,7 +241,7 @@ static int cfg80211_rfkill_set_block(void *data, bool blocked)
|
|||||||
case NL80211_IFTYPE_P2P_DEVICE:
|
case NL80211_IFTYPE_P2P_DEVICE:
|
||||||
if (!wdev->p2p_started)
|
if (!wdev->p2p_started)
|
||||||
break;
|
break;
|
||||||
rdev->ops->stop_p2p_device(&rdev->wiphy, wdev);
|
rdev_stop_p2p_device(rdev, wdev);
|
||||||
wdev->p2p_started = false;
|
wdev->p2p_started = false;
|
||||||
rdev->opencount--;
|
rdev->opencount--;
|
||||||
break;
|
break;
|
||||||
@ -774,7 +774,7 @@ void cfg80211_unregister_wdev(struct wireless_dev *wdev)
|
|||||||
case NL80211_IFTYPE_P2P_DEVICE:
|
case NL80211_IFTYPE_P2P_DEVICE:
|
||||||
if (!wdev->p2p_started)
|
if (!wdev->p2p_started)
|
||||||
break;
|
break;
|
||||||
rdev->ops->stop_p2p_device(&rdev->wiphy, wdev);
|
rdev_stop_p2p_device(rdev, wdev);
|
||||||
wdev->p2p_started = false;
|
wdev->p2p_started = false;
|
||||||
rdev->opencount--;
|
rdev->opencount--;
|
||||||
break;
|
break;
|
||||||
|
@ -6932,7 +6932,7 @@ static int nl80211_start_p2p_device(struct sk_buff *skb, struct genl_info *info)
|
|||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
err = rdev->ops->start_p2p_device(&rdev->wiphy, wdev);
|
err = rdev_start_p2p_device(rdev, wdev);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
@ -6958,7 +6958,7 @@ static int nl80211_stop_p2p_device(struct sk_buff *skb, struct genl_info *info)
|
|||||||
if (!wdev->p2p_started)
|
if (!wdev->p2p_started)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
rdev->ops->stop_p2p_device(&rdev->wiphy, wdev);
|
rdev_stop_p2p_device(rdev, wdev);
|
||||||
wdev->p2p_started = false;
|
wdev->p2p_started = false;
|
||||||
|
|
||||||
mutex_lock(&rdev->devlist_mtx);
|
mutex_lock(&rdev->devlist_mtx);
|
||||||
|
@ -858,4 +858,22 @@ static inline struct ieee80211_channel
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int rdev_start_p2p_device(struct cfg80211_registered_device *rdev,
|
||||||
|
struct wireless_dev *wdev)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
trace_rdev_start_p2p_device(&rdev->wiphy, wdev);
|
||||||
|
ret = rdev->ops->start_p2p_device(&rdev->wiphy, wdev);
|
||||||
|
trace_rdev_return_int(&rdev->wiphy, ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void rdev_stop_p2p_device(struct cfg80211_registered_device *rdev,
|
||||||
|
struct wireless_dev *wdev)
|
||||||
|
{
|
||||||
|
trace_rdev_stop_p2p_device(&rdev->wiphy, wdev);
|
||||||
|
rdev->ops->stop_p2p_device(&rdev->wiphy, wdev);
|
||||||
|
trace_rdev_return_void(&rdev->wiphy);
|
||||||
|
}
|
||||||
#endif /* __CFG80211_RDEV_OPS */
|
#endif /* __CFG80211_RDEV_OPS */
|
||||||
|
@ -1741,6 +1741,16 @@ TRACE_EVENT(rdev_return_channel,
|
|||||||
WIPHY_PR_ARG, CHAN_PR_ARG, __entry->type)
|
WIPHY_PR_ARG, CHAN_PR_ARG, __entry->type)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
DEFINE_EVENT(wiphy_wdev_evt, rdev_start_p2p_device,
|
||||||
|
TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
|
||||||
|
TP_ARGS(wiphy, wdev)
|
||||||
|
);
|
||||||
|
|
||||||
|
DEFINE_EVENT(wiphy_wdev_evt, rdev_stop_p2p_device,
|
||||||
|
TP_PROTO(struct wiphy *wiphy, struct wireless_dev *wdev),
|
||||||
|
TP_ARGS(wiphy, wdev)
|
||||||
|
);
|
||||||
|
|
||||||
/*************************************************************
|
/*************************************************************
|
||||||
* cfg80211 exported functions traces *
|
* cfg80211 exported functions traces *
|
||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user