public void Send(MPLSPacket mplsp) { byte[] byteData = mplsp.GetBytes(); CSocket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), CSocket); ManagementAgent.ReturnLog($"Port {PortNumber} Trying to send MPLS Packet: " + mplsp.MPLSInfo()); }
public void Start() { ConnectToCableClaud(); while (true) { try { var message = Receive(CSocket); switch (message) { case "OK": ManagementAgent.ReturnLog("Sent message."); break; case "NOTOK": ManagementAgent.ReturnLog("Unable to send message."); break; default: byte[] msg = Encoding.Default.GetBytes(message); MPLSPacket mpls = new MPLSPacket(msg); ManagementAgent.ReturnLog($"Port: {PortNumber}; Received MPLS Packet: " + mpls.MPLSInfo()); SwitchingFabric.SwapLabels(PortNumber, mpls); break; } } catch (Exception e) { } } }
public static void SwapLabels(int portNumber, MPLSPacket mplsp) { if (mplsp.TTL > 0) { mplsp.TTL -= 1; int LabelIndex = 1; while (true) { byte LastLabel = mplsp.Labels[mplsp.Labels.Count() - 1]; int mplsListIndex = MPLSFibTable.ReturnIndex(portNumber, LastLabel, LabelIndex); if (mplsListIndex == -1) { ManagementAgent.ReturnLog("Unable to forward packet."); break; } else { List <int> outputLabels = MPLSFibTable.MplsFibTable[mplsListIndex].OutputLabel; if (outputLabels[0] == 0) { LabelIndex++; mplsp.Labels.RemoveAt(mplsp.Labels.Count() - 1); continue; } else { mplsp.Labels.RemoveAt(mplsp.Labels.Count() - 1); foreach (int labels in outputLabels) { mplsp.Labels.Add(Convert.ToByte(labels)); } IOPort exitPort = LabelSwitchingRouter.ReturnPort(MPLSFibTable.MplsFibTable[mplsListIndex].OutputPort); if (exitPort != null) { exitPort.Send(mplsp); } else { ManagementAgent.ReturnLog("Unable to forward packet."); } break; } } } } else { ManagementAgent.ReturnLog("TTL value equals 0. Packet disappeared."); } }
static void Main(string[] args) { Console.WriteLine(); // Invoke this sample with an arbitrary set of command line arguments. string[] arguments = Environment.GetCommandLineArgs(); try { LSRConfig.LoadConfig(arguments[1]); } catch (Exception e) { Console.WriteLine(e.Message); Console.ReadLine(); Environment.ExitCode = 0; } ManagementAgent.ReturnLog($"Router {LSRConfig.LSRNAME} is working."); LabelSwitchingRouter LSR = new LabelSwitchingRouter(); LSR.LoadData(); LSR.StartManagementAgent(); Console.ReadLine(); }