Multicast Routing Modelling In OMNeT++
PimInterfaceTable.cc
Go to the documentation of this file.
00001 
00010 #include "PimInterfaceTable.h"
00011 
00012 Define_Module(PimInterfaceTable);
00013 
00015 std::ostream& operator<<(std::ostream& os, const PimInterface& e)
00016 {
00017         int i;
00018         std::vector<IPAddress> intMulticastAddresses = e.getIntMulticastAddresses();
00019 
00020     os << "ID = " << e.getInterfaceID() << "; mode = ";
00021     if (e.getMode() == Dense)
00022         os << "Dense";
00023     else if (e.getMode() == Sparse)
00024         os << "Sparse";
00025     os << "; Multicast addresses: ";
00026 
00027     int vel = intMulticastAddresses.size();
00028     if (vel > 0)
00029     {
00030                 for(i = 0; i < (vel - 1); i++)
00031                         os << intMulticastAddresses[i] << ", ";
00032                 os << intMulticastAddresses[i];
00033     }
00034     else
00035         os << "Null";
00036     return os;
00037 };
00038 
00039 
00041 std::ostream& operator<<(std::ostream& os, const PimInterfaceTable& e)
00042 {
00043     for (int i = 0; i < e.size(); i++)
00044         os << "";
00045                 //os << "ID = " << e.getInterface(i)->getInterfaceID() << "; mode = " << e.getInterface(i)->getMode();
00046     return os;
00047 };
00048 
00050 std::string PimInterface::info() const
00051 {
00052         std::stringstream out;
00053         out << "ID = " << intID << "; mode = " << mode;
00054         return out.str();
00055 }
00056 
00064 void PimInterface::removeIntMulticastAddress(IPAddress addr)
00065 {
00066         for(unsigned int i = 0; i < intMulticastAddresses.size(); i++)
00067         {
00068                 if (intMulticastAddresses[i] == addr)
00069                 {
00070                         intMulticastAddresses.erase(intMulticastAddresses.begin() + i);
00071                         return;
00072                 }
00073         }
00074 }
00075 
00086 std::vector<IPAddress> PimInterface::deleteLocalIPs(std::vector<IPAddress> multicastAddr)
00087 {
00088         EV << "PimInterface::deleteLocalIPs" << endl;
00089 
00090         for(int j = 0; j < (multicastAddr.size()); j++)
00091                 EV << multicastAddr[j] << ", ";
00092         EV << endl;
00093 
00094         std::vector<IPAddress> newMulticastAddresses;
00095         for(unsigned int i = 0; i < multicastAddr.size(); i++)
00096         {
00097                 EV << multicastAddr[i] << endl;
00098                 if (!multicastAddr[i].isLinkLocalMulticast())
00099                 {
00100                         EV << "isLinkLocalMulticast" << endl;
00101                         newMulticastAddresses.push_back(multicastAddr[i]);
00102                 }
00103         }
00104         EV << "Velikost vysledku: " << newMulticastAddresses.size() << endl;
00105         return newMulticastAddresses;
00106 }
00107 
00116 bool PimInterface::isLocalIntMulticastAddress (IPAddress addr)
00117 {
00118         for(unsigned int i = 0; i < intMulticastAddresses.size(); i++)
00119         {
00120                 if (intMulticastAddresses[i] == addr)
00121                         return true;
00122         }
00123         return false;
00124 }
00125 
00126 
00127 
00133 void PimInterfaceTable::handleMessage(cMessage *msg)
00134 {
00135     opp_error("This module doesn't process messages");
00136 }
00137 
00138 void PimInterfaceTable::initialize(int stage)
00139 {
00140                 WATCH_VECTOR(pimIft);
00141 }
00142 
00149 void PimInterfaceTable::printPimInterfaces()
00150 {
00151         for(std::vector<PimInterface>::iterator i = pimIft.begin(); i < pimIft.end(); i++)
00152         {
00153                 EV << (*i).info() << endl;
00154         }
00155 
00156 }
00157 
00168 PimInterface *PimInterfaceTable::getInterfaceByIntID(int intID)
00169 {
00170         for(int i = 0; i < getNumInterface(); i++)
00171         {
00172                 if(intID == getInterface(i)->getInterfaceID())
00173                 {
00174                         return getInterface(i);
00175                         break;
00176                 }
00177         }
00178         return NULL;
00179 }