Commit c0e2cc2b authored by Björn Richerzhagen's avatar Björn Richerzhagen
Browse files

TopologyView: Drop and Latency

Added support for dynamic links (property updates on range changes based
on the topology view)
First step towards integrating measurement maps into the simulator
parent 8e408fbf
...@@ -20,15 +20,17 @@ ...@@ -20,15 +20,17 @@
package de.tud.kom.p2psim.api.topology.views; package de.tud.kom.p2psim.api.topology.views;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
/** /**
* Determines the probability of a packet drop on a link.
* *
* @author Bjoern Richerzhagen * @author Bjoern Richerzhagen
* @version 1.0, 24.07.2012 * @version 1.0, 24.07.2012
*/ */
public interface DropRateDeterminator { public interface DropProbabilityDeterminator {
/** /**
* Called for each host that is added to the TopologyView * Called for each host that is added to the TopologyView
...@@ -38,7 +40,7 @@ public interface DropRateDeterminator { ...@@ -38,7 +40,7 @@ public interface DropRateDeterminator {
public void onMacAdded(MacLayer mac, TopologyView viewParent); public void onMacAdded(MacLayer mac, TopologyView viewParent);
/** /**
* Return the drop-rate between 0.0 and 1.0 * Return the drop-probability between 0.0 and 1.0
* *
* @param view * @param view
* This object can be used to access advanced information such as * This object can be used to access advanced information such as
...@@ -46,9 +48,12 @@ public interface DropRateDeterminator { ...@@ -46,9 +48,12 @@ public interface DropRateDeterminator {
* implementing a cache to speed up the calculations. * implementing a cache to speed up the calculations.
* @param source * @param source
* @param destination * @param destination
* @param link
* in case a link object already exists (and should be updated),
* it is passed. Otherwise: null.
* @return * @return
*/ */
public double getDropRate(TopologyView view, MacAddress source, public double getDropProbability(TopologyView view, MacAddress source,
MacAddress destination); MacAddress destination, Link link);
} }
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
package de.tud.kom.p2psim.api.topology.views; package de.tud.kom.p2psim.api.topology.views;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
...@@ -51,9 +52,12 @@ public interface LatencyDeterminator { ...@@ -51,9 +52,12 @@ public interface LatencyDeterminator {
* implementing a cache to speed up the calculations. * implementing a cache to speed up the calculations.
* @param source * @param source
* @param destination * @param destination
* @param link
* in case a link object already exists (and should be updated),
* it is passed. Otherwise: null.
* @return * @return
*/ */
public long getLatency(TopologyView view, MacAddress source, public long getLatency(TopologyView view, MacAddress source,
MacAddress destination); MacAddress destination, Link link);
} }
...@@ -29,6 +29,7 @@ import java.util.Map.Entry; ...@@ -29,6 +29,7 @@ import java.util.Map.Entry;
import de.tud.kom.p2psim.api.common.Position; import de.tud.kom.p2psim.api.common.Position;
import de.tud.kom.p2psim.api.linklayer.LinkLayer; import de.tud.kom.p2psim.api.linklayer.LinkLayer;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
import de.tud.kom.p2psim.api.linklayer.mac.PhyType; import de.tud.kom.p2psim.api.linklayer.mac.PhyType;
...@@ -36,7 +37,7 @@ import de.tud.kom.p2psim.api.network.BandwidthImpl; ...@@ -36,7 +37,7 @@ import de.tud.kom.p2psim.api.network.BandwidthImpl;
import de.tud.kom.p2psim.api.scenario.ConfigurationException; import de.tud.kom.p2psim.api.scenario.ConfigurationException;
import de.tud.kom.p2psim.api.topology.TopologyComponent; import de.tud.kom.p2psim.api.topology.TopologyComponent;
import de.tud.kom.p2psim.api.topology.movement.MovementSupported; import de.tud.kom.p2psim.api.topology.movement.MovementSupported;
import de.tud.kom.p2psim.api.topology.views.DropRateDeterminator; import de.tud.kom.p2psim.api.topology.views.DropProbabilityDeterminator;
import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator; import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator;
import de.tud.kom.p2psim.api.topology.views.TopologyView; import de.tud.kom.p2psim.api.topology.views.TopologyView;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.PositionVector;
...@@ -65,7 +66,7 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements ...@@ -65,7 +66,7 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements
/** /**
* An object that provides the drop rates for a link. * An object that provides the drop rates for a link.
*/ */
private DropRateDeterminator dropRateDeterminator; private DropProbabilityDeterminator dropProbabilityDeterminator;
/** /**
* All registered MACs * All registered MACs
...@@ -169,8 +170,8 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements ...@@ -169,8 +170,8 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements
* *
* @param dropRateDeterminator * @param dropRateDeterminator
*/ */
public void setDropRate(DropRateDeterminator dropRateDeterminator) { public void setDropRate(DropProbabilityDeterminator dropRateDeterminator) {
this.dropRateDeterminator = dropRateDeterminator; this.dropProbabilityDeterminator = dropRateDeterminator;
} }
/** /**
...@@ -191,7 +192,7 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements ...@@ -191,7 +192,7 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements
@Override @Override
public long getLatency(TopologyView view, MacAddress source, public long getLatency(TopologyView view, MacAddress source,
MacAddress destination) { MacAddress destination, Link link) {
return getPhyType().getDefaultLatency(); return getPhyType().getDefaultLatency();
} }
}; };
...@@ -199,6 +200,32 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements ...@@ -199,6 +200,32 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements
return latencyDeterminator; return latencyDeterminator;
} }
/**
* Access the {@link LatencyDeterminator} of this View. If no
* {@link LatencyDeterminator} is configured, this will return the latency
* of the PHY.
*
* @return
*/
protected DropProbabilityDeterminator getDropProbabilityDeterminator() {
if (dropProbabilityDeterminator == null) {
dropProbabilityDeterminator = new DropProbabilityDeterminator() {
@Override
public void onMacAdded(MacLayer mac, TopologyView viewParent) {
//
}
@Override
public double getDropProbability(TopologyView view,
MacAddress source, MacAddress destination, Link link) {
return getPhyType().getDefaultDropProbability();
}
};
}
return dropProbabilityDeterminator;
}
/** /**
* Default Bandwidth determination for a link: the minimum of the sources * Default Bandwidth determination for a link: the minimum of the sources
* uplink and the destinations downlink. * uplink and the destinations downlink.
...@@ -225,7 +252,8 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements ...@@ -225,7 +252,8 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements
*/ */
protected long determineLinkLatency(MacAddress source, protected long determineLinkLatency(MacAddress source,
MacAddress destination) { MacAddress destination) {
return getLatencyDeterminator().getLatency(this, source, destination); return getLatencyDeterminator().getLatency(this, source, destination,
null);
} }
/** /**
...@@ -237,7 +265,8 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements ...@@ -237,7 +265,8 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements
*/ */
protected double determineLinkDropProbability(MacAddress source, protected double determineLinkDropProbability(MacAddress source,
MacAddress destination) { MacAddress destination) {
return dropRateDeterminator.getDropRate(this, source, destination); return dropProbabilityDeterminator.getDropProbability(this, source,
destination, null);
} }
@Override @Override
...@@ -267,39 +296,8 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements ...@@ -267,39 +296,8 @@ public abstract class AbstractTopologyView<L extends DefaultLink> implements
} }
positions.put(mac.getMacAddress(), comp.getHost() positions.put(mac.getMacAddress(), comp.getHost()
.getTopologyComponent().getRealPosition()); .getTopologyComponent().getRealPosition());
if (latencyDeterminator == null) { getLatencyDeterminator().onMacAdded(mac, this);
latencyDeterminator = new LatencyDeterminator() { getDropProbabilityDeterminator().onMacAdded(mac, this);
@Override
public void onMacAdded(MacLayer mac, TopologyView viewParent) {
// nothing to do here
}
@Override
public long getLatency(TopologyView view,
MacAddress source, MacAddress destination) {
return getPhyType().getDefaultLatency();
}
};
}
latencyDeterminator.onMacAdded(mac, this);
if (dropRateDeterminator == null) {
dropRateDeterminator = new DropRateDeterminator() {
@Override
public void onMacAdded(MacLayer mac, TopologyView viewParent) {
//
}
@Override
public double getDropRate(TopologyView view,
MacAddress source, MacAddress destination) {
return view.getPhyType().getDefaultDropProbability();
}
};
}
dropRateDeterminator.onMacAdded(mac, this);
} }
} }
......
...@@ -38,13 +38,13 @@ public class DefaultLink implements Link { ...@@ -38,13 +38,13 @@ public class DefaultLink implements Link {
private MacAddress destination; private MacAddress destination;
private double dropProb; protected double dropProb;
private long bandwidth; protected long bandwidth;
private long latency; protected long latency;
private int mtu; protected int mtu;
private boolean isConnected = true; private boolean isConnected = true;
...@@ -152,4 +152,23 @@ public class DefaultLink implements Link { ...@@ -152,4 +152,23 @@ public class DefaultLink implements Link {
isOutdated = outdated; isOutdated = outdated;
} }
/**
* Enables a topology view to update the link latency, e.g., based on the
* node distance
*
* @param latency
*/
public void updateLatency(long latency) {
this.latency = latency;
}
/**
* Update the probability of a packet drop on this link
*
* @param dropProb
*/
public void updateDropProbability(double dropProb) {
this.dropProb = dropProb;
}
} }
...@@ -74,6 +74,12 @@ public class RangedLink extends DefaultLink { ...@@ -74,6 +74,12 @@ public class RangedLink extends DefaultLink {
return currentDistance; return currentDistance;
} }
/**
* Update the distance between source and destination after movement
* occurred.
*
* @param distance
*/
public void updateNodeDistance(double distance) { public void updateNodeDistance(double distance) {
this.currentDistance = distance; this.currentDistance = distance;
setConnected(distance < maxDistance); setConnected(distance < maxDistance);
......
...@@ -218,11 +218,13 @@ public class RangedTopologyView extends AbstractTopologyView<RangedLink> { ...@@ -218,11 +218,13 @@ public class RangedTopologyView extends AbstractTopologyView<RangedLink> {
/* /*
* mark all links as outdated * mark all links as outdated
*/ */
for (RangedLink link : linkList) { synchronized (linkList) {
link.setOutdated(true); for (RangedLink link : linkList) {
} link.setOutdated(true);
for (Dijkstra dijkstra : dijkstras.values()) { }
dijkstra.afterComponentsMoved(); for (Dijkstra dijkstra : dijkstras.values()) {
dijkstra.afterComponentsMoved();
}
} }
} }
...@@ -230,6 +232,20 @@ public class RangedTopologyView extends AbstractTopologyView<RangedLink> { ...@@ -230,6 +232,20 @@ public class RangedTopologyView extends AbstractTopologyView<RangedLink> {
protected void updateOutdatedLink(RangedLink link) { protected void updateOutdatedLink(RangedLink link) {
link.updateNodeDistance(getCachedPosition(link.getSource()) link.updateNodeDistance(getCachedPosition(link.getSource())
.getDistance(getCachedPosition(link.getDestination()))); .getDistance(getCachedPosition(link.getDestination())));
/*
* Update latency and drop rate - note: it depends on the actual
* implementation of the determinators, whether the value is actually
* changed.
*/
if (link.isConnected()) {
link.updateLatency(getLatencyDeterminator().getLatency(this,
link.getSource(), link.getDestination(), link));
link.updateDropProbability(
getDropProbabilityDeterminator().getDropProbability(this,
link.getSource(), link.getDestination(), link));
}
/* /*
* The distance has already been updated, we just have to check for * The distance has already been updated, we just have to check for
* obstacles. More advanced Views might update the properties based on * obstacles. More advanced Views might update the properties based on
......
...@@ -66,6 +66,7 @@ import de.tud.kom.p2psim.api.topology.obstacles.ObstacleModel; ...@@ -66,6 +66,7 @@ import de.tud.kom.p2psim.api.topology.obstacles.ObstacleModel;
import de.tud.kom.p2psim.api.topology.views.TopologyView; import de.tud.kom.p2psim.api.topology.views.TopologyView;
import de.tud.kom.p2psim.api.topology.waypoints.WaypointModel; import de.tud.kom.p2psim.api.topology.waypoints.WaypointModel;
import de.tud.kom.p2psim.impl.topology.PositionVector; import de.tud.kom.p2psim.impl.topology.PositionVector;
import de.tud.kom.p2psim.impl.topology.Topology;
import de.tud.kom.p2psim.impl.topology.views.visualization.ComponentVisManager; import de.tud.kom.p2psim.impl.topology.views.visualization.ComponentVisManager;
import de.tud.kom.p2psim.impl.topology.views.visualization.ComponentVisManager.VisInfo; import de.tud.kom.p2psim.impl.topology.views.visualization.ComponentVisManager.VisInfo;
import de.tud.kom.p2psim.impl.topology.views.visualization.ui.ComponentToggler; import de.tud.kom.p2psim.impl.topology.views.visualization.ui.ComponentToggler;
...@@ -78,7 +79,6 @@ import de.tud.kom.p2psim.impl.topology.views.visualization.world.TopologyCompone ...@@ -78,7 +79,6 @@ import de.tud.kom.p2psim.impl.topology.views.visualization.world.TopologyCompone
import de.tud.kom.p2psim.impl.topology.views.visualization.world.WeakWaypointComponentVis; import de.tud.kom.p2psim.impl.topology.views.visualization.world.WeakWaypointComponentVis;
import de.tud.kom.p2psim.impl.util.NotSupportedException; import de.tud.kom.p2psim.impl.util.NotSupportedException;
import de.tudarmstadt.maki.simonstrator.api.common.graph.INodeID; import de.tudarmstadt.maki.simonstrator.api.common.graph.INodeID;
import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor;
/** /**
* A very basic visualization of a Topology (ie. positioning and movement), just * A very basic visualization of a Topology (ie. positioning and movement), just
...@@ -125,10 +125,9 @@ public class VisualizationTopologyView extends JFrame implements TopologyView, ...@@ -125,10 +125,9 @@ public class VisualizationTopologyView extends JFrame implements TopologyView,
/** /**
* *
*/ */
@XMLConfigurableConstructor({ "worldX", "worldY" }) public VisualizationTopologyView() {
public VisualizationTopologyView(int worldX, int worldY) { WORLD_X = (int) Topology.getWorldDimension().getX();
WORLD_X = worldX; WORLD_Y = (int) Topology.getWorldDimension().getY();
WORLD_Y = worldY;
worldPanel = new WorldPanel(); worldPanel = new WorldPanel();
visManager = new ComponentVisManager(worldPanel); visManager = new ComponentVisManager(worldPanel);
......
...@@ -23,9 +23,10 @@ package de.tud.kom.p2psim.impl.topology.views.droprate; ...@@ -23,9 +23,10 @@ package de.tud.kom.p2psim.impl.topology.views.droprate;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
import de.tud.kom.p2psim.api.topology.views.DropRateDeterminator; import de.tud.kom.p2psim.api.topology.views.DropProbabilityDeterminator;
import de.tud.kom.p2psim.api.topology.views.TopologyView; import de.tud.kom.p2psim.api.topology.views.TopologyView;
import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB; import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB;
import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB.SummaryRelation; import de.tud.kom.p2psim.impl.network.modular.db.NetMeasurementDB.SummaryRelation;
...@@ -38,7 +39,7 @@ import de.tud.kom.p2psim.impl.topology.TopologyFactory; ...@@ -38,7 +39,7 @@ import de.tud.kom.p2psim.impl.topology.TopologyFactory;
* @author Bjoern Richerzhagen * @author Bjoern Richerzhagen
* @version 1.0, 24.07.2012 * @version 1.0, 24.07.2012
*/ */
public class PingERDropRate implements DropRateDeterminator { public class PingERDropRate implements DropProbabilityDeterminator {
private final Map<MacAddress, NetMeasurementDB.Host> hostMetas = new LinkedHashMap<MacAddress, NetMeasurementDB.Host>(); private final Map<MacAddress, NetMeasurementDB.Host> hostMetas = new LinkedHashMap<MacAddress, NetMeasurementDB.Host>();
...@@ -52,8 +53,13 @@ public class PingERDropRate implements DropRateDeterminator { ...@@ -52,8 +53,13 @@ public class PingERDropRate implements DropRateDeterminator {
} }
@Override @Override
public double getDropRate(TopologyView view, MacAddress source, public double getDropProbability(TopologyView view, MacAddress source,
MacAddress destination) { MacAddress destination, Link link) {
if (link != null) {
// No dynamic updates.
return link.getDropProbability();
}
SummaryRelation sumRel = TopologyFactory.getMeasurementDB() SummaryRelation sumRel = TopologyFactory.getMeasurementDB()
.getMostAccurateSummaryRelation(hostMetas.get(source), .getMostAccurateSummaryRelation(hostMetas.get(source),
......
...@@ -20,9 +20,10 @@ ...@@ -20,9 +20,10 @@
package de.tud.kom.p2psim.impl.topology.views.droprate; package de.tud.kom.p2psim.impl.topology.views.droprate;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
import de.tud.kom.p2psim.api.topology.views.DropRateDeterminator; import de.tud.kom.p2psim.api.topology.views.DropProbabilityDeterminator;
import de.tud.kom.p2psim.api.topology.views.TopologyView; import de.tud.kom.p2psim.api.topology.views.TopologyView;
import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor; import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor;
...@@ -32,7 +33,7 @@ import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor; ...@@ -32,7 +33,7 @@ import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor;
* @author Bjoern Richerzhagen * @author Bjoern Richerzhagen
* @version 1.0, 24.07.2012 * @version 1.0, 24.07.2012
*/ */
public class StaticDropRate implements DropRateDeterminator { public class StaticDropRate implements DropProbabilityDeterminator {
private double dropRate; private double dropRate;
...@@ -47,8 +48,8 @@ public class StaticDropRate implements DropRateDeterminator { ...@@ -47,8 +48,8 @@ public class StaticDropRate implements DropRateDeterminator {
} }
@Override @Override
public double getDropRate(TopologyView view, MacAddress source, public double getDropProbability(TopologyView view, MacAddress source,
MacAddress destination) { MacAddress destination, Link link) {
return dropRate; return dropRate;
} }
......
...@@ -20,11 +20,13 @@ ...@@ -20,11 +20,13 @@
package de.tud.kom.p2psim.impl.topology.views.latency; package de.tud.kom.p2psim.impl.topology.views.latency;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator; import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator;
import de.tud.kom.p2psim.api.topology.views.TopologyView; import de.tud.kom.p2psim.api.topology.views.TopologyView;
import de.tud.kom.p2psim.impl.topology.views.AbstractTopologyView; import de.tud.kom.p2psim.impl.topology.views.AbstractTopologyView;
import de.tud.kom.p2psim.impl.topology.views.RangedLink;
import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor; import de.tudarmstadt.maki.simonstrator.api.util.XMLConfigurableConstructor;
/** /**
...@@ -66,10 +68,16 @@ public class ConstantSpeedPropagationLatency implements LatencyDeterminator { ...@@ -66,10 +68,16 @@ public class ConstantSpeedPropagationLatency implements LatencyDeterminator {
@Override @Override
public long getLatency(TopologyView view, MacAddress source, public long getLatency(TopologyView view, MacAddress source,
MacAddress destination) { MacAddress destination, Link link) {
AbstractTopologyView<?> abstractView = (AbstractTopologyView<?>) view; double distance = -1;
double distance = abstractView.getPosition(source).getDistance( if (link != null && link instanceof RangedLink) {
abstractView.getPosition(destination)); distance = ((RangedLink) link).getNodeDistance();
}
if (distance == -1) {
AbstractTopologyView<?> abstractView = (AbstractTopologyView<?>) view;
distance = abstractView.getPosition(source)
.distanceTo(abstractView.getPosition(destination));
}
double time = distance / speed; double time = distance / speed;
return Math.round(time); return Math.round(time);
} }
......
...@@ -20,11 +20,13 @@ ...@@ -20,11 +20,13 @@
package de.tud.kom.p2psim.impl.topology.views.latency; package de.tud.kom.p2psim.impl.topology.views.latency;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator; import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator;
import de.tud.kom.p2psim.api.topology.views.TopologyView; import de.tud.kom.p2psim.api.topology.views.TopologyView;
import de.tud.kom.p2psim.impl.topology.views.AbstractTopologyView; import de.tud.kom.p2psim.impl.topology.views.AbstractTopologyView;
import de.tud.kom.p2psim.impl.topology.views.RangedLink;
import de.tudarmstadt.maki.simonstrator.api.Time; import de.tudarmstadt.maki.simonstrator.api.Time;
/** /**
...@@ -54,10 +56,16 @@ public class DistanceBasedLatency implements LatencyDeterminator { ...@@ -54,10 +56,16 @@ public class DistanceBasedLatency implements LatencyDeterminator {
@Override @Override
public long getLatency(TopologyView view, MacAddress source, public long getLatency(TopologyView view, MacAddress source,
MacAddress destination) { MacAddress destination, Link link) {
AbstractTopologyView<?> abstractView = (AbstractTopologyView<?>) view; double distance = -1;
double distance = abstractView.getPosition(source).getDistance( if (link != null && link instanceof RangedLink) {
abstractView.getPosition(destination)); distance = ((RangedLink) link).getNodeDistance();
}
if (distance == -1) {
AbstractTopologyView<?> abstractView = (AbstractTopologyView<?>) view;
distance = abstractView.getPosition(source)
.distanceTo(abstractView.getPosition(destination));
}
return baseLatency + (long) ((distance / 1000) * latencyPerKilometer); return baseLatency + (long) ((distance / 1000) * latencyPerKilometer);
} }
......
...@@ -24,6 +24,7 @@ import java.util.LinkedHashMap; ...@@ -24,6 +24,7 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator; import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator;
...@@ -51,7 +52,11 @@ public class GNPLatency implements LatencyDeterminator { ...@@ -51,7 +52,11 @@ public class GNPLatency implements LatencyDeterminator {
@Override @Override
public long getLatency(TopologyView view, MacAddress source, public long getLatency(TopologyView view, MacAddress source,
MacAddress destination) { MacAddress destination, Link link) {
if (link != null) {
return link.getLatency();
}
List<Double> sndCoords = hostMetas.get(source).getCoordinates(); List<Double> sndCoords = hostMetas.get(source).getCoordinates();
List<Double> rcvCoords = hostMetas.get(destination).getCoordinates(); List<Double> rcvCoords = hostMetas.get(destination).getCoordinates();
......
...@@ -23,6 +23,7 @@ package de.tud.kom.p2psim.impl.topology.views.latency; ...@@ -23,6 +23,7 @@ package de.tud.kom.p2psim.impl.topology.views.latency;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator; import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator;
...@@ -53,7 +54,11 @@ public class PingERLatency implements LatencyDeterminator { ...@@ -53,7 +54,11 @@ public class PingERLatency implements LatencyDeterminator {
@Override @Override
public long getLatency(TopologyView view, MacAddress source, public long getLatency(TopologyView view, MacAddress source,
MacAddress destination) { MacAddress destination, Link link) {
if (link != null) {
return link.getLatency();
}
SummaryRelation rel = TopologyFactory.getMeasurementDB() SummaryRelation rel = TopologyFactory.getMeasurementDB()
.getMostAccurateSummaryRelation(hostMetas.get(source), .getMostAccurateSummaryRelation(hostMetas.get(source),
......
...@@ -22,6 +22,7 @@ package de.tud.kom.p2psim.impl.topology.views.latency; ...@@ -22,6 +22,7 @@ package de.tud.kom.p2psim.impl.topology.views.latency;
import java.util.Random; import java.util.Random;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator; import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator;
...@@ -65,7 +66,10 @@ public class StaticLatency implements LatencyDeterminator { ...@@ -65,7 +66,10 @@ public class StaticLatency implements LatencyDeterminator {
@Override @Override
public long getLatency(TopologyView view, MacAddress source, public long getLatency(TopologyView view, MacAddress source,
MacAddress destination) { MacAddress destination, Link link) {
if (link != null) {
return link.getLatency();
}
if (doubleVariance == 0) { if (doubleVariance == 0) {
return staticLatency; return staticLatency;
} else { } else {
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
package de.tud.kom.p2psim.impl.topology.views.latency; package de.tud.kom.p2psim.impl.topology.views.latency;
import de.tud.kom.p2psim.api.linklayer.mac.Link;
import de.tud.kom.p2psim.api.linklayer.mac.MacAddress; import de.tud.kom.p2psim.api.linklayer.mac.MacAddress;
import de.tud.kom.p2psim.api.linklayer.mac.MacLayer; import de.tud.kom.p2psim.api.linklayer.mac.MacLayer;
import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator; import de.tud.kom.p2psim.api.topology.views.LatencyDeterminator;
...@@ -35,7 +36,7 @@ public class ZeroLatency implements LatencyDeterminator { ...@@ -35,7 +36,7 @@ public class ZeroLatency implements LatencyDeterminator {
@Override @Override
public long getLatency(TopologyView view, MacAddress source, public long getLatency(TopologyView view, MacAddress source,
MacAddress destination) { MacAddress destination, Link link) {
return 0; return 0;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment