]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Add Mobility-Domain-Id into RADIUS messages
authorJouni Malinen <j@w1.fi>
Thu, 31 Jul 2014 16:00:37 +0000 (19:00 +0300)
committerJouni Malinen <j@w1.fi>
Thu, 31 Jul 2014 16:55:29 +0000 (19:55 +0300)
This adds hostapd support for the new Mobility-Domain-Id attribute
defined in RFC 7268. This attribute contains the mobility domain id and
it is added whenever the station negotiates use of FT.

Signed-off-by: Jouni Malinen <j@w1.fi>
src/ap/ieee802_1x.c
src/radius/radius.c
src/radius/radius.h

index 035415f24209f2870b83333f1b4ecc49ef8c64c6..9035094c2381c803a15bca4ece547bd169099590 100644 (file)
@@ -357,6 +357,21 @@ static int add_common_radius_sta_attr(struct hostapd_data *hapd,
                }
        }
 
+#ifdef CONFIG_IEEE80211R
+       if (hapd->conf->wpa && wpa_key_mgmt_ft(hapd->conf->wpa_key_mgmt) &&
+           sta->wpa_sm &&
+           (wpa_key_mgmt_ft(wpa_auth_sta_key_mgmt(sta->wpa_sm)) ||
+            sta->auth_alg == WLAN_AUTH_FT) &&
+           !hostapd_config_get_radius_attr(req_attr,
+                                           RADIUS_ATTR_MOBILITY_DOMAIN_ID) &&
+           !radius_msg_add_attr_int32(msg, RADIUS_ATTR_MOBILITY_DOMAIN_ID,
+                                      WPA_GET_BE16(
+                                              hapd->conf->mobility_domain))) {
+               wpa_printf(MSG_ERROR, "Could not add Mobility-Domain-Id");
+               return -1;
+       }
+#endif /* CONFIG_IEEE80211R */
+
        return 0;
 }
 
index f2d8e96fe70b123343db219a805b0050ea0c631c..730056a0a0496f8b6f1cd6f858543fcc9a5ac899 100644 (file)
@@ -233,6 +233,8 @@ static struct radius_attr_type radius_attrs[] =
        { RADIUS_ATTR_NAS_IPV6_ADDRESS, "NAS-IPv6-Address", RADIUS_ATTR_IPV6 },
        { RADIUS_ATTR_ERROR_CAUSE, "Error-Cause", RADIUS_ATTR_INT32 },
        { RADIUS_ATTR_EAP_KEY_NAME, "EAP-Key-Name", RADIUS_ATTR_HEXDUMP },
+       { RADIUS_ATTR_MOBILITY_DOMAIN_ID, "Mobility-Domain-Id",
+         RADIUS_ATTR_INT32 },
 };
 #define RADIUS_ATTRS ARRAY_SIZE(radius_attrs)
 
index 34307f2cfa5b93fe16a65dfdeef38b48e706c43f..ff7224d908c6aea0336785eaaff5482e3105bbc6 100644 (file)
@@ -92,6 +92,7 @@ enum { RADIUS_ATTR_USER_NAME = 1,
        RADIUS_ATTR_NAS_IPV6_ADDRESS = 95,
        RADIUS_ATTR_ERROR_CAUSE = 101,
        RADIUS_ATTR_EAP_KEY_NAME = 102,
+       RADIUS_ATTR_MOBILITY_DOMAIN_ID = 177,
 };