HS 2.0R2 AP: Add definition and helper function for WFA RADIUS VSA

These changes make it easier to add WFA vendor specific attributes
to RADIUS messages.

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2012-11-21 17:03:15 +02:00 committed by Jouni Malinen
parent 3fb17a9530
commit 0dd100fb40
2 changed files with 39 additions and 0 deletions

View file

@ -1220,6 +1220,33 @@ int radius_msg_add_mppe_keys(struct radius_msg *msg,
} }
int radius_msg_add_wfa(struct radius_msg *msg, u8 subtype, const u8 *data,
size_t len)
{
struct radius_attr_hdr *attr;
u8 *buf, *pos;
size_t alen;
alen = 4 + 2 + len;
buf = os_malloc(alen);
if (buf == NULL)
return 0;
pos = buf;
WPA_PUT_BE32(pos, RADIUS_VENDOR_ID_WFA);
pos += 4;
*pos++ = subtype;
*pos++ = 2 + len;
os_memcpy(pos, data, len);
attr = radius_msg_add_attr(msg, RADIUS_ATTR_VENDOR_SPECIFIC,
buf, alen);
os_free(buf);
if (attr == NULL)
return 0;
return 1;
}
/* Add User-Password attribute to a RADIUS message and encrypt it as specified /* Add User-Password attribute to a RADIUS message and encrypt it as specified
* in RFC 2865, Chap. 5.2 */ * in RFC 2865, Chap. 5.2 */
struct radius_attr_hdr * struct radius_attr_hdr *

View file

@ -163,6 +163,16 @@ enum { RADIUS_VENDOR_ATTR_MS_MPPE_SEND_KEY = 16,
RADIUS_VENDOR_ATTR_MS_MPPE_RECV_KEY = 17 RADIUS_VENDOR_ATTR_MS_MPPE_RECV_KEY = 17
}; };
/* Hotspot 2.0 - WFA Vendor-specific RADIUS Attributes */
#define RADIUS_VENDOR_ID_WFA 40808
enum {
RADIUS_VENDOR_ATTR_WFA_HS20_SUBSCR_REMEDIATION = 1,
RADIUS_VENDOR_ATTR_WFA_HS20_AP_VERSION = 2,
RADIUS_VENDOR_ATTR_WFA_HS20_STA_VERSION = 3,
};
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma pack(pop) #pragma pack(pop)
#endif /* _MSC_VER */ #endif /* _MSC_VER */
@ -237,6 +247,8 @@ int radius_msg_add_mppe_keys(struct radius_msg *msg,
const u8 *secret, size_t secret_len, const u8 *secret, size_t secret_len,
const u8 *send_key, size_t send_key_len, const u8 *send_key, size_t send_key_len,
const u8 *recv_key, size_t recv_key_len); const u8 *recv_key, size_t recv_key_len);
int radius_msg_add_wfa(struct radius_msg *msg, u8 subtype, const u8 *data,
size_t len);
struct radius_attr_hdr * struct radius_attr_hdr *
radius_msg_add_attr_user_password(struct radius_msg *msg, radius_msg_add_attr_user_password(struct radius_msg *msg,
const u8 *data, size_t data_len, const u8 *data, size_t data_len,