[SEBA-623] Handled TimeOut of AAA sessions
Change-Id: I9ab1d1b5e68553cc93d927e16af8edc9c208567f
diff --git a/app/src/main/java/org/opencord/aaa/impl/AaaManager.java b/app/src/main/java/org/opencord/aaa/impl/AaaManager.java
index 32f4624..040cf3e 100755
--- a/app/src/main/java/org/opencord/aaa/impl/AaaManager.java
+++ b/app/src/main/java/org/opencord/aaa/impl/AaaManager.java
@@ -159,6 +159,9 @@
// our unique identifier
private ApplicationId appId;
+ // TimeOut time for cleaning up stateMachines stuck due to pending AAA/EAPOL message.
+ protected int cleanupTimerTimeOutInMins;
+
// Setup specific customization/attributes on the RADIUS packets
PacketCustomizer pktCustomizer;
@@ -248,6 +251,8 @@
packetService.addProcessor(processor, PacketProcessor.director(2));
StateMachine.initializeMaps();
StateMachine.setDelegate(delegate);
+ cleanupTimerTimeOutInMins = newCfg.sessionCleanupTimer();
+ StateMachine.setcleanupTimerTimeOutInMins(cleanupTimerTimeOutInMins);
impl.initializeLocalState(newCfg);
impl.requestIntercepts();
deviceService.addListener(deviceListener);
@@ -374,7 +379,22 @@
impl.sendRadiusPacket(radiusPacket, inPkt);
}
- /**
+ /**
+ * For scheduling the timer required for cleaning up StateMachine
+ * when no response
+ * from RADIUS SERVER.
+ *
+ * @param sessionId SessionId of the current session
+ * @param stateMachine StateMachine for the id
+ */
+ public void scheduleStateMachineCleanupTimer(String sessionId, StateMachine stateMachine) {
+ StateMachine.CleanupTimerTask cleanupTask = stateMachine.new CleanupTimerTask(sessionId, this);
+ ScheduledFuture<?> cleanupTimer = executor.schedule(cleanupTask, cleanupTimerTimeOutInMins, TimeUnit.MINUTES);
+ stateMachine.setCleanupTimer(cleanupTimer);
+
+ }
+
+ /**
* Handles RADIUS packets.
*
* @param radiusPacket RADIUS packet coming from the RADIUS server.
@@ -591,6 +611,9 @@
case EAPOL.EAPOL_START:
log.debug("EAP packet: EAPOL_START");
stateMachine.setSupplicantConnectpoint(inPacket.receivedFrom());
+ if (stateMachine.getCleanupTimer() == null) {
+ scheduleStateMachineCleanupTimer(sessionId, stateMachine);
+ }
stateMachine.start();
aaaStatisticsManager.getAaaStats().incrementEapolStartReqTrans();
//send an EAP Request/Identify to the supplicant
@@ -626,6 +649,10 @@
case EAP.ATTR_IDENTITY:
log.debug("EAP packet: EAPOL_PACKET ATTR_IDENTITY");
+ //Setting the time of this response from RG, only when its not a re-transmission.
+ if (stateMachine.getLastPacketReceivedTime() == 0) {
+ stateMachine.setLastPacketReceivedTime(System.currentTimeMillis());
+ }
// request id access to RADIUS
stateMachine.setUsername(eapPacket.getData());
@@ -634,6 +661,7 @@
radiusPayload.addMessageAuthenticator(AaaManager.this.radiusSecret);
sendRadiusPacket(radiusPayload, inPacket);
+ stateMachine.setWaitingForRadiusResponse(true);
aaaStatisticsManager.getAaaStats().incrementEapolAtrrIdentity();
// change the state to "PENDING"
if (stateMachine.state() == StateMachine.STATE_PENDING) {
@@ -642,6 +670,7 @@
stateMachine.requestAccess();
break;
case EAP.ATTR_MD5:
+ stateMachine.setLastPacketReceivedTime(System.currentTimeMillis());
log.debug("EAP packet: EAPOL_PACKET ATTR_MD5");
// verify if the EAP identifier corresponds to the
// challenge identifier from the client state
@@ -660,6 +689,7 @@
}
radiusPayload.addMessageAuthenticator(AaaManager.this.radiusSecret);
sendRadiusPacket(radiusPayload, inPacket);
+ stateMachine.setWaitingForRadiusResponse(true);
aaaStatisticsManager.getAaaStats().incrementEapolMd5RspChall();
}
break;
@@ -677,6 +707,7 @@
radiusPayload.addMessageAuthenticator(AaaManager.this.radiusSecret);
sendRadiusPacket(radiusPayload, inPacket);
+ stateMachine.setWaitingForRadiusResponse(true);
aaaStatisticsManager.getAaaStats().incrementEapolTlsRespChall();
if (stateMachine.state() != StateMachine.STATE_PENDING) {
@@ -823,6 +854,7 @@
log.debug("RequestRttMilis---" + aaaStatisticsManager.getAaaStats().getRequestRttMilis());
log.debug("UnknownServerRx---" + aaaStatisticsManager.getAaaStats().getUnknownServerRx());
log.debug("UnknownTypeRx---" + aaaStatisticsManager.getAaaStats().getUnknownTypeRx());
+ log.debug("TimedOutPackets----" + aaaStatisticsManager.getAaaStats().getTimedOutPackets());
log.debug("EapolLogoffRx---" + aaaStatisticsManager.getAaaStats().getEapolLogoffRx());
log.debug("EapolAuthSuccessTrans---" + aaaStatisticsManager.getAaaStats().getEapolAuthSuccessTrans());
log.debug("EapolAuthFailureTrans---" +