Compare commits

..

25 Commits

Author SHA1 Message Date
fdc3877e4f Fix some spelling mistakes 2019-05-15 14:38:07 -05:00
93f0c6e4a3 Allow ping/arp/traceroute to cancel by 'x'
WellDone ought to default to "false" so that canceling the
form does not return a true.

However, that then means that the validating (particularly for DHCP)
needs to be handled differently.   Otherwise validation would ONLY
occur when you press OK.   (Not a terrible thing, but also not ideal.)

In any case, this is a solution I found on the internet. It seems
to work nicely. Validating still runs unless the form is closing
(via ESC, Cancel, or X), including when moving from textbox to
textbox, or tabbing to OK.

I think this also solves a lingering problem where DHCP couldn't
X out without attempting to validate.   So it feels like an all-around winner.

Step to reproduce:   Level0 ping test
1.) on net_switch0, try to ping pc0.
   -tab through and notice that pc0 resolves to 192.168.1.2 on OK button.
 2.) close with form window using X
   -notice that the ping happens anyway.   Same is true for arp and traceroute.
2019-04-29 17:15:10 -05:00
5d06bfd8f3 Simple typo. 192.168 instead of 102.168 2019-04-29 16:32:32 -05:00
a0790918fb Tag PC3 on Level 6 VLAN Firewalls (Level6_VLANRouting3). It was on the default vlan instead of the student vlan. 2019-04-15 08:33:51 -05:00
c2f41ae5b9 tracert: respond from requested IP address
If a device does a traceroute to the opposite side of a router,
the traceroute request will continue on to the next gateway
until it dies from not being able to return on the same NIC.

Instead, respond to traceroute requests from the "pinged"
ip address (so that the originator stops requesting more
tracert packets) instead of the closest address to the
originator.

Scenario: Level 3 It is dead, Jim
1.) from PC1, traceroute to the far side of router2 (192.168.3.2).
Notice that the tracert continues on two times to router0 before
dying.
2019-04-13 10:18:02 -05:00
f5cb1875d2 Allow forwarding devices to respond to tracert_requests
Things like switches could not be tracert'd.

Scenario: Level 3 It is dead, Jim.
1.) from PC2, do a tracert to net_switch0.
Notice that there is no response.
2019-04-13 10:13:12 -05:00
5e39a2896d No routing/sending destination for ZeroIPString
pinging 0.0.0.0 should not go anywhere, but previously
it could be routed anywhere by default gateways etc.

Scenario: Level 3 It's dead Jim
1.) set the gateway for PC2 to router2
2.) ping net_switch1
The ping travels halfway around the network before it is dropped.

Even worse is L4 Who done it, where
originally the puzzle could be solved by
just pinging 0.0.0.0 enough times.
2019-04-13 10:08:32 -05:00
4a72518ccc Don't lose DHCP range when NIC address changes
When a server or firewall changes the IP address of a network
card, any DHCP ranges associated with that old number were
zeroed out.

Invalidating the range COULD be a nice feature in case the
new IP address falls within the DHCP range - thus preventing
conflicting IP addresses. So just to be nice I did allow the
range to invalidate in that situation. However, in real life
it wouldn't be so nice, and so perhaps it would actually be
better to keep the existing rules intact even if it would
cause a problem.

Scenario: Level 2 Firewall Test
-change firewall eth0 to 192.168.1.10 and eth1 to 192.168.2.20
-click OK
-edit firewall again and look at the DHCP rules
    -notice that 192.168.1 has all zeros.
    -same thing with 192.168.2
    -after the fix, the 192.168.2 rules are retained since
   2.20 doesn't conflict with the range, but 1.10 does
   conflict, so that rule was invalidated.
2019-04-13 10:05:22 -05:00
cecd14a901 Do a better job with network interfaces when faced with vlans 2019-03-17 14:26:51 +03:00
073cba135e Basic renumbering working. Will blow up on a machine with multiple network interfaces. 2019-03-07 17:02:49 +03:00
e27d960403 Add a comment about the hosts func 2019-03-06 12:38:08 +03:00
4014439162 Many small changes working towards renumbering a subnet. If many items are selected, we can right-click and renumber the lot of them. 2019-03-06 12:32:00 +03:00
c0b655386e Adding a bunch of strings 2019-03-06 12:30:51 +03:00
199ecbcf06 Add an initial RenumberData class. Used when processing devices and figuring out which devices are part of a particular broadcast network. 2019-03-06 12:30:28 +03:00
966f4fe8a8 Add the ability to prompt for a network, subnet, and gateway. Used when renumbering a subnet. 2019-03-06 12:29:19 +03:00
b1a13b95bc Add a "GetUntaggedVLAN" func to return the VLAN that is untagged on this interface. 2019-03-06 11:36:10 +03:00
fded1f454a Add functions to find the devices connected to this device 2019-03-06 09:43:39 +03:00
a72aec9f9a At least with this added test, the student must find and fix the hidden laptop. Not enough to solve the problem, but a step in the right direction. This test works because it requires the IP address to be unique. 2019-02-28 09:57:14 -06:00
bed1a8a846 When the router needs to be replaced, it should not have the correct routes. You should need to add the right IP addresses and routes both. 2019-02-28 09:01:05 -06:00
9bf9d58c48 IPAE: DNS lookup provides subnet mask as well as IP
If the user types in a name in the IP Address Entry form,
       also replace the subnet mask.

       This is particularly useful for pinging, since ping doesn't
       allow access to the subnet mask field, and if an inappropriate
       mask is autoIP-entered, then the results might be unexpected.

       Exception for DHCP ranges: Actually, it shouldn't be necessary
       (since the IP address field is disabled for DHCP), but just
       for completeness, I ensure that the second field is not altered
       for DHCP range entries.

       Scenario: Level4, Small Subnets
       1.) fix router2, so the subnet mask is /30
       2.) from pc1, ping pc2 (which is address 192.168.1.3)
                       -lastIP sets subnet mask to 255.255.255.252
                       -that makes .3 the broadcast address
       -fix result: lastIP mask is replaced by pc2's real mask.
2019-02-27 10:16:59 -06:00
2a17fba36c broadcast address only applies to correct subnet
Ultimately, the problem stemmed from a ping to an address
       with the wrong subnet mask (auto-filled subnet) which turned
       the address (which should have been routed) into a local broadcast.
       Only the global broadcast, or a local broadcast should be accepted,
       not a broadcast that should be routed.

       This can be seen in Level 4, Small Subnets puzzle.
       1.) fix router2 to be /31
       2.) from pc1, ping pc2 (which turns into 192.168.1.3)
                       -autoIP filled in a subnet mask of 255.255.255.252
                       -therefore 1.3 is considered the broadcast IP.
       -result: a local broadcast on the 192.168.2 network.
       3.) from pc1, ping 192.168.1.1 or 192.168.1.4 works fine.
       4.) edit firewall1, edit route to 192.168.1.1
                       -make no changes, just hit OK
       5.) again from pc1 ping pc2
                       -now autoIP fills in subnet mask 255.255.255.0
       -result: it works
2019-02-27 08:41:58 -06:00
886e1d7911 allow DHCP range to cancel
The problem is easily seen most times when a DHCP range is canceled.
       The cancel completely fails to work, and refuses to cancel until
       correct values are put in start and end. (However, pressing the ESC
       key sometimes helped.)
2019-02-23 12:20:24 -06:00
06eb896558 cancel should also cancel auto-filled lastIP values
The problem is seen in the first puzzle if you ping
       pc0, and then edit the 0.0.0.0 gateway.   It auto-fills in
       the last-used pc0 IP address, and canceling saves that change
       instead of leaving the gateway at 0.0.0.0.

       lastIP nicely saves some typing (although it has also confused
       my student quite a bit I think), but since it updates WhatToEdit,
       that becomes the "saved" value even during a cancel.

       Instead, save the original value as a copy, and set back to
       the original value when cancellng.

       Perhaps it would be worth creating a reparse( NB_IPAddress)
       function, but this was easy to just hack together.

       Tested by pinging pc0, then editing the gateway and cancellng,
       editing the IP address and canceling.

       Next: don't add a canceled route
2019-02-23 12:16:04 -06:00
ddebafeec9 don't add a canceled, empty route
This was especially bad when lastIP filled in default values,
       so this patch pretty much depends on the patch that cancels
       the auto-filled lastIP.

       This didn't cause a problem - it just cluttered up the routing
       table with duplicate, undeletable routes.
2019-02-23 12:08:01 -06:00
2ae5781bea Don't crash when adding a NIC to a PC/server (Justin) 2019-02-23 12:06:24 -06:00
33 changed files with 1795 additions and 779 deletions

View File

@ -62,12 +62,12 @@ namespace EduNetworkBuilder
} }
} }
public ActionClass RunAction(int WhichIndex, bool NoteAllChanges = false) public ActionClass RunAction(int WhichIndex)
{ {
if (CurrentNetAction == null) return null; if (CurrentNetAction == null) return null;
if (WhichIndex < CurrentNetAction.Actions.Count) if (WhichIndex < CurrentNetAction.Actions.Count)
{ {
CurrentNetAction.Actions[WhichIndex].DoAction(NoteAllChanges); CurrentNetAction.Actions[WhichIndex].DoAction();
return CurrentNetAction.Actions[WhichIndex]; return CurrentNetAction.Actions[WhichIndex];
} }
return null; return null;
@ -180,21 +180,19 @@ namespace EduNetworkBuilder
public NetworkComponentType newItemType = NetworkComponentType.none; //Making new device public NetworkComponentType newItemType = NetworkComponentType.none; //Making new device
public NetworkComponent ChangedComponent = null; public NetworkComponent ChangedComponent = null;
public void DoAction(bool NoteAllChanges=false) public void DoAction()
{ {
Network myNet = NB.GetNetwork(); Network myNet = NB.GetNetwork();
NetworkDevice source = myNet.GetDeviceFromID(SourceID); NetworkDevice source = myNet.GetDeviceFromID(SourceID);
NetworkComponent sourceC = myNet.GetComponentFromID(SourceID); NetworkComponent sourceC = myNet.GetComponentFromID(SourceID);
NetworkLink sourceNL; NetworkLink sourceNL;
string indent = " ";
switch (Action) switch (Action)
{ {
case NBAction.changecomponent: case NBAction.changecomponent:
//This could be a link or a device we are changing. //This could be a link or a device we are changing.
if(ChangedComponent is NetworkDevice) if(ChangedComponent is NetworkDevice)
{ {
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_ChangeDevice") + " " + source.hostname); } source.UpdateFromComponent(ChangedComponent); //Copy any changes across
source.UpdateFromComponent(ChangedComponent, NoteAllChanges); //Copy any changes across
source.SetImageFromType(); //The image was not saved. Re-make it source.SetImageFromType(); //The image was not saved. Re-make it
} }
else else
@ -202,7 +200,6 @@ namespace EduNetworkBuilder
if(source != null) if(source != null)
myNet.RemoveComponent(source); myNet.RemoveComponent(source);
sourceNL = (NetworkLink)ChangedComponent; sourceNL = (NetworkLink)ChangedComponent;
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_Replace_Link") + " " + sourceNL.Src.HostName + " - " + sourceNL.Dst.HostName); }
myNet.MarkAsLinked(sourceNL.Src, sourceNL.GetUniqueIdentifier); myNet.MarkAsLinked(sourceNL.Src, sourceNL.GetUniqueIdentifier);
myNet.MarkAsLinked(sourceNL.Dst, sourceNL.GetUniqueIdentifier); myNet.MarkAsLinked(sourceNL.Dst, sourceNL.GetUniqueIdentifier);
myNet.AddItem(ChangedComponent); myNet.AddItem(ChangedComponent);
@ -215,7 +212,6 @@ namespace EduNetworkBuilder
source.ChangeLocation(Location); source.ChangeLocation(Location);
source.UnHide(); //In case it was hidden source.UnHide(); //In case it was hidden
if (NB.DebugActions) { Console.WriteLine("Changing location for: " + source + " " + Location.X + ":" +Location.Y); } if (NB.DebugActions) { Console.WriteLine("Changing location for: " + source + " " + Location.X + ":" +Location.Y); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_MoveDevice") + " " + source.hostname + " - " +Location.X + ":" + Location.Y); }
} }
break; break;
case NBAction.deletecomponent: case NBAction.deletecomponent:
@ -232,7 +228,6 @@ namespace EduNetworkBuilder
} }
myNet.RemoveComponent(source); myNet.RemoveComponent(source);
if (NB.DebugActions) { Console.WriteLine("Deleting a device: " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Deleting a device: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_DeleteDevice") + " " + source.hostname + " - " + source.myType.ToString()); }
} else if(sourceC != null && sourceC is NetworkLink) } else if(sourceC != null && sourceC is NetworkLink)
{ {
if (myNet.ItemIsCritical(sourceC.hostname)) if (myNet.ItemIsCritical(sourceC.hostname))
@ -241,7 +236,6 @@ namespace EduNetworkBuilder
SourceL.Destroy(); //Mark both ends as being deleted SourceL.Destroy(); //Mark both ends as being deleted
myNet.RemoveComponent(SourceL); //Get rid of this link myNet.RemoveComponent(SourceL); //Get rid of this link
if (NB.DebugActions) { Console.WriteLine("Deleting a link: " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Deleting a link: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_DeleteLink") + " " + SourceL.Src.HostName + " - " + SourceL.Dst.HostName); }
} }
break; break;
case NBAction.newdevice: case NBAction.newdevice:
@ -260,15 +254,13 @@ namespace EduNetworkBuilder
if (myNet.BlockedByTree(BottomLeft)) CanDo = false; if (myNet.BlockedByTree(BottomLeft)) CanDo = false;
if (CanDo) if (CanDo)
{ {
NetworkDevice newdevice = (NetworkDevice)myNet.AddItem(newItemType, Location); ChangedComponent = (NetworkDevice)myNet.AddItem(newItemType, Location);
if (NB.DebugActions && source != null) { Console.WriteLine("Adding a Device: " + source.hostname); }
if (NB.DebugActions && source != null) { Console.WriteLine("Adding a Device: " + newdevice.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_AddDevice") + " " + newdevice.hostname + " - " + newdevice.myType.ToString()); }
} }
else else
{ {
NB.SetBuilderWindowStatis(NB.Translate("NB_TreePlacementError")); NB.SetBuilderWindowStatis(NB.Translate("NB_TreePlacementError"));
if (NB.DebugActions) { Console.WriteLine("Unable to add device: " + ChangedComponent.hostname); } if (NB.DebugActions) { Console.WriteLine("Unable to add device: " + source.hostname); }
} }
break; break;
case NBAction.dhcp: case NBAction.dhcp:
@ -276,25 +268,20 @@ namespace EduNetworkBuilder
{ {
source.DHCPRequestFromHere(); source.DHCPRequestFromHere();
if (NB.DebugActions) { Console.WriteLine("Requesting DHCP: " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Requesting DHCP: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_RequestDHCP") + " " + source.hostname); }
} }
break; break;
case NBAction.arp: case NBAction.arp:
if (source != null) if (source != null)
{ {
//We have not implimented this well. But, here it is anyway. We would do this if showing ethernet stuff
source.AskArpFromHere(Destination); source.AskArpFromHere(Destination);
if (NB.DebugActions) { Console.WriteLine("Requesting ARP: " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Requesting DHCP: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_RequestARP") + " " + source.hostname + " - " + Destination.GetIPString); }
} }
break; break;
case NBAction.cleararp: case NBAction.cleararp:
if (source != null) if (source != null)
{ {
//We have not implimented this well. But, here it is anyway. We would do this if showing ethernet stuff
source.ClearArps(); source.ClearArps();
if (NB.DebugActions) { Console.WriteLine("Clearing ARP: " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Clearing ARP: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_ClearArp") + " " + source.hostname + " - " + Destination.GetIPString); }
} }
break; break;
case NBAction.ping: case NBAction.ping:
@ -302,7 +289,6 @@ namespace EduNetworkBuilder
{ {
source.PingFromHere(Destination); source.PingFromHere(Destination);
if (NB.DebugActions) { Console.WriteLine("Pinging " + Destination.GetIPString + " from " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Pinging " + Destination.GetIPString + " from " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_DoPing") + " " + source.hostname + " - " + Destination.GetIPString); }
} }
break; break;
case NBAction.traceroute: case NBAction.traceroute:
@ -310,7 +296,6 @@ namespace EduNetworkBuilder
{ {
source.TracerouteFromHere(Destination); source.TracerouteFromHere(Destination);
if (NB.DebugActions) { Console.WriteLine("Traceroute: " + Destination.GetIPString + " from " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Traceroute: " + Destination.GetIPString + " from " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_DoTraceroute") + " " + source.hostname + " - " + Destination.GetIPString ); }
} }
break; break;
case NBAction.replace: case NBAction.replace:
@ -325,7 +310,6 @@ namespace EduNetworkBuilder
myNet.RegisterDeviceReplaced(source.hostname); //replace it. myNet.RegisterDeviceReplaced(source.hostname); //replace it.
if (NB.DebugActions) { Console.WriteLine("Replacing device: " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Replacing device: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_Replace_Device") + " " + source.hostname); }
} }
else if (sourceC is NetworkLink) else if (sourceC is NetworkLink)
{ {
@ -338,32 +322,27 @@ namespace EduNetworkBuilder
myNet.RemoveComponent(sourceNL); myNet.RemoveComponent(sourceNL);
NetworkLink nNL = new NetworkLink(sourceID, destID, LinkType.normal); NetworkLink nNL = new NetworkLink(sourceID, destID, LinkType.normal);
myNet.AddItem(nNL); myNet.AddItem(nNL);
if (NB.DebugActions) { Console.WriteLine("Replacing link: " + sourceID.HostName + " - " + destID.HostName); } if (NB.DebugActions) { Console.WriteLine("Replacing link: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_Replace_Link") + " " + sourceID.HostName + " - " + destID.HostName); }
} }
} }
break; break;
case NBAction.replaceUPS: case NBAction.replaceUPS:
myNet.RegisterUPSAdded(source.hostname); myNet.RegisterUPSAdded(source.hostname);
if (NB.DebugActions) { Console.WriteLine("Replacing UPS on: " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Replacing UPS on: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_Replace_UPS") + " " + source.hostname); }
break; break;
case NBAction.poweroff: case NBAction.poweroff:
source.PowerOff = true; source.PowerOff = true;
myNet.RegisterDeviceReset(source.hostname); myNet.RegisterDeviceReset(source.hostname);
if (NB.DebugActions) { Console.WriteLine("Powering off: " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Powering off: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_Powering_OFF") + " " + source.hostname); }
break; break;
case NBAction.poweron: case NBAction.poweron:
source.PowerOff = false; source.PowerOff = false;
if (NB.DebugActions) { Console.WriteLine("Powering on: " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Powering on: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_Powering_ON") + " " + source.hostname); }
//We might see about exploding the device here. //We might see about exploding the device here.
break; break;
case NBAction.reset: case NBAction.reset:
source.ClearIPs(); //reset the device - IPs and VLANs source.ClearIPs(); //reset the device - IPs and VLANs
if (NB.DebugActions) { Console.WriteLine("Resetting: " + source.hostname); } if (NB.DebugActions) { Console.WriteLine("Resetting: " + source.hostname); }
if (NoteAllChanges) { NB.AddNetMessage("", indent + NB.Translate("AC_Resetting") + " " + source.hostname); }
//We might see about exploding the device here. //We might see about exploding the device here.
break; break;

View File

@ -357,7 +357,7 @@ namespace EduNetworkBuilder
tnic = ndCLonedItem.AddNic(WhatToAdd[cbQuestions.SelectedIndex]); tnic = ndCLonedItem.AddNic(WhatToAdd[cbQuestions.SelectedIndex]);
} }
} }
if(tnet != null) if(tnet != null && tnic != null)
tnet.RegisterNICAdded(ndCLonedItem.hostname, tnic.NicName()); tnet.RegisterNICAdded(ndCLonedItem.hostname, tnic.NicName());
} }
UpdateForm(); UpdateForm();

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\WiX.3.11.2\build\wix.props" Condition="Exists('..\packages\WiX.3.11.2\build\wix.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@ -23,19 +22,17 @@
<UpdatePeriodically>true</UpdatePeriodically> <UpdatePeriodically>true</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired> <UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions> <MapFileExtensions>true</MapFileExtensions>
<InstallUrl>http://tyounglightsys.com/EduNetworkBuilder/v1/</InstallUrl> <InstallUrl>http://tyounglightsys.ddns.info/EduNetworkBuilder/v1/</InstallUrl>
<UpdateUrl>http://tyounglightsys.ddns.info/EduNetworkBuilder/v1/</UpdateUrl> <UpdateUrl>http://tyounglightsys.ddns.info/EduNetworkBuilder/v1/</UpdateUrl>
<ProductName>EduNetworkBuilder</ProductName> <ProductName>EduNetworkBuilder</ProductName>
<PublisherName>Tim Young</PublisherName> <PublisherName>Tim Young</PublisherName>
<CreateWebPageOnPublish>true</CreateWebPageOnPublish> <CreateWebPageOnPublish>true</CreateWebPageOnPublish>
<WebPage>publish.htm</WebPage> <WebPage>publish.htm</WebPage>
<ApplicationRevision>54</ApplicationRevision> <ApplicationRevision>51</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion> <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust> <UseApplicationTrust>false</UseApplicationTrust>
<PublishWizardCompleted>true</PublishWizardCompleted> <PublishWizardCompleted>true</PublishWizardCompleted>
<BootstrapperEnabled>true</BootstrapperEnabled> <BootstrapperEnabled>true</BootstrapperEnabled>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget> <PlatformTarget>AnyCPU</PlatformTarget>
@ -122,6 +119,7 @@
<DependentUpon>ListBoxWindow.cs</DependentUpon> <DependentUpon>ListBoxWindow.cs</DependentUpon>
</Compile> </Compile>
<Compile Include="NB.cs" /> <Compile Include="NB.cs" />
<Compile Include="NBRenumberData.cs" />
<Compile Include="NBSettings.cs" /> <Compile Include="NBSettings.cs" />
<Compile Include="NetShape.cs" /> <Compile Include="NetShape.cs" />
<Compile Include="NetTest.cs" /> <Compile Include="NetTest.cs" />
@ -266,7 +264,6 @@
<DependentUpon>VLANConfig.cs</DependentUpon> <DependentUpon>VLANConfig.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<None Include="EduNetworkBuilder_TemporaryKey.pfx" /> <None Include="EduNetworkBuilder_TemporaryKey.pfx" />
<None Include="packages.config" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator> <Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput> <LastGenOutput>Settings.Designer.cs</LastGenOutput>
@ -479,12 +476,6 @@
<Content Include="Resources\NBIco.ico" /> <Content Include="Resources\NBIco.ico" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\WiX.3.11.2\build\wix.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\WiX.3.11.2\build\wix.props'))" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild"> <Target Name="BeforeBuild">

View File

@ -80,6 +80,11 @@ namespace EduNetworkBuilder
} }
} }
public void SetIP(UInt32 newIP)
{
_ip = newIP;
}
public bool Equals(NB_IPAddress CompareWith) public bool Equals(NB_IPAddress CompareWith)
{ {
if (_ip != CompareWith._ip) return false; if (_ip != CompareWith._ip) return false;
@ -241,6 +246,10 @@ namespace EduNetworkBuilder
get { return NetworkAddress + ~_mask; } get { return NetworkAddress + ~_mask; }
} }
/// <summary>
/// Return the list of hosts in the subnet.
/// </summary>
/// <returns></returns>
public IEnumerable<UInt32> Hosts() public IEnumerable<UInt32> Hosts()
{ {
for (var host = NetworkAddress + 1; host < BroadcastAddress; host++) for (var host = NetworkAddress + 1; host < BroadcastAddress; host++)

View File

@ -103,6 +103,7 @@
this.btnCancel.Text = "Cancel"; this.btnCancel.Text = "Cancel";
this.btnCancel.UseVisualStyleBackColor = true; this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
this.btnCancel.CausesValidation = false;
// //
// btnOK // btnOK
// //

View File

@ -17,10 +17,24 @@ namespace EduNetworkBuilder
{ {
NB_IPAddress WhatToEdit; NB_IPAddress WhatToEdit;
NB_IPAddress DHCPInterface=null; NB_IPAddress DHCPInterface=null;
bool WellDone = true; bool WellDone = false;
NetworkDevice ParentDevice = null; NetworkDevice ParentDevice = null;
Point StartLocation = new Point (50,50); Point StartLocation = new Point (50,50);
NB_IPAddress SavedIPAddress = null;
ToolTip myTooltip = new ToolTip();
//variable to hold true if the for is closing
private bool isFormClosing = false;
// Contant for the close message
private const int WM_CLOSE = 16;
//override the WndProc msg to trap the WM_CLOSE message
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_CLOSE)
isFormClosing = true;
base.WndProc(ref m);
}
public IPAddressEntry(NB_IPAddress toEdit, NetworkDevice ToEdit, Form ParentForm, bool JustPinging=false) public IPAddressEntry(NB_IPAddress toEdit, NetworkDevice ToEdit, Form ParentForm, bool JustPinging=false)
{ {
@ -34,6 +48,7 @@ namespace EduNetworkBuilder
ParentDevice = ToEdit; ParentDevice = ToEdit;
Network myNet = NB.GetNetwork(); Network myNet = NB.GetNetwork();
NB_IPAddress lastIP = myNet.RetrieveLastIP(); NB_IPAddress lastIP = myNet.RetrieveLastIP();
SavedIPAddress = new NB_IPAddress(toEdit);
WhatToEdit = toEdit; WhatToEdit = toEdit;
string hostname = ""; string hostname = "";
if (ToEdit != null) if (ToEdit != null)
@ -148,6 +163,7 @@ namespace EduNetworkBuilder
WhatToEdit.Reparse(tbIPAddress.Text, tbNetmask.Text, tbGateway.Text); WhatToEdit.Reparse(tbIPAddress.Text, tbNetmask.Text, tbGateway.Text);
Network myNet = NB.GetNetwork(); Network myNet = NB.GetNetwork();
myNet.StoreLastIP(WhatToEdit); myNet.StoreLastIP(WhatToEdit);
WellDone = true;
Close(); Close();
} }
@ -182,13 +198,16 @@ namespace EduNetworkBuilder
private void btnCancel_Click(object sender, EventArgs e) private void btnCancel_Click(object sender, EventArgs e)
{ {
if(SavedIPAddress != null)
WhatToEdit.Reparse(SavedIPAddress.GetIPString, SavedIPAddress.GetMaskString, SavedIPAddress.GetGateway.ToIpString());
UpdateFieldsFromAddress(); UpdateFieldsFromAddress();
WellDone = false;
Close(); Close();
} }
private void tbGateway_Validating(object sender, CancelEventArgs e) private void tbGateway_Validating(object sender, CancelEventArgs e)
{ {
if (isFormClosing) return;
Network mynet = NB.GetNetwork(); Network mynet = NB.GetNetwork();
if (ParentDevice != null) if (ParentDevice != null)
{ {
@ -216,6 +235,8 @@ namespace EduNetworkBuilder
private void tbNetmask_Validating(object sender, CancelEventArgs e) private void tbNetmask_Validating(object sender, CancelEventArgs e)
{ {
if (isFormClosing) return;
UInt32 taddress = tbNetmask.Text.ParseIp(); UInt32 taddress = tbNetmask.Text.ParseIp();
tbNetmask.Text = taddress.ToIpString(); tbNetmask.Text = taddress.ToIpString();
if (DHCPInterface != null) if (DHCPInterface != null)
@ -231,6 +252,8 @@ namespace EduNetworkBuilder
private void tbIPAddress_Validating(object sender, CancelEventArgs e) private void tbIPAddress_Validating(object sender, CancelEventArgs e)
{ {
if (isFormClosing) return;
UInt32 taddress; UInt32 taddress;
Network mynet = NB.GetNetwork(); Network mynet = NB.GetNetwork();
NB_IPAddress tIPAddress = null; NB_IPAddress tIPAddress = null;
@ -238,9 +261,11 @@ namespace EduNetworkBuilder
{ {
tIPAddress = mynet.DNSLookup(ParentDevice, tbIPAddress.Text); tIPAddress = mynet.DNSLookup(ParentDevice, tbIPAddress.Text);
} }
if(tIPAddress != null) if (tIPAddress != null) //device name used, convert to IP address and netmask
{ {
taddress = tIPAddress.GetIP; taddress = tIPAddress.GetIP;
if (DHCPInterface == null)
tbNetmask.Text = tIPAddress.GetMaskString;
} }
else else
taddress = tbIPAddress.Text.ParseIp(); taddress = tbIPAddress.Text.ParseIp();
@ -258,5 +283,27 @@ namespace EduNetworkBuilder
if (tLocation.X < 0 || tLocation.Y < 0) tLocation = new Point(50, 50); if (tLocation.X < 0 || tLocation.Y < 0) tLocation = new Point(50, 50);
Location = tLocation; Location = tLocation;
} }
public void ShowAsSubnetGateway()
{
lblIP.Text = NB.Translate("IPE_Network");
Text = NB.Translate("NB_Subnet");
myTooltip.AutoPopDelay = 5000;
myTooltip.InitialDelay = 1000;
myTooltip.ReshowDelay = 500;
// Force the ToolTip text to be displayed whether or not the form is active.
myTooltip.ShowAlways = true;
myTooltip.SetToolTip(tbIPAddress, NB.Translate("IPE_NetworkTooltip"));
myTooltip.SetToolTip(tbGateway, NB.Translate("IPE_GatewayTooltip"));
myTooltip.SetToolTip(tbNetmask, NB.Translate("IPE_NetmaskTooltip"));
myTooltip.SetToolTip(lblIP, NB.Translate("IPE_NetworkTooltip"));
myTooltip.SetToolTip(lblGateway, NB.Translate("IPE_GatewayTooltip"));
myTooltip.SetToolTip(lblNetmask, NB.Translate("IPE_NetmaskTooltip"));
ShowDialog();
}
} }
} }

View File

@ -35,63 +35,53 @@
this.btnLink = new System.Windows.Forms.Button(); this.btnLink = new System.Windows.Forms.Button();
this.btnCancel = new System.Windows.Forms.Button(); this.btnCancel = new System.Windows.Forms.Button();
this.cbLinkType = new System.Windows.Forms.ComboBox(); this.cbLinkType = new System.Windows.Forms.ComboBox();
this.pbSource = new System.Windows.Forms.PictureBox();
this.pbDest = new System.Windows.Forms.PictureBox();
this.lblInstructions = new System.Windows.Forms.Label();
((System.ComponentModel.ISupportInitialize)(this.pbSource)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.pbDest)).BeginInit();
this.SuspendLayout(); this.SuspendLayout();
// //
// lbSrcHost // lbSrcHost
// //
this.lbSrcHost.FormattingEnabled = true; this.lbSrcHost.FormattingEnabled = true;
this.lbSrcHost.ItemHeight = 29; this.lbSrcHost.ItemHeight = 16;
this.lbSrcHost.Location = new System.Drawing.Point(20, 185); this.lbSrcHost.Location = new System.Drawing.Point(9, 18);
this.lbSrcHost.Margin = new System.Windows.Forms.Padding(5);
this.lbSrcHost.Name = "lbSrcHost"; this.lbSrcHost.Name = "lbSrcHost";
this.lbSrcHost.Size = new System.Drawing.Size(177, 149); this.lbSrcHost.Size = new System.Drawing.Size(103, 84);
this.lbSrcHost.TabIndex = 0; this.lbSrcHost.TabIndex = 0;
this.lbSrcHost.SelectedIndexChanged += new System.EventHandler(this.lbSrcHost_SelectedIndexChanged); this.lbSrcHost.SelectedIndexChanged += new System.EventHandler(this.lbSrcHost_SelectedIndexChanged);
// //
// lbSrcNic // lbSrcNic
// //
this.lbSrcNic.FormattingEnabled = true; this.lbSrcNic.FormattingEnabled = true;
this.lbSrcNic.ItemHeight = 29; this.lbSrcNic.ItemHeight = 16;
this.lbSrcNic.Location = new System.Drawing.Point(210, 185); this.lbSrcNic.Location = new System.Drawing.Point(118, 18);
this.lbSrcNic.Margin = new System.Windows.Forms.Padding(5);
this.lbSrcNic.Name = "lbSrcNic"; this.lbSrcNic.Name = "lbSrcNic";
this.lbSrcNic.Size = new System.Drawing.Size(153, 149); this.lbSrcNic.Size = new System.Drawing.Size(89, 84);
this.lbSrcNic.TabIndex = 1; this.lbSrcNic.TabIndex = 1;
this.lbSrcNic.SelectedIndexChanged += new System.EventHandler(this.lbSrcNic_SelectedIndexChanged); this.lbSrcNic.SelectedIndexChanged += new System.EventHandler(this.lbSrcNic_SelectedIndexChanged);
// //
// lbDstNic // lbDstNic
// //
this.lbDstNic.FormattingEnabled = true; this.lbDstNic.FormattingEnabled = true;
this.lbDstNic.ItemHeight = 29; this.lbDstNic.ItemHeight = 16;
this.lbDstNic.Location = new System.Drawing.Point(702, 185); this.lbDstNic.Location = new System.Drawing.Point(399, 18);
this.lbDstNic.Margin = new System.Windows.Forms.Padding(5);
this.lbDstNic.Name = "lbDstNic"; this.lbDstNic.Name = "lbDstNic";
this.lbDstNic.Size = new System.Drawing.Size(153, 149); this.lbDstNic.Size = new System.Drawing.Size(89, 84);
this.lbDstNic.TabIndex = 3; this.lbDstNic.TabIndex = 3;
this.lbDstNic.SelectedIndexChanged += new System.EventHandler(this.lbDstNic_SelectedIndexChanged); this.lbDstNic.SelectedIndexChanged += new System.EventHandler(this.lbDstNic_SelectedIndexChanged);
// //
// lbDstHost // lbDstHost
// //
this.lbDstHost.FormattingEnabled = true; this.lbDstHost.FormattingEnabled = true;
this.lbDstHost.ItemHeight = 29; this.lbDstHost.ItemHeight = 16;
this.lbDstHost.Location = new System.Drawing.Point(512, 185); this.lbDstHost.Location = new System.Drawing.Point(290, 18);
this.lbDstHost.Margin = new System.Windows.Forms.Padding(5);
this.lbDstHost.Name = "lbDstHost"; this.lbDstHost.Name = "lbDstHost";
this.lbDstHost.Size = new System.Drawing.Size(177, 149); this.lbDstHost.Size = new System.Drawing.Size(103, 84);
this.lbDstHost.TabIndex = 2; this.lbDstHost.TabIndex = 2;
this.lbDstHost.SelectedIndexChanged += new System.EventHandler(this.lbDstHost_SelectedIndexChanged); this.lbDstHost.SelectedIndexChanged += new System.EventHandler(this.lbDstHost_SelectedIndexChanged);
// //
// btnLink // btnLink
// //
this.btnLink.Location = new System.Drawing.Point(372, 185); this.btnLink.Location = new System.Drawing.Point(210, 18);
this.btnLink.Margin = new System.Windows.Forms.Padding(5);
this.btnLink.Name = "btnLink"; this.btnLink.Name = "btnLink";
this.btnLink.Size = new System.Drawing.Size(131, 42); this.btnLink.Size = new System.Drawing.Size(75, 23);
this.btnLink.TabIndex = 4; this.btnLink.TabIndex = 4;
this.btnLink.Text = "Link"; this.btnLink.Text = "Link";
this.btnLink.UseVisualStyleBackColor = true; this.btnLink.UseVisualStyleBackColor = true;
@ -99,10 +89,9 @@
// //
// btnCancel // btnCancel
// //
this.btnCancel.Location = new System.Drawing.Point(372, 237); this.btnCancel.Location = new System.Drawing.Point(210, 47);
this.btnCancel.Margin = new System.Windows.Forms.Padding(5);
this.btnCancel.Name = "btnCancel"; this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(131, 42); this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 5; this.btnCancel.TabIndex = 5;
this.btnCancel.Text = "Cancel"; this.btnCancel.Text = "Cancel";
this.btnCancel.UseVisualStyleBackColor = true; this.btnCancel.UseVisualStyleBackColor = true;
@ -111,47 +100,16 @@
// cbLinkType // cbLinkType
// //
this.cbLinkType.FormattingEnabled = true; this.cbLinkType.FormattingEnabled = true;
this.cbLinkType.Location = new System.Drawing.Point(372, 290); this.cbLinkType.Location = new System.Drawing.Point(210, 76);
this.cbLinkType.Margin = new System.Windows.Forms.Padding(5);
this.cbLinkType.Name = "cbLinkType"; this.cbLinkType.Name = "cbLinkType";
this.cbLinkType.Size = new System.Drawing.Size(128, 37); this.cbLinkType.Size = new System.Drawing.Size(75, 24);
this.cbLinkType.TabIndex = 6; this.cbLinkType.TabIndex = 6;
// //
// pbSource
//
this.pbSource.Location = new System.Drawing.Point(120, 28);
this.pbSource.Name = "pbSource";
this.pbSource.Size = new System.Drawing.Size(167, 149);
this.pbSource.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pbSource.TabIndex = 7;
this.pbSource.TabStop = false;
//
// pbDest
//
this.pbDest.Location = new System.Drawing.Point(607, 28);
this.pbDest.Name = "pbDest";
this.pbDest.Size = new System.Drawing.Size(167, 149);
this.pbDest.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
this.pbDest.TabIndex = 8;
this.pbDest.TabStop = false;
//
// lblInstructions
//
this.lblInstructions.AutoSize = true;
this.lblInstructions.Location = new System.Drawing.Point(15, 351);
this.lblInstructions.Name = "lblInstructions";
this.lblInstructions.Size = new System.Drawing.Size(79, 29);
this.lblInstructions.TabIndex = 9;
this.lblInstructions.Text = "label1";
//
// LinkEditor // LinkEditor
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(14F, 29F); this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(866, 389); this.ClientSize = new System.Drawing.Size(495, 117);
this.Controls.Add(this.lblInstructions);
this.Controls.Add(this.pbDest);
this.Controls.Add(this.pbSource);
this.Controls.Add(this.cbLinkType); this.Controls.Add(this.cbLinkType);
this.Controls.Add(this.btnCancel); this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnLink); this.Controls.Add(this.btnLink);
@ -161,14 +119,10 @@
this.Controls.Add(this.lbSrcHost); this.Controls.Add(this.lbSrcHost);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
this.Icon = global::EduNetworkBuilder.Properties.Resources.NBIco; this.Icon = global::EduNetworkBuilder.Properties.Resources.NBIco;
this.Margin = new System.Windows.Forms.Padding(5);
this.Name = "LinkEditor"; this.Name = "LinkEditor";
this.Text = "LinkEditor"; this.Text = "LinkEditor";
this.Shown += new System.EventHandler(this.LinkEditor_Shown); this.Shown += new System.EventHandler(this.LinkEditor_Shown);
((System.ComponentModel.ISupportInitialize)(this.pbSource)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.pbDest)).EndInit();
this.ResumeLayout(false); this.ResumeLayout(false);
this.PerformLayout();
} }
@ -181,8 +135,5 @@
private System.Windows.Forms.Button btnLink; private System.Windows.Forms.Button btnLink;
private System.Windows.Forms.Button btnCancel; private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.ComboBox cbLinkType; private System.Windows.Forms.ComboBox cbLinkType;
private System.Windows.Forms.PictureBox pbSource;
private System.Windows.Forms.PictureBox pbDest;
private System.Windows.Forms.Label lblInstructions;
} }
} }

View File

@ -45,7 +45,6 @@ namespace EduNetworkBuilder
lbSrcHost.SelectedIndex = tindex; lbSrcHost.SelectedIndex = tindex;
UpdateDeviceList(); UpdateDeviceList();
} }
pbSource.Image = new Bitmap(Source.GetImage());
} }
if (Dest != null) if (Dest != null)
{ {
@ -55,7 +54,6 @@ namespace EduNetworkBuilder
lbDstHost.SelectedIndex = tindex; lbDstHost.SelectedIndex = tindex;
UpdateDeviceList(); UpdateDeviceList();
} }
pbDest.Image = new Bitmap(Dest.GetImage());
} }
} }
@ -88,12 +86,11 @@ namespace EduNetworkBuilder
if (lbDstHost.SelectedItem != null) if (lbDstHost.SelectedItem != null)
DstHost = lbDstHost.SelectedItem.ToString(); DstHost = lbDstHost.SelectedItem.ToString();
string SrcNic = ""; string SrcNic = "";
NetworkDevice Src = null;
if (lbSrcNic.SelectedItem != null) if (lbSrcNic.SelectedItem != null)
{ {
Src = myNet.DeviceFromName(lbSrcHost.SelectedItem.ToString());
SrcNic = lbSrcNic.SelectedItem.ToString(); SrcNic = lbSrcNic.SelectedItem.ToString();
int sNicIndex = lbSrcNic.SelectedIndex; int sNicIndex = lbSrcNic.SelectedIndex;
NetworkDevice Src = myNet.DeviceFromName(lbSrcHost.SelectedItem.ToString());
NetworkCard sNic = null; NetworkCard sNic = null;
if(Src != null) sNic = Src.NicFromName(lbSrcNic.SelectedItem.ToString()); if(Src != null) sNic = Src.NicFromName(lbSrcNic.SelectedItem.ToString());
if(sNic != null) srcNicType = sNic.GetNicType; if(sNic != null) srcNicType = sNic.GetNicType;
@ -179,33 +176,6 @@ namespace EduNetworkBuilder
lbDstNic.SelectedIndex = tint; lbDstNic.SelectedIndex = tint;
} }
if (lbSrcHost.SelectedItem != null)
{
Src = myNet.DeviceFromName(lbSrcHost.SelectedItem.ToString());
pbSource.Image = Src.GetImage();
pbSource.Invalidate();
}
else
{
pbSource.Image = null;
pbSource.Invalidate();
}
if (lbDstHost.SelectedItem != null)
{
NetworkDevice Dest = myNet.DeviceFromName(lbDstHost.SelectedItem.ToString());
if (Dest != null)
{
pbDest.Image = Dest.GetImage();
pbDest.Invalidate();
}
}
else
{
pbDest.Image = null;
pbDest.Invalidate();
}
if(lbDstNic.SelectedIndex > -1 && lbSrcNic.SelectedIndex > -1) if(lbDstNic.SelectedIndex > -1 && lbSrcNic.SelectedIndex > -1)
{ {
btnLink.Enabled = true; btnLink.Enabled = true;
@ -232,43 +202,6 @@ namespace EduNetworkBuilder
cbLinkType.SelectedItem = theLinkType; cbLinkType.SelectedItem = theLinkType;
else else
cbLinkType.SelectedIndex = 0; cbLinkType.SelectedIndex = 0;
//Update the instructions.
lblInstructions.Text = ""; //empty them out if we do not need instructions
lbSrcHost.ResetForeColor() ;
lbSrcNic.ResetForeColor();
lbDstHost.ResetForeColor();
lbDstNic.ResetForeColor();
btnLink.ForeColor = Color.Black;
if (lbSrcHost.SelectedItem == null)
{
lblInstructions.Text = "Choose the source device.";
lbSrcHost.ForeColor = Color.Red;
}
else if (lbSrcNic.SelectedItem == null)
{
lblInstructions.Text = "Choose the NIC / Port on the source device.";
lbSrcNic.ForeColor = Color.Red;
}
else if (lbDstHost.SelectedItem == null)
{
lblInstructions.Text = "Choose the destination device.";
lbDstHost.ForeColor = Color.Red;
}
else if (lbDstNic.SelectedItem == null)
{
lblInstructions.Text = "Choose the NIC / Port on the destination device.";
lbDstNic.ForeColor = Color.Red;
}
else
{
//We have a valid link. We are ready to press the link.
lblInstructions.Text = "This is a valid link. Press LINK to continue";
btnLink.ForeColor = Color.Red;
}
processing = false; processing = false;
} }

View File

@ -755,7 +755,10 @@ namespace EduNetworkBuilder
{ {
NB_IPAddress newip = new NB_IPAddress(NB.ZeroIPString, NB.ZeroIPString, NB.ZeroIPString); NB_IPAddress newip = new NB_IPAddress(NB.ZeroIPString, NB.ZeroIPString, NB.ZeroIPString);
newip.Edit(myNetDevice, this, NB.Translate("LBW_AddRouteCreate")); newip.Edit(myNetDevice, this, NB.Translate("LBW_AddRouteCreate"));
if (!newip.Equals(new NB_IPAddress(NB.ZeroIPString, NB.ZeroIPString, NB.ZeroIPString)))
{
myNetDevice.AddRoute(newip); myNetDevice.AddRoute(newip);
}
UpdateForm(); UpdateForm();
} }

View File

@ -379,6 +379,8 @@ namespace EduNetworkBuilder
public static int NormalRotation = 5; public static int NormalRotation = 5;
public static int PacketDamageDistance = 25; public static int PacketDamageDistance = 25;
public static int InvalidVLAN = -999; //What we return when it is invalid
public static bool DebugActions = false; public static bool DebugActions = false;
public static bool DebugTests = false; public static bool DebugTests = false;
@ -934,6 +936,46 @@ namespace EduNetworkBuilder
return tbEvent.Text; return tbEvent.Text;
} }
public static string ComboBoxPromptBox(string title, string prompt, List<string> Options, string value)
{
Form QuestionForm = new Form();
QuestionForm.Text = title;
Label lbPrompt = new Label();
lbPrompt.Text = prompt;
lbPrompt.Location = new Point(1, 1);
lbPrompt.Size = new Size(200, lbPrompt.Size.Height);
ComboBox Choice = new ComboBox();
List<string> tlist = new List<string>();
foreach (string tstring in Options)
{
Choice.Items.Add(tstring);
}
if (value != "" && Choice.Items.Contains(value))
{
Choice.SelectedItem = value;
}
Choice.Location = new Point(1, lbPrompt.Location.Y + lbPrompt.Height + 5);
Button Done = new Button();
Done.Click += (s, g) => { Button b = (Button)s; Form f = (Form)b.Parent; f.Close(); };
Choice.DoubleClick += (s, g) => { Button b = (Button)s; Form f = (Form)b.Parent; Choice.SelectedIndex = -1; f.Close(); }; ;
Done.Text = NB.Translate("_Done");
Done.Location = new Point(1, Choice.Location.Y + Choice.Height + 5);
QuestionForm.Controls.Clear();
QuestionForm.Controls.Add(Choice);
QuestionForm.Controls.Add(Done);
QuestionForm.Controls.Add(lbPrompt);
QuestionForm.AcceptButton = Done;
QuestionForm.FormBorderStyle = FormBorderStyle.FixedDialog;
QuestionForm.AutoSize = true;
QuestionForm.Height = Done.Location.Y + Done.Height + 5; //This is too small for the form, it autosizes to "big enough"
QuestionForm.Width = Choice.Location.X + Choice.Width + 5;
QuestionForm.ShowDialog();
if (Choice.SelectedIndex >= 0) return Choice.SelectedItem.ToString();
return "";
}
public static Dictionary<string, bool> CheckPromptBox(Dictionary<string, bool> Checks) public static Dictionary<string, bool> CheckPromptBox(Dictionary<string, bool> Checks)
{ {
@ -1078,14 +1120,6 @@ namespace EduNetworkBuilder
return randomizedList; return randomizedList;
} }
public static void AddNetMessage(string host, string message)
{
Network thenet = GetNetwork();
//Console.WriteLine("Adding message: " + host + " : " + message);
if (thenet == null) return; //we cannot add it. do not blow up
thenet.AddMessage(new PacketMessage(host, message));
}
public static bool OpenURLInExternalBrowser(string URL) public static bool OpenURLInExternalBrowser(string URL)
{ {
Uri uriResult; Uri uriResult;

View File

@ -0,0 +1,293 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EduNetworkBuilder
{
public class NBRenumberer
{
private bool renumbered = false;
public List<NBRenumberData> ListOfItems = new List<NBRenumberData>();
public void Count(string what)
{
NBRenumberData entry = DataFromName(what);
if(entry != null)
{
entry.ActiveCount++;
return;
}
//If we get here, we have not found it yet.
NBRenumberData One = new NBRenumberData(what, ListOfItems.Count);
One.ActiveCount++;
ListOfItems.Add(One);
}
public void SetAsGateway(string what)
{
NBRenumberData GW = DataFromName(what);
if (GW == null) {
GW = new NBRenumberData(what, ListOfItems.Count);
ListOfItems.Add(GW);
}
GW.isTheGateway = true;
GW.UpdateSortOrder();
//We can only have one gateway. Make sure all the rest are set not to be the GW
foreach(NBRenumberData one in ListOfItems)
{
if (one != GW) {
one.isTheGateway = false;
one.UpdateSortOrder();
}
}
}
public NBRenumberData DataFromName(string hostname)
{
foreach (NBRenumberData NBRD in ListOfItems)
{
if (NBRD.Hostname == hostname)
{
return NBRD;
}
}
return null;
}
public bool TryRenumbering(NB_IPAddress Network, NB_IPAddress Gateway)
{
renumbered = true;
//Separate out the devices by type
// Find the gateway too
int biggestcount = 0;
int spacing = 10;
bool HasGateway = false;
foreach (NBRenumberData NBRD in ListOfItems)
{
if (NBRD.ActiveCount > biggestcount) biggestcount = NBRD.ActiveCount;
}
//now, we can prune off everything that is not part of biggestcount.
for(int i=ListOfItems.Count-1; i>=0; i--)
{
if (ListOfItems[i].ActiveCount != biggestcount)
ListOfItems.RemoveAt(i);
else
{
if (ListOfItems[i].isTheGateway) HasGateway = true;
ListOfItems[i].SuggestedIP = "";
}
}
if (!HasGateway)
for (int i = ListOfItems.Count - 1; i >= 0; i--)
{
if (ListOfItems[i].Device.HasIPAddress(Gateway))
SetAsGateway(ListOfItems[i].Hostname);
}
int switches = 0;
int servers = 0;
int printers = 0;
int wireless = 0;
int clients = 0;
foreach(NBRenumberData NBRD in ListOfItems)
{
switch(NBRD.TypeString())
{
case "client":
clients++;
break;
case "printer":
printers++;
break;
case "switch":
switches++;
break;
case "server":
servers++;
break;
case "wireless":
wireless++;
break;
}
}
//Decide on which way we want to do this.
biggestcount = 0;
if (servers > biggestcount) biggestcount = servers;
if (switches > biggestcount) biggestcount = switches;
if (printers > biggestcount) biggestcount = printers;
if (wireless > biggestcount) biggestcount = wireless;
if (clients > biggestcount) biggestcount = clients;
ListOfItems.Sort((p, q) => p.sortorder.CompareTo(q.sortorder));
//If it works to do 10 for each bunch, do that. Otherwise, see what the smallest bunch that works is.
if (biggestcount < 10)
{
spacing = 10;
}
if (biggestcount > 10)
spacing = 99; //Don't bother with anything fancy. Punt if it does not fit the first time
//Fallback is to simply count up from the gateway.
if (Network.NumberOfHosts < ListOfItems.Count)
return false;
if(spacing * 5 > Network.NumberOfHosts)
{
renumberlist(Network, 1, "");
}
else
{
//We can do this in parts
renumberlist(Network, 1, "Gateway");
renumberlist(Network, 2, "server");
renumberlist(Network, spacing * 1, "switch");
renumberlist(Network, spacing * 2, "wireless");
renumberlist(Network, spacing * 3, "printer");
renumberlist(Network, spacing * 4, "client");
}
return true;
}
private void renumberlist(NB_IPAddress Network, int Base, string filter)
{
int count = Base;
for (int i = 0; i < ListOfItems.Count; i++)
{
if (ListOfItems[i].SuggestedIP != "") continue;
if (filter == "" || ListOfItems[i].TypeString() == filter || filter == "Gateway" && ListOfItems[i].isTheGateway)
{
NB_IPAddress next = new NB_IPAddress(Network);
next._ip += (UInt32)count;
ListOfItems[i].SuggestedIP = next.GetIPString;
count++;
}
}
}
public void DoRenumbering(NB_IPAddress Network, NB_IPAddress Gateway, int vlanID)
{
if (!renumbered) TryRenumbering(Network, Gateway);
//loop through and set all the IPs and the gateway IP if not DHCPS
for(int i = 0; i < ListOfItems.Count; i++)
{
ListOfItems[i].Device.RenumberIP(ListOfItems[i].SuggestedIP, Gateway, vlanID);
}
}
}
public class NBRenumberData
{
public string Hostname = "";
public NetworkDevice Device {
get {
Network myNet = NB.GetNetwork();
if (myNet == null) return null;
return myNet.DeviceFromName(Hostname);
}
}
public int ActiveCount=0;
public string nicname;
public string SuggestedIP;
public int sortorder = 0;
private int _index = 0;
public NetworkComponentType mytype = NetworkComponentType.none;
public bool isTheGateway = false;
private bool _isRouter = false;
/// <summary>
/// Return true if the Device specified by hostname does routing.
/// </summary>
public bool IsRouter {
get {
if (_isRouter) return true;
NetworkDevice ND = Device;
if(ND.RoutesPackets())
{
_isRouter = true;
return true;
}
return false;
}
}
public NBRenumberData(string hostname, int index)
{
Hostname = hostname;
NetworkDevice nd = Device;
mytype = nd.myType;
_index = index;
UpdateSortOrder();
}
public void UpdateSortOrder()
{
switch (TypeString())
{
case "client":
sortorder=5000;
break;
case "printer":
sortorder = 4000;
break;
case "switch":
sortorder=2000;
break;
case "server":
sortorder=1000;
break;
case "wireless":
sortorder=3000;
break;
}
sortorder = sortorder + _index;
if (isTheGateway) sortorder = 0;
}
public string TypeString()
{
string what = "";
switch (mytype)
{
case NetworkComponentType.cellphone:
case NetworkComponentType.ip_phone:
case NetworkComponentType.laptop:
case NetworkComponentType.pc:
case NetworkComponentType.tablet:
what = "client";
break;
case NetworkComponentType.printer:
case NetworkComponentType.copier:
what = "printer";
break;
case NetworkComponentType.net_hub:
case NetworkComponentType.net_switch:
what = "switch";
break;
case NetworkComponentType.firewall:
case NetworkComponentType.router:
case NetworkComponentType.server:
what = "server";
break;
case NetworkComponentType.wap:
case NetworkComponentType.wbridge:
case NetworkComponentType.wrepeater:
case NetworkComponentType.wrouter:
what = "wireless";
break;
}
return what;
}
}
}

View File

@ -1696,7 +1696,7 @@ namespace EduNetworkBuilder
//We are doing a replay and enough time has passed from the last replay... //We are doing a replay and enough time has passed from the last replay...
NBSettings Settings = NB.GetSettings(); NBSettings Settings = NB.GetSettings();
ActionCollection AC = Settings.GetUserActionCollection(); ActionCollection AC = Settings.GetUserActionCollection();
ActionClass Success = AC.RunAction(NextReplayIndex++, true); //note all changes as we do them ActionClass Success = AC.RunAction(NextReplayIndex++);
NextReplayAction = DateTime.UtcNow.AddMilliseconds(NB.MillisecondsBetweenReplays); NextReplayAction = DateTime.UtcNow.AddMilliseconds(NB.MillisecondsBetweenReplays);

View File

@ -919,6 +919,12 @@ namespace EduNetworkBuilder
pbNetworkView.ContextMenuStrip.Items.Add(NB.Translate("_Delete")); pbNetworkView.ContextMenuStrip.Items.Add(NB.Translate("_Delete"));
pbNetworkView.ContextMenuStrip.Items[index++].Click += pbNetworkView_Delete_Click; pbNetworkView.ContextMenuStrip.Items[index++].Click += pbNetworkView_Delete_Click;
if(!myNetwork.LoadedFromResource)
{
pbNetworkView.ContextMenuStrip.Items.Add(NB.Translate("NB_Renumber"));
pbNetworkView.ContextMenuStrip.Items[index++].Click += pbNetworkRenumber;
}
//We can color-code multiple items //We can color-code multiple items
if (myNetwork.VLANsEnabled) if (myNetwork.VLANsEnabled)
{ {
@ -1129,6 +1135,150 @@ namespace EduNetworkBuilder
} }
/// <summary>
/// Try to renumber a chunk of a network
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pbNetworkRenumber(object sender, EventArgs e)
{
//come up with a plan
// sort items by type
// loop through the items
// come up with the numbers we want to use
// Decide which nics to change
// On a router, find the nic that is connected to other items in the list
// On other devices, find first nic that is connected that is not DHCP
// track hostname, nicname, ip_address
//print out a list of what we are going to do
//Ask if we want to do it. Yes/No
//do it
if (ItemsSelected.Count > 0)
{
//This next entry should never happen.
if (ItemsSelected.Count < 2)
{
MessageBox.Show("You need to have more items selected");
return;
}
int ChosenVlanID = 1;
if(myNetwork != null && myNetwork.VLANsEnabled)
{
List<string> vnames = new List<string>();
foreach(VLANName vn in myNetwork.VlanNames)
{
vnames.Add(vn.Name);
}
string ChosenVlanName = "";
if (vnames.Count > 0) ChosenVlanName = vnames[0]; //Usually "Default"
if (vnames.Count > 1)
{
//we need to prompt
ChosenVlanName = NB.ComboBoxPromptBox(NB.Translate("NB_ChooseVLANRenumberTitle"), NB.Translate("NB_ChooseVLANRenumber"), vnames, vnames[0]);
}
ChosenVlanID = myNetwork.VLANIDFromName(ChosenVlanName);
}
NB_IPAddress prompted = new NB_IPAddress("192.168.1.0","255.255.255.0","192.168.1.1");
IPAddressEntry IPE = new IPAddressEntry(prompted, null, this, false);
//Read in the settings we will use
IPE.ShowAsSubnetGateway();
//pull out the gateway address
NB_IPAddress gw = new NB_IPAddress(prompted.GetGateway.ToIpString(), prompted._mask.ToIpString(),IPAddressType.gw);
//pull out the network address
NB_IPAddress network = new NB_IPAddress(prompted.NetworkAddress.ToIpString(), prompted._mask.ToIpString(), IPAddressType.gw);
//We need to find the gateway device. If no such device exists, find the most likely candidate
string gateway_name = myNetwork.ReverseDNSLookup(ItemsSelected[0],gw);
NetworkDevice gwDevice = myNetwork.DeviceFromName(gateway_name);
if(gwDevice == null)
{
//Make a list of possibilities
//Prompt user to select one of them
List<NetworkDevice> gwdevices = new List<NetworkDevice>();
for (int i = ItemsSelected.Count - 1; i >= 0; i--)
{
if (ItemsSelected[i].RoutesPackets()) gwdevices.Add(ItemsSelected[i]);
}
if (gwdevices.Count == 1) gwDevice = gwdevices[0];
else
{
//We need to prompt which device
List<string> names = new List<string>();
foreach(NetworkDevice one in gwdevices)
{
names.Add(one.hostname);
}
names.Sort();
gateway_name = NB.ComboBoxPromptBox(NB.Translate("_Gateway"), NB.Translate("NB_ChooseGateway"), names, names[0]);
gwDevice = myNetwork.DeviceFromName(gateway_name);
}
}
if (gwDevice == null) return; //No gateway device selected
NBRenumberer Renumberer = new NBRenumberer();
//If we get here, we have a gateway and a list of items to renumber.
//Loop through all the items
//Find find all connected items
//loop through all connected items & count them (excluding them if they are not selected)
//set the gateway.
//count them and exclude items that are not within the threshhold.
foreach(NetworkDevice one in ItemsSelected)
{
List<NetworkDevice> alreadydone = new List<NetworkDevice>();
List<NetworkDevice> connections = one.ConnectedTo();
for(int i=0; i< connections.Count; i++)
{
NetworkDevice connection = connections[i];
//If we have not done it yet
if (!ItemsSelected.Contains(connection))
continue;
if (myNetwork.VLANsEnabled && (ChosenVlanID != connection.PrimaryVLAN() && connection.myType != NetworkComponentType.net_switch))
continue; //Skip the device if it is not on the primary vlan, and is not a switch (asuming switches are taggexd)
if (!alreadydone.Contains(connection))
{
alreadydone.Add(connection);
if(!connection.RoutesPackets() || connection.myType == NetworkComponentType.wrouter)
connections.AddRange(connection.ConnectedTo(true));
Renumberer.Count(connection.hostname);
}
}
}
Renumberer.SetAsGateway(gwDevice.hostname);
Renumberer.TryRenumbering(network, gw);
if (Renumberer.ListOfItems.Count > network.NumberOfHosts)
{
//Not enough room in the subnet for the various items.
MessageBox.Show("There are not enough IP addresses in the subnet you specified for the number of items we need to renumber.");
return;
}
//We should print off the things we are hoping to do.
string message = "What we are trying to do:\n";
foreach(NBRenumberData NBRD in Renumberer.ListOfItems)
{
message += NBRD.Hostname + " " + NBRD.TypeString() + " -> " + NBRD.SuggestedIP + "\n";
}
DialogResult answer = MessageBox.Show(message,"Renumber?",MessageBoxButtons.OKCancel);
if (answer == DialogResult.OK)
Renumberer.DoRenumbering(network, gw, ChosenVlanID);
}
}
private void pbNetworkView_Hide_Click(object sender, EventArgs e) private void pbNetworkView_Hide_Click(object sender, EventArgs e)
{ {
if (ItemClickedOn != null) if (ItemClickedOn != null)
@ -1886,7 +2036,6 @@ namespace EduNetworkBuilder
private void pbNetworkView_MouseMove(object sender, MouseEventArgs e) private void pbNetworkView_MouseMove(object sender, MouseEventArgs e)
{ {
Image tImage;
//Only do this 10 times a second //Only do this 10 times a second
if (DateTime.UtcNow - LastMoveTime < TimeSpan.FromMilliseconds(100)) return; if (DateTime.UtcNow - LastMoveTime < TimeSpan.FromMilliseconds(100)) return;
@ -1895,25 +2044,7 @@ namespace EduNetworkBuilder
//If we are dragging lines, do that first. //If we are dragging lines, do that first.
if (selectedButton == "btnLink") if (selectedButton == "btnLink")
{ {
if (MouseIsDown) //We are trying to do a link. Do not drag...
{
//We are trying to do a link. Drag a line...
if (ItemClickedOn != null)
{
Point OrigCenter = ItemClickedOn.GetCenter();
//Draw a line from the item-clicked on to the mouse
tImage = new Bitmap(pbNetworkView.BackgroundImage.Width, pbNetworkView.BackgroundImage.Height);
Graphics tGraphics = Graphics.FromImage(tImage);
tGraphics.Clear(Color.Transparent); //erase the whole thing
//draw the line
//tGraphics.FillRectangle(semiTransBrush, selectbox);
tGraphics.DrawLine(Pens.Black, OrigCenter, MouseLocation);
pbNetworkView.Image = tImage;
pbNetworkView.Invalidate();
}
}
} }
else if (MouseIsDown && LastBackgroundImage != null && ItemClickedOn != null && ItemsSelected.Count == 0) //We are trying to drag something else if (MouseIsDown && LastBackgroundImage != null && ItemClickedOn != null && ItemsSelected.Count == 0) //We are trying to drag something
{ {
@ -1943,7 +2074,7 @@ namespace EduNetworkBuilder
else if (MouseIsDown && ItemClickedOn == null) //Dragging an empty area else if (MouseIsDown && ItemClickedOn == null) //Dragging an empty area
{ {
//make a rectangle //make a rectangle
tImage = new Bitmap(pbNetworkView.BackgroundImage.Width, pbNetworkView.BackgroundImage.Height); Image tImage = new Bitmap(pbNetworkView.BackgroundImage.Width, pbNetworkView.BackgroundImage.Height);
Graphics tGraphics = Graphics.FromImage(tImage); Graphics tGraphics = Graphics.FromImage(tImage);
tGraphics.Clear(Color.Transparent); //erase the whole thing tGraphics.Clear(Color.Transparent); //erase the whole thing
int sx; int sx;

View File

@ -978,17 +978,6 @@ namespace EduNetworkBuilder
return null; return null;
} }
public string AllInterfacesString(bool UseCidr= false)
{
string thestring = "";
foreach (NetworkInterface oneIF in interfaces)
{
if (thestring != "") thestring += ",";
thestring += oneIF.InterfaceString(UseCidr);
}
return thestring;
}
public NB_IPAddress FirstIP() public NB_IPAddress FirstIP()
{ {
List<NB_IPAddress> addresses = IPAddressList(); List<NB_IPAddress> addresses = IPAddressList();

View File

@ -99,7 +99,7 @@ namespace EduNetworkBuilder
{ {
} }
public virtual void UpdateFromComponent(NetworkComponent CopyFrom, bool NoteAllChanges = false) public virtual void UpdateFromComponent(NetworkComponent CopyFrom)
{ {
} }

View File

@ -655,6 +655,196 @@ namespace EduNetworkBuilder
} }
} }
/// <summary>
/// Return the list of devices connected to this device
/// </summary>
/// <param name="skipwan">For routers, do not show things connected on the WAN</param>
/// <returns>A list of devices</returns>
public List<NetworkDevice> ConnectedTo(bool skipwan= false)
{
List<NetworkDevice> connected = new List<NetworkDevice>();
foreach (NetworkCard nic in NICs)
{
//We want to skip connections through the wan when searching a broadcast network
if (!(myType == NetworkComponentType.wrouter && skipwan && nic.GetNicType == NicType.wan))
{
NetworkDevice nd = ConnectedTo(nic);
if (nd != null) connected.Add(nd);
}
}
return connected;
}
/// <summary>
/// return the device this nic is attached to
/// </summary>
/// <param name="NIC"></param>
/// <returns></returns>
public NetworkDevice ConnectedTo(NetworkCard NIC)
{
return NIC.ConnectedTo();
}
/// <summary>
/// return the device this nic is attached to
/// </summary>
/// <param name="NIC">the network card ID</param>
/// <returns></returns>
public NetworkDevice ConnectedTo(HostNicID NIC)
{
NetworkCard nic = NicFromID(NIC);
if (nic == null) return null;
return nic.ConnectedTo();
}
/// <summary>
/// return the device this nic is attached to
/// </summary>
/// <param name="nicname">The network card name</param>
/// <returns></returns>
public NetworkDevice ConnectedTo(string nicname)
{
NetworkCard nic = NicFromName(nicname);
if (nic == null) return null;
return nic.ConnectedTo();
}
public int VLANFromNIF(NetworkInterface nif, int level = 0)
{
level++;
if (DoesVLANs())
{
//This device itself does vlans
int vlan = nif.GetUntaggedVLAN();
if (vlan != NB.InvalidVLAN)
{
return vlan;
}
}
if (nif == null) return NB.InvalidVLAN;
NetworkCard nic = NicFromID(nif.AttachedToHostNic);
if (nic == null) return NB.InvalidVLAN; //Nothing
if (level > 5) return NB.InvalidVLAN;
return VLANFromNIC(nic, level);
}
public int VLANFromNIC(NetworkCard nic, int level=0)
{
level++;
int vlan = NB.InvalidVLAN;
if (DoesVLANs())
{
foreach (NetworkInterface nif in nic.interfaces)
{
int tvlan = NB.InvalidVLAN;
if(DoesVLANs())
tvlan = VLANFromNIF(nif, level);
if (tvlan != NB.InvalidVLAN)
{
if (vlan != NB.InvalidVLAN && vlan != tvlan)
return NB.InvalidVLAN; //We have multiple VLANs defined on this nic. Cannot determine it from the nic. Need to look using nif
vlan = tvlan;
}
}
return vlan;
}
//If the device does not do vlans, we need to trace the wire to the device.
NetworkDevice FarEnd = ConnectedTo(nic);
if (FarEnd == null) return NB.InvalidVLAN; //Nothing connected to this link
//if it is a switch or wrouter(does vlans), return vlan for the device
if (FarEnd.myType == NetworkComponentType.net_switch || FarEnd.myType == NetworkComponentType.wrouter)
return FarEnd.VLANFromSwitchPort(hostname);
//if it is a hub, return invalid
if (FarEnd.myType == NetworkComponentType.net_hub)
return NB.InvalidVLAN;
//if it is a wireless device, find the vlan the device is attached to.
if (FarEnd.IsWirelessForwarder())
{
return FarEnd.PrimaryVLAN();
}
return NB.InvalidVLAN;
}
/// <summary>
/// Used by PrimaryVLAN
/// </summary>
/// <param name="tList"></param>
/// <returns></returns>
private int ProcessVLANlist(List<NetworkCard> tList)
{
int VLAN = NB.InvalidVLAN;
int tvlan = NB.InvalidVLAN;
foreach(NetworkCard nic in tList)
{
tvlan = VLANFromNIC(nic);
if(VLAN != NB.InvalidVLAN && tvlan != VLAN)
{
//We have multiple VLANs defined on these nics. We do not know what is primary
return NB.InvalidVLAN;
}
VLAN = tvlan;
}
return VLAN;
}
/// <summary>
/// Return the primary vlan of the device.
/// </summary>
/// <returns></returns>
public int PrimaryVLAN()
{
int tVLAN;
List<NetworkCard> Connections;
Connections = NICsFromTypeNic(NicType.management_interface);
tVLAN = ProcessVLANlist(Connections);
if (tVLAN != NB.InvalidVLAN) return tVLAN;
//Connections = NICsFromTypeNic(NicType.wan); //If the device has a wan vlan defined
//tVLAN = ProcessVLANlist(Connections);
//if (tVLAN != NB.InvalidVLAN) return tVLAN;
Connections = NICsFromTypeNic(NicType.eth);
tVLAN = ProcessVLANlist(Connections);
if (tVLAN != NB.InvalidVLAN) return tVLAN;
Connections = NICsFromTypeNic(NicType.wlan);
tVLAN = ProcessVLANlist(Connections);
if (tVLAN != NB.InvalidVLAN) return tVLAN;
return NB.InvalidVLAN;
}
/// <summary>
/// On a switch, return the vlan that hostname is attached to. Returns invalid if not found on this switch
/// </summary>
/// <param name="hostname">the hostname of the device</param>
/// <returns>nb.invalid if it is not attached to this switch, or if this is not a switch</returns>
public int VLANFromSwitchPort(string hostname)
{
if (myType == NetworkComponentType.net_hub) return NB.InvalidVLAN; //Hubs do not know what vlan they are on
if(myType == NetworkComponentType.net_switch || myType == NetworkComponentType.wrouter)
{
//We want to find the port the hostname is on.
foreach(NetworkCard nic in NICs)
{
NetworkDevice FarEnd = ConnectedTo(nic); //Get the device at the far end
if (FarEnd == null) continue;
if(FarEnd.hostname == hostname)
{
//This is the port the host is on
return VLANFromNIC(nic);
}
}
}
return NB.InvalidVLAN;
}
public int VLANFromIP(string ip)
{
NetworkInterface nif = InterfaceFromIP(ip);
if (nif == null) return NB.InvalidVLAN; //Nothing
return VLANFromNIF(nif);
}
/// <summary> /// <summary>
/// Check to see if the device has a link to the specified host /// Check to see if the device has a link to the specified host
/// </summary> /// </summary>
@ -755,15 +945,6 @@ namespace EduNetworkBuilder
} }
} }
/// <summary>
/// Return a copy of the image for this device
/// </summary>
/// <returns></returns>
public Image GetImage()
{
return new Bitmap(MyImage);
}
//This function heavily borrowed from: http://stackoverflow.com/questions/1563038/fast-work-with-bitmaps-in-c-sharp //This function heavily borrowed from: http://stackoverflow.com/questions/1563038/fast-work-with-bitmaps-in-c-sharp
public Image ColoredImage(Image BaseImage) public Image ColoredImage(Image BaseImage)
{ {
@ -1173,6 +1354,73 @@ namespace EduNetworkBuilder
} }
return null; return null;
} }
public NetworkInterface InterfaceFromIP(string IP)
{
foreach (NetworkCard nic in NICs)
{
foreach (NetworkInterface nif in nic.interfaces)
{
if (nif.myIP.GetIPString == IP)
return nif;
}
}
return null;
}
public bool RenumberIP(string newip, NB_IPAddress gateway, int vlanID)
{
DefaultGW = new NB_IPAddress(gateway);
//figure out which interface to change.
if (!RenumberIP(newip, gateway, NicType.management_interface, vlanID))
if (!RenumberIP(newip, gateway, NicType.eth, vlanID))
return RenumberIP(newip, gateway, NicType.wlan, vlanID);
return true;
}
private bool RenumberIP(string newip, NB_IPAddress gateway, NicType what, int vlan)
{
List<NetworkCard> smalllist = NICsFromTypeNic(what);
smalllist.Sort((p, q) => p._nic_name.CompareTo(q._nic_name));
foreach (NetworkCard nic in smalllist)
{
//see if we can renumber this one
//It cannot be dhcp, and must be connected.
if((!nic.UsesDHCP && nic.isConnected(false)) || nic.GetNicType == NicType.management_interface)
{
//If we are doing vlans, the vlan should match the interface if eth
//If we are doing vlans, the vlan should match if we are doing management interface
//
//right now, just do it.
NetworkInterface nif = nic.PrimaryInterface();
if(nif == null)
{ //There are multiple interfaces, or there are no interfaces.
//If multiple interfaces, try one with the specified vlan.
nif = nic.InterfaceFromVlanTag(vlan);
}
if (nif != null)
{
nif.myIP = new NB_IPAddress(newip, gateway._mask.ToIpString(), IPAddressType.ip);
return true;
}
}
}
return false;
}
public NetworkCard NicFromIP(string IP)
{
foreach (NetworkCard nic in NICs)
{
foreach(NetworkInterface nif in nic.interfaces)
{
if (nif.myIP.GetIPString == IP)
return nic;
}
}
return null;
}
public NetworkCard NicFromID(HostNicID ID) public NetworkCard NicFromID(HostNicID ID)
{ {
return NicFromID(ID.NicID); return NicFromID(ID.NicID);
@ -1440,6 +1688,11 @@ namespace EduNetworkBuilder
public bool HasBroadcastAddress(NB_IPAddress dest) public bool HasBroadcastAddress(NB_IPAddress dest)
{ {
if (dest.BroadcastAddress == dest.GetIP) return true; if (dest.BroadcastAddress == dest.GetIP) return true;
//This "fixes" a strange fringe case of when we configure a subnet such that
//a packet that is traversing the network suddenly is a broadcast packet on the
//target network. Gotta have odd subnetting for this to happen
if (NB.BroadcastIPString == dest.GetIPString) return true;
foreach (NetworkCard nic in NICs) foreach (NetworkCard nic in NICs)
{ {
if (nic.HasBroadcastAddresses(dest)) if (nic.HasBroadcastAddresses(dest))
@ -1518,109 +1771,28 @@ namespace EduNetworkBuilder
return arps; return arps;
} }
public override void UpdateFromComponent(NetworkComponent CopyFrom, bool NoteAllChanges = false) public override void UpdateFromComponent(NetworkComponent CopyFrom)
{ {
if (CopyFrom.GetType() != this.GetType()) return; //we cannot copy from it if it is different if (CopyFrom.GetType() != this.GetType()) return; //we cannot copy from it if it is different
NetworkDevice ndCopyFrom = (NetworkDevice)CopyFrom; NetworkDevice ndCopyFrom = (NetworkDevice)CopyFrom;
if (Object.ReferenceEquals(this, CopyFrom)) return; //No need to copy values to itself if (Object.ReferenceEquals(this, CopyFrom)) return; //No need to copy values to itself
Network mainnet = NB.GetNetwork();
string indent = " ";
//if(NoteAllChanges && mainnet != null) mainnet.AddMessage(new PacketMessage("", indent + NB.Translate("NDUpdateComponent")));
if (hostname != ndCopyFrom.hostname)
{
if (NoteAllChanges && mainnet != null) mainnet.AddMessage(new PacketMessage("", indent + "hostname: " + hostname + " -> " + ndCopyFrom.hostname));
hostname = ndCopyFrom.hostname; hostname = ndCopyFrom.hostname;
}
Size = ndCopyFrom.Size; Size = ndCopyFrom.Size;
if (DefaultGW.GetIPString != ndCopyFrom.DefaultGW.GetIPString)
{
if (NoteAllChanges && mainnet != null) mainnet.AddMessage(new PacketMessage("", indent + "DefaultGW: " + DefaultGW.GetIPString + " -> " + ndCopyFrom.DefaultGW.GetIPString));
DefaultGW = ndCopyFrom.DefaultGW; DefaultGW = ndCopyFrom.DefaultGW;
}
if (ndCopyFrom.MyImage != null) if (ndCopyFrom.MyImage != null)
MyImage = new Bitmap(ndCopyFrom.MyImage); MyImage = new Bitmap(ndCopyFrom.MyImage);
else else
MyImage = null; MyImage = null;
if (CanAddNics != ndCopyFrom.CanAddNics)
{
if (NoteAllChanges && mainnet != null) mainnet.AddMessage(new PacketMessage("", indent + "CanAddNics: " + CanAddNics + " -> " + ndCopyFrom.CanAddNics));
CanAddNics = ndCopyFrom.CanAddNics; CanAddNics = ndCopyFrom.CanAddNics;
}
if (CanServeDHCP != ndCopyFrom.CanServeDHCP)
{
if (NoteAllChanges && mainnet != null) mainnet.AddMessage(new PacketMessage("", indent + "CanServeDHCP: " + CanServeDHCP + " -> " + ndCopyFrom.CanServeDHCP));
CanServeDHCP = ndCopyFrom.CanServeDHCP; CanServeDHCP = ndCopyFrom.CanServeDHCP;
}
if (CanUseDHCP != ndCopyFrom.CanUseDHCP)
{
if (NoteAllChanges && mainnet != null) mainnet.AddMessage(new PacketMessage("", indent + "CanUseDHCP: " + CanUseDHCP + " -> " + ndCopyFrom.CanUseDHCP));
CanUseDHCP = ndCopyFrom.CanUseDHCP; CanUseDHCP = ndCopyFrom.CanUseDHCP;
}
if (MustUseDHCP != ndCopyFrom.MustUseDHCP)
{
if (NoteAllChanges && mainnet != null) mainnet.AddMessage(new PacketMessage("", indent + "MustUseDHCP: " + MustUseDHCP + " -> " + ndCopyFrom.MustUseDHCP));
MustUseDHCP = ndCopyFrom.MustUseDHCP; MustUseDHCP = ndCopyFrom.MustUseDHCP;
}
if (isDHCPServer != ndCopyFrom.isDHCPServer)
{
if (NoteAllChanges && mainnet != null) mainnet.AddMessage(new PacketMessage("", indent + "IsDHCPServer: " + isDHCPServer + " -> " + ndCopyFrom.isDHCPServer));
isDHCPServer = ndCopyFrom.isDHCPServer; isDHCPServer = ndCopyFrom.isDHCPServer;
}
if (isDNSServer != ndCopyFrom.isDNSServer)
{
if (NoteAllChanges && mainnet != null) mainnet.AddMessage(new PacketMessage("", indent + "IsDNSserver: " + isDNSServer + " -> " + ndCopyFrom.isDNSServer));
isDNSServer = ndCopyFrom.isDNSServer; isDNSServer = ndCopyFrom.isDNSServer;
}
if (HasAdvFirewall != ndCopyFrom.HasAdvFirewall)
{
if (NoteAllChanges && mainnet != null) mainnet.AddMessage(new PacketMessage("", indent + "HasAdvancedFirewall: " + HasAdvFirewall + " -> " + ndCopyFrom.HasAdvFirewall));
HasAdvFirewall = ndCopyFrom.HasAdvFirewall; HasAdvFirewall = ndCopyFrom.HasAdvFirewall;
}
MyLocation = ndCopyFrom.MyLocation; MyLocation = ndCopyFrom.MyLocation;
//Process NICs.
if (NoteAllChanges && mainnet != null)
{
//List all nics that we are dropping
foreach (NetworkCard nic in NICs)
{
NetworkCard foundnic = ndCopyFrom.NicFromName(nic.NicName());
if (foundnic == null)
mainnet.AddMessage(new PacketMessage("", indent + "DropNIC: " + nic.NicName()));
else
{
//The nic still exists. Note any major changes. IP, netmask
if((foundnic.myNicType == NicType.wport || foundnic.myNicType == NicType.wlan) && foundnic.SSID != nic.SSID)
mainnet.AddMessage(new PacketMessage("", indent + "SSID: " + nic.SSID + " -> " + foundnic.SSID));
if ((foundnic.myNicType == NicType.vpn || foundnic.myNicType == NicType.vpn) && foundnic.EncryptionKey != nic.EncryptionKey)
mainnet.AddMessage(new PacketMessage("", indent + "EncryptionKey: " + nic.EncryptionKey + " -> " + foundnic.EncryptionKey));
//Compare interfaces - should be done at nic level...
if (foundnic.AllInterfacesString() != nic.AllInterfacesString())
mainnet.AddMessage(new PacketMessage("", indent + "Interfaces: " + nic.AllInterfacesString(true) + " -> " + foundnic.AllInterfacesString(true)));
}
}
//List all nics that we are dropping
foreach (NetworkCard nic in ndCopyFrom.NICs)
{
NetworkCard mynic = NicFromName(nic.NicName());
if (mynic == null)
mainnet.AddMessage(new PacketMessage("", indent + "AddNIC: " + nic.NicName() + " " +nic.AllInterfacesString()));
}
}
//Now, copy across the NICs
NICs.Clear(); NICs.Clear();
foreach(NetworkCard nic in ndCopyFrom.NICs) foreach(NetworkCard nic in ndCopyFrom.NICs)
{ {
@ -1634,6 +1806,24 @@ namespace EduNetworkBuilder
RouteTable.AddRange(ndCopyFrom.RouteTable); RouteTable.AddRange(ndCopyFrom.RouteTable);
DHCPRanges.Clear(); DHCPRanges.Clear();
DHCPRanges.AddRange(ndCopyFrom.DHCPRanges); DHCPRanges.AddRange(ndCopyFrom.DHCPRanges);
//if the IP address has changed, also update the corresponding address in DHCP rules
foreach (NB_IPAddress dhcpIP in DHCPRanges)
{
foreach (NetworkCard nic in NICs)
{
NetworkInterface matchingIF = nic.LocalInterface(dhcpIP, null);
if (matchingIF != null && !matchingIF.myIP.Equals(dhcpIP.GetIP) && !matchingIF.myIP.Equals(0))
{
//only validate the entry if the new address doesn't conflict with the DHCP range.
UInt32 nStartingDHCP = dhcpIP.GetMask;
UInt32 nEndingDHCP = dhcpIP.GetGateway;
if (matchingIF.myIP.GetIP < nStartingDHCP || matchingIF.myIP.GetIP > nEndingDHCP)
{
dhcpIP.SetIP(matchingIF.myIP.GetIP);
}
}
}
}
DHCPLeases.Clear(); DHCPLeases.Clear();
DHCPLeases.AddRange(ndCopyFrom.DHCPLeases); DHCPLeases.AddRange(ndCopyFrom.DHCPLeases);
@ -1913,7 +2103,7 @@ namespace EduNetworkBuilder
//Change this. Need a new ProcessArrival //Change this. Need a new ProcessArrival
if (tPacket.MyType != PacketType.dhcp_answer) //If it is a match, it should be handled elsewhere if (tPacket.MyType != PacketType.dhcp_answer) //If it is a match, it should be handled elsewhere
ProcessArrival(tPacket); ProcessArrival(tPacket);
if (ExactMatch && tPacket.isFinshed()) if (ExactMatch && tPacket.isFinished())
return; return;
} }
@ -1960,7 +2150,7 @@ namespace EduNetworkBuilder
} }
if (tPacket.isFinshed() && !BroadcastMatch) return; if (tPacket.isFinished() && !BroadcastMatch) return;
NetworkCard dNic = null; NetworkCard dNic = null;
NetworkCard sNic = null; NetworkCard sNic = null;
@ -2642,6 +2832,11 @@ namespace EduNetworkBuilder
NetworkCard tCard = null; NetworkCard tCard = null;
NB_IPAddress DestAddr; NB_IPAddress DestAddr;
string DHCPGW = ""; string DHCPGW = "";
//Do not ping the zero string. Should not go anywhere
if (dest != null && dest.GetIPString == NB.ZeroIPString)
return new NB_IPAddress(NB.ZeroIPString);
foreach ( NB_IPAddress ip in RouteTable) foreach ( NB_IPAddress ip in RouteTable)
{ {
if (ip.IsLocal(dest)) if (ip.IsLocal(dest))
@ -2875,6 +3070,19 @@ namespace EduNetworkBuilder
return null; return null;
} }
private List<NetworkCard> NICsFromTypeNic(NicType What)
{
List<NetworkCard> tList = new List<NetworkCard>();
foreach (NetworkCard nic in NB.Randomize(NICs).ToList())
{
if (nic.GetNicType == What)
{
tList.Add(nic);
}
}
return tList;
}
public NB_IPAddress BestIPForThis(NetworkDevice Source=null) public NB_IPAddress BestIPForThis(NetworkDevice Source=null)
{ {
NB_IPAddress answer=null; NB_IPAddress answer=null;
@ -3002,14 +3210,16 @@ namespace EduNetworkBuilder
} }
} }
if (!ForwardsPackets()) if (!ForwardsPackets() || HasIPAddress(tPacket.destIP))
{ {
//Traceroute bounce-back //Traceroute bounce-back
if (tPacket.MyType == PacketType.tracert_request) if (tPacket.MyType == PacketType.tracert_request)
{ {
if (ProcessTracertPacket(tPacket)) return; //the packet stops if it gets bounced. if (ProcessTracertPacket(tPacket)) return; //the packet stops if it gets bounced.
} }
}
if (!ForwardsPackets())
{
if (tPacket.MyType == PacketType.dhcp_request && !isDHCPServer) if (tPacket.MyType == PacketType.dhcp_request && !isDHCPServer)
{ {
tPacket.AddMessage(DebugLevel.debug, NB.LeftPad(hostname) + " " +string.Format(NB.Translate("ND_DoInFromLnkDeaf"))); tPacket.AddMessage(DebugLevel.debug, NB.LeftPad(hostname) + " " +string.Format(NB.Translate("ND_DoInFromLnkDeaf")));
@ -3080,7 +3290,12 @@ namespace EduNetworkBuilder
//Console.WriteLine(" Tracert bounce: " + tPacket.OrigTTL + " " + hostname + " " + tPacket.payloadData); //Console.WriteLine(" Tracert bounce: " + tPacket.OrigTTL + " " + hostname + " " + tPacket.payloadData);
//Finish setting up the new packet - sending it back //Finish setting up the new packet - sending it back
// respond from requested address, not outgoing address: important for routers.
if (HasIPAddress(tPacket.destIP))
nPacket.sourceIP = tPacket.destIP;
else
nPacket.sourceIP = new NB_IPAddress(NB.ZeroIPString); nPacket.sourceIP = new NB_IPAddress(NB.ZeroIPString);
nPacket.TsourceIP = new NB_IPAddress(NB.ZeroIPString); nPacket.TsourceIP = new NB_IPAddress(NB.ZeroIPString);
myNet.addPacket(nPacket); myNet.addPacket(nPacket);
//Console.WriteLine(" Tracert bounce pkt:" + nPacket.OrigTTL + nPacket.payloadData); //Console.WriteLine(" Tracert bounce pkt:" + nPacket.OrigTTL + nPacket.payloadData);

View File

@ -123,6 +123,16 @@ namespace EduNetworkBuilder
return VLANTagType.Forbidden; //if not defined, it is forbidden return VLANTagType.Forbidden; //if not defined, it is forbidden
} }
public int GetUntaggedVLAN()
{
foreach (VLANInfo vin in VLANs)
{
if (vin.Tag == VLANTagType.Untagged)
return vin.ID;
}
return NB.InvalidVLAN;
}
public int GetNonForbiddenVLANID() public int GetNonForbiddenVLANID()
{ {
foreach(VLANInfo vin in VLANs) foreach(VLANInfo vin in VLANs)
@ -130,7 +140,7 @@ namespace EduNetworkBuilder
if (vin.Tag != VLANTagType.Forbidden) if (vin.Tag != VLANTagType.Forbidden)
return vin.ID; return vin.ID;
} }
return -999; return NB.InvalidVLAN;
} }
public void SetVLANTag(int id, VLANTagType Tag) public void SetVLANTag(int id, VLANTagType Tag)

View File

@ -489,7 +489,7 @@ namespace EduNetworkBuilder
return false; return false;
} }
public bool isFinshed() public bool isFinished()
{ {
if (_MyStatus == PacketStatus.finished_ok) return true; if (_MyStatus == PacketStatus.finished_ok) return true;
if (_MyStatus == PacketStatus.finished_failed) return true; if (_MyStatus == PacketStatus.finished_failed) return true;

View File

@ -70,7 +70,7 @@
<interface> <interface>
<nicname>management_interface0</nicname> <nicname>management_interface0</nicname>
<myip> <myip>
<ip>102.168.1.4</ip> <ip>192.168.1.4</ip>
<mask>255.255.255.0</mask> <mask>255.255.255.0</mask>
<gateway>0.0.0.0</gateway> <gateway>0.0.0.0</gateway>
<type>ip</type> <type>ip</type>

View File

@ -2,8 +2,8 @@
<EduNetworkBuilder> <EduNetworkBuilder>
<!--This is a network file for EduNetworkBuilder.--> <!--This is a network file for EduNetworkBuilder.-->
<Network> <Network>
<en_message>The one router got replaced and needs the correct IP-Addresses given to it.</en_message> <en_message>The one router got replaced and needs the correct IP-Addresses and routes given to it.</en_message>
<fr_message>Le routeur a été remplacé et a besoin des adresses IP correctes qui lui ont été attribuées.</fr_message> <fr_message>Le routeur a été remplacé et a besoin des adresses IP correctes qui lui ont été attribuées et des itinéraires.</fr_message>
<en_title>Router Replacement</en_title> <en_title>Router Replacement</en_title>
<height>1024</height> <height>1024</height>
<width>1024</width> <width>1024</width>
@ -1205,18 +1205,6 @@
ID="1">Untagged</VLAN> ID="1">Untagged</VLAN>
</interface> </interface>
</nic> </nic>
<route>
<ip>172.16.1.2</ip>
<mask>255.255.255.252</mask>
<gateway>172.16.1.9</gateway>
<type>route</type>
</route>
<route>
<ip>172.16.1.18</ip>
<mask>255.255.255.252</mask>
<gateway>172.16.1.14</gateway>
<type>route</type>
</route>
</device> </device>
<device> <device>
<hostname>router4</hostname> <hostname>router4</hostname>

View File

@ -1478,6 +1478,11 @@ Someone is complaining that they cannot access the servers on the other side of
<dhost>pc3</dhost> <dhost>pc3</dhost>
<thetest>SuccessfullyPings</thetest> <thetest>SuccessfullyPings</thetest>
</nettest> </nettest>
<nettest>
<shost>laptop0</shost>
<dhost>server0</dhost>
<thetest>NeedsLocalIPTo</thetest>
</nettest>
<VLANName <VLANName
ID="1" ID="1"
Color="Blue">Default</VLANName> Color="Blue">Default</VLANName>

View File

@ -1102,6 +1102,6 @@ Ce puzzle a un interrupteur que vous avez été bloqué. Réinitialisez-le (clic
Color="Blue">Default</VLANName> Color="Blue">Default</VLANName>
<VLANName <VLANName
ID="2" ID="2"
Color="Blue">Sttaff</VLANName> Color="Blue">Staff</VLANName>
</Network> </Network>
</EduNetworkBuilder> </EduNetworkBuilder>

View File

@ -3,7 +3,7 @@
<!--This is a network file for EduNetworkBuilder.--> <!--This is a network file for EduNetworkBuilder.-->
<Network> <Network>
<en_message>Switch Ports can have three states: <en_message>Switch Ports can have three states:
Unagged UnTagged
Tagged Tagged
Forbidden Forbidden
When you are connecting switch-to-switch, they should be "Tagged." This makes a "Trunk", or a backbone link that can pass any VLAN. This allows packets to go to all the switches, and let the switches determine what devices they can go to from there. When you are connecting switch-to-switch, they should be "Tagged." This makes a "Trunk", or a backbone link that can pass any VLAN. This allows packets to go to all the switches, and let the switches determine what devices they can go to from there.
@ -1124,6 +1124,6 @@ Pour compléter ce puzzle, vérifiez les deux commutateurs. L'un d'eux n'a pas l
Color="Blue">Default</VLANName> Color="Blue">Default</VLANName>
<VLANName <VLANName
ID="2" ID="2"
Color="Blue">Sttaff</VLANName> Color="Blue">Staff</VLANName>
</Network> </Network>
</EduNetworkBuilder> </EduNetworkBuilder>

View File

@ -2,7 +2,7 @@
<EduNetworkBuilder> <EduNetworkBuilder>
<!--This is a network file for EduNetworkBuilder.--> <!--This is a network file for EduNetworkBuilder.-->
<Network> <Network>
<en_message>A staff memner brought in a laptop and they have problems. As always, they want you to fix it. <en_message>A staff member brought in a laptop and they have problems. As always, they want you to fix it.
Some vlan issues are a lot simpler than they originally look.</en_message> Some vlan issues are a lot simpler than they originally look.</en_message>
<fr_message>Un membre du personnel a apporté un ordinateur portable et ils ont des problèmes. Comme toujours, ils veulent que vous le répariez. <fr_message>Un membre du personnel a apporté un ordinateur portable et ils ont des problèmes. Comme toujours, ils veulent que vous le répariez.
Certains problèmes de vlan sont beaucoup plus simples qu'ils ne le paraissent à l'origine.</fr_message> Certains problèmes de vlan sont beaucoup plus simples qu'ils ne le paraissent à l'origine.</fr_message>

View File

@ -1204,6 +1204,6 @@
Color="Blue">Default</VLANName> Color="Blue">Default</VLANName>
<VLANName <VLANName
ID="2" ID="2"
Color="Blue">Sttaff</VLANName> Color="Blue">Staff</VLANName>
</Network> </Network>
</EduNetworkBuilder> </EduNetworkBuilder>

View File

@ -1214,6 +1214,6 @@ Pour que cela fonctionne, nous avons besoin de deux VLAN différents sur le seul
Color="Blue">Default</VLANName> Color="Blue">Default</VLANName>
<VLANName <VLANName
ID="2" ID="2"
Color="Blue">Sttaff</VLANName> Color="Blue">Staff</VLANName>
</Network> </Network>
</EduNetworkBuilder> </EduNetworkBuilder>

View File

@ -1121,6 +1121,6 @@ Faites un ping sur un certain nombre d'ordinateurs et faites des pings de diffus
Color="Blue">Default</VLANName> Color="Blue">Default</VLANName>
<VLANName <VLANName
ID="2" ID="2"
Color="Blue">Sttaff</VLANName> Color="Blue">Staff</VLANName>
</Network> </Network>
</EduNetworkBuilder> </EduNetworkBuilder>

View File

@ -42,6 +42,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>101</uniqueidentifier> <uniqueidentifier>101</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -66,6 +68,8 @@
<nictype>wan</nictype> <nictype>wan</nictype>
<uniqueidentifier>104</uniqueidentifier> <uniqueidentifier>104</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>wan0</nicname> <nicname>wan0</nicname>
<myip> <myip>
@ -90,6 +94,8 @@
<nictype>eth</nictype> <nictype>eth</nictype>
<uniqueidentifier>102</uniqueidentifier> <uniqueidentifier>102</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>eth0</nicname> <nicname>eth0</nicname>
<myip> <myip>
@ -153,6 +159,8 @@
<nictype>eth</nictype> <nictype>eth</nictype>
<uniqueidentifier>103</uniqueidentifier> <uniqueidentifier>103</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>eth1</nicname> <nicname>eth1</nicname>
<myip> <myip>
@ -202,6 +210,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>106</uniqueidentifier> <uniqueidentifier>106</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -226,6 +236,8 @@
<nictype>management_interface</nictype> <nictype>management_interface</nictype>
<uniqueidentifier>107</uniqueidentifier> <uniqueidentifier>107</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>management_interface0</nicname> <nicname>management_interface0</nicname>
<myip> <myip>
@ -250,6 +262,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>108</uniqueidentifier> <uniqueidentifier>108</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port1</nicname> <nicname>port1</nicname>
<myip> <myip>
@ -276,6 +290,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>109</uniqueidentifier> <uniqueidentifier>109</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port2</nicname> <nicname>port2</nicname>
<myip> <myip>
@ -302,6 +318,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>110</uniqueidentifier> <uniqueidentifier>110</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port3</nicname> <nicname>port3</nicname>
<myip> <myip>
@ -328,6 +346,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>111</uniqueidentifier> <uniqueidentifier>111</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port4</nicname> <nicname>port4</nicname>
<myip> <myip>
@ -354,6 +374,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>112</uniqueidentifier> <uniqueidentifier>112</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port5</nicname> <nicname>port5</nicname>
<myip> <myip>
@ -380,6 +402,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>113</uniqueidentifier> <uniqueidentifier>113</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port6</nicname> <nicname>port6</nicname>
<myip> <myip>
@ -410,6 +434,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>114</uniqueidentifier> <uniqueidentifier>114</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port7</nicname> <nicname>port7</nicname>
<myip> <myip>
@ -455,6 +481,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>116</uniqueidentifier> <uniqueidentifier>116</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -479,6 +507,8 @@
<nictype>management_interface</nictype> <nictype>management_interface</nictype>
<uniqueidentifier>117</uniqueidentifier> <uniqueidentifier>117</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>management_interface0</nicname> <nicname>management_interface0</nicname>
<myip> <myip>
@ -505,6 +535,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>118</uniqueidentifier> <uniqueidentifier>118</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port1</nicname> <nicname>port1</nicname>
<myip> <myip>
@ -533,6 +565,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>119</uniqueidentifier> <uniqueidentifier>119</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port2</nicname> <nicname>port2</nicname>
<myip> <myip>
@ -542,11 +576,11 @@
<type>ip</type> <type>ip</type>
</myip> </myip>
<VLAN <VLAN
ID="1">Untagged</VLAN> ID="1">Forbidden</VLAN>
<VLAN <VLAN
ID="2">Forbidden</VLAN> ID="2">Forbidden</VLAN>
<VLAN <VLAN
ID="3">Forbidden</VLAN> ID="3">Untagged</VLAN>
</interface> </interface>
</nic> </nic>
<nic> <nic>
@ -561,6 +595,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>120</uniqueidentifier> <uniqueidentifier>120</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port3</nicname> <nicname>port3</nicname>
<myip> <myip>
@ -589,6 +625,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>121</uniqueidentifier> <uniqueidentifier>121</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port4</nicname> <nicname>port4</nicname>
<myip> <myip>
@ -617,6 +655,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>122</uniqueidentifier> <uniqueidentifier>122</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port5</nicname> <nicname>port5</nicname>
<myip> <myip>
@ -645,6 +685,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>123</uniqueidentifier> <uniqueidentifier>123</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port6</nicname> <nicname>port6</nicname>
<myip> <myip>
@ -675,6 +717,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>124</uniqueidentifier> <uniqueidentifier>124</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port7</nicname> <nicname>port7</nicname>
<myip> <myip>
@ -720,6 +764,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>126</uniqueidentifier> <uniqueidentifier>126</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -744,6 +790,8 @@
<nictype>management_interface</nictype> <nictype>management_interface</nictype>
<uniqueidentifier>127</uniqueidentifier> <uniqueidentifier>127</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>management_interface0</nicname> <nicname>management_interface0</nicname>
<myip> <myip>
@ -770,6 +818,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>128</uniqueidentifier> <uniqueidentifier>128</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port1</nicname> <nicname>port1</nicname>
<myip> <myip>
@ -798,6 +848,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>129</uniqueidentifier> <uniqueidentifier>129</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port2</nicname> <nicname>port2</nicname>
<myip> <myip>
@ -826,6 +878,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>130</uniqueidentifier> <uniqueidentifier>130</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port3</nicname> <nicname>port3</nicname>
<myip> <myip>
@ -852,6 +906,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>131</uniqueidentifier> <uniqueidentifier>131</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port4</nicname> <nicname>port4</nicname>
<myip> <myip>
@ -878,6 +934,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>132</uniqueidentifier> <uniqueidentifier>132</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port5</nicname> <nicname>port5</nicname>
<myip> <myip>
@ -904,6 +962,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>133</uniqueidentifier> <uniqueidentifier>133</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port6</nicname> <nicname>port6</nicname>
<myip> <myip>
@ -934,6 +994,8 @@
<nictype>port</nictype> <nictype>port</nictype>
<uniqueidentifier>134</uniqueidentifier> <uniqueidentifier>134</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>port7</nicname> <nicname>port7</nicname>
<myip> <myip>
@ -980,6 +1042,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>136</uniqueidentifier> <uniqueidentifier>136</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -1004,6 +1068,8 @@
<nictype>eth</nictype> <nictype>eth</nictype>
<uniqueidentifier>137</uniqueidentifier> <uniqueidentifier>137</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>eth0</nicname> <nicname>eth0</nicname>
<myip> <myip>
@ -1044,6 +1110,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>139</uniqueidentifier> <uniqueidentifier>139</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -1068,6 +1136,8 @@
<nictype>eth</nictype> <nictype>eth</nictype>
<uniqueidentifier>140</uniqueidentifier> <uniqueidentifier>140</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>eth0</nicname> <nicname>eth0</nicname>
<myip> <myip>
@ -1108,6 +1178,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>142</uniqueidentifier> <uniqueidentifier>142</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -1132,6 +1204,8 @@
<nictype>eth</nictype> <nictype>eth</nictype>
<uniqueidentifier>143</uniqueidentifier> <uniqueidentifier>143</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>eth0</nicname> <nicname>eth0</nicname>
<myip> <myip>
@ -1172,6 +1246,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>145</uniqueidentifier> <uniqueidentifier>145</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -1196,6 +1272,8 @@
<nictype>eth</nictype> <nictype>eth</nictype>
<uniqueidentifier>146</uniqueidentifier> <uniqueidentifier>146</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>eth0</nicname> <nicname>eth0</nicname>
<myip> <myip>
@ -1236,6 +1314,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>148</uniqueidentifier> <uniqueidentifier>148</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -1260,6 +1340,8 @@
<nictype>eth</nictype> <nictype>eth</nictype>
<uniqueidentifier>149</uniqueidentifier> <uniqueidentifier>149</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>eth0</nicname> <nicname>eth0</nicname>
<myip> <myip>
@ -1300,6 +1382,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>151</uniqueidentifier> <uniqueidentifier>151</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -1324,6 +1408,8 @@
<nictype>eth</nictype> <nictype>eth</nictype>
<uniqueidentifier>152</uniqueidentifier> <uniqueidentifier>152</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>eth0</nicname> <nicname>eth0</nicname>
<myip> <myip>
@ -1364,6 +1450,8 @@
<nictype>lo</nictype> <nictype>lo</nictype>
<uniqueidentifier>154</uniqueidentifier> <uniqueidentifier>154</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>lo0</nicname> <nicname>lo0</nicname>
<myip> <myip>
@ -1388,6 +1476,8 @@
<nictype>eth</nictype> <nictype>eth</nictype>
<uniqueidentifier>155</uniqueidentifier> <uniqueidentifier>155</uniqueidentifier>
<usesdhcp>False</usesdhcp> <usesdhcp>False</usesdhcp>
<encryptionkey />
<ssid />
<interface> <interface>
<nicname>eth0</nicname> <nicname>eth0</nicname>
<myip> <myip>

View File

@ -1,306 +1,689 @@
{\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033\deflangfe1033{\fonttbl{\f0\fswiss\fprq2\fcharset0 Calibri;}} {\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}
{\colortbl ;\red0\green0\blue255;} {\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}
{\*\generator Riched20 10.0.22621}{\*\mmathPr\mdispDef1\mwrapIndent1440 }\viewkind4\uc1 {\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
\pard\nowidctlpar\sa200\sl276\slmult1\b\f0\fs22\lang9 Version 1.0.54\b0\par {\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0302020204030204}Calibri Light;}
* Minor changefor developers allowing more information about what is happening during regression testing. \par {\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
\b Version 1.0.53\par {\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
*\b0 Show a line between devices when dragging ethernet cables. Makes it easier to see.\par {\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f40\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f41\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
* Tried highlighting what you are supposed to be filling out next, when creating network links.\b\par {\f43\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f44\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f45\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f46\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
Version 1.0.52\par {\f47\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f60\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f61\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}
\b0 * Change publish URL to an actual domain.\b\par {\f63\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f64\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f65\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f66\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}
Version 1.0.51\par {\f67\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f68\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f380\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f381\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}
\b0 * Added small time-based delay when printing packets; on fast computers the packets would fly by too fast.\par {\f383\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f384\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f387\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f388\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}
\b Version 1.0.50\par {\f430\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f431\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f433\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f434\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
\b0 * Added regression testing for making sure we do not break things while making changes to the UI or how the system works.\par {\f435\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\f436\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\f437\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f438\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}
* Added regression tests for most all the networks\par {\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
* Able to change gateway if the primary network connection does not have DHCP. There was an issue with a puzzle because of this.\par {\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
* Do not check firewall rules if the firewall checkmark is turned off. You can disable the firewall rules by turning off the firewall.\par {\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
* Get the reload button working properly. You can reload a puzzle and it will reset to its original state.\par {\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
* Better listing of puzzles and highlighting the next puzzle to do.\par {\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
* When resetting a switch, reset the vlans on that switch. Somewhere this broke and we needed to put it back.\par {\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \fswiss\fcharset238\fprq2 Calibri Light CE;}{\fhimajor\f31529\fbidi \fswiss\fcharset204\fprq2 Calibri Light Cyr;}
* Added some action debugging. No impact on users, just developers.\par {\fhimajor\f31531\fbidi \fswiss\fcharset161\fprq2 Calibri Light Greek;}{\fhimajor\f31532\fbidi \fswiss\fcharset162\fprq2 Calibri Light Tur;}{\fhimajor\f31533\fbidi \fswiss\fcharset177\fprq2 Calibri Light (Hebrew);}
* Better processing of wireless link autojoin\par {\fhimajor\f31534\fbidi \fswiss\fcharset178\fprq2 Calibri Light (Arabic);}{\fhimajor\f31535\fbidi \fswiss\fcharset186\fprq2 Calibri Light Baltic;}{\fhimajor\f31536\fbidi \fswiss\fcharset163\fprq2 Calibri Light (Vietnamese);}
\b Version 1.0.49\par {\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
\b0 * Change level1_practice5. It had been a puzzle with two DHCP servers, but we have not taught that concept yet. I change it so the DHCP server was passing out bad DHCP. IPs already exist.\par {\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
* Fixed a few bugs in other \ldblquote practice\rdblquote levels.\par {\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
* Made a test for a network loop. So we can have a \ldblquote ping without looping\rdblquote test. So we need to have a successful ping that does not cause a network loop.\par {\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
* Fixed an issue with wireless bridges. They were routing packets instead of forwarding packets, which broke them in a few instances.\par {\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
* Make it so a NIC can spray. It creates bad packets that just keep coming.\par {\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
* Fix some issues with wireless links. Some puzzles had saved multiple wireless links to the same device, which ended up having some rather bizarre issues. Since all wireless links are rebuilt on load, I made it so none of the wireless links are saved, and if they are loaded, they are discarded. It solved a number of issues. \par {\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
\b Version 1.0.48\par {\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
\b0 * Fix a traversal class not serializable error\par {\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
* Close the file -> load toolstrip menu after a load. It had remained annoyingly open.\par {\fhiminor\f31573\fbidi \fswiss\fcharset177\fprq2 Calibri (Hebrew);}{\fhiminor\f31574\fbidi \fswiss\fcharset178\fprq2 Calibri (Arabic);}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}
* Added a bunch of \ldblquote practice\rdblquote puzzles. These are for practicing troubleshooting. They do not give you a lot of information about what the problem is; you need to do a bit more testing and trying things to figure them out.\par {\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
* Added a bunch of level5 practice puzzles. More physical networking and wireless than routing issues.\par {\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
* Added the solved versions of the office networks. One with wireless linking between them, and the other having physical wires.\par {\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}
\b Version 1.0.47\par {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;
\b0 * YAY! The long-awaited ctrl-z / ctrl-y works. Undo / redo.\par \red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa160\sl259\slmult1
* Lock a device to a location\par \widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa160\sl259\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0
* Add a tree. Wireless packets cannot go through a tree.\par \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
* Add background shapes. So we can draw a building and have understandable line of sight.\par \ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa160\sl259\slmult1
* Add a wireless line of sight puzzle.\par \widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused
* Went through old puzzles and locked some items in their locations. Makes some puzzles need to be solved the way the puzzle was intended to be solved.\par Normal Table;}}{\*\listtable{\list\listtemplateid-678110632\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat4\levelspace0\levelindent0{\leveltext\leveltemplateid1569626406\'01\u-3913 ?;}{\levelnumbers;}
\b Version 1.0.46\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
\b0 * Added a frozen device. Fix it with a reboot. (power off / power on)\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
* Added a bad power-supply (device catches fire when powered on. Need to replace the device to fix)\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* Added bad electricity. (device continues to catch fire, even after being replaced, until a UPS is added)\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* Can right-click a network wire. Delete, edit, replace.\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* Added frozen device, bad power-supply and Needs UPS as ways to randomly break networks.\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
* Optimize the redrawing of the screen packets. Speeded it up considerably\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
* Add puzzles for frozen device, bad power-supply, and needs a UPS.\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
\b Version 1.0.45\par ;}\listid159203163}{\list\listtemplateid-103407058\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid379213054\'01\u-3913 ?;}{\levelnumbers;}
\b0 * More infrastructure for translating the main program\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
\b Version 1.0.44\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
\b0 * Added ability to add a video URL to a help topic\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* Added video URL for individual puzzles\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* Added some initial videos\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* More work on translation window (most people will not see this)\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
* Fix order of help-level radio-buttons.\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
* Some puzzles are properly translated to French\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
\b Version 1.0.43\par ;}\listid237788805}{\list\listtemplateid-1448205776\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat4\levelspace0\levelindent0{\leveltext\leveltemplateid-1831819778\'01\u-3913 ?;}{\levelnumbers;}
\b0 * Added the title to the translation window. Puzzle titles can now be translated.\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
* Use the translated titles for the puzzle names on the puzzle selection box\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
\b Version 1.0.42\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
\b0 * Fixed some bugs with working in French \endash puzzles would not show\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* Fixed bug in French \endash \ldblquote Ping to\rdblquote would not work\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* Added a translation box when working on puzzles. Ctrl-click the network message in the options window to pull up a translation box. Look at two languages simultaneously. Has save button to save your changes from there.\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
\b Version 1.0.41\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
\b0 * Have the ability to randomly break a network. If you want to just test your brain for fun, or if you are a teacher and just want to generate some homework of some sort. This can help.\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
* Added another solved network (InternetHomeAndOffice)\par ;}\listid272565942}{\list\listtemplateid951750322\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid-557448562\'01\u-3913 ?;}{\levelnumbers;}
* Give us more options for viewing text under devices. This lets us see things much more cleanly.\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
* Allow different captioning systems. Hostname only, IP only, host + IP, none, full\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
* firewall rules can now affect VPN traffic. You can block from a VPN to the office VLAN, for example. Also, can block guest VLAN from pinging something across the VPN.\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
\b Version 1.0.40\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
\b0 * Jumping ahead version numbers. Adding Educational Mode (see doc on the wiki for a description of the basic functionality added) {{\field{\*\fldinst{HYPERLINK https://git.solidcharity.com/timy/EduNetworkBuilder/wikis/Teacherdoc }}{\fldrslt{https://git.solidcharity.com/timy/EduNetworkBuilder/wikis/Teacherdoc\ul0\cf0}}}}\f0\fs22\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* Added the ability to make msi files for better deployment in multi-user settings\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
* Adjusted drag functionality so we do not jostle devices around accidentally\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
* Fixed bug when trying to ping wireless devices by name\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
* Fixed a bug pinging 0.0.0.0\par ;}\listid300036472}{\list\listtemplateid1850757320\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat4\levelspace0\levelindent0{\leveltext\leveltemplateid-1251324124\'01\u-3913 ?;}{\levelnumbers;}
* Fixed lots of other bugs\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
\b Version 1.0.33\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
\b0 * Fixed a major bug in settings that would blow up new installs.\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* ctrl-right-click a device to add \ldblquote hide\rdblquote to the context menu.\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* From the puzzle menu you can ctrl-alt click items to mark them as solved.\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* Display bad subnet masks (that cannot be displayed using CIDR notation) as /?\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
* Allow pings from devices that are locked. A bug made it so we could not change the address we wanted to ping to; all ip-addresses were locked, even a \ldblquote ping to\rdblquote address.\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
* Minor bug: If we ping a local IP that does not exist, the error message we were getting was the wrong error message. Fixed that.\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
* When wireless device is powered off, remove all wireless links. Links connected to WLAN had been reconnected. Fixed that.\par ;}\listid569733219}{\list\listtemplateid1348617656\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat4\levelspace0\levelindent0{\leveltext\leveltemplateid-1331424806\'01\u-3913 ?;}{\levelnumbers;}
* Cannot go into the network options if we have loaded the network from resources. This way we cannot \ldblquote cheat\rdblquote by changing the network options. This is in preparation for setting this up for school use. Making it harder for students to cheat on homework assignments.\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
\b Version 1.0.32\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
\b0 * Allow dragging of items\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* Select multiple items for dragging by using a nice big drag-box.\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* Highlight the multiple items if selecting them\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* Allow the ESC key to clear the selected items.\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
* Can right-click and delete of multiple selected items\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
* Can right-click and change color of multiple selected items\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
* Fixed some tracert bugs\par ;}\listid1059207521}{\list\listtemplateid-1653202988\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid1996378994\'01\u-3913 ?;}{\levelnumbers;}
* lots of minor fixes so is more stable on Linux\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li480\lin480 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
* Saves settings in ~/.conf/EduNetworkbuilder_config.xml file on Linux\par \f2\fbias0\hres0\chhres0 \fi-360\li1200\lin1200 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
* Cannot edit something that is powered off. Also, cannot ping, do DHCP refresh, etc.\par \f10\fbias0\hres0\chhres0 \fi-360\li1920\lin1920 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* Fixed losing the VPN password changes when editing VPN Info.\par \f3\fbias0\hres0\chhres0 \fi-360\li2640\lin2640 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* Fixed anchoring of puzzle filter box.\par \fi-360\li3360\lin3360 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* Added invisible items. Forgotten switches and unseen network wires. Right now, the only way to make something hidden is by editing the file and saying <invisible>true</invisible> on it.\par \fi-360\li4080\lin4080 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
\b Version 1.0.31\par \fi-360\li4800\lin4800 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5520\lin5520 }
\b0 * Added powering off switches, routers, and the like\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6240\lin6240 }{\listname
* Added traceroute\par ;}\listid1164392343}{\list\listtemplateid1293564504\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid-1614118322\'01\u-3913 ?;}{\levelnumbers;}
* Added a few puzzles for those\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
* Moved to a new git repository\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
* Changed the default location of popups. They worked very strange in a multi-window environment.\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
\b Version 1.0.30\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
\b0 * Another downloadable (zip only, stable) version.\b\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
Version 1.0.29\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
\b0 * Lots of VLAN butfixes\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
* Fixed ping-fail test\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
* Lots more VLAN puzzles\par ;}\listid1272543532}{\list\listtemplateid-884542874\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid-1963024970\'01\u-3913 ?;}{\levelnumbers;}
* Update VLAN documentation\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
\b Version 1.0.28\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
\b0 * Initial VLAN release\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
\b Version 1.0.27\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
\b0 * Made distribution easier by CD (does updates from web, but we also have a downloadable zip you can install from)\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
\b Version 1.0.26\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
\b0 * Major graphics overhaul\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
- Packets move on timer\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
- Graphics drawn "smarter"\par ;}\listid1332484604}{\list\listtemplateid-308776008\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid142246634\'01\u-3913 ?;}{\levelnumbers;}
- Result is that things flow smoother. Loopback2 also works much nicer. \par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
* Fixed minor issue with "help" puzzle\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
* Made help "?" button turn red when it is part of the puzzle\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* Put checkmark to display names and IPs of devices on front form.\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* Add a NetTest to show people to click on the "display Device names and IP" checkmark\b\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
Version 1.0.25\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
\b0 * Minor changes to help file\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
* Fixed size of labels on IP-Address editor box\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
* Hide gateway label when we do not need it. (ip-address editor)\par ;}\listid1436513145}{\list\listtemplateid711852752\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid1548498794\'01\u-3913 ?;}{\levelnumbers;}
* rename "mixed network" puzzle to be "adding devices" (the puzzle was about adding devices)\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
* Changed layout of many messages\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
* Save the level we are working on. Allows us to finish level 5 before level 3 if we want to.\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* Make network-loop puzzles sit next to each-other\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* Make it so network-loop2 puzzle asks for second ping after first one finishes \par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* Lots of work towards the French translation\b\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
Version 1.0.24 \par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
\b0 * Add sound when ctrl-s is pressed so we know we saved.\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
* Add sound fail when save is canceled (will use it later if ctrl-s fails)\par ;}\listid1535926840}{\list\listtemplateid96765656\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid-2137615088\'01\u-3913 ?;}{\levelnumbers;}
* Added some wireless puzzles\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
* Fix issue with WAP not forwarding packets correctly\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
* Clear out old status message if we do something. So we do not say "saved" forever...\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* Fixed bad gateway on wireless router issue\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* Fixed wbridge misbehaving. (issue with gateway)\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* Added wireless items to help and context help topics\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
* Thanks to Peter Wilson for so much of the translation backbone.\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
* Lots of translation string changes. The French translation should be soon in coming.\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
\b Version 1.0.23 09/20/2015\par ;}\listid1574776731}{\list\listtemplateid-898045548\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid-212272924\'01\u-3913 ?;}{\levelnumbers;}
\b0 * Fixed issues with broadcast packets\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
* Fixed a network loop issue\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
* Fixed issue with multiple interfaces and being able to go out a different interface than we came in on\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* Fixed many small bugs that crept in when fixing other bugs. Now all puzzles seem to play correctly\b\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
Version 1.0.22 09/01/2015\b0\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* Added ssid and keys for wireless links\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
* Wireless will auto-disconnect if link is too long\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
* Wireless will auto-connect if ssid and key match, if link is short enough\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
* Packets will drop on wireless links if distance is too great\par ;}\listid1668097324}{\list\listtemplateid-496706588\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid-34189396\'01\u-3913 ?;}{\levelnumbers;}
* wport has no interface (cannot edit IP address)\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
* wireless router works properly - forwards broadcast packets\par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
* wireless router handles dhcp requests properly (both responds to it but also passes it on)\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* right-clicking light and microwave no longer has ping, arp, edit, and other context menus\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* added net-test for DHCP server status (on/off)\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* If multiple DHCP servers, client randomly chooses which to keep.\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
*Add Wireless Puzzle\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
*Fix many wireless device bugs\line\b Version 1.0.21 08/15/2015\b0\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
* Added a microwave and fluorescent light. They corrupt data when packets run close to them.\par ;}\listid1729453556}{\list\listtemplateid1472331976\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat0\levelspace0\levelindent0{\leveltext\leveltemplateid-1529854154\'01\u-3913 ?;}{\levelnumbers;}
* Added some packet corruption puzzles\par \loch\af3\hich\af3\dbch\af31505\fbias0\hres0\chhres0 \fi-360\li720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}
* Fixed window resize-on-load issue where the help window popped up first, then the builder window resized over to hide the help window. \par \f2\fbias0\hres0\chhres0 \fi-360\li1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}
\b Version 1.0.20 08/12/2015\b0\par \f10\fbias0\hres0\chhres0 \fi-360\li2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}
* wports do not display on tooltips or when printing the device info\par \f3\fbias0\hres0\chhres0 \fi-360\li2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0
* Added ctrl-s to quick-save a network we are working on\par \fi-360\li3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0
* commented out wireless devices for now - doing a big demo and wireless is not yet complete\par \fi-360\li4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0\hres0\chhres0
* added search box to help\par \fi-360\li5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0\hres0\chhres0 \fi-360\li5760\lin5760 }
\b Version 1.0.19 08/08/2015\b0\par {\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\lvltentative\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0\hres0\chhres0 \fi-360\li6480\lin6480 }{\listname
*Updated context help for most puzzles that introduce new ideas.\par ;}\listid1903905976}}{\*\listoverridetable{\listoverride\listid300036472\listoverridecount0\ls1}{\listoverride\listid1535926840\listoverridecount0\ls2}{\listoverride\listid569733219\listoverridecount0\ls3}{\listoverride\listid1059207521
* Sorted Help topics when adding them in net-tests.\par \listoverridecount0\ls4}{\listoverride\listid159203163\listoverridecount0\ls5}{\listoverride\listid272565942\listoverridecount0\ls6}{\listoverride\listid1574776731\listoverridecount0\ls7}{\listoverride\listid1332484604\listoverridecount0\ls8}
* Added some images to the help to help clarify things.\par {\listoverride\listid237788805\listoverridecount0\ls9}{\listoverride\listid1164392343\listoverridecount0\ls10}{\listoverride\listid1272543532\listoverridecount0\ls11}{\listoverride\listid1729453556\listoverridecount0\ls12}{\listoverride\listid1903905976
* Start with the help windows being the same "height" as the network window.\par \listoverridecount0\ls13}{\listoverride\listid1436513145\listoverridecount0\ls14}{\listoverride\listid1668097324\listoverridecount0\ls15}}{\*\rsidtbl \rsid935579\rsid1715044\rsid2361093\rsid2634409\rsid3230122\rsid3738219\rsid3953182\rsid3954092
* Open Help so it can be kept open while the puzzles progress.\par \rsid4002608\rsid4014997\rsid4148115\rsid4201155\rsid4330009\rsid4674322\rsid4984628\rsid4995504\rsid5902490\rsid6243721\rsid6709067\rsid7014465\rsid7089617\rsid7091827\rsid7425313\rsid7431196\rsid7475506\rsid8135144\rsid8154512\rsid8807737\rsid8871995
* Deal with minimized state better (used to shrink window to smallest possible state)\par \rsid9005806\rsid9076344\rsid9125153\rsid9187300\rsid9664289\rsid10361403\rsid11235612\rsid11358317\rsid11886434\rsid12019296\rsid12193239\rsid12329139\rsid12389542\rsid12613072\rsid12727249\rsid12727595\rsid12738045\rsid13122645\rsid13307397\rsid13454907
* Remember size and location of main window between uses.\par \rsid13783353\rsid13982156\rsid14170698\rsid14353560\rsid14427571\rsid14508595\rsid14577306\rsid14746156\rsid14829014\rsid15677065\rsid15949156\rsid16005564\rsid16457871}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0
\b Version 1.0.18 08/08/2015\b0\par \mdefJc1\mwrapIndent1440\mintLim0\mnaryLim0}{\info{\operator tim.young@lightsys.org}{\creatim\yr2017\mo3\dy14\hr9\min58}{\revtim\yr2019\mo1\dy23\hr8\min23}{\version62}{\edmins74}{\nofpages13}{\nofwords3262}{\nofchars15042}{\nofcharsws17946}{\vern95}}
* Added Context Help for puzzles.\par {\*\userprops {\propname amzn:id}\proptype30{\staticval 5d8f9aa3-7362-4e9d-ad7a-41823ad84e09}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect
- Each puzzle can have context help\par \widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701
- There is a net-test to have us read help\par \dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot14577306 \nouicompat \fet0{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1
* fixed minor problem with a "ding" sound when we load a puzzle that has something locked.\par \pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5
\b Version 1.0.17 08/01/2015\b0\par \pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang
* Added more help\par {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid13982156 \rtlch\fcs1 \af0\afs22\alang1025
* Much progress made in preparing for a French translation\par \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid4330009 \hich\af39\dbch\af31505\loch\f39 Version 1.0.51
* allow for Puzzle's description to be in another language\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12613072\charrsid12613072 \hich\af39\dbch\af31505\loch\f39 * }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12613072 \hich\af39\dbch\af31505\loch\f39
* Added more to help\par Added small \hich\af39\dbch\af31505\loch\f39 time-based delay when printing packets; on fast computers the pa\hich\af39\dbch\af31505\loch\f39 ckets would fly by too fast.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0
* Removed edit -> cut, paste, copy, undo. They never did anything. So why have them?\par \f39\lang9\langfe1033\langnp9\insrsid12613072\charrsid12613072
* Save box starts in the directory of the file we opened (if we have one)\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid13982156 \hich\af39\dbch\af31505\loch\f39 Version 1.0.50
* Choose a language at startup if one has never been chosen, and have option to change language.\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid10361403 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid10361403\charrsid10361403 \hich\af39\dbch\af31505\loch\f39 *}{
* Added another puzzle, showing what happens (or does not happen) if we have two networks that use the same IP addresses, and we want to build a VPN between them.\par \rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid10361403 \hich\af39\dbch\af31505\loch\f39 Added regression testing for making sure we do not break things while making changes to the UI or how the system works.
\b Version 1.0.16 07/18/2015\b0\par \par \hich\af39\dbch\af31505\loch\f39 * Added regression tests for most all the networks
* Added ability to break links (bad network wire)\par \par \hich\af39\dbch\af31505\loch\f39 * Able to change gateway if the primary network connection does not have DHCP. Ther\hich\af39\dbch\af31505\loch\f39 e was an issue with a puzzle because of this.
* "connection lights" on network cards / ports when we edit devices\par \par \hich\af39\dbch\af31505\loch\f39 * Do not check firewall rules if the firewall checkmark is turned off. You can disable the firewall rules by turning off the firewall.
* Test for "needs link to" does not succeed if the link in question is a broken link\par \par \hich\af39\dbch\af31505\loch\f39 * Get the reload button working properly. You can reload a puzzle and it \hich\af39\dbch\af31505\loch\f39 will reset to its original state.
* Added a puzzle to show you how to find broken links \par \par \hich\af39\dbch\af31505\loch\f39 * Better listing of puzzles and highlighting the next puzzle to do.
* Used broken links in other puzzles\par \par \hich\af39\dbch\af31505\loch\f39 * When resetting a switch, reset the vlans on that switch. Somewhere this broke and we needed to put it back.
* Fixed bug: switches could not use DHCP for many different reasons. Now it works for them.\par \par \hich\af39\dbch\af31505\loch\f39 * Added some action debugging. No impact o\hich\af39\dbch\af31505\loch\f39 n users, just developers.
\b Version 1.0.15 07/11/2015\b0\par \par \hich\af39\dbch\af31505\loch\f39 * Better processing of wireless link autojoin}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid10361403\charrsid10361403
* Added ping time progress bar\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6709067 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid11886434 \hich\af39\dbch\af31505\loch\f39 Version 1.0.49}{\rtlch\fcs1
* Fixed issue with things timing out before they completed. If the network screen is too large, it makes it go just a tiny bit slower and various things would fail. When the first packet successfully makes it to the far end, it recomputes the time needed and gives extra time.\par \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid6709067
* Added context menu ping. If an item is supposed to ping something, right-clicking adds the ping test to the menu. Takes some of the guess-work out of things.\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid11886434\charrsid11886434 \hich\af39\dbch\af31505\loch\f39 * Change level1_practice5.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid11886434
* Fixed minor issue with this change log. Had two 1.0.11 versions & somehow was stating we were at version 10.x.x instead of 1.x.x (sigh) \par \hich\af39\dbch\af31505\loch\f39 It had been a puzzle with two DHCP servers, but we have not taught that concept yet. I change it so the DHCP server was passing out bad DHCP\hich\af39\dbch\af31505\loch\f39 . IPs already exist.
* Fixed the VPNify puzzle. Had a goof in it.\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid7014465 \hich\af39\dbch\af31505\loch\f39 \hich\f39 * Fixed a few bugs in other \'93\loch\f39 \hich\f39 practice\'94\loch\f39 levels.
* Made it so you cannot connect a link to a VPN. A VPN should be a virtual connection, not a physical connection.\par \par \hich\af39\dbch\af31505\loch\f39 \hich\f39 * Made a test for a network loop. So we can have a \'93\loch\f39 \hich\f39 ping without looping\'94\loch\f39 test. So we need to have a successful ping that does not cause a network loop.
\b Version 1.0.14 07/10/2015\b0\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid935579 \hich\af39\dbch\af31505\loch\f39 * Fixed an issue with wireless b\hich\af39\dbch\af31505\loch\f39
* When we finish a puzzle, allow us to auto-open the "next puzzle" box.\par ridges. They were routing packets instead of forwarding packets, which broke them in a few instances.
* Added lots more puzzles\par \par \hich\af39\dbch\af31505\loch\f39 * Make it so a NIC can spray. It creates bad packets that just keep coming.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12738045
* Added more help & documentation\par \par \hich\af39\dbch\af31505\loch\f39 * Fix some issues with wireless links. Some puzzles had saved multiple wire\hich\af39\dbch\af31505\loch\f39
* Made it so test for local IP also checked to make sure the subnet-masks matched\par less links to the same device, which ended up having some rather bizarre issues. Since all wireless links are rebuilt on load, I made it so none of the wireless links are saved, and if they are loaded, they are discarded. It solved a number of issues.}{
* Made it so the test for a matching route compared netmasks\par \rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid7014465 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid7014465\charrsid11886434
* Added a printer object\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid11886434 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid11886434 \hich\af39\dbch\af31505\loch\f39 V
* Added a copier object\par \hich\af39\dbch\af31505\loch\f39 ersion 1.0.48
\b Version 1.0.13 06/21/2015\b0\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6709067 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4002608\charrsid4002608 \hich\af39\dbch\af31505\loch\f39
* Fixed issues with arp - arp could go through routers. Now works correctly\par * Fix a traversal class not serializable error}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4002608
* Made it test for puzzle completion after adding devices\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid15949156 \hich\af39\dbch\af31505\loch\f39 * Close the file -> load toolstrip menu after a load. It had remained annoyingly open.
* Made it test for completion after changing / deleting devices\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid11358317 \hich\af39\dbch\af31505\loch\f39 \hich\f39 * Added a bunch of \'93\loch\f39 \hich\f39 practice\'94\hich\af39\dbch\af31505\loch\f39
* Let you delete / add NICs on PCs, primarily so we can solve the duplicate MAC puzzle\par puzzles. These are for practicing troubleshooting. They do not give you a lot of information about what the problem is; you need to do a bit more testing and trying things to figure them out.
* Replaced the "Network Loop" puzzle with the correct one.\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid2634409 \hich\af39\dbch\af31505\loch\f39 * Added a bunch of level5 practice puzzles. More physical ne\hich\af39\dbch\af31505\loch\f39 tworking and wireless than routing issues.
\b Version 1.0.12 06/20/2015\b0\par
* Added VPN and TUN nic types\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid3953182 \hich\af39\dbch\af31505\loch\f39 * Added the solved versions of the office networks. One with wireless linking between them, and the other having physical wires.}{
* Fixed numerous small bugs\par \rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid3953182\charrsid4002608
* Fixed bug with early solution to failed ping test\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid6709067 \hich\af39\dbch\af31505\loch\f39 Version 1.0.47
* Added "ding" when a test is solved.\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3738219 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid8807737\charrsid8807737 \hich\af39\dbch\af31505\loch\f39 * YAY!}{
* Added a "firewall" network that has a firewall and vpns\par \rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid8807737 \hich\af39\dbch\af31505\loch\f39 The long-awaited ctrl-z / ctrl-y works. Undo / redo.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0
* Added numerous firewall / vpn puzzles\par \f39\lang9\langfe1033\langnp9\insrsid8807737\charrsid8807737
* Fixed a DNS issue. It now more intelligently finds the right IP address when you ping it\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid1715044\charrsid1715044 \hich\af39\dbch\af31505\loch\f39 *}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid1715044 \hich\af39\dbch\af31505\loch\f39
\b Version 1.0.11 06/14/2015\b0\par Lock a device to a location
* Added the ability to lock various important features to make puzzles better\par \par \hich\af39\dbch\af31505\loch\f39 * Add a tree. Wireless packets cannot go through a tree.
* Able to add interfaces (multiple IPs on a Network Card)\par \par \hich\af39\dbch\af31505\loch\f39 * Add background shapes. So we can draw a building and have understandable line of sight.
* Right-click context menu to add net-tests. \par \par \hich\af39\dbch\af31505\loch\f39 * Add a wireless line of sight puzzle.
* Del key now deletes the last item we had clicked on\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid7091827 \hich\af39\dbch\af31505\loch\f39 * Went through old puzzles and locked s\hich\af39\dbch\af31505\loch\f39
* Can add NICs (on some devices)\par ome items in their locations. Makes some puzzles need to be solved the way the puzzle was intended to be solved.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid7091827\charrsid1715044
* Can delete NICs\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid8154512 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid8154512 \hich\af39\dbch\af31505\loch\f39 Version 1.0.46
* Fixed minor bug with broadcast pinging solving ping test for individual computers\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3738219 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid3738219 \hich\af39\dbch\af31505\loch\f39
\b Version 1.0.10 06/13/2015\b0\par * Added a frozen device. Fix it with a reboot. (power off / power on)
* Renamed puzzles to manage them easier\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14427571 \hich\af39\dbch\af31505\loch\f39 * Added a bad power-supply (device catches fire when powered on. Need to replace the device to fix)
* Deal with duplicate IPs, and what happens when a packet returns to a computer that did not send it.\par \par \hich\af39\dbch\af31505\loch\f39 * Added bad electricity. (device continues to catch fire, even after being replaced, until a UPS is added)
* Change to the help window so you can keep the window open while working with the puzzle.\par \par \hich\af39\dbch\af31505\loch\f39 * Can right-c}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid7425313 \hich\af39\dbch\af31505\loch\f39 lick a network wire. Delete, }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0
* Change to the donation link. Not that it will ever be used, but it makes me feel better having a few places for people to donate to if they wish.\par \f39\lang9\langfe1033\langnp9\insrsid14427571 \hich\af39\dbch\af31505\loch\f39 edit}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid7425313 ,\hich\af39\dbch\af31505\loch\f39 replace}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0
* Minor change for how broadcast packets work, specifically dealing with duplicate IP addresses.\par \f39\lang9\langfe1033\langnp9\insrsid14427571 .
* Added a "firewall" device & WAN port with masquerade\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14746156 \hich\af39\dbch\af31505\loch\f39 * Added frozen device, bad power-supply and Needs UPS as ways to randomly break networks.
* Added a FailedPing test so we can ping things that must fail (show the firewall works)\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid13122645 \hich\af39\dbch\af31505\loch\f39 * Optimize the redrawing of the screen packets. Speeded it up considerably
* added more to the help\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid13783353 \hich\af39\dbch\af31505\loch\f39 * Add puzzles for frozen device, bad power-supply, and needs a UPS.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0
* added more puzzles\par \f39\lang9\langfe1033\langnp9\insrsid13783353\charrsid9005806
\b Version 1.0.0.9 05/29/2015\b0\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid9005806 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid9005806 \hich\af39\dbch\af31505\loch\f39 Version 1.0.
* Add a grid to the network map. It makes things easier to straighten up\par \hich\af39\dbch\af31505\loch\f39 45
* Sorted and organized the puzzles\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9005806\charrsid9005806 \hich\af39\dbch\af31505\loch\f39 *}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9005806 \hich\af39\dbch\af31505\loch\f39 }{
* Made a level for each puzzle.\par \rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9005806\charrsid9005806 \hich\af39\dbch\af31505\loch\f39 More infrastructure for translating the main program}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0
* Tracked the puzzles which have been completed\par \f39\lang9\langfe1033\langnp9\insrsid9005806
* When we open the puzzle list, we now show the first level of puzzles that have an uncompleted puzzle.\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid5902490 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid5902490 \hich\af39\dbch\af31505\loch\f39 Version 1.0.44
* Added more "tests", viewing help, pinging, arp, and dhcp.\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid5902490\charrsid5902490 \hich\af39\dbch\af31505\loch\f39 *}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid5902490 \hich\af39\dbch\af31505\loch\f39
* Reset buttons when we load a new network.\par Added ability to add a video URL to a help topic
* Added a bunch more puzzles\par \par \hich\af39\dbch\af31505\loch\f39 * Added video URL for individual puzzles
* Sometimes the remembered IP gets annoying when it remembers odd gateways and numbers we cannot change. Fixed that in many cases.\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid2361093 \hich\af39\dbch\af31505\loch\f39 * Added some initial videos
\b Version 1.0.0.8 05/25/2015\b0\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14508595 \hich\af39\dbch\af31505\loch\f39 * More work on translation window}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12329139
* Always Start with level0 puzzles for now\par \hich\af39\dbch\af31505\loch\f39 (most people\hich\af39\dbch\af31505\loch\f39 will not see this)}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14508595
* Fixed the icon when program running\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12329139 \hich\af39\dbch\af31505\loch\f39 * Fix order of help-level radio-buttons.
* Added an infrastructure for Puzzles (needs work)\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid8135144 \hich\af39\dbch\af31505\loch\f39 * Some puzzles are properly translated to French}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0
* Added a number of basic puzzles\par \f39\lang9\langfe1033\langnp9\insrsid8135144\charrsid5902490
* Fixed DHCP Leases. Now it clears leases when you change the DHCP server range.\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid9076344 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid9076344 \hich\af39\dbch\af31505\loch\f39 Version 1.0.43
\b Version 1.0.0.7 05/16/2015\b0\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid13307397 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid13307397 \hich\af39\dbch\af31505\loch\f39 * }{\rtlch\fcs1 \ab\af39
* Added file association so we can double-click an enbx file\par \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9076344\charrsid9076344 \hich\af39\dbch\af31505\loch\f39 Added }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9076344 \hich\af39\dbch\af31505\loch\f39 the title }{\rtlch\fcs1
* Fixed the icon so it looks right (removed left edge)\par \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9076344\charrsid9076344 \hich\af39\dbch\af31505\loch\f39 to the translation window}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9076344 \hich\af39\dbch\af31505\loch\f39
\b Version 1.0.0.6 05/16/2015\b0\par . Puzzle titles can now be translated.
* Able to delete a route (right click route and delete it)\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid6243721 \hich\af39\dbch\af31505\loch\f39 * Use the translated titles for the puzzle names\hich\af39\dbch\af31505\loch\f39 on the puzzle selection box}{\rtlch\fcs1 \ab\af39
* Add map title as something we can load/save\par \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid6243721\charrsid9076344
* Add message as something we can load and save\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4148115 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid14829014 \hich\af39\dbch\af31505\loch\f39 Version 1.0.42
* Changing size of items affects all items\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14829014\charrsid14829014 \hich\af39\dbch\af31505\loch\f39 * Fixed some bugs with working in French}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14829014
* Allow entering a hostname in the IP address field (ping / gateway)\par \hich\af39\dbch\af31505\loch\f39 \hich\f39 \endash \loch\f39 puzzles would not show
\b Version 1.0.0.5 04/26/2015\b0\par \par \hich\af39\dbch\af31505\loch\f39 * Fixed bug in French \hich\f39 \endash \loch\f39 \hich\f39 \'93\loch\f39 \hich\f39 Ping to\'94\loch\f39 would not work
* Fixed ping from switch\par \par \hich\af39\dbch\af31505\loch\f39 * Added a translation box when working on puzzles\hich\af39\dbch\af31505\loch\f39
* Fixed error message when pinging IP that does not exist\par . Ctrl-click the network message in the options window to pull up a translation box. Look at two languages simultaneously. Has save button to save your changes from there.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0
\b Version 1.0.0.4 04/26/2015\b0\par \f39\lang9\langfe1033\langnp9\insrsid14829014\charrsid14829014
* Fixed broadcast ping\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid4148115 \hich\af39\dbch\af31505\loch\f39 Version 1.0.41
*Fixed dhcp request error\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14353560 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14353560 \hich\af39\dbch\af31505\loch\f39
\b Version 1.0.0.3 04/15/2015\par * Have the ability to randomly break a network. If you want to ju\hich\af39\dbch\af31505\loch\f39 st test your brain for fun, or if you are a teacher and just want to generate some homework of some sort. This can help.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0
\b0 * Added "file" -> "new" to erase and start a clean new network\par \f39\lang9\langfe1033\langnp9\insrsid14353560\charrsid4148115
* Fixed pc2 to have gateway on "solved"->"Two Networks"\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid9664289 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4148115\charrsid4148115 \hich\af39\dbch\af31505\loch\f39 * }{\rtlch\fcs1
* Fixed - only machines capable of doing DHCP do dhcp request if we do DHCP request on all\par \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4148115 \hich\af39\dbch\af31505\loch\f39 Added another solved }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12193239 \hich\af39\dbch\af31505\loch\f39 network (Internet}{
* Changed - major overhaul to tcp-stack.\par \rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14353560 \hich\af39\dbch\af31505\loch\f39 HomeAndOffice}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12193239 \hich\af39\dbch\af31505\loch\f39 )}{\rtlch\fcs1
* Downgrade - Arp temporarily removed from system while tcp-stack overhaul completed\par \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4148115
\b Version 1.0.0.2 4/19/2015\b0\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4674322 \hich\af39\dbch\af31505\loch\f39 * Give us more options for viewing text under devices. This lets us see things\hich\af39\dbch\af31505\loch\f39 much more cleanly.
* Added IP-Phone\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12389542 \hich\af39\dbch\af31505\loch\f39 * Allow different captioning systems. Hostname only, IP only, host + IP, none, full
* Packets terminate at the far end - this makes it easier to see packets go both directions\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid7089617 \hich\af39\dbch\af31505\loch\f39
* Packets are randomized in transit - Allows packets to arrive at slightly different times\par * firewall rules can now affect VPN traffic. You can block from a VPN to the office VLAN, for example. Also, can block guest VLAN from pinging someth\hich\af39\dbch\af31505\loch\f39 ing across the VPN.
\b Version 1.0.0.1 4/11/2015\b0\par \par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid4984628 \hich\af39\dbch\af31505\loch\f39 Version 1.0.40
* DHCP selection on nics is not functioning correctly\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4984628 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4984628 \hich\af39\dbch\af31505\loch\f39
* Various small bug-fixes\par * Jumping ahead version numbers. Adding Educational Mode (see doc on the wiki for a description of the basic functionality added) }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4984628\charrsid4984628
\b Version 1.0.0.0 4/10/2015\b0\par \hich\af39\dbch\af31505\loch\f39 https://git.solidcharity.com/timy/EduNetworkBuilder/wikis/Teacherdoc}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4984628
This is the initial alpha build\par \par \hich\af39\dbch\af31505\loch\f39 * Added the ability to make msi files for better deployment in multi-user settings
* basic pinging\par \par \hich\af39\dbch\af31505\loch\f39 * Adjusted drag functionality so we do not jostle devices around accidentally
* basic arp\par \par \hich\af39\dbch\af31505\loch\f39 * Fixed bug when trying to ping wireless devices by name
* Routers\par \par \hich\af39\dbch\af31505\loch\f39 * Fixed a bug pinging 0.0.0.0
* Switches/Hubs\par \par \hich\af39\dbch\af31505\loch\f39 * Fixed \hich\af39\dbch\af31505\loch\f39 lots of other bugs}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4984628\charrsid4984628
* PCs/Laptops\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid9664289 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid13454907 \hich\af39\dbch\af31505\loch\f39 Version 1.0.33}{\rtlch\fcs1
* Network Links (ethernet)\par \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid9664289
* Basic DHCP\par \par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14170698 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid3954092 \hich\af39\dbch\af31505\loch\f39
} * Fixed a major bug in settings that would blow up new installs.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9664289\charrsid9664289 \hich\af39\dbch\af31505\loch\f39 *}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9664289 \hich\af39\dbch\af31505\loch\f39 \hich\f39
ctrl-right-click a device to add \'93\loch\f39 \hich\f39 hide\'94\loch\f39 to the context menu.
\par \hich\af39\dbch\af31505\loch\f39 * From the puzzle menu you can ctrl-alt click items to mark them as solved.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid16457871 \hich\af39\dbch\af31505\loch\f39 *}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9125153 \hich\af39\dbch\af31505\loch\f39 }{\rtlch\fcs1 \ab\af39
\ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid16457871 \hich\af39\dbch\af31505\loch\f39 Display bad subn\hich\af39\dbch\af31505\loch\f39 et masks (that cannot be displayed using CIDR notation) as /?
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid9125153 \hich\af39\dbch\af31505\loch\f39 \hich\f39
* Allow pings from devices that are locked. A bug made it so we could not change the address we wanted to ping to; all ip-addresses were locked, even a \'93\loch\f39 \hich\f39 ping to\'94\loch\f39 address.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12727249 \hich\af39\dbch\af31505\loch\f39 * Minor bug: If we pin\hich\af39\dbch\af31505\loch\f39
g a local IP that does not exist, the error message we were getting was the wrong error message. Fixed that.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4995504 \hich\af39\dbch\af31505\loch\f39 * When wireless device is powered off, remove all wireless links. Links connected to WLAN had been reconnected. Fixed that.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid11235612 \hich\af39\dbch\af31505\loch\f39 * Cannot go into the\hich\af39\dbch\af31505\loch\f39 \hich\f39
network options if we have loaded the network from resources. This way we cannot \'93\loch\f39 \hich\f39 cheat\'94\loch\f39
by changing the network options. This is in preparation for setting this up for school use. Making it harder for students to cheat on homework assignments.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid11235612\charrsid9664289
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid14170698 \hich\af39\dbch\af31505\loch\f39 Version\hich\af39\dbch\af31505\loch\f39 1.0.32
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14170698\charrsid14170698 \hich\af39\dbch\af31505\loch\f39 *}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14170698 \hich\af39\dbch\af31505\loch\f39
Allow dragging of items
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12727595 \hich\af39\dbch\af31505\loch\f39 * Select multiple items for dragging by using a nice big drag-box.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0
\f39\lang9\langfe1033\langnp9\insrsid14170698
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12727595 \hich\af39\dbch\af31505\loch\f39 * Highlight the multiple items if selecting them
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid15677065 \hich\af39\dbch\af31505\loch\f39 * Allow the ESC key to clear the selected items.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid16005564 \hich\af39\dbch\af31505\loch\f39 * Can right-click and delete of multiple selected items
\par \hich\af39\dbch\af31505\loch\f39 *\hich\af39\dbch\af31505\loch\f39 Can right-click and change color of multiple selected items
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid8871995 \hich\af39\dbch\af31505\loch\f39 * Fixed some tracert bugs
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid7431196 \hich\af39\dbch\af31505\loch\f39 * lots of minor fixes so is more stable on Linux
\par \hich\af39\dbch\af31505\loch\f39 * Saves settings in ~/.conf/EduNetworkbuilder_config.xml file on Linux
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid7475506 \hich\af39\dbch\af31505\loch\f39 * Cannot edit something that is powered off. Also, cannot ping, do DHCP refresh, etc.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid4201155 \hich\af39\dbch\af31505\loch\f39 * Fixed losing the VPN password changes when editing VPN Info.
\par \hich\af39\dbch\af31505\loch\f39 * Fixed anchoring of puzzle filter box.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid3230122 \hich\af39\dbch\af31505\loch\f39 * Added invisible items. Forgotten switches and unseen network wi\hich\af39\dbch\af31505\loch\f39
res. Right now, the only way to make something hidden is by editing the file and saying <invisible>true</invisible> on it.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid3230122\charrsid14170698
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid14577306 \hich\af39\dbch\af31505\loch\f39 Version 1.0.31
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid14577306 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14577306\charrsid14577306 \hich\af39\dbch\af31505\loch\f39 *}{
\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14577306 \hich\af39\dbch\af31505\loch\f39 Added powering off switches, routers, and the like
\par \hich\af39\dbch\af31505\loch\f39 * Added traceroute
\par \hich\af39\dbch\af31505\loch\f39 * Added a few puzzles for those
\par \hich\af39\dbch\af31505\loch\f39 * Moved to a new git repository
\par \hich\af39\dbch\af31505\loch\f39 * Changed the default location of popups. They worked very strange in a multi-window environment.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid14577306\charrsid14577306
\par }\pard \ltrpar\ql \li0\ri0\sa200\sl276\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.30
\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 * Another downloadable (zip only, stable) version.}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 Version 1.0.29
\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 * Lots of VLAN butfixes
\par \hich\af39\dbch\af31505\loch\f39 * Fixed ping-fail te\hich\af39\dbch\af31505\loch\f39 st
\par \hich\af39\dbch\af31505\loch\f39 * Lots more VLAN puzzles
\par \hich\af39\dbch\af31505\loch\f39 * Update VLAN documentation
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.28
\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 * Initial VLAN release
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.27
\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 * Made distribution easier by CD (does updates from web, but we also have a downloadable zip you can install from)
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.26
\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 * Major graphics \hich\af39\dbch\af31505\loch\f39 overhaul
\par \hich\af39\dbch\af31505\loch\f39 - Packets move on timer
\par \hich\af39\dbch\af31505\loch\f39 - Graphics drawn "smarter"
\par \hich\af39\dbch\af31505\loch\f39 - Result is that things flow smoother. Loopback2 also works much nicer.
\par \hich\af39\dbch\af31505\loch\f39 * Fixed minor issue with "help" puzzle
\par \hich\af39\dbch\af31505\loch\f39 * Made help "?" button turn red when it is part of the puzzle
\par \hich\af39\dbch\af31505\loch\f39 * Put checkmark\hich\af39\dbch\af31505\loch\f39 to display names and IPs of devices on front form.
\par \hich\af39\dbch\af31505\loch\f39 * Add a NetTest to show people to click on the "display Device names and IP" checkmark}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 Version 1.0.25
\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 * Minor changes to help file
\par \hich\af39\dbch\af31505\loch\f39 * Fixed size of labels on IP-Address editor box
\par \hich\af39\dbch\af31505\loch\f39 * Hide gateway label when\hich\af39\dbch\af31505\loch\f39 we do not need it. (ip-address editor)
\par \hich\af39\dbch\af31505\loch\f39 * rename "mixed network" puzzle to be "adding devices" (the puzzle was about adding devices)
\par \hich\af39\dbch\af31505\loch\f39 * Changed layout of many messages
\par \hich\af39\dbch\af31505\loch\f39 * Save the level we are working on. Allows us to finish level 5 before level 3 if we wan\hich\af39\dbch\af31505\loch\f39 t to.
\par \hich\af39\dbch\af31505\loch\f39 * Make network-loop puzzles sit next to each-other
\par \hich\af39\dbch\af31505\loch\f39 * Make it so network-loop2 puzzle asks for second ping after first one finishes
\par \hich\af39\dbch\af31505\loch\f39 * Lots of work towards the French translation}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 Version 1.0.24
\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 * Add sound when ctrl-s is pressed so we know we saved.
\par \hich\af39\dbch\af31505\loch\f39 * Add sound fail when save is canceled (will use it later if ctrl-s fails)
\par \hich\af39\dbch\af31505\loch\f39 * Added some wireless puzzles
\par \hich\af39\dbch\af31505\loch\f39 * Fix issue with WAP not forwarding packets correctly
\par \hich\af39\dbch\af31505\loch\f39 * Clear out old status message if we do something. So we do not say "saved" forever...
\par \hich\af39\dbch\af31505\loch\f39 * Fixed\hich\af39\dbch\af31505\loch\f39 bad gateway on wireless router issue
\par \hich\af39\dbch\af31505\loch\f39 * Fixed wbridge misbehaving. (issue with gateway)
\par \hich\af39\dbch\af31505\loch\f39 * Added wireless items to help and context help topics
\par \hich\af39\dbch\af31505\loch\f39 * Thanks to Peter Wilson for so much of the translation backbone.
\par \hich\af39\dbch\af31505\loch\f39 * Lots of translation string changes. The Fren\hich\af39\dbch\af31505\loch\f39 ch translation should be soon in coming.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.23 09/20/2015
\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 * Fixed issues with broadcast packets
\par \hich\af39\dbch\af31505\loch\f39 * Fixed a network loop issue
\par \hich\af39\dbch\af31505\loch\f39 * Fixed issue with multiple interfaces and being able to go out a different interface than we came in on
\par \hich\af39\dbch\af31505\loch\f39 * Fixed many sm\hich\af39\dbch\af31505\loch\f39 all bugs that crept in when fixing other bugs. Now all puzzles seem to play correctly}{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 Version 1.0.22 09/01/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Added ssid and keys for wireless links
\par \hich\af39\dbch\af31505\loch\f39 * Wireless will auto-disconnect if link is too long
\par \hich\af39\dbch\af31505\loch\f39 * Wireless will auto-connect if ssid and key matc\hich\af39\dbch\af31505\loch\f39 h, if link is short enough
\par \hich\af39\dbch\af31505\loch\f39 * Packets will drop on wireless links if distance is too great
\par \hich\af39\dbch\af31505\loch\f39 * wport has no interface (cannot edit IP address)
\par \hich\af39\dbch\af31505\loch\f39 * wireless router works properly - forwards broadcast packets
\par \hich\af39\dbch\af31505\loch\f39 * wireless router handles dhcp requests properly (both\hich\af39\dbch\af31505\loch\f39 responds to it but also passes it on)
\par \hich\af39\dbch\af31505\loch\f39 * right-clicking light and microwave no longer has ping, arp, edit, and other context menus
\par \hich\af39\dbch\af31505\loch\f39 * added net-test for DHCP server status (on/off)
\par \hich\af39\dbch\af31505\loch\f39 * If multiple DHCP servers, client randomly chooses which to keep.
\par \hich\af39\dbch\af31505\loch\f39 *Add Wire\hich\af39\dbch\af31505\loch\f39 less Puzzle
\par \hich\af39\dbch\af31505\loch\f39 *Fix many wireless device bugs\line }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.21 08/15/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0
\f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Added a microwave and fluorescent light. They corrupt data when packets run close to them.
\par \hich\af39\dbch\af31505\loch\f39 * Added some packet corruption puzzles
\par \hich\af39\dbch\af31505\loch\f39 * Fixed window resize-on-load issue where the help w\hich\af39\dbch\af31505\loch\f39 indow popped up first, then the builder window resized over to hide the help window.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.20 08/12/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * wports do not display on tooltips or when printing the device info
\par \hich\af39\dbch\af31505\loch\f39 * Added ctrl-s to quick-save a network we are working on
\par \hich\af39\dbch\af31505\loch\f39 * commented out w\hich\af39\dbch\af31505\loch\f39 ireless devices for now - doing a big demo and wireless is not yet complete
\par \hich\af39\dbch\af31505\loch\f39 * added search box to help
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.19 08/08/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 *Updated context help for most puzzles that introduce new ideas.
\par \hich\af39\dbch\af31505\loch\f39 * Sorted Help topics when adding them in net-tests.
\par \hich\af39\dbch\af31505\loch\f39 * Added some images to the help to help clarify things.
\par \hich\af39\dbch\af31505\loch\f39 * Start with the help windows being the same "height" as the network window.
\par \hich\af39\dbch\af31505\loch\f39 * Open Help so it can be kept open while the puzzles progress.
\par \hich\af39\dbch\af31505\loch\f39 * Deal with minimized state better (used to shrink window to\hich\af39\dbch\af31505\loch\f39 smallest possible state)
\par \hich\af39\dbch\af31505\loch\f39 * Remember size and location of main window between uses.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.18 08/08/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Added Context Help for puzzles.
\par \hich\af39\dbch\af31505\loch\f39 - Each puzzle can have context help
\par \hich\af39\dbch\af31505\loch\f39 - There is a net-test to have us read help
\par \hich\af39\dbch\af31505\loch\f39 * fixed minor problem with a "\hich\af39\dbch\af31505\loch\f39 ding" sound when we load a puzzle that has something locked.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.17 08/01/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Added more help
\par \hich\af39\dbch\af31505\loch\f39 * Much progress made in preparing for a French translation
\par \hich\af39\dbch\af31505\loch\f39 * allow for Puzzle's description to be in another language
\par \hich\af39\dbch\af31505\loch\f39 * Added more to help
\par \hich\af39\dbch\af31505\loch\f39 * Removed e\hich\af39\dbch\af31505\loch\f39 dit -> cut, paste, copy, undo. They never did anything. So why have them?
\par \hich\af39\dbch\af31505\loch\f39 * Save box starts in the directory of the file we opened (if we have one)
\par \hich\af39\dbch\af31505\loch\f39 * Choose a language at startup if one has never been chosen, and have option to change language.
\par \hich\af39\dbch\af31505\loch\f39 * Added a\hich\af39\dbch\af31505\loch\f39 nother puzzle, showing what happens (or does not happen) if we have two networks that use the same IP addresses, and we want to build a VPN between them.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.16 07/18/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Added ability to break links (bad network wire)
\par \hich\af39\dbch\af31505\loch\f39 * "connection lights" on \hich\af39\dbch\af31505\loch\f39 network cards / ports when we edit devices
\par \hich\af39\dbch\af31505\loch\f39 * Test for "needs link to" does not succeed if the link in question is a broken link
\par \hich\af39\dbch\af31505\loch\f39 * Added a puzzle to show you how to find broken links
\par \hich\af39\dbch\af31505\loch\f39 * Used broken links in other puzzles
\par \hich\af39\dbch\af31505\loch\f39 * Fixed bug: switches could not use \hich\af39\dbch\af31505\loch\f39 DHCP for many different reasons. Now it works for them.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.15 07/11/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Added ping time progress bar
\par \hich\af39\dbch\af31505\loch\f39 * Fixed issue with things timing out before they c\hich\af39\dbch\af31505\loch\f39
ompleted. If the network screen is too large, it makes it go just a tiny bit slower and various things would fail. When the first packet successfully makes it to the far end, it recomputes the time needed and gives extra time.
\par \hich\af39\dbch\af31505\loch\f39 * Added context menu ping. \hich\af39\dbch\af31505\loch\f39 If an item is supposed to ping something, right-clicking adds the ping test to the menu. Takes some of the guess-work out of things.
\par \hich\af39\dbch\af31505\loch\f39 * Fixed minor issue with this change log. Had two 1.0.11 versions & somehow was stating we were at version 10.x.x instea\hich\af39\dbch\af31505\loch\f39 d of 1.x.x (sigh)
\par \hich\af39\dbch\af31505\loch\f39 * Fixed the VPNify puzzle. Had a goof in it.
\par \hich\af39\dbch\af31505\loch\f39 * Made it so you cannot connect a link to a VPN. A VPN should be a virtual connection, not a physical connection.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.14 07/10/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * When we finish a puzzle, allow us to auto-open\hich\af39\dbch\af31505\loch\f39 the "next puzzle" box.
\par \hich\af39\dbch\af31505\loch\f39 * Added lots more puzzles
\par \hich\af39\dbch\af31505\loch\f39 * Added more help & documentation
\par \hich\af39\dbch\af31505\loch\f39 * Made it so test for local IP also checked to make sure the subnet-masks matched
\par \hich\af39\dbch\af31505\loch\f39 * Made it so the test for a matching route compared netmasks
\par \hich\af39\dbch\af31505\loch\f39 * Added a printer object
\par \hich\af39\dbch\af31505\loch\f39 * Ad\hich\af39\dbch\af31505\loch\f39 ded a copier object
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.13 06/21/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Fixed issues with arp - arp could go through routers. Now works correctly
\par \hich\af39\dbch\af31505\loch\f39 * Made it test for puzzle completion after adding devices
\par \hich\af39\dbch\af31505\loch\f39 * Made it test for completion after changing / deleting devices
\par \hich\af39\dbch\af31505\loch\f39 * Let you \hich\af39\dbch\af31505\loch\f39 delete / add NICs on PCs, primarily so we can solve the duplicate MAC puzzle
\par \hich\af39\dbch\af31505\loch\f39 * Replaced the "Network Loop" puzzle with the correct one.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.12 06/20/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Added VPN and TUN nic types
\par \hich\af39\dbch\af31505\loch\f39 * Fixed numerous small bugs
\par \hich\af39\dbch\af31505\loch\f39 * Fixed bug with early solution to \hich\af39\dbch\af31505\loch\f39 failed ping test
\par \hich\af39\dbch\af31505\loch\f39 * Added "ding" when a test is solved.
\par \hich\af39\dbch\af31505\loch\f39 * Added a "firewall" network that has a firewall and vpns
\par \hich\af39\dbch\af31505\loch\f39 * Added numerous firewall / vpn puzzles
\par \hich\af39\dbch\af31505\loch\f39 * Fixed a DNS issue. It now more intelligently finds the right IP address when you ping it
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version\hich\af39\dbch\af31505\loch\f39 1.0.11 06/14/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Added the ability to lock various important features to make puzzles better
\par \hich\af39\dbch\af31505\loch\f39 * Able to add interfaces (multiple IPs on a Network Card)
\par \hich\af39\dbch\af31505\loch\f39 * Right-click context menu to add net-tests.
\par \hich\af39\dbch\af31505\loch\f39 * Del key now deletes the last item we had clicked o\hich\af39\dbch\af31505\loch\f39 n
\par \hich\af39\dbch\af31505\loch\f39 * Can add NICs (on some devices)
\par \hich\af39\dbch\af31505\loch\f39 * Can delete NICs
\par \hich\af39\dbch\af31505\loch\f39 * Fixed minor bug with broadcast pinging solving ping test for individual computers
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.10 06/13/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Renamed puzzles to manage them easier
\par \hich\af39\dbch\af31505\loch\f39 * Deal with duplicate IPs, and what happens when a \hich\af39\dbch\af31505\loch\f39 packet returns to a computer that did not send it.
\par \hich\af39\dbch\af31505\loch\f39 * Change to the help window so you can keep the window open while working with the puzzle.
\par \hich\af39\dbch\af31505\loch\f39 * Change to the donation link. Not that it will ever be used, but it makes me feel better having a few places for\hich\af39\dbch\af31505\loch\f39 people to donate to if they wish.
\par \hich\af39\dbch\af31505\loch\f39 * Minor change for how broadcast packets work, specifically dealing with duplicate IP addresses.
\par \hich\af39\dbch\af31505\loch\f39 * Added a "firewall" device & WAN port with masquerade
\par \hich\af39\dbch\af31505\loch\f39 * Added a FailedPing test so we can ping things that must fail (show \hich\af39\dbch\af31505\loch\f39 the firewall works)
\par \hich\af39\dbch\af31505\loch\f39 * added more to the help
\par \hich\af39\dbch\af31505\loch\f39 * added more puzzles
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.0.9 05/29/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Add a grid to the network map. It makes things easier to straighten up
\par \hich\af39\dbch\af31505\loch\f39 * Sorted and organized the puzzles
\par \hich\af39\dbch\af31505\loch\f39 * Made a level for each puzzle.
\par \hich\af39\dbch\af31505\loch\f39 * Tracked the puzzle\hich\af39\dbch\af31505\loch\f39 s which have been completed
\par \hich\af39\dbch\af31505\loch\f39 * When we open the puzzle list, we now show the first level of puzzles that have an uncompleted puzzle.
\par \hich\af39\dbch\af31505\loch\f39 * Added more "tests", viewing help, pinging, arp, and dhcp.
\par \hich\af39\dbch\af31505\loch\f39 * Reset buttons when we load a new network.
\par \hich\af39\dbch\af31505\loch\f39 * Added a bunch more\hich\af39\dbch\af31505\loch\f39 puzzles
\par \hich\af39\dbch\af31505\loch\f39 * Sometimes the remembered IP gets annoying when it remembers odd gateways and numbers we cannot change. Fixed that in many cases.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.0.8 05/25/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Always Start with level0 puzzles for now
\par \hich\af39\dbch\af31505\loch\f39 * Fixed the icon when program running
\par \hich\af39\dbch\af31505\loch\f39 * Added an infrastructure for Puzzles (needs work)
\par \hich\af39\dbch\af31505\loch\f39 * Added a number of basic puzzles
\par \hich\af39\dbch\af31505\loch\f39 * Fixed DHCP Leases. Now it clears leases when you change the DHCP server range.
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.0.7 05/16/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Added file association so we can double-click an enbx file
\par \hich\af39\dbch\af31505\loch\f39 * Fixed the icon so it looks right (removed left edge)
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.0.6 05/16/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Able to delete a route (right click route and delete it)
\par \hich\af39\dbch\af31505\loch\f39 * Add map title as something we can load/save
\par \hich\af39\dbch\af31505\loch\f39 * Add message as something we can load and save
\par \hich\af39\dbch\af31505\loch\f39 * Changing size o\hich\af39\dbch\af31505\loch\f39 f items affects all items
\par \hich\af39\dbch\af31505\loch\f39 * Allow entering a hostname in the IP address field (ping / gateway)
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.0.5 04/26/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Fixed ping from switch
\par \hich\af39\dbch\af31505\loch\f39 * Fixed error message when pinging IP that does not exist
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.0.4 04/26/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Fixed broadcast pi\hich\af39\dbch\af31505\loch\f39 ng
\par \hich\af39\dbch\af31505\loch\f39 *Fixed dhcp request error
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.0.3 04/15/2015
\par }{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 * Added "file" -> "new" to erase and start a clean new network
\par \hich\af39\dbch\af31505\loch\f39 * Fixed pc2 to have gateway on "solved"->"Two Networks"
\par \hich\af39\dbch\af31505\loch\f39 * Fixed - only machines capable of doing DHCP do dhcp request if we do DHCP req\hich\af39\dbch\af31505\loch\f39 uest on all
\par \hich\af39\dbch\af31505\loch\f39 * Changed - major overhaul to tcp-stack.
\par \hich\af39\dbch\af31505\loch\f39 * Downgrade - Arp temporarily removed from system while tcp-stack overhaul completed
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.0.2 4/19/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * Added IP-Phone
\par \hich\af39\dbch\af31505\loch\f39 * Packets terminate at the far end - \hich\af39\dbch\af31505\loch\f39 this makes it easier to see packets go both directions
\par \hich\af39\dbch\af31505\loch\f39 * Packets are randomized in transit - Allows packets to arrive at slightly different times
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Version 1.0.0.1 4/11/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 * DHCP selection on nics is not functioning correctly
\par \hich\af39\dbch\af31505\loch\f39 * Various small bug-fixes
\par }{\rtlch\fcs1 \ab\af39 \ltrch\fcs0 \b\f39\lang9\langfe1033\langnp9\insrsid12019296 \hich\af39\dbch\af31505\loch\f39 Ve\hich\af39\dbch\af31505\loch\f39 rsion 1.0.0.0 4/10/2015}{\rtlch\fcs1 \af39 \ltrch\fcs0 \f39\lang9\langfe1033\langnp9\insrsid12019296
\par \hich\af39\dbch\af31505\loch\f39 This is the initial alpha build
\par \hich\af39\dbch\af31505\loch\f39 * basic pinging
\par \hich\af39\dbch\af31505\loch\f39 * basic arp
\par \hich\af39\dbch\af31505\loch\f39 * Routers
\par \hich\af39\dbch\af31505\loch\f39 * Switches/Hubs
\par \hich\af39\dbch\af31505\loch\f39 * PCs/Laptops
\par \hich\af39\dbch\af31505\loch\f39 * Network Links (ethernet)
\par \hich\af39\dbch\af31505\loch\f39 * Basic DHCP
\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865
6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210007b740aaca0600008f1a0000160000007468656d652f7468656d652f
7468656d65312e786d6cec595b8bdb46147e2ff43f08bd3bbe49be2cf1065bb69336bb49889d943cceda636bb2238dd18c776342a0244f7d2914d2d28706fad6
87521a68a0a12ffd310b1bdaf447f4cc489667ec71f6420aa1640d8b34face996fce39face48ba7aed51449d239c70c2e2965bbe52721d1c8fd898c4d3967b6f
d82f345c870b148f1165316eb90bccdd6bbb9f7e7215ed881047d801fb98efa0961b0a31db2916f9088611bfc26638866b13964448c069322d8e13740c7e235a
ac944ab5628448ec3a318ac0ededc9848cb033942edddda5f31e85d358703930a2c940bac68685c28e0fcb12c1173ca089738468cb8579c6ec78881f09d7a188
0bb8d0724beacf2dee5e2da29dcc888a2db69a5d5ffd657699c1f8b0a2e64ca607f9a49ee77bb576ee5f01a8d8c4f5eabd5aaf96fb5300341ac14a532eba4fbf
d3ec74fd0cab81d2438bef6ebd5b2d1b78cd7f758373db973f03af40a97f6f03dfef07104503af4029dedfc07b5ebd1278065e81527c6d035f2fb5bb5eddc02b
5048497cb8812ef9b56ab05c6d0e99307ac30a6ffa5ebf5ec99caf50500d7975c929262c16db6a2d420f59d2078004522448ec88c50c4fd008aa3840941c24c4
d923d3100a6f8662c661b85429f54b55f82f7f9e3a5211413b1869d6921730e11b43928fc34709998996fb39787535c8e9ebd7274f5f9d3cfdfde4d9b393a7bf
66732b5786dd0d144f75bbb73f7df3cf8b2f9dbf7ffbf1edf36fd3a9d7f15cc7bff9e5ab377ffcf92ef7b0e255284ebf7bf9e6d5cbd3efbffeebe7e716efed04
1de8f0218930776ee163e72e8b608116fef820b998c5304444b768c7538e622467b1f8ef89d040df5a208a2cb80e36e3783f01a9b101afcf1f1a8407613217c4
e2f1661819c07dc6688725d628dc947369611ecee3a97df264aee3ee2274649b3b40b191e5de7c061a4b6c2e83101b34ef50140b34c531168ebcc60e31b6acee
0121465cf7c928619c4d84f380381d44ac21199203a39a56463748047959d80842be8dd8ecdf773a8cda56ddc5472612ee0d442de487981a61bc8ee602453697
4314513de07b48843692834532d2713d2e20d3534c99d31b63ce6d36b71358af96f49b2033f6b4efd345642213410e6d3ef710633ab2cb0e831045331b7640e2
50c77ec60fa144917387091b7c9f9977883c873ca0786bbaef136ca4fb6c35b8070aab535a1588bc324f2cb9bc8e9951bf83059d20aca4061a80a1eb1189cf14
f93579f7ff3b7907113dfde1856545ef47d2ed8e8d7c5c50ccdb09b1de4d37d6247c1b6e5db803968cc987afdb5d348fef60b855369bd747d9fe28dbeeff5eb6
b7ddcfef5fac57fa0cd22db7ade9765d6ddea3ad7bf709a174201614ef71b57de7d095c67d189476eab915e7cf72b3100ee59d0c1318b86982948d9330f10511
e1204433d8e3975de964ca33d753eecc1887adbf1ab6fa96783a8ff6d9387d642d97e5e3692a1e1c89d578c9cfc7e17143a4e85a7df51896bb576ca7ea717949
40da5e8484369949a26a21515f0eca20a98773089a85845ad97b61d1b4b06848f7cb546db0006a795660dbe4c066abe5fa1e9880113c55218ac7324f69aa97d9
55c97c9f99de164ca302600fb1ac8055a69b92ebd6e5c9d5a5a5768e4c1b24b4723349a8c8a81ec64334c65975cad1f3d0b868ae9bab941af46428d47c505a2b
1af5c6bb585c36d760b7ae0d34d69582c6ce71cbad557d2899119ab5dc093cfac3613483dae172bb8be814de9f8d4492def097519659c24517f1300db8129d54
0d222270e25012b55cb9fc3c0d34561aa2b8952b20081f2cb926c8ca87460e926e26194f267824f4b46b2332d2e929287caa15d6abcafcf26069c9e690ee4138
3e760ee83cb98ba0c4fc7a5906704c38bc012aa7d11c1378a5990bd9aafed61a5326bbfa3b455543e938a2b310651d4517f314aea43ca7a3cef2186867d99a21
a05a48b2467830950d560faad14df3ae9172d8da75cf369291d34473d5330d55915dd3ae62c60ccb36b016cbcb35798dd532c4a0697a874fa57b5d729b4bad5b
db27e45d02029ec7cfd275cfd110346aabc90c6a92f1a60c4bcdce46cddeb15ce019d4ced32434d5af2dddaec52def11d6e960f0529d1fecd6ab168626cb7da5
8ab4faf6a17f9e60070f413cbaf022784e0557a9848f0f09820dd140ed4952d9805be491c86e0d3872e60969b98f4b7edb0b2a7e502835fc5ec1ab7aa542c36f
570b6ddfaf967b7eb9d4ed549e4063116154f6d3ef2e7d780d4517d9d71735bef105265abe69bb32625191a92f2c45455c7d812957b67f81710888cee35aa5df
ac363bb542b3daee17bc6ea7516806b54ea15b0beadd7e37f01bcdfe13d7395260af5d0dbc5aaf51a89583a0e0d54a927ea359a87b954adbabb71b3daffd24db
c6c0ca53f9c86201e155bc76ff050000ffff0300504b0304140006000800000021000dd1909fb60000001b010000270000007468656d652f7468656d652f5f72
656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c08
2e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd0
8a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa
4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000001c0200001300000000000000000000000000000000005b436f
6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c0000000360100000b00000000000000000000000000300100005f72
656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c00000000000000000000000000190200007468656d652f746865
6d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210007b740aaca0600008f1a00001600000000000000000000000000d60200
007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021000dd1909fb60000001b01000027000000000000000000000000
00d40900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000cf0a00000000}
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;
\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;
\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;
\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature;\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;
\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;
\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority39 \lsdlocked0 Table Grid;
\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;
\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1;\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;
\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading;\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;
\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;
\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;
\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;
\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;
\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdpriority62 \lsdlocked0 Light Grid Accent 4;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;
\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6;
\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;
\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;
\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography;
\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4;
\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4;
\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1;
\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1;
\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2;
\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2;
\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3;
\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4;
\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4;
\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5;
\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5;
\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6;
\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6;
\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark;
\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1;
\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1;
\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2;
\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3;
\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3;
\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4;
\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4;
\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5;
\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5;
\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6;
\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000
4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000805d
474827b3d401feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000105000000000000}}

View File

@ -2129,72 +2129,40 @@
<value>Regression testing</value> <value>Regression testing</value>
<comment>LBW_Regression_Testing = Regression testing</comment> <comment>LBW_Regression_Testing = Regression testing</comment>
</data> </data>
<data name="AC_AddDevice" xml:space="preserve"> <data name="IPE_GatewayTooltip" xml:space="preserve">
<value>Add Device</value> <value>This is the gateway to use on this network. If a device exists with this IP, that device will be set up as the gateway.</value>
<comment>AC_AddDevice = Add Device</comment> <comment>IPE_GatewayTooltip = This is the gateway to use on this network. If a device exists with this IP, that device will be set up as the gateway.</comment>
</data> </data>
<data name="AC_ChangeDevice" xml:space="preserve"> <data name="IPE_NetmaskTooltip" xml:space="preserve">
<value>Change Device</value> <value>This is the netmask we are using when renumbering the subnet.</value>
<comment>AC_ChangeDevice = Change Device</comment> <comment>IPE_NetmaskTooltip = This is the netmask we are using when renumbering the subnet.</comment>
</data> </data>
<data name="AC_ClearArp" xml:space="preserve"> <data name="IPE_Network" xml:space="preserve">
<value>Clear ARP</value> <value>Network</value>
<comment>AC_ClearArp = Clear ARP</comment> <comment>IPE_Network = Network</comment>
</data> </data>
<data name="AC_DeleteDevice" xml:space="preserve"> <data name="IPE_NetworkTooltip" xml:space="preserve">
<value>Delete Device</value> <value>This is the network address to use. The gateway should be part of this network.</value>
<comment>AC_DeleteDevice = Delete Device</comment> <comment>IPE_NetworkTooltip = This is the network address to use. The gateway should be part of this network.</comment>
</data> </data>
<data name="AC_DeleteLink" xml:space="preserve"> <data name="NB_ChooseGateway" xml:space="preserve">
<value>Delete link</value> <value>Choose a gateway device</value>
<comment>AC_DeleteLink = Delete link</comment> <comment>NB_ChooseGateway = Choose a gateway device</comment>
</data> </data>
<data name="AC_DoPing" xml:space="preserve"> <data name="NB_Renumber" xml:space="preserve">
<value>Do ping</value> <value>Renumber IPs</value>
<comment>AC_DoPing = Do ping</comment> <comment>NB_Renumber = Renumber IPs</comment>
</data> </data>
<data name="AC_DoTraceroute" xml:space="preserve"> <data name="NB_Subnet" xml:space="preserve">
<value>Do Traceroute</value> <value>New Subnet</value>
<comment>AC_DoTraceroute = Do Traceroute</comment> <comment>NB_Subnet = New Subnet</comment>
</data> </data>
<data name="AC_MoveDevice" xml:space="preserve"> <data name="NB_ChooseVLANRenumber" xml:space="preserve">
<value>Move Device</value> <value>What VLAN to renumber?</value>
<comment>AC_MoveDevice = Move Device</comment> <comment>NB_ChooseVLANRenumber = What VLAN to renumber?</comment>
</data> </data>
<data name="AC_Powering_OFF" xml:space="preserve"> <data name="NB_ChooseVLANRenumberTitle" xml:space="preserve">
<value>Powering Off</value> <value>VLAN to renumber</value>
<comment>AC_Powering_OFF = Powering Off</comment> <comment>NB_ChooseVLANRenumberTitle = VLAN to renumber</comment>
</data>
<data name="AC_Powering_ON" xml:space="preserve">
<value>Powering On</value>
<comment>AC_Powering_OFF - Powering On</comment>
</data>
<data name="AC_Replace_Device" xml:space="preserve">
<value>Replace Device</value>
<comment>AC_Replace_Device = Replace Device</comment>
</data>
<data name="AC_Replace_Link" xml:space="preserve">
<value>Replace Link</value>
<comment>AC_Replace_Link = Replace Link</comment>
</data>
<data name="AC_Replace_UPS" xml:space="preserve">
<value>Replace UPS</value>
<comment>AC_Replace_UPS = Replace UPS</comment>
</data>
<data name="AC_RequestARP" xml:space="preserve">
<value>Request ARP</value>
<comment>AC_RequestARP = Request ARP</comment>
</data>
<data name="AC_RequestDHCP" xml:space="preserve">
<value>Request DHCP</value>
<comment>AC_RequestDHCP = Request DHCP</comment>
</data>
<data name="AC_Resetting" xml:space="preserve">
<value>Resetting</value>
<comment>AC_Resetting = Resetting</comment>
</data>
<data name="NDUpdateComponent" xml:space="preserve">
<value>Updating Device</value>
<comment>NDUpdateComponent = Update Device</comment>
</data> </data>
</root> </root>

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="WiX" version="3.11.2" targetFramework="net45" />
</packages>

View File

@ -12,7 +12,7 @@ should be well on your way to mastering networking.
EduNetworkBuilder is a Visual Studio program. You should be able to download the current free EduNetworkBuilder is a Visual Studio program. You should be able to download the current free
edition of Visual Studio, open the project file, and make the project. You should also be able to edition of Visual Studio, open the project file, and make the project. You should also be able to
download pre-compiled versions from: http://tyounglightsys.com/EduNetworkBuilder download pre-compiled versions from: http://tyounglightsys.ddns.info/EduNetworkBuilder
*** Building on Linux with Mono and XBuild *** *** Building on Linux with Mono and XBuild ***