configurable xranc bind address and cleanup functions
diff --git a/src/main/java/org.onosproject.xran/controller/Controller.java b/src/main/java/org.onosproject.xran/controller/Controller.java
index 946a1bd..e8caacc 100644
--- a/src/main/java/org.onosproject.xran/controller/Controller.java
+++ b/src/main/java/org.onosproject.xran/controller/Controller.java
@@ -25,6 +25,7 @@
import io.netty.channel.sctp.nio.NioSctpServerChannel;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
+import org.onlab.packet.IpAddress;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,6 +41,7 @@
private EventLoopGroup workerGroup;
private ChannelFuture channel;
private int port = 8007;
+ private IpAddress bindAddress = IpAddress.valueOf("0.0.0.0");
private boolean isRunning = false;
/**
@@ -58,7 +60,7 @@
);
}
});
- channel = b.bind(this.port).sync();
+ channel = b.bind(this.bindAddress.toInetAddress(), this.port).sync();
} catch (Exception e) {
log.warn(e.getMessage());
e.printStackTrace();
@@ -83,25 +85,28 @@
/**
* Initialize controller and start SCTP server.
- *
- * @param deviceAgent device agent
+ * @param deviceAgent device agent
* @param hostAgent host agent
* @param packetAgent packet agent
+ * @param xrancIp
* @param port port of server
*/
- public void start(XranDeviceAgent deviceAgent, XranHostAgent hostAgent, XranPacketProcessor packetAgent, int port) {
- if (isRunning && this.port != port) {
+ public void start(XranDeviceAgent deviceAgent, XranHostAgent hostAgent, XranPacketProcessor packetAgent,
+ IpAddress xrancIp, int port) {
+ if (isRunning && (this.port != port || !this.bindAddress.equals(xrancIp))) {
stop();
this.deviceAgent = deviceAgent;
this.hostAgent = hostAgent;
this.packetAgent = packetAgent;
this.port = port;
+ this.bindAddress = xrancIp;
run();
} else if (!isRunning) {
this.deviceAgent = deviceAgent;
this.hostAgent = hostAgent;
this.packetAgent = packetAgent;
this.port = port;
+ this.bindAddress = xrancIp;
run();
isRunning = true;
}
diff --git a/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java b/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
index 47af1f1..0aac291 100644
--- a/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
+++ b/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
@@ -209,19 +209,45 @@
@Deactivate
public void deactivate() {
- controller.stop();
-
deviceService.removeListener(deviceListener);
hostService.removeListener(hostListener);
-
- legitCells.clear();
-
configService.removeListener(configListener);
registry.unregisterConfigFactory(xranConfigFactory);
+ cleanup();
+
log.info("XRAN Controller Stopped");
}
+ private void cleanup() {
+ xranStore.getuenodes().forEach(ue -> {
+ for (XranHostListener l : xranHostListeners) {
+ l.hostRemoved(((RnibUe) ue).getHostId());
+ }
+ });
+
+ xranStore.getcellnodes().forEach(cell -> {
+ for (XranDeviceListener l : xranDeviceListeners) {
+ l.deviceRemoved(deviceId(uri(((RnibCell) cell).getEcgi())));
+ }
+ });
+
+ controller.stop();
+
+ legitCells.clear();
+ hoMap.clear();
+ rrmcellMap.clear();
+ scellAddMap.clear();
+ contextUpdateMap.clear();
+ ueIdQueue.clear();
+ xranDeviceListeners.clear();
+ xranHostListeners.clear();
+
+ cellMap = null;
+ ueMap = null;
+ linkMap = null;
+ }
+
@Override
public SynchronousQueue<String> sendHORequest(RnibLink linkT, RnibLink linkS) throws InterruptedException {
ECGI ecgiT = linkT.getLinkId().getEcgi(),
@@ -838,7 +864,8 @@
/**
* Handle Cellconfigreport.
- * @param report CellConfigReport
+ *
+ * @param report CellConfigReport
* @param version String version ID
*/
private void handleCellconfigreport(CellConfigReport report, String version) {
@@ -852,8 +879,9 @@
/**
* Handle Ueadmissionrequest.
+ *
* @param ueAdmissionRequest UEAdmissionRequest
- * @param ctx ChannelHandlerContext
+ * @param ctx ChannelHandlerContext
* @throws IOException IO Exception
*/
private void handleUeadmissionrequest(UEAdmissionRequest ueAdmissionRequest, ChannelHandlerContext ctx)
@@ -870,8 +898,9 @@
/**
* Handle UEAdmissionStatus.
+ *
* @param ueAdmissionStatus UEAdmissionStatus
- * @param ctx ChannelHandlerContext
+ * @param ctx ChannelHandlerContext
*/
private void handleAdmissionstatus(UEAdmissionStatus ueAdmissionStatus, ChannelHandlerContext ctx) {
RnibUe ue = ueMap.get(ueAdmissionStatus.getEcgi(), ueAdmissionStatus.getCrnti());
@@ -901,8 +930,9 @@
/**
* Handle UEContextUpdate.
+ *
* @param ueContextUpdate UEContextUpdate
- * @param ctx ChannelHandlerContext
+ * @param ctx ChannelHandlerContext
*/
private void handleUecontextupdate(UEContextUpdate ueContextUpdate, ChannelHandlerContext ctx) {
EcgiCrntiPair ecgiCrntiPair = EcgiCrntiPair
@@ -933,6 +963,7 @@
/**
* Handle UEReconfigInd.
+ *
* @param ueReconfigInd UEReconfigInd
*/
private void handleUereconfigind(UEReconfigInd ueReconfigInd) {
@@ -949,6 +980,7 @@
/**
* Handle UEReleaseInd.
+ *
* @param ueReleaseInd UEReleaseInd
*/
private void handleUereleaseind(UEReleaseInd ueReleaseInd) {
@@ -975,8 +1007,9 @@
/**
* Handle BearerAdmissionRequest.
+ *
* @param bearerAdmissionRequest BearerAdmissionRequest
- * @param ctx ChannelHandlerContext
+ * @param ctx ChannelHandlerContext
* @throws IOException IO Exception
*/
private void handleBeareradmissionrequest(BearerAdmissionRequest bearerAdmissionRequest,
@@ -1000,6 +1033,7 @@
/**
* Handle BearerReleaseInd.
+ *
* @param bearerReleaseInd
*/
private void handleBearerreleaseind(BearerReleaseInd bearerReleaseInd) {
@@ -1023,6 +1057,7 @@
/**
* Handle HOFailure.
+ *
* @param hoFailure HOFailure
* @throws InterruptedException ueIdQueue interruption
*/
@@ -1041,8 +1076,9 @@
/**
* Handle HOComplete.
+ *
* @param hoComplete HOComplete
- * @param ctx ChannelHandlerContext
+ * @param ctx ChannelHandlerContext
*/
private void handleHocomplete(HOComplete hoComplete, ChannelHandlerContext ctx) {
EcgiCrntiPair ecgiCrntiPair = EcgiCrntiPair.valueOf(hoComplete.getEcgiT(),
@@ -1070,6 +1106,7 @@
/**
* Handle RXSigMeasReport.
+ *
* @param rxSigMeasReport RXSigMeasReport
*/
private void handleRxsigmeasreport(RXSigMeasReport rxSigMeasReport) {
@@ -1117,6 +1154,7 @@
/**
* Handle RadioMeasReportPerUE.
+ *
* @param radioMeasReportPerUE RadioMeasReportPerUE
*/
private void handleRadionmeasreportperue(RadioMeasReportPerUE radioMeasReportPerUE) {
@@ -1161,6 +1199,7 @@
/**
* Handle SchedMeasReportPerUE.
+ *
* @param schedMeasReportPerUE SchedMeasReportPerUE
*/
private void handleSchedmeasreportperue(SchedMeasReportPerUE schedMeasReportPerUE) {
@@ -1197,6 +1236,7 @@
/**
* Handle SchedMeasReportPerCell.
+ *
* @param schedMeasReportPerCell SchedMeasReportPerCell
*/
private void handleSchedmeasreportpercell(SchedMeasReportPerCell schedMeasReportPerCell) {
@@ -1215,6 +1255,7 @@
/**
* Handle PDCPMeasReportPerUe.
+ *
* @param pdcpMeasReportPerUe PDCPMeasReportPerUe
*/
private void handlePdcpmeasreportperue(PDCPMeasReportPerUe pdcpMeasReportPerUe) {
@@ -1240,6 +1281,7 @@
/**
* Handle UECapabilityInfo.
+ *
* @param capabilityInfo UECapabilityInfo
*/
private void handleCapabilityinfo(UECapabilityInfo capabilityInfo) {
@@ -1253,8 +1295,9 @@
/**
* Handle UECapabilityEnquiry.
+ *
* @param ueCapabilityEnquiry UECapabilityEnquiry
- * @param ctx ChannelHandlerContext
+ * @param ctx ChannelHandlerContext
* @throws IOException IO Exception
*/
private void handleUecapabilityenquiry(UECapabilityEnquiry ueCapabilityEnquiry, ChannelHandlerContext ctx)
@@ -1266,6 +1309,7 @@
/**
* Handle ScellAddStatus.
+ *
* @param scellAddStatus ScellAddStatus
*/
private void handleScelladdstatus(ScellAddStatus scellAddStatus) {
@@ -1298,6 +1342,7 @@
/**
* Handle RRMConfigStatus.
+ *
* @param rrmConfigStatus RRMConfigStatus
*/
private void handleRrmconfigstatus(RRMConfigStatus rrmConfigStatus) {
@@ -1314,6 +1359,7 @@
/**
* Handle TrafficSplitConfig.
+ *
* @param trafficSplitConfig TrafficSplitConfig
*/
private void handleTrafficSplitConfig(TrafficSplitConfig trafficSplitConfig) {
@@ -1411,7 +1457,7 @@
legitCells.putAll(xranConfig.activeCellSet());
- controller.start(deviceAgent, hostAgent, packetAgent, xranConfig.getXrancPort());
+ controller.start(deviceAgent, hostAgent, packetAgent, xranConfig.getXrancIp(), xranConfig.getXrancPort());
}
}
}