Fix small bug pinging local ips

This commit is contained in:
Tim Young 2016-11-11 10:13:26 -07:00
parent f5a74d1ff3
commit 721efb7fe3

View File

@ -1390,6 +1390,28 @@ namespace EduNetworkBuilder
return false; return false;
} }
public bool LocalMatches(Packet tPacket)
{
//return false;
//the tSourceIP is local to something on the device
//The dest IP exists on the device.
//If we have multiple IPs, the tdest is one, and the actual dest is another
bool MatchesSource = false;
bool MatchesDest = false;
foreach(NetworkCard nic in NICs)
{
//If no IPs are defined, is it 0.0.0.0/0.0.0.0 which is local to everything
if (nic.GetNicType == NicType.port) continue;
if (nic.GetNicType == NicType.wport) continue;
if (nic.HasLocalInterface(tPacket.TsourceIP))
MatchesSource = true;
if (nic.HasIPAddresses(tPacket.destIP))
MatchesDest = true;
}
if (MatchesDest && MatchesSource) return true;
return false;
}
public override void ProcessPacket(Packet tPacket) public override void ProcessPacket(Packet tPacket)
{ {
//Psuedo code for processing a packet //Psuedo code for processing a packet
@ -1409,10 +1431,11 @@ namespace EduNetworkBuilder
bool MacAddressMatch = HasMac(tPacket.destMAC); bool MacAddressMatch = HasMac(tPacket.destMAC);
//It is an exact match if it is coming from a local source. //It is an exact match if it is coming from a local source.
bool ExactMatch = HasIPAddress(tPacket.destIP) && (tPacket.TsourceIP == null || tPacket.TsourceIP.IsLocal(tPacket.destIP)); bool ExactMatch = HasIPAddress(tPacket.destIP) && (tPacket.TsourceIP == null || tPacket.TsourceIP.IsLocal(tPacket.destIP));
bool LocalMatch = LocalMatches(tPacket);
bool BroadcastMatch = HasBroadcastAddress(tPacket.destIP); bool BroadcastMatch = HasBroadcastAddress(tPacket.destIP);
bool NeedsRouting = MacAddressMatch && (!ExactMatch && !BroadcastMatch); bool NeedsRouting = MacAddressMatch && (!ExactMatch && !BroadcastMatch);
if(ExactMatch || BroadcastMatch) if(ExactMatch || BroadcastMatch || LocalMatch)
{ {
//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