From: Jouni Malinen Date: Wed, 21 Nov 2012 15:03:15 +0000 (+0200) Subject: HS 2.0R2 AP: Add definition and helper function for WFA RADIUS VSA X-Git-Tag: hostap_2_2~757 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0dd100fb40357781e747a952b68729f1f3f01d20;p=thirdparty%2Fhostap.git 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 --- diff --git a/src/radius/radius.c b/src/radius/radius.c index 1070fc708..370b517fd 100644 --- a/src/radius/radius.c +++ b/src/radius/radius.c @@ -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 * in RFC 2865, Chap. 5.2 */ struct radius_attr_hdr * diff --git a/src/radius/radius.h b/src/radius/radius.h index ad65b04b8..b39aa7b0c 100644 --- a/src/radius/radius.h +++ b/src/radius/radius.h @@ -163,6 +163,16 @@ enum { RADIUS_VENDOR_ATTR_MS_MPPE_SEND_KEY = 16, 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 #pragma pack(pop) #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 *send_key, size_t send_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 * radius_msg_add_attr_user_password(struct radius_msg *msg, const u8 *data, size_t data_len,