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)