VOL-458: NPE when executing ONOS aaa-users command after an disable ONU
Change-Id: I81720d2de540aee392b1038b443d8ed6c8fadc75
(cherry picked from commit 3f8ee43464a91bbd169cb44798c69291cdea853d)
diff --git a/src/main/java/org/opencord/aaa/AaaManager.java b/src/main/java/org/opencord/aaa/AaaManager.java
index ebe356c..7100704 100755
--- a/src/main/java/org/opencord/aaa/AaaManager.java
+++ b/src/main/java/org/opencord/aaa/AaaManager.java
@@ -41,6 +41,8 @@
import org.onosproject.net.config.NetworkConfigEvent;
import org.onosproject.net.config.NetworkConfigListener;
import org.onosproject.net.config.NetworkConfigRegistry;
+import org.onosproject.net.device.DeviceEvent;
+import org.onosproject.net.device.DeviceListener;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.flow.DefaultTrafficTreatment;
import org.onosproject.net.flow.TrafficTreatment;
@@ -63,6 +65,7 @@
import java.net.InetAddress;
import java.nio.ByteBuffer;
+import java.util.Map;
/**
* AAA application for ONOS.
@@ -98,6 +101,8 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected AccessDeviceService accessDeviceService;
+ private final DeviceListener deviceListener = new InternalDeviceListener();
+
// NAS IP address
protected InetAddress nasIpAddress;
@@ -228,6 +233,8 @@
impl.requestIntercepts();
+ deviceService.addListener(deviceListener);
+
log.info("Started");
}
@@ -240,6 +247,7 @@
StateMachine.destroyMaps();
netCfgService.removeListener(cfgListener);
impl.deactivate();
+ deviceService.removeListener(deviceListener);
log.info("Stopped");
}
@@ -586,4 +594,27 @@
}
}
}
+
+ private class InternalDeviceListener implements DeviceListener {
+ @Override
+ public void event(DeviceEvent event) {
+
+ switch (event.type()) {
+ case PORT_REMOVED:
+ DeviceId devId = event.subject().id();
+ PortNumber portNumber = event.port().number();
+ String sessionId = devId.toString() + portNumber.toString();
+
+ Map<String, StateMachine> sessionIdMap = StateMachine.sessionIdMap();
+ StateMachine removed = sessionIdMap.remove(sessionId);
+ if (removed != null) {
+ StateMachine.deleteStateMachineMapping(removed);
+ }
+
+ break;
+ default:
+ return;
+ }
+ }
+ }
}