Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: use WSL in Windows for execution of OMNeT++ federate #431

Merged
merged 8 commits into from
Nov 19, 2024
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public ApplicationAmbassador(AmbassadorParameter ambassadorParameter) {
try {
SimulationKernel.SimulationKernel.setConfigurationPath(ambassadorParameter.configuration.getParentFile());
// try to read the configuration from the configuration file
ambassadorConfig = new ObjectInstantiation<>(CApplicationAmbassador.class).readFile(ambassadorParameter.configuration);
ambassadorConfig = new ObjectInstantiation<>(CApplicationAmbassador.class, log).readFile(ambassadorParameter.configuration);

Validate.isTrue(ambassadorConfig.eventSchedulerThreads > 0,
"Number of eventSchedulerThreads must be greater than zero."
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
import org.eclipse.mosaic.rti.api.parameters.AmbassadorParameter;
import org.eclipse.mosaic.rti.config.CLocalHost.OperatingSystem;

import java.nio.file.Files;
import java.nio.file.Paths;
import javax.annotation.Nonnull;

/**
Expand All @@ -48,6 +50,9 @@ public Ns3Ambassador(AmbassadorParameter ambassadorParameter) {
@Nonnull
@Override
public FederateExecutor createFederateExecutor(String host, int port, OperatingSystem os) {
if (!Files.exists(Paths.get(this.ambassadorParameter.configuration.getParent(), "ns3_federate_config.xml"))) {
throw new IllegalArgumentException("ns3_federate_config.xml missing");
}
switch (os) {
case LINUX:
return new ExecutableFederateExecutor(this.descriptor, "./run.sh", Integer.toString(port));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@
import org.eclipse.mosaic.rti.api.FederateExecutor;
import org.eclipse.mosaic.rti.api.federatestarter.DockerFederateExecutor;
import org.eclipse.mosaic.rti.api.federatestarter.ExecutableFederateExecutor;
import org.eclipse.mosaic.rti.api.federatestarter.NopFederateExecutor;
import org.eclipse.mosaic.rti.api.parameters.AmbassadorParameter;
import org.eclipse.mosaic.rti.config.CLocalHost.OperatingSystem;

import org.apache.commons.lang3.ObjectUtils;

import java.nio.file.Files;
import java.nio.file.Paths;
import javax.annotation.Nonnull;

/**
Expand All @@ -44,11 +45,14 @@ public OmnetppAmbassador(AmbassadorParameter ambassadorParameter) {
@Nonnull
@Override
public FederateExecutor createFederateExecutor(String host, int port, OperatingSystem os) {
String omnetppConfigFileName = ObjectUtils.defaultIfNull(config.federateConfigurationFile, "omnetpp.ini"); // default // this one is required
if (!Files.exists(Paths.get(this.ambassadorParameter.configuration.getParent(), omnetppConfigFileName))) {
throw new IllegalArgumentException(omnetppConfigFileName + " missing");
}
String omnetppConfigFilePath = "omnetpp-federate/simulations/" + omnetppConfigFileName;
String inetSourceDirectories = "inet:omnetpp-federate/src";
switch (os) {
case LINUX:
String omnetppConfigFileName = ObjectUtils.defaultIfNull(config.federateConfigurationFile, "omnetpp.ini");
String omnetppConfigFilePath = "omnetpp-federate/simulations/" + omnetppConfigFileName;
String inetSourceDirectories = "inet:omnetpp-federate/src";
return new ExecutableFederateExecutor(this.descriptor, "omnetpp-federate/omnetpp-federate",
"-u", "Cmdenv",
"-f", omnetppConfigFilePath,
Expand All @@ -57,6 +61,13 @@ public FederateExecutor createFederateExecutor(String host, int port, OperatingS
"--mosaiceventscheduler-port=" + port
);
case WINDOWS:
return new ExecutableFederateExecutor(this.descriptor, "wsl.exe", "omnetpp-federate/omnetpp-federate",
"-u", "Cmdenv",
"-f", omnetppConfigFilePath,
"-n", inetSourceDirectories,
"--mosaiceventscheduler-host=" + host,
"--mosaiceventscheduler-port=" + port
);
case UNKNOWN:
default:
log.error("Operating system not supported by omnetpp");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ public void initialize(final long startTime, final long endTime) throws Internal
}

try {
CSns configuration = new ObjectInstantiation<>(CSns.class).readFile(ambassadorParameter.configuration);
CSns configuration = new ObjectInstantiation<>(CSns.class, log).readFile(ambassadorParameter.configuration);
kschrab marked this conversation as resolved.
Show resolved Hide resolved
if (configuration.singlehopDelay instanceof GammaSpeedDelay) {
log.info("Detected GammaSpeedDelay for. The SNS is currently ignoring speed of entities in its evaluation of delay values");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -166,9 +166,9 @@ protected AbstractNetworkAmbassador(AmbassadorParameter ambassadorParameter, Str
this.removedNodes = new ArrayList<>();

try {
config = new ObjectInstantiation<>(CAbstractNetworkAmbassador.class).readFile(ambassadorParameter.configuration);
config = new ObjectInstantiation<>(CAbstractNetworkAmbassador.class, log).readFile(ambassadorParameter.configuration);
} catch (InstantiationException | NullPointerException e) {
log.warn("Could not read ambassador configuration in '{}'. Using default one instead.", ambassadorParameter.configuration);
log.warn("Problem when instantiating ambassador configuration from '{}'. Ignore file and try again with default config.", ambassadorParameter.configuration);
config = new CAbstractNetworkAmbassador();
}
}
Expand Down
Loading