![]() |
Multicast Routing Modelling In OMNeT++
|
00001 00010 #ifndef PIMINTERFACES_H_ 00011 #define PIMINTERFACES_H_ 00012 00013 #include <omnetpp.h> 00014 #include "AnsaInterfaceTable.h" 00015 #include "IPAddress.h" 00016 00020 enum PIMmode 00021 { 00022 Dense = 1, 00023 Sparse = 2 00024 }; 00025 00031 class INET_API PimInterface: public cPolymorphic 00032 { 00033 protected: 00034 int intID; 00035 InterfaceEntry * intPtr; 00036 PIMmode mode; 00037 std::vector<IPAddress> intMulticastAddresses; 00039 public: 00040 PimInterface(){intPtr = NULL;}; 00041 virtual ~PimInterface() {}; 00042 virtual std::string info() const; 00043 00044 // set methods 00045 void setInterfaceID(int iftID) {this->intID = iftID;} 00046 void setInterfacePtr(InterfaceEntry *intPtr) {this->intPtr = intPtr;} 00047 void setMode(PIMmode mode) {this->mode = mode;} 00049 //get methods 00050 int getInterfaceID() const {return intID;} 00051 InterfaceEntry *getInterfacePtr() const {return intPtr;} 00052 PIMmode getMode() const {return mode;} 00053 std::vector<IPAddress> getIntMulticastAddresses() const {return intMulticastAddresses;} 00055 // methods for work with vector "intMulticastAddresses" 00056 void setIntMulticastAddresses(std::vector<IPAddress> intMulticastAddresses) {this->intMulticastAddresses = intMulticastAddresses;} 00057 void addIntMulticastAddress(IPAddress addr) {this->intMulticastAddresses.push_back(addr);} 00058 void removeIntMulticastAddress(IPAddress addr); 00059 bool isLocalIntMulticastAddress (IPAddress addr); 00060 std::vector<IPAddress> deleteLocalIPs(std::vector<IPAddress> multicastAddr); 00061 }; 00062 00063 00068 class INET_API PimInterfaceTable: public cSimpleModule 00069 { 00070 protected: 00071 std::vector<PimInterface> pimIft; 00073 public: 00074 PimInterfaceTable(){}; 00075 virtual ~PimInterfaceTable(){}; 00076 00077 virtual PimInterface *getInterface(int k){return &this->pimIft[k];} 00078 virtual void addInterface(const PimInterface entry){this->pimIft.push_back(entry);} 00079 //virtual bool deleteInterface(const PimInterface *entry){}; 00080 virtual int getNumInterface() {return this->pimIft.size();} 00081 virtual void printPimInterfaces(); 00082 virtual PimInterface *getInterfaceByIntID(int intID); 00084 protected: 00085 virtual void initialize(int stage); 00086 virtual void handleMessage(cMessage *); 00087 }; 00088 00092 class INET_API PimInterfaceTableAccess : public ModuleAccess<PimInterfaceTable> 00093 { 00094 private: 00095 PimInterfaceTable *p; 00096 00097 public: 00098 PimInterfaceTableAccess() : ModuleAccess<PimInterfaceTable>("PimInterfaceTable") {p=NULL;} 00099 00100 virtual PimInterfaceTable *getMyIfExists() 00101 { 00102 if (!p) 00103 { 00104 cModule *m = findModuleWherever("PimInterfaceTable", simulation.getContextModule()); 00105 p = dynamic_cast<PimInterfaceTable*>(m); 00106 } 00107 return p; 00108 } 00109 }; 00110 00117 class addRemoveAddr : public cPolymorphic 00118 { 00119 protected: 00120 std::vector<IPAddress> addr; 00121 PimInterface *pimInt; 00123 public: 00124 addRemoveAddr(){}; 00125 virtual ~addRemoveAddr() {}; 00126 virtual std::string info() const 00127 { 00128 std::stringstream out; 00129 for (unsigned int i = 0; i < addr.size(); i++) 00130 out << addr[i] << endl; 00131 return out.str(); 00132 } 00133 00134 void setAddr(std::vector<IPAddress> addr) {this->addr = addr;} 00135 void setInt(PimInterface *pimInt) {this->pimInt = pimInt;} 00136 std::vector<IPAddress> getAddr () {return this->addr;} 00137 int getAddrSize () {return this->addr.size();} 00138 PimInterface *getInt () {return this->pimInt;} 00139 }; 00140 00141 #endif /* PIMINTERFACES_H_ */