diff --git a/EduNetworkBuilder/NetworkCard.cs b/EduNetworkBuilder/NetworkCard.cs index e175f43..1d7d5d5 100644 --- a/EduNetworkBuilder/NetworkCard.cs +++ b/EduNetworkBuilder/NetworkCard.cs @@ -924,6 +924,14 @@ namespace EduNetworkBuilder } } + public void UpdateAllNicsVLANInfoAfterClone() + { + foreach (NetworkInterface nf in interfaces) + { + nf.UpdateVLANsAfterClone(); + } + } + public void LockUsOutOfCard() { foreach (NetworkInterface nf in interfaces) diff --git a/EduNetworkBuilder/NetworkDevice.cs b/EduNetworkBuilder/NetworkDevice.cs index 97b304c..c57ff56 100644 --- a/EduNetworkBuilder/NetworkDevice.cs +++ b/EduNetworkBuilder/NetworkDevice.cs @@ -1535,6 +1535,7 @@ namespace EduNetworkBuilder NICs.Clear(); foreach(NetworkCard nic in ndCopyFrom.NICs) { + nic.UpdateAllNicsVLANInfoAfterClone(); NICs.Add(NetworkCard.Clone(nic)); } diff --git a/EduNetworkBuilder/NetworkInterface.cs b/EduNetworkBuilder/NetworkInterface.cs index d40dd55..2b715ee 100644 --- a/EduNetworkBuilder/NetworkInterface.cs +++ b/EduNetworkBuilder/NetworkInterface.cs @@ -69,14 +69,40 @@ namespace EduNetworkBuilder } } + /// + /// When we are doing replays and we load in a network interface using reflection, + /// it can create a duplicate VLAN tag (1,untagged). Rebuilding these fixes that. + /// + public void UpdateVLANsAfterClone() + { + List tmpVLANs = new List(); + tmpVLANs.AddRange(VLANs); + VLANs.Clear(); + foreach(VLANInfo VLI in tmpVLANs) + { + bool found = false; + foreach(VLANInfo VLI2 in VLANs) + { + if(VLI2.ID == VLI.ID) + { + VLI2.Tag = VLI.Tag; + found = true; + } + } + if (!found) + VLANs.Add(VLI); + } + } + public VLANInfo GetVLANInfo(int id) { + VLANInfo status = null; foreach(VLANInfo one in VLANs) { if (one.ID == id) - return one; + status = one; } - return null; + return status; } public bool Equals(NetworkInterface CompareWith)