@@ -1366,8 +1366,8 @@
{
struct hostapd_data *hapd = data;
struct sta_info *sta;
- u32 session_timeout = 0, termination_action, acct_interim_interval;
- int session_timeout_set, old_vlanid = 0;
+ u32 session_timeout = 0, termination_action, acct_interim_interval, idle_timeout =0;
+ int session_timeout_set, old_vlanid = 0 ,idle_timeout_set =0;
struct eapol_state_machine *sm;
int override_eapReq = 0;
struct radius_hdr *hdr = radius_msg_get_hdr(msg);
@@ -1413,6 +1413,15 @@
session_timeout_set =
!radius_msg_get_attr_int32(msg, RADIUS_ATTR_SESSION_TIMEOUT,
&session_timeout);
+
+ idle_timeout_set = !radius_msg_get_attr_int32(msg, RADIUS_ATTR_IDLE_TIMEOUT,&idle_timeout);
+
+ hostapd_logger(hapd, sta->addr,
+ HOSTAPD_MODULE_IEEE8021X,
+ HOSTAPD_LEVEL_DEBUG,
+ "Idle timeout received #1 %d",
+ idle_timeout);
+
if (radius_msg_get_attr_int32(msg, RADIUS_ATTR_TERMINATION_ACTION,
&termination_action))
termination_action = RADIUS_TERMINATION_ACTION_DEFAULT;
@@ -1468,7 +1477,18 @@
RADIUS_TERMINATION_ACTION_RADIUS_REQUEST) {
sm->reAuthPeriod = session_timeout;
} else if (session_timeout_set)
- ap_sta_session_timeout(hapd, sta, session_timeout);
+ ap_sta_session_timeout(hapd, sta, idle_timeout);
+
+ if((idle_timeout_set)&&(idle_timeout))
+ {
+ ap_sta_idle_timeout(hapd,sta,idle_timeout);
+ hostapd_logger(hapd, sta->addr,
+ HOSTAPD_MODULE_IEEE8021X,
+ HOSTAPD_LEVEL_DEBUG,
+ "starting Idle timeout timer for %d",
+ idle_timeout);
+
+ }
sm->eap_if->aaaSuccess = TRUE;
override_eapReq = 1;