示例#1
0
static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key)
{
	struct ieee80211_sub_if_data *sdata;
	struct sta_info *sta;
	int ret;

	might_sleep();

	if (!key || !key->local->ops->set_key)
		return;

	assert_key_lock(key->local);

	if (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
		return;

	sta = key->sta;
	sdata = key->sdata;

	if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
	      (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV) ||
	      (key->conf.flags & IEEE80211_KEY_FLAG_PUT_IV_SPACE)))
		increment_tailroom_need_count(sdata);

	ret = drv_set_key(key->local, DISABLE_KEY, sdata,
			  sta ? &sta->sta : NULL, &key->conf);

	if (ret)
		sdata_err(sdata,
			  "failed to remove key (%d, %pM) from hardware (%d)\n",
			  key->conf.keyidx,
			  sta ? sta->sta.addr : bcast_addr, ret);

	key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
}
static void ieee80211_key_disable_hw_accel(struct ieee80211_key *key)
{
    struct ieee80211_sub_if_data *sdata;
    struct ieee80211_sta *sta;
    int ret;

    might_sleep();

    if (!key || !key->local->ops->set_key)
        return;

    assert_key_lock(key->local);

    if (!(key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE))
        return;

    sta = get_sta_for_key(key);
    sdata = key->sdata;

    if (!((key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_MMIC) ||
            (key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV)))
        increment_tailroom_need_count(sdata);

    if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN)
        sdata = container_of(sdata->bss,
                             struct ieee80211_sub_if_data,
                             u.ap);

    ret = drv_set_key(key->local, DISABLE_KEY, sdata,
                      sta, &key->conf);

    if (ret)
        wiphy_err(key->local->hw.wiphy,
                  "failed to remove key (%d, %pM) from hardware (%d)\n",
                  key->conf.keyidx, sta ? sta->addr : bcast_addr, ret);

    key->flags &= ~KEY_FLAG_UPLOADED_TO_HARDWARE;
}