Skip to content

Commit

Permalink
Define position for OMNeT broadcast device
Browse files Browse the repository at this point in the history
  • Loading branch information
vladamatena committed Mar 30, 2015
1 parent acd5c37 commit 34f365a
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 46 deletions.
22 changes: 22 additions & 0 deletions jdeeco-omnet-plugin/.gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,24 @@
/target/
/.classpath
/inet/
/mixim/
/model/
/config802154.xml
/jdeeco-omnetpp.dll
/libgcc_s_seh-1.dll
/libinet.dll
/libmixim.dll
/liboppcmdenvd.dll
/liboppcommond.dll
/liboppenvird.dll
/liboppeventlogd.dll
/libopplayoutd.dll
/liboppnedxmld.dll
/liboppscaved.dll
/liboppsimd.dll
/libopptkenvd.dll
/libstdc++-6.dll
/libwinpthread-1.dll
/config80211.xml
/Nic802154_TI_CC2420_Decider.xml
/omnetpp.ini
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,14 @@
import cz.cuni.mff.d3s.jdeeco.network.l1.MANETReceivedInfo;

public class OMNeTBroadcastDevice extends OMNeTDevice {
public final Position position;

public OMNeTBroadcastDevice(/* , address, frequency, ... */) {
position = new Position(0, 0, 0);
}

public OMNeTBroadcastDevice(final Position position) {
this.position = position;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package cz.cuni.mff.d3s.jdeeco.network.omnet;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
Expand All @@ -13,88 +14,100 @@ class Node {
public final int id;
public int ordinal;
public final String ipAddress;

Node(int id, String ipAddress) {
public Position position;

Node(int id, String ipAddress, Position position) {
this.id = id;
this.ipAddress = ipAddress;
this.position = position;
}
}

static final String DEFAULT_CONTENT = "omnetpp.ini";

private final long limit;

private Set<Node> nodes = new HashSet<>();



public OMNeTConfigGenerator(long limit) {
this.limit = limit;
}

public void addNode(Node node) {
nodes.add(node);
}
public void addNode(int id, String ipAddress) {
addNode(new Node(id, ipAddress));

public void addNode(int id, String ipAddress, Position position) {
addNode(new Node(id, ipAddress, position));
}

public void addNode(OMNeTSimulation.OMNeTHost host) {
// Determine node IP address
String ip = null;
if(host.infrastructureDevice != null) {
if (host.infrastructureDevice != null) {
ip = host.infrastructureDevice.address.ipAddress;
}

addNode(new Node(host.id, ip));

// Determine node position
Position position = new Position(0, 0, 0);
if (host.broadcastDevice != null) {
position = host.broadcastDevice.position;
}
addNode(new Node(host.id, ip, position));
}

public String getContent() throws IOException {
StringBuilder content = new StringBuilder();

// Load default configuration content
content.append(new String(Files.readAllBytes(Paths.get(DEFAULT_CONTENT))));
try {
content.append(new String(Files.readAllBytes(Paths.get(DEFAULT_CONTENT))));
} catch (FileNotFoundException e) {
throw new RuntimeException("Base OMNeT configuration file not found", e);
}
content.append(String.format("%n%n%n# CONTENT GENERATED BY %s %n%n%n", getClass().getName()));

// Add num nodes
content.append(String.format("**.numNodes = %d%n", nodes.size()));

// Add time limit
content.append(String.format("sim-time-limit = %fs%n", (double)limit / 1000));
content.append(String.format("sim-time-limit = %fs%n", (double) limit / 1000));

// Add nodes
int counter = 0;
for(Node node: nodes) {
for (Node node : nodes) {
node.ordinal = counter++;
content.append(String.format("%n%n# Node %d definition%n", node.id));
content.append(String.format("**.node[%d].mobility.initialX = 100m%n", node.ordinal));
content.append(String.format("**.node[%d].mobility.initialY = 100m%n", node.ordinal));
content.append(String.format("**.node[%d].mobility.initialZ = 0m%n", node.ordinal));
content.append(String.format("**.node[%d].mobility.initialX = %dm%n", node.ordinal, node.position.x));
content.append(String.format("**.node[%d].mobility.initialY = %dm%n", node.ordinal, node.position.y));
content.append(String.format("**.node[%d].mobility.initialZ = %dm%n", node.ordinal, node.position.z));
content.append(String.format("**.node[%d].appl.id = %d", node.ordinal, node.id));
}
// Add IP config

// Add IP configuration
content.append(String.format("%n%n%n# IP Static configuration%n"));
content.append("*.configurator.config = xml(\"");
content.append(String.format("<config>\\%n"));
for(Node node: nodes) {
if(node.ipAddress != null) {
content.append(String.format("\t<interface hosts='**.node[%d]' address='%s' netmask='255.x.x.x'/>\\%n", node.ordinal, node.ipAddress));
for (Node node : nodes) {
if (node.ipAddress != null) {
content.append(String.format("\t<interface hosts='**.node[%d]' address='%s' netmask='255.x.x.x'/>\\%n",
node.ordinal, node.ipAddress));
}
}
content.append("</config>\")");

return content.toString();
}

public File writeToTemp() throws IOException {
// Note: OMNeT finds its parts relative to configuration file
File temp = new File(String.format("omnentpp-%d.ini", System.currentTimeMillis()));
temp.deleteOnExit();

FileWriter writer = new FileWriter(temp);
writer.write(getContent());
writer.close();

return temp;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package cz.cuni.mff.d3s.jdeeco.network.omnet;

/**
* Holds OMNeT node position information
*
* @author Vladimir Matena <matena@d3s.mff.cuni.cz>
*
*/
public class Position {
public final int x;
public final int y;
public final int z;

public Position(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import cz.cuni.mff.d3s.jdeeco.network.l2.strategy.KnowledgeInsertingStrategy;
import cz.cuni.mff.d3s.jdeeco.network.omnet.OMNeTBroadcastDevice;
import cz.cuni.mff.d3s.jdeeco.network.omnet.OMNeTSimulation;
import cz.cuni.mff.d3s.jdeeco.network.omnet.Position;
import cz.cuni.mff.d3s.jdeeco.publishing.DefaultKnowledgePublisher;

/**
Expand All @@ -32,13 +33,12 @@ public void testConvoyOmnet() throws AnnotationProcessorException, InterruptedEx
// Create main application container
DEECoSimulation simulation = new DEECoSimulation(omnet.getTimer());
simulation.addPlugin(Network.class);
simulation.addPlugin(OMNeTBroadcastDevice.class);
simulation.addPlugin(KnowledgeInsertingStrategy.class);
simulation.addPlugin(DefaultKnowledgePublisher.class);
simulation.addPlugin(omnet);

DEECoNode node0 = simulation.createNode(0);
DEECoNode node1 = simulation.createNode(1);
DEECoNode node0 = simulation.createNode(new OMNeTBroadcastDevice(new Position(100, 0, 0)));
DEECoNode node1 = simulation.createNode(new OMNeTBroadcastDevice(new Position(0, 100, 0)));

// Deploy components and ensembles
node0.deployComponent(new Leader());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,20 +41,15 @@ public void testConvoyOmnet() throws AnnotationProcessorException, InterruptedEx

// Node A
DEECoNode node0 = simulation.createNode(
10,
new DefaultKnowledgePublisher(Arrays.asList(new IPAddress("10.0.0.65"))),
new OMNeTInfrastructureDevice(new IPAddress("10.0.0.60"))
);
new OMNeTInfrastructureDevice(new IPAddress("10.0.0.60")));
node0.deployComponent(new Leader());
node0.deployEnsemble(ConvoyEnsemble.class);



// Node B
DEECoNode node1 = simulation.createNode(
11,
new DefaultKnowledgePublisher(Arrays.asList(new IPAddress("10.0.0.60"))),
new OMNeTInfrastructureDevice(new IPAddress("10.0.0.65"))
);
new OMNeTInfrastructureDevice(new IPAddress("10.0.0.65")));
node1.deployComponent(new Follower());
node1.deployEnsemble(ConvoyEnsemble.class);

Expand Down

0 comments on commit 34f365a

Please sign in to comment.