Multicast Routing Modelling In OMNeT++
PimInterfaceTable.h
Go to the documentation of this file.
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_ */