Get network loop tracking working.

This commit is contained in:
2018-04-09 17:17:40 +03:00
parent a96634faef
commit c609571f39
6 changed files with 111 additions and 65 deletions

View File

@ -77,6 +77,7 @@ namespace EduNetworkBuilder
public List<NetShape> Shapes = new List<NetShape>(); //For storing simple shapes which are drawn on the network
public bool IsRandomNetwork = false;
public bool InShapeEditMode = false;
public bool HadLoop = false;
private List<AnimationClass> Animations = new List<AnimationClass>();
@ -837,7 +838,9 @@ namespace EduNetworkBuilder
{
if (nt.sHost == Source && !nt.TestComplete())
{
if (WhatFor == ContextTest.ping && (nt.TheTest == NetTestType.FailedPing || nt.TheTest == NetTestType.SuccessfullyPings
if (WhatFor == ContextTest.ping && (nt.TheTest == NetTestType.FailedPing
|| nt.TheTest == NetTestType.SuccessfullyPings
|| nt.TheTest == NetTestType.SuccessfullyPingsWithoutLoop
|| nt.TheTest == NetTestType.SuccessfullyPingsAgain))
tDests.Add(nt.dHost);
if (WhatFor == ContextTest.arp && nt.TheTest == NetTestType.SuccessfullyArps)
@ -1341,6 +1344,10 @@ namespace EduNetworkBuilder
nt.SetDone(PacketID);
if (nt.TheTest == NetTestType.SuccessfullyPings && packet_type == PacketType.ping_answer && sHost == nt.sHost && dHost == null && dIP != null && dIP.BroadcastAddress == dIP.GetIP && dIP.GetIPString == nt.dHost)
nt.SetDone(PacketID);
if (nt.TheTest == NetTestType.SuccessfullyPingsWithoutLoop && !HadLoop && packet_type == PacketType.ping_answer && sHost == nt.sHost && dHost == nt.dHost)
nt.SetDone(PacketID);
if (nt.TheTest == NetTestType.SuccessfullyPingsWithoutLoop && !HadLoop && packet_type == PacketType.ping_answer && sHost == nt.sHost && dHost == null && dIP != null && dIP.BroadcastAddress == dIP.GetIP && dIP.GetIPString == nt.dHost)
nt.SetDone(PacketID);
if (nt.TheTest == NetTestType.SuccessfullyTraceroutes && packet_type == PacketType.tracert_reply && sHost == nt.sHost && dHost == nt.dHost)
nt.SetDone(PacketID);
if (nt.TheTest == NetTestType.SuccessfullyTraceroutes && packet_type == PacketType.tracert_reply && sHost == nt.sHost && dHost == null && dIP != null && dIP.BroadcastAddress == dIP.GetIP && dIP.GetIPString == nt.dHost)
@ -1348,6 +1355,7 @@ namespace EduNetworkBuilder
}
}
public bool HasCompletedPingTest(PacketType packet_type, NetworkDevice source, NB_IPAddress sIP, NB_IPAddress dIP, int PacketID)
{
if (packet_type != PacketType.ping_answer) return false; //This only works with pings.
@ -1628,6 +1636,7 @@ namespace EduNetworkBuilder
AlreadyChosenTimeout = false; //we do this at the beginning of processing
NumberOfSecondsForTimeout = DefaultTimeout;
NetworkStartTime = DateTime.Now;
ClearPacketCounters();
}
ProcessPacketsOnce();
if(!ProcessingShouldContinue())
@ -1674,6 +1683,7 @@ namespace EduNetworkBuilder
NB.SetProgress(0, NumberOfSecondsForTimeout);
NB.UpdateMessages();
NB.MarkToUpdate();
ClearPacketCounters();
}
previously_had_packets = false;
}
@ -1687,6 +1697,19 @@ namespace EduNetworkBuilder
}
}
public void ClearPacketCounters()
{
HadLoop = false;
foreach(NetworkComponent NC in NetComponents)
{
if(NC is NetworkDevice)
{
NetworkDevice ND = (NetworkDevice)NC;
ND.PacketIDsPassedThrough.Clear();
}
}
}
public void AddAnimation(AnimationName What, Rectangle Where)
{
Animations.Add(new AnimationClass(What, Where));