Skip to content

Commit

Permalink
SCTP connection waiting
Browse files Browse the repository at this point in the history
  • Loading branch information
aligungr committed Sep 16, 2020
1 parent b4da41b commit 8a288db
Show file tree
Hide file tree
Showing 10 changed files with 58 additions and 10 deletions.
5 changes: 2 additions & 3 deletions sctp/src/main/java/tr/havelsan/ueransim/sctp/SctpClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@

import com.sun.nio.sctp.MessageInfo;
import com.sun.nio.sctp.SctpChannel;
import tr.havelsan.ueransim.utils.console.Logging;
import tr.havelsan.ueransim.utils.Tag;
import tr.havelsan.ueransim.utils.console.Logging;

import java.io.IOException;
import java.net.InetSocketAddress;
Expand Down Expand Up @@ -57,8 +57,7 @@ public void start() throws Exception {

Logging.info(Tag.CONNECTION, "Trying to establish SCTP connection... (%s:%s)", host, port);

var serverAddress = new InetSocketAddress(host, port);
this.channel = SctpChannel.open(serverAddress, 0, 0);
this.channel = SctpChannel.open(new InetSocketAddress(host, port), 0, 0);
this.receiving = true;

Logging.info(Tag.CONNECTION, "SCTP connection established");
Expand Down
7 changes: 5 additions & 2 deletions ueransim/src/main/java/tr/havelsan/ueransim/app/Program.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

package tr.havelsan.ueransim.app;

import tr.havelsan.ueransim.app.api.gnb.app.GnbAppTask;
import tr.havelsan.ueransim.app.api.sys.INodeMessagingListener;
import tr.havelsan.ueransim.app.api.sys.Simulation;
import tr.havelsan.ueransim.app.itms.ItmsId;
Expand Down Expand Up @@ -146,8 +147,10 @@ private void initialize() {
Simulation.registerGnb(simContext, gnbContext);
GnbNode.run(gnbContext);

// todo: ensure gnbs are good to go
Utils.sleep(1500);
while (!((GnbAppTask)gnbContext.itms.findTask(ItmsId.GNB_TASK_APP)).isInitialSctpReady()) {
// just wait until the gNB says my initial SCTP connection is ready.
Utils.sleep(100);
}

ueContexts = new ArrayList<>();
for (int i = 0; i < numberOfUe; i++) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

package tr.havelsan.ueransim.app.api;

import tr.havelsan.ueransim.app.api.gnb.app.GnbAppTask;
import tr.havelsan.ueransim.app.api.gnb.mr.MrTask;
import tr.havelsan.ueransim.app.api.gnb.ngap.NgapTask;
import tr.havelsan.ueransim.app.api.gnb.sctp.SctpTask;
Expand All @@ -38,13 +39,16 @@ public static void run(GnbSimContext ctx) {
var sctpTask = new SctpTask(itms, ItmsId.GNB_TASK_SCTP, ctx);
var ngapTask = new NgapTask(itms, ItmsId.GNB_TASK_NGAP, ctx);
var mrTask = new MrTask(itms, ItmsId.GNB_TASK_MR, ctx);
var appTask = new GnbAppTask(itms, ItmsId.GNB_TASK_APP, ctx);

itms.createTask(sctpTask);
itms.createTask(ngapTask);
itms.createTask(mrTask);
itms.createTask(appTask);

itms.startTask(sctpTask);
itms.startTask(ngapTask);
itms.startTask(mrTask);
itms.startTask(appTask);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

package tr.havelsan.ueransim.app.api;

import tr.havelsan.ueransim.app.api.ue.app.AppTask;
import tr.havelsan.ueransim.app.api.ue.app.UeAppTask;
import tr.havelsan.ueransim.app.api.ue.mr.MrTask;
import tr.havelsan.ueransim.app.api.ue.nas.NasTask;
import tr.havelsan.ueransim.app.api.ue.nas.NasTimersTask;
Expand All @@ -41,7 +41,7 @@ public static void run(UeSimContext ctx) {
var timersTask = new NasTimersTask(itms, ItmsId.UE_TASK_NAS_TIMERS, ctx);
var mrTask = new MrTask(itms, ItmsId.UE_TASK_MR, ctx);
var nasTask = new NasTask(itms, ItmsId.UE_TASK_NAS, ctx);
var appTask = new AppTask(itms, ItmsId.UE_TASK_APP, ctx);
var appTask = new UeAppTask(itms, ItmsId.UE_TASK_APP, ctx);

itms.createTask(timersTask);
itms.createTask(mrTask);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package tr.havelsan.ueransim.app.api.gnb.app;

import tr.havelsan.ueransim.app.itms.Itms;
import tr.havelsan.ueransim.app.itms.ItmsTask;
import tr.havelsan.ueransim.app.itms.wrappers.InitialSctpReadyWrapper;
import tr.havelsan.ueransim.app.structs.simctx.GnbSimContext;

public class GnbAppTask extends ItmsTask {

private final GnbSimContext ctx;
private boolean initialSctpReady;

public GnbAppTask(Itms itms, int taskId, GnbSimContext ctx) {
super(itms, taskId);
this.ctx = ctx;
}

@Override
public void main() {
while (true) {
var msg = ctx.itms.receiveMessage(this);
if (msg instanceof InitialSctpReadyWrapper) {
initialSctpReady = true;
}
}
}

public boolean isInitialSctpReady() {
return initialSctpReady;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@
import tr.havelsan.ueransim.app.itms.Itms;
import tr.havelsan.ueransim.app.itms.ItmsId;
import tr.havelsan.ueransim.app.itms.ItmsTask;
import tr.havelsan.ueransim.app.itms.wrappers.InitialSctpReadyWrapper;
import tr.havelsan.ueransim.app.structs.simctx.GnbSimContext;
import tr.havelsan.ueransim.app.api.GnbNode;
import tr.havelsan.ueransim.app.itms.wrappers.NgapReceiveWrapper;
import tr.havelsan.ueransim.app.itms.wrappers.NgapSendWrapper;
import tr.havelsan.ueransim.app.itms.wrappers.SctpAssociationSetupWrapper;
Expand Down Expand Up @@ -106,6 +106,8 @@ public void onShutdown() {
Utils.sleep(1000);
}

ctx.itms.sendMessage(ItmsId.GNB_TASK_APP, new InitialSctpReadyWrapper());

while (true) {
var msg = itms.receiveMessage(this);
if (msg instanceof NgapSendWrapper) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@
import tr.havelsan.ueransim.app.itms.wrappers.UeTestCommandWrapper;
import tr.havelsan.ueransim.app.structs.simctx.UeSimContext;

public class AppTask extends ItmsTask {
public class UeAppTask extends ItmsTask {

private final UeSimContext ctx;

public AppTask(Itms itms, int taskId, UeSimContext ctx) {
public UeAppTask(Itms itms, int taskId, UeSimContext ctx) {
super(itms, taskId);
this.ctx = ctx;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,8 @@ public void sendMessage(int taskId, Object msg) {
throw new IllegalStateException("task id not found");
sendMessage(task, msg);
}

public ItmsTask findTask(int taskId) {
return taskMap.get(taskId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public class ItmsId {
public static final int GNB_TASK_SCTP = 1;
public static final int GNB_TASK_NGAP = 2;
public static final int GNB_TASK_MR = 3;
public static final int GNB_TASK_APP = 4;

public static final int UE_TASK_MR = 1;
public static final int UE_TASK_NAS = 2;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package tr.havelsan.ueransim.app.itms.wrappers;

public class InitialSctpReadyWrapper {
}

0 comments on commit 8a288db

Please sign in to comment.