fixed HO, xICIC timeout and Context Update
diff --git a/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java b/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
index c21db62..c985a84 100644
--- a/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
+++ b/src/main/java/org.onosproject.xran/controller/XranControllerImpl.java
@@ -107,8 +107,7 @@
private LinkMap linkMap;
/* MAPS */
private ConcurrentMap<String, ECGI> legitCells = new ConcurrentHashMap<>();
- private ConcurrentMap<CRNTI, UEContextUpdate> hoContextUpdateMap = new ConcurrentHashMap<>();
- private ConcurrentMap<CRNTI, SynchronousQueue<String>> hoQueue = new ConcurrentHashMap<>();
+ private ConcurrentMap<ECGI, SynchronousQueue<String>> hoQueue = new ConcurrentHashMap<>();
private ConcurrentMap<ECGI, SynchronousQueue<String>> RRMCellQueue = new ConcurrentHashMap<>();
private ConcurrentMap<CRNTI, SynchronousQueue<String>> scellAddQueue = new ConcurrentHashMap<>();
private ConcurrentMap<CRNTI, SynchronousQueue<String>> scellDeleteQueue = new ConcurrentHashMap<>();
@@ -156,23 +155,24 @@
}
@Override
- public SynchronousQueue<String> sendHORequest(RnibLink newLink, RnibLink oldLink) {
- ECGI newEcgi = newLink.getLinkId().getEcgi(),
- oldEcgi = oldLink.getLinkId().getEcgi();
- CRNTI crnti = linkMap.getCrnti(newLink.getLinkId().getMmeues1apid());
- ChannelHandlerContext newCtx = cellMap.getCtx(newEcgi),
- oldCtx = cellMap.getCtx(oldEcgi);
+ public SynchronousQueue<String> sendHORequest(RnibLink link_t, RnibLink link_s) {
+ ECGI ecgi_t = link_t.getLinkId().getEcgi(),
+ ecgi_s = link_s.getLinkId().getEcgi();
+
+ CRNTI crnti = linkMap.getCrnti(link_t.getLinkId().getMmeues1apid());
+ ChannelHandlerContext ctx_t = cellMap.getCtx(ecgi_t),
+ ctx_s = cellMap.getCtx(ecgi_s);
try {
- XrancPdu xrancPdu = HORequest.constructPacket(crnti, oldEcgi, newEcgi);
- newCtx.writeAndFlush(getSctpMessage(xrancPdu));
- oldCtx.writeAndFlush(getSctpMessage(xrancPdu));
+ XrancPdu xrancPdu = HORequest.constructPacket(crnti, ecgi_s, ecgi_t);
+ ctx_t.writeAndFlush(getSctpMessage(xrancPdu));
+ ctx_s.writeAndFlush(getSctpMessage(xrancPdu));
} catch (IOException e) {
e.printStackTrace();
}
SynchronousQueue<String> queue = new SynchronousQueue<>();
- hoQueue.put(crnti, queue);
+ hoQueue.put(ecgi_s, queue);
return queue;
}
@@ -202,20 +202,26 @@
ECGI ecgi = rrmConfig.getEcgi();
ChannelHandlerContext ctx = cellMap.getCtx(ecgi);
try {
- XrancPdu pdu;
+ XrancPdu pdu = null;
+
if (xICIC) {
- pdu = XICICConfig.constructPacket(rrmConfig);
+ CellConfigReport cellConfigReport = cellMap.get(ecgi).getConf();
+ if (cellConfigReport != null) {
+ pdu = XICICConfig.constructPacket(rrmConfig, cellConfigReport);
+ ctx.writeAndFlush(getSctpMessage(pdu));
+ }
} else {
pdu = RRMConfig.constructPacket(rrmConfig);
+ ctx.writeAndFlush(getSctpMessage(pdu));
+ SynchronousQueue<String> queue = new SynchronousQueue<>();
+ RRMCellQueue.put(ecgi, queue);
+ return queue;
}
- ctx.writeAndFlush(getSctpMessage(pdu));
} catch (IOException e) {
e.printStackTrace();
}
- SynchronousQueue<String> queue = new SynchronousQueue<>();
- RRMCellQueue.put(ecgi, queue);
- return queue;
+ return null;
}
@Override
@@ -597,22 +603,17 @@
UEContextUpdate ueContextUpdate = recv_pdu.getBody().getUEContextUpdate();
RnibUe ue = ueMap.get(ueContextUpdate.getMMEUES1APID());
- if (ue != null && hoQueue.keySet().contains(ue.getRanId())) {
- CRNTI crnti = ueContextUpdate.getCrnti();
- hoContextUpdateMap.put(crnti, ueContextUpdate);
- hoQueue.remove(ue.getRanId());
- } else {
- RnibCell cell = xranStore.getCell(ueContextUpdate.getEcgi());
- if (ue == null) {
- ue = new RnibUe();
- }
-
- ue.setMmeS1apId(ueContextUpdate.getMMEUES1APID());
- ue.setEnbS1apId(ueContextUpdate.getENBUES1APID());
- ue.setRanId(ueContextUpdate.getCrnti());
-
- hostAgent.addConnectedHost(ue, cell, ctx);
+ RnibCell cell = xranStore.getCell(ueContextUpdate.getEcgi());
+ if (ue == null) {
+ ue = new RnibUe();
}
+
+ ue.setMmeS1apId(ueContextUpdate.getMMEUES1APID());
+ ue.setEnbS1apId(ueContextUpdate.getENBUES1APID());
+ ue.setRanId(ueContextUpdate.getCrnti());
+
+ hostAgent.addConnectedHost(ue, cell, ctx);
+
break;
}
case 6: {
@@ -692,13 +693,13 @@
HOFailure hoFailure = recv_pdu.getBody().getHOFailure();
try {
- hoQueue.get(hoFailure.getCrnti())
+ hoQueue.get(hoFailure.getEcgi())
.put("Hand Over Failed with cause: " + hoFailure.getCause());
} catch (InterruptedException e) {
log.error(ExceptionUtils.getFullStackTrace(e));
e.printStackTrace();
} finally {
- hoQueue.remove(hoFailure.getCrnti());
+ hoQueue.remove(hoFailure.getEcgi());
}
break;
@@ -706,34 +707,14 @@
case 14: {
HOComplete hoComplete = recv_pdu.getBody().getHOComplete();
- RnibLink oldLink = linkMap.get(hoComplete.getEcgiS(), hoComplete.getCrntiNew()),
- newLink = linkMap.get(hoComplete.getEcgiT(), hoComplete.getCrntiNew());
-
- oldLink.setType(RnibLink.Type.NON_SERVING);
- newLink.setType(RnibLink.Type.SERVING_PRIMARY);
-
try {
- hoQueue.get(hoComplete.getCrntiNew())
+ hoQueue.get(hoComplete.getEcgiS())
.put("Hand Over Completed");
} catch (InterruptedException e) {
log.error(ExceptionUtils.getFullStackTrace(e));
e.printStackTrace();
} finally {
- hoQueue.remove(hoComplete.getCrntiNew());
-
- UEContextUpdate ueContextUpdate = hoContextUpdateMap.get(hoComplete.getCrntiNew());
-
- RnibUe ue = ueMap.get(ueContextUpdate.getMMEUES1APID());
- RnibCell cell = xranStore.getCell(ueContextUpdate.getEcgi());
- if (ueMap.get(ueContextUpdate.getMMEUES1APID()) == null) {
- ue = new RnibUe();
- }
-
- ue.setMmeS1apId(ueContextUpdate.getMMEUES1APID());
- ue.setEnbS1apId(ueContextUpdate.getENBUES1APID());
- ue.setRanId(ueContextUpdate.getCrnti());
-
- hostAgent.addConnectedHost(ue, cell, ctx);
+ hoQueue.remove(hoComplete.getEcgiS());
}
break;
}