diff options
| -rw-r--r-- | net/wireless/wext-compat.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c index 29091ac9f989..584eb4826e02 100644 --- a/net/wireless/wext-compat.c +++ b/net/wireless/wext-compat.c | |||
| @@ -1401,6 +1401,47 @@ int cfg80211_wext_giwessid(struct net_device *dev, | |||
| 1401 | } | 1401 | } |
| 1402 | EXPORT_SYMBOL_GPL(cfg80211_wext_giwessid); | 1402 | EXPORT_SYMBOL_GPL(cfg80211_wext_giwessid); |
| 1403 | 1403 | ||
| 1404 | int cfg80211_wext_siwpmksa(struct net_device *dev, | ||
| 1405 | struct iw_request_info *info, | ||
| 1406 | struct iw_point *data, char *extra) | ||
| 1407 | { | ||
| 1408 | struct wireless_dev *wdev = dev->ieee80211_ptr; | ||
| 1409 | struct cfg80211_registered_device *rdev = wiphy_to_dev(wdev->wiphy); | ||
| 1410 | struct cfg80211_pmksa cfg_pmksa; | ||
| 1411 | struct iw_pmksa *pmksa = (struct iw_pmksa *)extra; | ||
| 1412 | |||
| 1413 | memset(&cfg_pmksa, 0, sizeof(struct cfg80211_pmksa)); | ||
| 1414 | |||
| 1415 | if (wdev->iftype != NL80211_IFTYPE_STATION) | ||
| 1416 | return -EINVAL; | ||
| 1417 | |||
| 1418 | cfg_pmksa.bssid = pmksa->bssid.sa_data; | ||
| 1419 | cfg_pmksa.pmkid = pmksa->pmkid; | ||
| 1420 | |||
| 1421 | switch (pmksa->cmd) { | ||
| 1422 | case IW_PMKSA_ADD: | ||
| 1423 | if (!rdev->ops->set_pmksa) | ||
| 1424 | return -EOPNOTSUPP; | ||
| 1425 | |||
| 1426 | return rdev->ops->set_pmksa(&rdev->wiphy, dev, &cfg_pmksa); | ||
| 1427 | |||
| 1428 | case IW_PMKSA_REMOVE: | ||
| 1429 | if (!rdev->ops->del_pmksa) | ||
| 1430 | return -EOPNOTSUPP; | ||
| 1431 | |||
| 1432 | return rdev->ops->del_pmksa(&rdev->wiphy, dev, &cfg_pmksa); | ||
| 1433 | |||
| 1434 | case IW_PMKSA_FLUSH: | ||
| 1435 | if (!rdev->ops->flush_pmksa) | ||
| 1436 | return -EOPNOTSUPP; | ||
| 1437 | |||
| 1438 | return rdev->ops->flush_pmksa(&rdev->wiphy, dev); | ||
| 1439 | |||
| 1440 | default: | ||
| 1441 | return -EOPNOTSUPP; | ||
| 1442 | } | ||
| 1443 | } | ||
| 1444 | |||
| 1404 | static const iw_handler cfg80211_handlers[] = { | 1445 | static const iw_handler cfg80211_handlers[] = { |
| 1405 | [IW_IOCTL_IDX(SIOCGIWNAME)] = (iw_handler) cfg80211_wext_giwname, | 1446 | [IW_IOCTL_IDX(SIOCGIWNAME)] = (iw_handler) cfg80211_wext_giwname, |
| 1406 | [IW_IOCTL_IDX(SIOCSIWFREQ)] = (iw_handler) cfg80211_wext_siwfreq, | 1447 | [IW_IOCTL_IDX(SIOCSIWFREQ)] = (iw_handler) cfg80211_wext_siwfreq, |
| @@ -1433,6 +1474,7 @@ static const iw_handler cfg80211_handlers[] = { | |||
| 1433 | [IW_IOCTL_IDX(SIOCSIWAUTH)] = (iw_handler) cfg80211_wext_siwauth, | 1474 | [IW_IOCTL_IDX(SIOCSIWAUTH)] = (iw_handler) cfg80211_wext_siwauth, |
| 1434 | [IW_IOCTL_IDX(SIOCGIWAUTH)] = (iw_handler) cfg80211_wext_giwauth, | 1475 | [IW_IOCTL_IDX(SIOCGIWAUTH)] = (iw_handler) cfg80211_wext_giwauth, |
| 1435 | [IW_IOCTL_IDX(SIOCSIWENCODEEXT)]= (iw_handler) cfg80211_wext_siwencodeext, | 1476 | [IW_IOCTL_IDX(SIOCSIWENCODEEXT)]= (iw_handler) cfg80211_wext_siwencodeext, |
| 1477 | [IW_IOCTL_IDX(SIOCSIWPMKSA)] = (iw_handler) cfg80211_wext_siwpmksa, | ||
| 1436 | }; | 1478 | }; |
| 1437 | 1479 | ||
| 1438 | const struct iw_handler_def cfg80211_wext_handler = { | 1480 | const struct iw_handler_def cfg80211_wext_handler = { |
