// Assigning a route to each destination node public List <RoutingPacket> DSRRouteDiscovery(MobileNode destNode, SimulationEnvironment env) { RoutingPacket rPacket = new RoutingPacket(); List <RoutingPacket> routes = DSRDiscovery(destNode, env, rPacket); if (knownRoutes.ContainsKey(destNode.GetNodeID())) { foreach (RoutingPacket r in routes) { bool exists = false; foreach (RoutingPacket r2 in knownRoutes[destNode.GetNodeID()]) { if (r2.RouteCompare(r)) { exists = true; break; } } if (!exists) { knownRoutes[destNode.GetNodeID()].Add(r); } } } else { knownRoutes.Add(destNode.GetNodeID(), routes); } return(routes); }
public List <RoutingPacket> RouteDiscoveryDSR(MobileNode destNode, SimulationEnvironment env) { Console.WriteLine("Performing Route Discovery from Node {0} to Node {1}.", nodeID, destNode.GetNodeID()); RoutingPacket rPacket = new RoutingPacket(); List <RoutingPacket> routes = DSRDicovery(destNode, env, rPacket); if (knownRoutes.ContainsKey(destNode.GetNodeID())) { foreach (RoutingPacket r in routes) { bool exists = false; foreach (RoutingPacket r2 in knownRoutes[destNode.GetNodeID()]) { if (r2.RouteCompare(r)) { exists = true; break; } } if (!exists) { knownRoutes[destNode.GetNodeID()].Add(r); } } } else { knownRoutes.Add(destNode.GetNodeID(), routes); } return(routes); }
// Calculate optimal route public RoutingPacket GetOptimalRouteSADSR(List <RoutingPacket> routes) { RoutingPacket optRoute = new RoutingPacket(); double sdp = 0; // Calculate the SDP of all routes to destination foreach (RoutingPacket r in routes) { r.CalcSDP(); } // Get the optimal route foreach (RoutingPacket r in routes) { if (sdp < r.getSDP()) { sdp = r.getSDP(); optRoute = r; } } // Print SDP of optimal route foreach (RoutingPacket r in routes) { Console.WriteLine("SDP of route: {0}", r.getSDP()); } return(optRoute); }
// Implement SADSR public RoutingPacket SADSRRouteDiscovery(MobileNode destNode, SimulationEnvironment env) { // In this protocol, we want to get the route that has the best SDP RoutingPacket rPacket = new RoutingPacket(); List <RoutingPacket> routes = DSRDiscovery(destNode, env, rPacket); routes = CalcAltruisticSADSR(routes); return(GetOptimalRouteSADSR(routes)); }
public RoutingPacket Copy() { RoutingPacket packet = new RoutingPacket(); foreach (MobileNode node in nodeRoute) { packet.AddNodeToRoute(node); } return(packet); }
public bool dSendMessage(Message message, RoutingPacket route) { Console.WriteLine("Routing Packet Selected: {0}", route.GetRouteAsString()); List <MobileNode> nodes = route.GetNodeRoute(); Console.WriteLine("Beginning Message Transmission from Source Node " + nodes[0].GetNodeID()); for (int i = 1; i < nodes.Count; i++) { Console.WriteLine("Sending Message from {0} to {1}.", nodes[i - 1].GetNodeID(), nodes[i].GetNodeID()); } Console.WriteLine("Received Message at Destination Node " + nodes[nodes.Count - 1].GetNodeID()); return(true); }
// 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); }
public bool RouteCompare(RoutingPacket route) { if (nodeRoute.Count != route.GetNodeRoute().Count) { return(false); } else { for (int i = 0; i < nodeRoute.Count; i++) { if (!nodeRoute[i].Equals(route.GetNodeRoute()[i])) { return(false); } } return(true); } }
// 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 bool DSRSMessage(Message message, RoutingPacket route, int step) { if (message.GetDestinstationNode().Equals(this)) { // Record the message received this.received++; message.calcMsgSpeed(message.GetSourceNode(), message.GetDestinstationNode()); Console.WriteLine("Message {0} received at Node {1}.", message.GetMessageID(), nodeID); return(true); } else { // Here randomly get a node to drop the message if (this.PacketDrop() == true) { Console.WriteLine("Message {0} dropped by Node {1}.", message.GetMessageID(), nodeID); return(false); } Console.WriteLine("Relaying Message {0} through Node {1}.", message.GetMessageID(), nodeID); return(route.GetNodeRoute()[++step].DSRSMessage(message, route, ++step)); } }
// 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); }
// 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); }
public bool DSRSendMessage(Message message, RoutingPacket route) { this.sent++; return(DSRSMessage(message, route, 0)); }
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); }
static void Main(string[] args) { SimulationEnvironment sTest = new SimulationEnvironment(); sTest.GetNodes().Add(new MobileNode(0, 0, 100)); sTest.GetNodes().Add(new MobileNode(100, 110, 100)); sTest.GetNodes().Add(new MobileNode(110, 100, 100)); sTest.GetNodes().Add(new MobileNode(198, 198, 100)); sTest.GetMessages().Add(new Message(sTest.GetNodes()[0], sTest.GetNodes()[3])); foreach (MobileNode node in sTest.GetNodes()) { node.Print(); foreach (MobileNode n in sTest.GetNodes()) { if (!node.Equals(n)) { if (node.IsWithinRangeOf(n)) { Console.WriteLine("Node {0} is within range. Distance: {1}", n.GetNodeID(), node.GetDistance(n)); } else { Console.WriteLine("Node {0} is not within range. Distance: {1}", n.GetNodeID(), node.GetDistance(n)); } } } Console.WriteLine(); } sTest.GetMessages()[0].Print(); List <RoutingPacket> packets = sTest.GetNodes()[0].DSRRouteDiscovery(sTest.GetNodes()[3], sTest); // Calling SA-DSR RoutingPacket optRoute = sTest.GetNodes()[0].SADSRRouteDiscovery(sTest.GetNodes()[3], sTest); // Calling Modified SA-DSR RoutingPacket optRoute2 = sTest.GetNodes()[0].MSADSRRouteDiscovery(sTest.GetNodes()[3], sTest); Console.WriteLine("{0} Routes Found.", packets.Count); foreach (RoutingPacket route in packets) { Console.WriteLine("Route:"); Console.WriteLine("=============================="); foreach (MobileNode node in route.GetNodeRoute()) { Console.Write("{0} ", node.GetNodeID()); } Console.WriteLine(); Console.WriteLine("=============================="); } // Testing SA-DSR Console.Write("SA-DSR Optimal Route: "); foreach (MobileNode node in optRoute.GetNodeRoute()) { Console.Write("{0} ", node.GetNodeID()); } Console.WriteLine(); Console.WriteLine("=============================="); // Testing modified SA-DSR Console.Write("Modified SA-DSR Optimal Route: "); foreach (MobileNode node in optRoute2.GetNodeRoute()) { Console.Write("{0} ", node.GetNodeID()); } Console.WriteLine(); Console.WriteLine("=============================="); sTest.GetNodes()[0].DSRSendMessage(sTest.GetMessages()[0], packets[0]); Console.ReadKey(); SimulationEnvironment sim = new SimulationEnvironment(); sim.GenerateRandomNodes(15); sim.GenerateRandomMessages(50); Console.WriteLine("=============================================="); Console.WriteLine("Simulation Nodes"); Console.WriteLine("=============================================="); foreach (MobileNode node in sim.GetNodes()) { node.Print(); foreach (MobileNode n in sim.GetNodes()) { if (!node.Equals(n)) { if (node.IsWithinRangeOf(n)) { Console.WriteLine("Node {0} is within range. Distance: {1}", n.GetNodeID(), node.GetDistance(n)); } else { Console.WriteLine("Node {0} is not within range. Distance: {1}", n.GetNodeID(), node.GetDistance(n)); } } } Console.WriteLine(); } Console.WriteLine(); Console.WriteLine("=============================================="); Console.WriteLine("Simulation Messages"); Console.WriteLine("=============================================="); foreach (Message message in sim.GetMessages()) { message.Print(); } foreach (MobileNode node in sTest.GetNodes()) { node.printKnownRoutes(); } // Export data here DataExporter d = new DataExporter(); d.export(sTest); Console.ReadKey(); }