Esempio n. 1
0
        public void handlePackage(Package package)
        {
            NHLFE_Entry nhlfeEntry = null;
            FIB_Entry   fibEntry   = null;

            if (package.labelStack.labels.Any())                         //check if stack has any elements
            {
                if (package.labelStack.labels.Peek().labelNumber == 0)   // check if i'm last hop
                {
                    //getting rid of all '0' labels (pushed in penultimate router)
                    while (package.labelStack.labels.Peek().labelNumber == 0)
                    {
                        package.labelStack.labels.Pop();
                        if (!package.labelStack.labels.Any())
                        {
                            break;
                        }
                    }

                    //if there are no labels left all tunnels are over. check fib table and return
                    if (!package.labelStack.labels.Any())
                    {
                        fibEntry     = findFibEntry(package.DestinationAddress);
                        package.Port = (ushort)fibEntry.portOut;
                        return;
                    }
                }

                ILM_Entry ilmEntry = findIlmEntry(package.Port, package.labelStack.labels.Peek().labelNumber);
                nhlfeEntry = findNhlfeEntry(ilmEntry.NHLFE_ID);
            }
            else
            {
                FEC_Entry fecEntry = findFecEntry(package.DestinationAddress);

                if (fecEntry != null)                         //adding label
                {
                    FTN_Entry ftnEntry = findFtnEntry(fecEntry.FEC);
                    nhlfeEntry = findNhlfeEntry(ftnEntry.NHLFE_ID);
                }
                else                                         //forwarding by IPAddress
                {
                    fibEntry = findFibEntry(package.DestinationAddress);
                }
            }

            modifyPackage(package, nhlfeEntry, fibEntry);
        }
Esempio n. 2
0
        public FEC_Entry findFecEntry(IPAddress destinationAddress)
        {
            FEC_Entry fecEntry = null;

            foreach (FEC_Entry item in FEC_Table)
            {
                if (destinationAddress.ToString().Equals(item.destinationIP))
                {
                    fecEntry = item;
                    break;
                }
            }

            if (fecEntry == null)
            {
                Console.WriteLine("No fec found for IP " + destinationAddress);
            }

            return(fecEntry);
        }