Exemple #1
0
 public void UpdateTable(RoutingTable receivedTable, int metric, int time, int updateSeconds)
 {
     InstallTime(receivedTable, time);
     BrokenLink(receivedTable);
     if (NewNeighbor(receivedTable, metric, time) || NewRouter(receivedTable, metric, time) || UpdateLines(receivedTable, metric))
     {
         OwnLine().SequenceNumber += 2;
     }
     _routingTableLines.Find(x => x.Destination == receivedTable.OwnLine().Destination).SequenceNumber = receivedTable.OwnLine().SequenceNumber;
 }
Exemple #2
0
        public bool NewNeighbor(RoutingTable receivedTable, int metric, int time)
        {
            var updated  = false;
            var infoLine = receivedTable.OwnLine();

            if (!_routingTableLines.Exists(x => x.Destination == infoLine.Destination))
            {
                AddLine(infoLine.Destination, infoLine.Destination, metric, infoLine.SequenceNumber, time);
                updated = true;
            }
            return(updated);
        }
Exemple #3
0
        public void ChangeWeight(RoutingTable routingTable, int newWeight, string neighbor)
        {
            var neighborLine = routingTable.RoutingTableLines.Find(x => x.Destination == neighbor);
            int oldWeight    = neighborLine.Metric;

            routingTable.OwnLine().SequenceNumber += 2;
            neighborLine.SequenceNumber += 2;

            var toChange = routingTable.RoutingTableLines.FindAll(x => x.NextHop == neighborLine.Destination);

            foreach (var line in toChange)
            {
                line.Metric += newWeight - oldWeight;
            }
        }
Exemple #4
0
        public void BrokenLink(RoutingTable receivedTable)
        {
            var infoLine = receivedTable.OwnLine();

            foreach (var line in receivedTable._routingTableLines)
            {
                if (line.SequenceNumber.IsOdd())
                {
                    var toChange = _routingTableLines.Find(x => x.Destination == line.Destination && x.NextHop == infoLine.Destination);
                    if (toChange != null)
                    {
                        toChange.Update(line.NextHop, line.Metric, line.SequenceNumber);
                    }
                }
            }
        }
Exemple #5
0
        public bool NewRouter(RoutingTable receivedTable, int metric, int time)
        {
            bool updated      = false;
            var  infoLine     = receivedTable.OwnLine();
            var  neighborLine = _routingTableLines.Find(x => x.Destination == receivedTable.OwnLine().Destination);

            if (infoLine.SequenceNumber == neighborLine.SequenceNumber)
            {
                foreach (var line in receivedTable._routingTableLines)
                {
                    if (!_routingTableLines.Exists(x => x.Destination == line.Destination) && !line.SequenceNumber.IsOdd())
                    {
                        AddLine(line.Destination, infoLine.Destination, metric + line.Metric, line.SequenceNumber, time);
                        updated = true;
                    }
                }
            }
            if (infoLine.SequenceNumber > neighborLine.SequenceNumber)
            {
                foreach (var line in receivedTable._routingTableLines)
                {
                    if (!_routingTableLines.Exists(x => x.Destination == line.Destination) && !line.SequenceNumber.IsOdd())
                    {
                        AddLine(line.Destination, infoLine.Destination, metric + line.Metric, line.SequenceNumber, time);
                        updated = true;
                    }
                    else
                    {
                        var toCheck = _routingTableLines.Find(x => x.Destination == line.Destination);
                        {
                            if (toCheck.Metric > line.Metric + metric)
                            {
                                toCheck.Update(infoLine.Destination, line.Metric + metric, line.SequenceNumber);
                                updated = true;
                            }
                        }
                    }
                }
            }


            return(updated);
        }
Exemple #6
0
 public void ReceiveTable(RoutingTable table, Router sender, int time, int updateSeconds)
 {
     RoutingTable.UpdateTable(table, _neighbors[sender], time, updateSeconds);
 }
Exemple #7
0
 public Router(string name)
 {
     _neighbors    = new Dictionary <Router, int>();
     _name         = name;
     _routingTable = new RoutingTable(this.Name);
 }