diff --git a/EduNetworkBuilder/NB.cs b/EduNetworkBuilder/NB.cs index 1290060..cd2323a 100644 --- a/EduNetworkBuilder/NB.cs +++ b/EduNetworkBuilder/NB.cs @@ -90,7 +90,7 @@ namespace EduNetworkBuilder packet_in=4, packet_out=8, packet_duplicate=16, all=63, dump=256, pause=512} public enum TraversalTechnology { gateway, static_route, vlan, ethernet, wireless, firewall, - vpn, vpn_encryption, ip_address} + vpn, vpn_encryption, vpn_decryption, ip_address, masquerade} [Serializable] public struct HostNicID //This holds a unique identifier for a network card. Links use this to know what it is connected to diff --git a/EduNetworkBuilder/NetworkCard.cs b/EduNetworkBuilder/NetworkCard.cs index db53450..12bc80c 100644 --- a/EduNetworkBuilder/NetworkCard.cs +++ b/EduNetworkBuilder/NetworkCard.cs @@ -559,6 +559,7 @@ namespace EduNetworkBuilder { //When we leave the WAN port, we are masqueraded. Track that. WhereFrom.StoreOutgoingPacketInfo(nPacket, ResponseToPacket.masq); + tPacket.TraversalInformation.AddPath(WhereFrom.hostname, TraversalTechnology.masquerade); //We just masqueraded //Now, we masquerade the packet so it looks like it comes fromhere nPacket.Tracking.AddMessage(DebugLevel.natting, WhereFrom.hostname, string.Format(NB.Translate("NC_ChangeIPStr"), nf.myIP.GetIPString)); nPacket.sourceIP = nf.myIP; @@ -599,6 +600,7 @@ namespace EduNetworkBuilder { //We need to tell the original packet that it is inside another packet tPacket.MyStatus = PacketStatus.encapsulated; + tPacket.TraversalInformation.AddPath(WhereFrom.hostname, TraversalTechnology.vpn); //We just started a VPN tPacket.TsourceIP = nf.myIP; tPacket.destMAC = WhereFrom.LookupArpFromIP(tPacket.OutboundIP.GetIPString); if (nf != null) @@ -611,6 +613,8 @@ namespace EduNetworkBuilder WhereFrom.TunnelPacketFromHere(TunnelEndpoint, rnPacket, EncryptionKey); //We need to send the new packet on (pass it back to the device to process) madeprogress = true; + if(EncryptionKey != "") + tPacket.TraversalInformation.AddPath(WhereFrom.hostname, TraversalTechnology.vpn_encryption); //We the packet is "encrypted" } } break; diff --git a/EduNetworkBuilder/NetworkDevice.cs b/EduNetworkBuilder/NetworkDevice.cs index ccefd69..882317f 100644 --- a/EduNetworkBuilder/NetworkDevice.cs +++ b/EduNetworkBuilder/NetworkDevice.cs @@ -1504,7 +1504,8 @@ namespace EduNetworkBuilder tPacket.MyStatus = PacketStatus.finished_failed; return; } - if(dest.GetIP == tPacket.destIP.GetIP) + tPacket.TraversalInformation.AddPath(this.hostname, TraversalTechnology.ip_address); //We will use an outbound ip. + if (dest.GetIP == tPacket.destIP.GetIP) { //It is a local packet. Let it go out the interface it needs to go out tPacket.OutboundIP = tPacket.destIP; @@ -1514,6 +1515,7 @@ namespace EduNetworkBuilder { //it needs to go to a gateway. Set the next destination is the GW tPacket.OutboundIP = dest; + tPacket.TraversalInformation.AddPath(this.hostname, TraversalTechnology.gateway); //We just used a gateway tPacket.TsourceIP = null; } else