diff options
author | Samuel Ortiz <sameo@linux.intel.com> | 2009-11-24 17:59:15 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-11-28 15:05:05 -0500 |
commit | 67fbb16be69d138a3b6645ec5395b487cb915c58 (patch) | |
tree | 8dde9e1c42db515a5703e3bc142279cf2280c9ae /include | |
parent | a830df0714117574fd0d5fe98477059b3e9fd5bf (diff) |
nl80211: PMKSA caching support
This is an interface to set, delete and flush PMKIDs through nl80211.
Main users would be fullmac devices which firmwares are capable of
generating the RSN IEs for the re-association requests, e.g. iwmc3200wifi.
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/ieee80211.h | 2 | ||||
-rw-r--r-- | include/linux/nl80211.h | 11 | ||||
-rw-r--r-- | include/net/cfg80211.h | 28 |
3 files changed, 41 insertions, 0 deletions
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index afa8e0ac27a7..d9724a28c0c2 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
@@ -1266,6 +1266,8 @@ enum ieee80211_sa_query_action { | |||
1266 | 1266 | ||
1267 | #define WLAN_MAX_KEY_LEN 32 | 1267 | #define WLAN_MAX_KEY_LEN 32 |
1268 | 1268 | ||
1269 | #define WLAN_PMKID_LEN 16 | ||
1270 | |||
1269 | /** | 1271 | /** |
1270 | * ieee80211_get_qos_ctl - get pointer to qos control bytes | 1272 | * ieee80211_get_qos_ctl - get pointer to qos control bytes |
1271 | * @hdr: the frame | 1273 | * @hdr: the frame |
diff --git a/include/linux/nl80211.h b/include/linux/nl80211.h index 45db17f81aa3..da8ea2e19273 100644 --- a/include/linux/nl80211.h +++ b/include/linux/nl80211.h | |||
@@ -349,6 +349,10 @@ enum nl80211_commands { | |||
349 | NL80211_CMD_GET_SURVEY, | 349 | NL80211_CMD_GET_SURVEY, |
350 | NL80211_CMD_NEW_SURVEY_RESULTS, | 350 | NL80211_CMD_NEW_SURVEY_RESULTS, |
351 | 351 | ||
352 | NL80211_CMD_SET_PMKSA, | ||
353 | NL80211_CMD_DEL_PMKSA, | ||
354 | NL80211_CMD_FLUSH_PMKSA, | ||
355 | |||
352 | /* add new commands above here */ | 356 | /* add new commands above here */ |
353 | 357 | ||
354 | /* used to define NL80211_CMD_MAX below */ | 358 | /* used to define NL80211_CMD_MAX below */ |
@@ -598,6 +602,10 @@ enum nl80211_commands { | |||
598 | * the survey response for %NL80211_CMD_GET_SURVEY, nested attribute | 602 | * the survey response for %NL80211_CMD_GET_SURVEY, nested attribute |
599 | * containing info as possible, see &enum survey_info. | 603 | * containing info as possible, see &enum survey_info. |
600 | * | 604 | * |
605 | * @NL80211_ATTR_PMKID: PMK material for PMKSA caching. | ||
606 | * @NL80211_ATTR_MAX_NUM_PMKIDS: maximum number of PMKIDs a firmware can | ||
607 | * cache, a wiphy attribute. | ||
608 | * | ||
601 | * @NL80211_ATTR_MAX: highest attribute number currently defined | 609 | * @NL80211_ATTR_MAX: highest attribute number currently defined |
602 | * @__NL80211_ATTR_AFTER_LAST: internal use | 610 | * @__NL80211_ATTR_AFTER_LAST: internal use |
603 | */ | 611 | */ |
@@ -732,6 +740,9 @@ enum nl80211_attrs { | |||
732 | 740 | ||
733 | NL80211_ATTR_SURVEY_INFO, | 741 | NL80211_ATTR_SURVEY_INFO, |
734 | 742 | ||
743 | NL80211_ATTR_PMKID, | ||
744 | NL80211_ATTR_MAX_NUM_PMKIDS, | ||
745 | |||
735 | /* add attributes here, update the policy in nl80211.c */ | 746 | /* add attributes here, update the policy in nl80211.c */ |
736 | 747 | ||
737 | __NL80211_ATTR_AFTER_LAST, | 748 | __NL80211_ATTR_AFTER_LAST, |
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index a6492e9bca97..0884b9a0f778 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h | |||
@@ -871,6 +871,19 @@ struct cfg80211_bitrate_mask { | |||
871 | u32 fixed; /* fixed bitrate, 0 == not fixed */ | 871 | u32 fixed; /* fixed bitrate, 0 == not fixed */ |
872 | u32 maxrate; /* in kbps, 0 == no limit */ | 872 | u32 maxrate; /* in kbps, 0 == no limit */ |
873 | }; | 873 | }; |
874 | /** | ||
875 | * struct cfg80211_pmksa - PMK Security Association | ||
876 | * | ||
877 | * This structure is passed to the set/del_pmksa() method for PMKSA | ||
878 | * caching. | ||
879 | * | ||
880 | * @bssid: The AP's BSSID. | ||
881 | * @pmkid: The PMK material itself. | ||
882 | */ | ||
883 | struct cfg80211_pmksa { | ||
884 | u8 *bssid; | ||
885 | u8 *pmkid; | ||
886 | }; | ||
874 | 887 | ||
875 | /** | 888 | /** |
876 | * struct cfg80211_ops - backend description for wireless configuration | 889 | * struct cfg80211_ops - backend description for wireless configuration |
@@ -976,6 +989,13 @@ struct cfg80211_bitrate_mask { | |||
976 | * @dump_survey: get site survey information. | 989 | * @dump_survey: get site survey information. |
977 | * | 990 | * |
978 | * @testmode_cmd: run a test mode command | 991 | * @testmode_cmd: run a test mode command |
992 | * | ||
993 | * @set_pmksa: Cache a PMKID for a BSSID. This is mostly useful for fullmac | ||
994 | * devices running firmwares capable of generating the (re) association | ||
995 | * RSN IE. It allows for faster roaming between WPA2 BSSIDs. | ||
996 | * @del_pmksa: Delete a cached PMKID. | ||
997 | * @flush_pmksa: Flush all cached PMKIDs. | ||
998 | * | ||
979 | */ | 999 | */ |
980 | struct cfg80211_ops { | 1000 | struct cfg80211_ops { |
981 | int (*suspend)(struct wiphy *wiphy); | 1001 | int (*suspend)(struct wiphy *wiphy); |
@@ -1097,6 +1117,12 @@ struct cfg80211_ops { | |||
1097 | int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev, | 1117 | int (*dump_survey)(struct wiphy *wiphy, struct net_device *netdev, |
1098 | int idx, struct survey_info *info); | 1118 | int idx, struct survey_info *info); |
1099 | 1119 | ||
1120 | int (*set_pmksa)(struct wiphy *wiphy, struct net_device *netdev, | ||
1121 | struct cfg80211_pmksa *pmksa); | ||
1122 | int (*del_pmksa)(struct wiphy *wiphy, struct net_device *netdev, | ||
1123 | struct cfg80211_pmksa *pmksa); | ||
1124 | int (*flush_pmksa)(struct wiphy *wiphy, struct net_device *netdev); | ||
1125 | |||
1100 | /* some temporary stuff to finish wext */ | 1126 | /* some temporary stuff to finish wext */ |
1101 | int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, | 1127 | int (*set_power_mgmt)(struct wiphy *wiphy, struct net_device *dev, |
1102 | bool enabled, int timeout); | 1128 | bool enabled, int timeout); |
@@ -1195,6 +1221,8 @@ struct wiphy { | |||
1195 | char fw_version[ETHTOOL_BUSINFO_LEN]; | 1221 | char fw_version[ETHTOOL_BUSINFO_LEN]; |
1196 | u32 hw_version; | 1222 | u32 hw_version; |
1197 | 1223 | ||
1224 | u8 max_num_pmkids; | ||
1225 | |||
1198 | /* If multiple wiphys are registered and you're handed e.g. | 1226 | /* If multiple wiphys are registered and you're handed e.g. |
1199 | * a regular netdev with assigned ieee80211_ptr, you won't | 1227 | * a regular netdev with assigned ieee80211_ptr, you won't |
1200 | * know whether it points to a wiphy your driver has registered | 1228 | * know whether it points to a wiphy your driver has registered |