vlans are working

This commit is contained in:
Tim Young 2016-10-10 19:31:57 -05:00
parent 3632432f02
commit 14bcc075a3
4 changed files with 78 additions and 12 deletions

View File

@ -238,6 +238,7 @@ namespace EduNetworkBuilder
public static int WirelessMaxUnsuccessfulLink = 120; //The link will connect, but the packet will drop public static int WirelessMaxUnsuccessfulLink = 120; //The link will connect, but the packet will drop
public static int WirelessMaxSuccessfulLink = 100; //Packets will drop after this distance public static int WirelessMaxSuccessfulLink = 100; //Packets will drop after this distance
public static int WirelessReconnectDistance = 70; //Try to find a closer AP if we are this far out. public static int WirelessReconnectDistance = 70; //Try to find a closer AP if we are this far out.
public static int UntaggedVLAN = -1; //If the packet is not tagged.
/// <summary> /// <summary>
/// Find the global random number generator. /// Find the global random number generator.

View File

@ -1399,9 +1399,13 @@ namespace EduNetworkBuilder
break; break;
string tMAC = tPacket.destMAC; string tMAC = tPacket.destMAC;
string ttMAC = tPacket.OutboundDestMAC; string ttMAC = tPacket.OutboundDestMAC;
tPacket.VLANID = NB.UntaggedVLAN; //we are routing, so we adopt the outgoing vlanID - state it needs to be tagged
if (BroadcastMatch && tPacket.MyType != PacketType.dhcp_answer) if (BroadcastMatch && tPacket.MyType != PacketType.dhcp_answer)
tPacket.OutboundDestMAC = NB.BroadcastMACString; tPacket.OutboundDestMAC = NB.BroadcastMACString;
tPacket.destMAC = tPacket.OutboundDestMAC; tPacket.destMAC = tPacket.OutboundDestMAC;
//wearehere; //set the vlan id to 1 probably so we adopt the outgoing vlan
if(nic.SendPacketOutNIC(tPacket)) if(nic.SendPacketOutNIC(tPacket))
{ {
count++; count++;
@ -2277,6 +2281,8 @@ namespace EduNetworkBuilder
//Now we pass it to the nic //Now we pass it to the nic
if(nc != null) if(nc != null)
nc.ProcessInboundPacket(tPacket); nc.ProcessInboundPacket(tPacket);
if (hostname != null)
Console.WriteLine("Starting on device: " + hostname + " VLANID = " + tPacket.VLANID.ToString());
if(!tPacket.ready_to_delete) if(!tPacket.ready_to_delete)
tPacket.StartOnDevice(this); tPacket.StartOnDevice(this);
} }

View File

@ -163,7 +163,7 @@ namespace EduNetworkBuilder
// tPacket.sourceIP = new IPAddress(myIP.GetIP.ToIpString(), "", IPAddressType.ip_only); //We only want the IP address // tPacket.sourceIP = new IPAddress(myIP.GetIP.ToIpString(), "", IPAddressType.ip_only); //We only want the IP address
//} //}
//VLAN stuff //VLAN stuff
VLANInfo VI = GetVLANInfo(tPacket.VLANID); VLANInfo VI = OutgoingVLAN(tPacket.VLANID);
VLANTagType What = VI.Tag; VLANTagType What = VI.Tag;
Network theNet = NB.GetNetwork(); Network theNet = NB.GetNetwork();
NetworkDevice HD = theNet.GetDeviceFromID(AttachedToHostNic); NetworkDevice HD = theNet.GetDeviceFromID(AttachedToHostNic);
@ -172,6 +172,7 @@ namespace EduNetworkBuilder
if (What == VLANTagType.Forbidden) if (What == VLANTagType.Forbidden)
{ {
//we drop it silently //we drop it silently
Console.WriteLine(" -- Forbidding outbound packet. " + tPacket.VLANID + " " + HD.hostname + " " + VI.ID);
string errString = string.Format(NB.Translate("NI_VLANOut"), hostname, tPacket.destIP.GetIPString); string errString = string.Format(NB.Translate("NI_VLANOut"), hostname, tPacket.destIP.GetIPString);
tPacket.AddMessage(DebugLevel.switching, errString); tPacket.AddMessage(DebugLevel.switching, errString);
tPacket.Tracking.Status = errString; tPacket.Tracking.Status = errString;
@ -181,7 +182,7 @@ namespace EduNetworkBuilder
if(What == VLANTagType.Untagged) if(What == VLANTagType.Untagged)
{ {
//We strip off the tagging //We strip off the tagging
tPacket.VLANID = 1; //set to the default vlan tPacket.VLANID = NB.UntaggedVLAN; //set to the default vlan
} }
if(What == VLANTagType.Tagged) if(What == VLANTagType.Tagged)
{ {
@ -196,18 +197,24 @@ namespace EduNetworkBuilder
//If the packet is tagged with the ID, and the port is tagged, return that //If the packet is tagged with the ID, and the port is tagged, return that
//If the packet is untagged, return the one that is untagged //If the packet is untagged, return the one that is untagged
VLANInfo newVLANinfo = null; VLANInfo newVLANinfo = null;
if (ID != 1) //It is tagged if (ID != NB.UntaggedVLAN) //It is tagged
{ {
foreach(VLANInfo vi in VLANs) foreach(VLANInfo vi in VLANs)
{ {
if (vi.ID == ID) return vi; if (vi.ID == ID)
{
if (vi.Tag == VLANTagType.Forbidden)
Console.WriteLine(" About to be forbidden.");
return vi;
}
} }
//We do not have one set yet. Add a new one //We do not have one set yet. Add a new one
newVLANinfo = new VLANInfo(ID, VLANTagType.Forbidden); newVLANinfo = new VLANInfo(ID, VLANTagType.Forbidden);
Console.WriteLine(" Creating forbidden vlan - " + ID);
VLANs.Add(newVLANinfo); VLANs.Add(newVLANinfo);
return newVLANinfo; return newVLANinfo;
} }
else //the packet is the default vlan (1) so appears untagged. else //the packet is untagged.
{ {
foreach (VLANInfo vi in VLANs) foreach (VLANInfo vi in VLANs)
{ {
@ -225,6 +232,54 @@ namespace EduNetworkBuilder
return newVLANinfo; return newVLANinfo;
} }
private VLANInfo OutgoingVLAN(int ID)
{
//Search through outgoing vlan stuff to find the right one
//If the packet is tagged with the ID, and the port is tagged, return that
//If the packet is untagged, return the one that is untagged
VLANInfo newVLANinfo = null;
if (ID != NB.UntaggedVLAN) //the packet is tagged
{
foreach (VLANInfo vi in VLANs)
{
if (vi.ID == ID)
{
if (vi.Tag == VLANTagType.Forbidden)
Console.WriteLine(" About to be outbound forbidden.");
return vi;
}
}
//We do not have one set yet. Add a new one
newVLANinfo = new VLANInfo(ID, VLANTagType.Forbidden);
Console.WriteLine(" Creating outbound forbidden vlan - " + ID);
VLANs.Add(newVLANinfo);
return newVLANinfo;
}
else //the packet is untagged.
{
//we should find the untagged vlan
//if no untagged vlan, find the tagged vlan
foreach (VLANInfo vi in VLANs)
{
if (vi.Tag == VLANTagType.Untagged) return vi;
}
foreach (VLANInfo vi in VLANs)
{
if (vi.Tag == VLANTagType.Tagged) return vi;
}
//We do not have an "untagged" vlan. Return the settings for vlan1
foreach (VLANInfo vi in VLANs)
{
if (vi.ID == 1) return vi;
}
}
//We should never get here. This is just a fall-through
newVLANinfo = new VLANInfo(ID, VLANTagType.Forbidden);
VLANs.Add(newVLANinfo);
return newVLANinfo;
}
public void ProcessInboundPacket(Packet tPacket) public void ProcessInboundPacket(Packet tPacket)
{ {
bool isgood = false; bool isgood = false;
@ -255,9 +310,9 @@ namespace EduNetworkBuilder
} }
if (What == VLANTagType.Untagged) if (What == VLANTagType.Untagged)
{ {
//If it is 1 (default vlan), this is OK. Otherwise drop. //If it is (default vlan), this is OK. Otherwise drop.
//Untagged means we expect it to be vlan of 1 on the cable side //Untagged means we expect it to be vlan of (untagged) on the cable side
if(tPacket.VLANID != 1) if(tPacket.VLANID != NB.UntaggedVLAN)
{ {
//Oops. We need to reject the packet //Oops. We need to reject the packet
string errString = string.Format(NB.Translate("NI_VLANInUntagged"), hostname, tPacket.destIP.GetIPString); string errString = string.Format(NB.Translate("NI_VLANInUntagged"), hostname, tPacket.destIP.GetIPString);
@ -268,13 +323,13 @@ namespace EduNetworkBuilder
} }
else //We need to tag the packet with the new VLAN-ID else //We need to tag the packet with the new VLAN-ID
{ {
tPacket.VLANID = VI.ID; //The packet is ow tagged tPacket.VLANID = VI.ID; //The packet is now tagged
} }
} }
if (What == VLANTagType.Tagged) if (What == VLANTagType.Tagged)
{ {
//If the packet is tagged, and the vlan expected tagged, all is good. //If the packet is tagged, and the vlan expected tagged, all is good.
if(tPacket.VLANID != VI.ID) if (tPacket.VLANID != NB.UntaggedVLAN && tPacket.VLANID != VI.ID)
{ {
//Oops. We need to reject the packet //Oops. We need to reject the packet
string errString = string.Format(NB.Translate("NI_VLANInMisMatch"), hostname, tPacket.destIP.GetIPString); string errString = string.Format(NB.Translate("NI_VLANInMisMatch"), hostname, tPacket.destIP.GetIPString);
@ -283,6 +338,8 @@ namespace EduNetworkBuilder
tPacket.MyStatus = PacketStatus.finished_ok; tPacket.MyStatus = PacketStatus.finished_ok;
return; return;
} }
else
tPacket.VLANID = VI.ID; //Make sure it is properly tagged.
} }
} }

View File

@ -36,7 +36,7 @@ namespace EduNetworkBuilder
} }
} }
public int packetID; public int packetID;
public int VLANID = 1; //starts on the management vlan public int VLANID = NB.UntaggedVLAN; //starts on the management vlan
public int TTL = 20; public int TTL = 20;
public int TickTTL = 50; public int TickTTL = 50;
public int health = 100; public int health = 100;
@ -109,6 +109,7 @@ namespace EduNetworkBuilder
StartTime = copyfrom.StartTime; StartTime = copyfrom.StartTime;
OriginalDestIP = copyfrom.OriginalDestIP; OriginalDestIP = copyfrom.OriginalDestIP;
packetID = copyfrom.packetID; packetID = copyfrom.packetID;
VLANID = copyfrom.VLANID;
Tracking.AddMessage(DebugLevel.debug, WhereAmI, NB.Translate("P_PacketDuplicated")); Tracking.AddMessage(DebugLevel.debug, WhereAmI, NB.Translate("P_PacketDuplicated"));
} }
@ -345,6 +346,7 @@ namespace EduNetworkBuilder
public void StartOnLink(NetworkLink theLink, NetworkDevice start_device) public void StartOnLink(NetworkLink theLink, NetworkDevice start_device)
{ {
if (theLink == null) return; if (theLink == null) return;
Console.WriteLine("Starting on link: " + theLink.GetUniqueIdentifier + " vlanID = " + VLANID.ToString());
InboundNic = null; InboundNic = null;
InboundInterface = null; InboundInterface = null;
WhereAmI = theLink; WhereAmI = theLink;