![]() |
Multicast Routing Modelling In OMNeT++
|
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 }