// Implement modified SA-DSR public RoutingPacket MSADSRRouteDiscovery(MobileNode destNode, SimulationEnvironment env) { RoutingPacket optRoute = new RoutingPacket(); RoutingPacket rPacket = new RoutingPacket(); List <RoutingPacket> routes = DSRDiscovery(destNode, env, rPacket); int minMisbehavedNodes = 999999; routes = TwoAck(routes); foreach (RoutingPacket r in routes) { if (minMisbehavedNodes >= r.GetMisbehavedNodes().Count) { minMisbehavedNodes = r.GetMisbehavedNodes().Count; optRoute = r; } } return(optRoute); }
// Adding nodes to routes private List <RoutingPacket> DSRDiscovery(MobileNode destNode, SimulationEnvironment env, RoutingPacket route) { List <RoutingPacket> routes = new List <RoutingPacket>(); if (knownRoutes.ContainsKey(destNode.GetNodeID())) { foreach (RoutingPacket r in knownRoutes[destNode.GetNodeID()]) { RoutingPacket r2 = route.Copy(); r2.AddNodesToRoute(r.GetNodeRoute()); routes.Add(r2); } return(routes); } List <MobileNode> nodesWithinRange = GetNodesWithinRange(env); if (nodesWithinRange.Count == 0 && !destNode.Equals(this)) { return(null); } foreach (MobileNode node in nodesWithinRange) { if (!route.IsInRouteAlready(node)) { if (node.Equals(destNode)) { RoutingPacket rPacket = route.Copy(); rPacket.AddNodeToRoute(this); rPacket.AddNodeToRoute(node); routes.Add(rPacket); } else { RoutingPacket rPacket = route.Copy(); rPacket.AddNodeToRoute(this); routes.AddRange(node.DSRDiscovery(destNode, env, rPacket)); } } } return(routes); }
public RoutingPacket GetBestRouteDSR(MobileNode node) { List <RoutingPacket> routes = GetRoutesToNode(node); if (routes == null) { return(null); } int lowestValue = 999999; int lowestIndex = -1; for (int i = 0; i < routes.Count; i++) { int rLength = routes[i].GetRouteLength(); if (rLength < lowestValue) { lowestValue = rLength; lowestIndex = i; } } return(routes[lowestIndex]); }
// Adding SendMessageSADSR here public bool SendMessageDSR(Message message) { MobileNode sourceNode = message.GetSourceNode(); MobileNode destinationNode = message.GetDestinstationNode(); RoutingPacket route = sourceNode.GetBestRouteDSR(destinationNode); // If no known route found if (route == null) { Console.WriteLine("No Known Route to Destination."); sourceNode.RouteDiscoveryDSR(destinationNode, this); // Perform Route Discovery route = sourceNode.GetBestRouteDSR(destinationNode); // Attempt to assign newly found best route if (route == null) { Console.WriteLine("No Route to Destination."); return(false); } } Console.WriteLine("Sending Message:"); Console.WriteLine("Source Node: " + sourceNode.GetNodeID()); Console.WriteLine("Destination Node: " + destinationNode.GetNodeID()); Console.WriteLine("Route Chosen: " + route.GetRouteAsString()); List <MobileNode> nodes = route.GetNodeRoute(); Console.WriteLine("Beginning Message Transmission from Source Node " + sourceNode.GetNodeID()); for (int i = 1; i < nodes.Count; i++) { Console.WriteLine("Sending Message from {0} to {1}.", nodes[i - 1].GetNodeID(), nodes[i].GetNodeID()); nodes[i - 1].TransmitPacket(); nodes[i].ReceiveProcessPacket(); } Console.WriteLine("Received Message at Destination Node " + destinationNode.GetNodeID()); return(true); }
// Get the optimal route for SA-DSR public RoutingPacket optimalRouteSADSR(MobileNode node) { List <RoutingPacket> routes = GetRoutesToNode(node); RoutingPacket optRoute = new RoutingPacket(); double sdp = 0; if (routes == null) { return(null); } foreach (RoutingPacket r in routes) { r.CalcSDP(); } foreach (RoutingPacket r in routes) { if (sdp < r.getSDP()) { sdp = r.getSDP(); optRoute = r; } } return(optRoute); }
public bool IsWithinRangeOf(MobileNode node) { return(GetDistance(node) < 200); }
public double GetDistance(MobileNode node) { return(Math.Sqrt((Math.Pow((xPosition - node.xPosition), 2)) + (Math.Pow((yPosition - node.yPosition), 2)))); }
private List <RoutingPacket> DSRDicovery(MobileNode destNode, SimulationEnvironment env, RoutingPacket route) { List <RoutingPacket> routes = new List <RoutingPacket>(); if (knownRoutes.ContainsKey(destNode.GetNodeID())) { foreach (RoutingPacket r in knownRoutes[destNode.GetNodeID()]) { RoutingPacket r2 = route.Copy(); r2.AddNodesToRoute(r.GetNodeRoute()); routes.Add(r2); } return(routes); } List <MobileNode> nodesWithinRange = GetNodesWithinRange(env); if (nodesWithinRange.Count == 0 && !destNode.Equals(this)) { return(null); } foreach (MobileNode node in nodesWithinRange) { // If node isn't in route yet... if (!route.IsInRouteAlready(node)) { // If node is the destination node... if (node.Equals(destNode)) { //Obtaining all possible routes RoutingPacket rPacket = route.Copy(); rPacket.AddNodeToRoute(this); // Adding nodes to route rPacket.AddNodeToRoute(node); routes.Add(rPacket); // Adding all possible routes Console.WriteLine("Sending RREQ from Node {0} to Node {1}.", nodeID, node.GetNodeID()); TransmitPacket(); node.ReceiveProcessPacket(); Console.WriteLine("Sending RREP from Node {0} to Node {1}.", node.GetNodeID(), nodeID); node.TransmitPacket(); ReceiveProcessPacket(); } else { RoutingPacket rPacket = route.Copy(); rPacket.AddNodeToRoute(this); Console.WriteLine("Sending RREQ from Node {0} to Node {1}.", nodeID, node.GetNodeID()); TransmitPacket(); node.ReceiveProcessPacket(); routes.AddRange(node.DSRDicovery(destNode, env, rPacket)); // Recursive call } } } foreach (RoutingPacket r in routes) { if (r.GetNodeRoute().Contains(destNode)) { List <MobileNode> rList = r.GetNodeRoute(); for (int i = 0; i < rList.Count; i++) { if (rList[i] == this && i != 0) { Console.WriteLine("Sending RREP from Node {0} to Node {1}.", nodeID, rList[i - 1].GetNodeID()); TransmitPacket(); rList[i - 1].GetNodeID(); } } } } return(routes); }
public Message(MobileNode src, MobileNode dst) { messageID = ++messageCount; sourceNode = src; destinationNode = dst; }
public bool IsInRouteAlready(MobileNode node) { return(nodeRoute.Contains(node)); }
public void AddNodeToMisbehaved(MobileNode node) { misbehavedNodes.Add(node); }
public void AddNodeToRoute(MobileNode node) { nodeRoute.Add(node); }
public void AddNode(MobileNode node) { mobileNodes.Add(node); }