Exemplo n.º 1
0
        // 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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            SimulationEnvironment sTest = new SimulationEnvironment();

            // Add Test Nodes
            sTest.AddNode(new MobileNode(0, 0, 100));
            sTest.AddNode(new MobileNode(100, 110, 100));
            sTest.AddNode(new MobileNode(110, 100, 100));
            sTest.AddNode(new MobileNode(198, 198, 100));
            // Add Test Message
            sTest.AddMessage(new Message(sTest.GetNodes()[0], sTest.GetNodes()[3]));

            // Print Simulation Nodes
            foreach (MobileNode node in sTest.GetNodes())
            {
                node.Print();
                node.PrintNodesWithinRange(sTest);
                Console.WriteLine();
            }

            // Send 1st message
            sTest.SendMessageDSR(sTest.GetMessages()[0]);

            // Print Nodes After Message
            foreach (MobileNode node in sTest.GetNodes())
            {
                node.Print();
            }

            Console.ReadKey();
        }
Exemplo n.º 4
0
        // 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));
        }
Exemplo n.º 5
0
        public void export(SimulationEnvironment sim)
        {
            // Append metrics to the end of the csv file
            StringBuilder data = new StringBuilder();
            string        path = "D:\\data.csv";

            data.AppendFormat("{0}, {1}, {2}", AEED(sim), PDR(sim), NRO(sim));
            data.AppendLine();
            File.AppendAllText(path, data.ToString());
        }
Exemplo n.º 6
0
        public List <MobileNode> GetNodesWithinRange(SimulationEnvironment env)
        {
            List <MobileNode> nodes = new List <MobileNode>();

            foreach (MobileNode node in env.GetNodes())
            {
                if (IsWithinRangeOf(node) && !node.Equals(this))
                {
                    nodes.Add(node);
                }
            }
            return(nodes);
        }
Exemplo n.º 7
0
        private double AEED(SimulationEnvironment sim)
        {
            // Calculate the average time it takes for a data packet to get delivered
            // Get the speed of each message in the simulate environment and calculate average speed
            // Return calculated result
            double total = 0;

            foreach (Message msg in sim.GetMessages())
            {
                total += msg.GetMsgSpeed();
            }
            return(total / sim.GetMessages().Count);
        }
Exemplo n.º 8
0
 public void PrintNodesWithinRange(SimulationEnvironment env)
 {
     foreach (MobileNode n in env.GetNodes())
     {
         if (!this.Equals(n))
         {
             if (IsWithinRangeOf(n))
             {
                 Console.WriteLine("Node {0} is within range. Distance: {1}", n.GetNodeID(), GetDistance(n));
             }
             else
             {
                 Console.WriteLine("Node {0} is not within range. Distance: {1}", n.GetNodeID(), GetDistance(n));
             }
         }
     }
 }
Exemplo n.º 9
0
        // 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);
        }
Exemplo n.º 10
0
        // 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);
        }
Exemplo n.º 11
0
        private double PDR(SimulationEnvironment sim)
        {
            // Get information about the amount of packets received and sent
            // Look at the packets sent and received and calculate the ratio
            // Return calculated result
            double sent     = 0;
            double received = 0;

            foreach (MobileNode node in sim.GetNodes())
            {
                sent     += node.getNumberOfSentPackets();
                received += node.getNumberOfReceivedPackets();
            }
            if (received != 0)
            {
                return(sent / received);
            }
            return(received);
        }
Exemplo n.º 12
0
        private double NRO(SimulationEnvironment sim)
        {
            // Calculate total control packets divided by the total packets received in the network
            // Get the number of control and received packets
            // Sum up all the control and received packets and divide them to obtain nro
            // Return calculated result
            double sent     = 0;
            double received = 0;

            foreach (MobileNode node in sim.GetNodes())
            {
                sent     += node.GetNumRPackets();
                received += node.getNumberOfReceivedPackets();
            }
            if (received != 0)
            {
                return(sent / received);
            }
            return(received);
        }
Exemplo n.º 13
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);
        }
Exemplo n.º 14
0
        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();
        }
Exemplo n.º 15
0
 private void BDD(SimulationEnvironment sim)
 {
     // This will be considered later
 }