vlans are working
This commit is contained in:
parent
3632432f02
commit
14bcc075a3
@ -238,6 +238,7 @@ namespace EduNetworkBuilder
|
||||
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 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>
|
||||
/// Find the global random number generator.
|
||||
|
@ -1399,9 +1399,13 @@ namespace EduNetworkBuilder
|
||||
break;
|
||||
string tMAC = tPacket.destMAC;
|
||||
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)
|
||||
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))
|
||||
{
|
||||
count++;
|
||||
@ -2277,6 +2281,8 @@ namespace EduNetworkBuilder
|
||||
//Now we pass it to the nic
|
||||
if(nc != null)
|
||||
nc.ProcessInboundPacket(tPacket);
|
||||
if (hostname != null)
|
||||
Console.WriteLine("Starting on device: " + hostname + " VLANID = " + tPacket.VLANID.ToString());
|
||||
if(!tPacket.ready_to_delete)
|
||||
tPacket.StartOnDevice(this);
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ namespace EduNetworkBuilder
|
||||
// tPacket.sourceIP = new IPAddress(myIP.GetIP.ToIpString(), "", IPAddressType.ip_only); //We only want the IP address
|
||||
//}
|
||||
//VLAN stuff
|
||||
VLANInfo VI = GetVLANInfo(tPacket.VLANID);
|
||||
VLANInfo VI = OutgoingVLAN(tPacket.VLANID);
|
||||
VLANTagType What = VI.Tag;
|
||||
Network theNet = NB.GetNetwork();
|
||||
NetworkDevice HD = theNet.GetDeviceFromID(AttachedToHostNic);
|
||||
@ -172,6 +172,7 @@ namespace EduNetworkBuilder
|
||||
if (What == VLANTagType.Forbidden)
|
||||
{
|
||||
//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);
|
||||
tPacket.AddMessage(DebugLevel.switching, errString);
|
||||
tPacket.Tracking.Status = errString;
|
||||
@ -181,7 +182,7 @@ namespace EduNetworkBuilder
|
||||
if(What == VLANTagType.Untagged)
|
||||
{
|
||||
//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)
|
||||
{
|
||||
@ -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 untagged, return the one that is untagged
|
||||
VLANInfo newVLANinfo = null;
|
||||
if (ID != 1) //It is tagged
|
||||
if (ID != NB.UntaggedVLAN) //It is tagged
|
||||
{
|
||||
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
|
||||
newVLANinfo = new VLANInfo(ID, VLANTagType.Forbidden);
|
||||
Console.WriteLine(" Creating forbidden vlan - " + ID);
|
||||
VLANs.Add(newVLANinfo);
|
||||
return newVLANinfo;
|
||||
}
|
||||
else //the packet is the default vlan (1) so appears untagged.
|
||||
else //the packet is untagged.
|
||||
{
|
||||
foreach (VLANInfo vi in VLANs)
|
||||
{
|
||||
@ -225,6 +232,54 @@ namespace EduNetworkBuilder
|
||||
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)
|
||||
{
|
||||
bool isgood = false;
|
||||
@ -255,9 +310,9 @@ namespace EduNetworkBuilder
|
||||
}
|
||||
if (What == VLANTagType.Untagged)
|
||||
{
|
||||
//If it is 1 (default vlan), this is OK. Otherwise drop.
|
||||
//Untagged means we expect it to be vlan of 1 on the cable side
|
||||
if(tPacket.VLANID != 1)
|
||||
//If it is (default vlan), this is OK. Otherwise drop.
|
||||
//Untagged means we expect it to be vlan of (untagged) on the cable side
|
||||
if(tPacket.VLANID != NB.UntaggedVLAN)
|
||||
{
|
||||
//Oops. We need to reject the packet
|
||||
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
|
||||
{
|
||||
tPacket.VLANID = VI.ID; //The packet is ow tagged
|
||||
tPacket.VLANID = VI.ID; //The packet is now tagged
|
||||
}
|
||||
}
|
||||
if (What == VLANTagType.Tagged)
|
||||
{
|
||||
//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
|
||||
string errString = string.Format(NB.Translate("NI_VLANInMisMatch"), hostname, tPacket.destIP.GetIPString);
|
||||
@ -283,6 +338,8 @@ namespace EduNetworkBuilder
|
||||
tPacket.MyStatus = PacketStatus.finished_ok;
|
||||
return;
|
||||
}
|
||||
else
|
||||
tPacket.VLANID = VI.ID; //Make sure it is properly tagged.
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -36,7 +36,7 @@ namespace EduNetworkBuilder
|
||||
}
|
||||
}
|
||||
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 TickTTL = 50;
|
||||
public int health = 100;
|
||||
@ -109,6 +109,7 @@ namespace EduNetworkBuilder
|
||||
StartTime = copyfrom.StartTime;
|
||||
OriginalDestIP = copyfrom.OriginalDestIP;
|
||||
packetID = copyfrom.packetID;
|
||||
VLANID = copyfrom.VLANID;
|
||||
Tracking.AddMessage(DebugLevel.debug, WhereAmI, NB.Translate("P_PacketDuplicated"));
|
||||
}
|
||||
|
||||
@ -345,6 +346,7 @@ namespace EduNetworkBuilder
|
||||
public void StartOnLink(NetworkLink theLink, NetworkDevice start_device)
|
||||
{
|
||||
if (theLink == null) return;
|
||||
Console.WriteLine("Starting on link: " + theLink.GetUniqueIdentifier + " vlanID = " + VLANID.ToString());
|
||||
InboundNic = null;
|
||||
InboundInterface = null;
|
||||
WhereAmI = theLink;
|
||||
|
Loading…
Reference in New Issue
Block a user