/** * checks if this Addr is already configured in that IA belonging to that client * (used in CONFIRM message) * * @param iface * @param addr * * @return true, if address is supported */ bool TSrvCfgMgr::isIAAddrSupported(int iface, SPtr<TIPv6Addr> addr) { SPtr<TSrvCfgIface> ptrIface = this->getIfaceByID(iface); if (!ptrIface) return false; ptrIface->firstAddrClass(); SPtr<TSrvCfgAddrClass> addrClass; while (addrClass = ptrIface->getAddrClass()) { if (addrClass->addrInPool(addr)) return true; } return false; }
void TSrvAddrMgr::getAddrsCount( SPtr<TContainer<SPtr<TSrvCfgAddrClass> > > classes, long *clntCnt, long *addrCnt, SPtr<TDUID> duid, int iface) { memset(clntCnt,0,sizeof(long)*classes->count()); memset(addrCnt,0,sizeof(long)*classes->count()); int classNr=0; SPtr<TAddrClient> ptrClient; firstClient(); while(ptrClient=getClient()) { bool thisClient=(*(ptrClient->getDUID())==*duid); ptrClient->firstIA(); SPtr<TAddrIA> ptrIA; while(ptrIA=ptrClient->getIA()) { SPtr<TAddrAddr> ptrAddr; ptrIA->firstAddr(); while(ptrAddr=ptrIA->getAddr()) { if(ptrIA->getIface()==iface) { SPtr<TSrvCfgAddrClass> ptrClass; classes->first(); classNr=0; while(ptrClass=classes->get()) { if(ptrClass->addrInPool(ptrAddr->get())) { if(thisClient) clntCnt[classNr]++; addrCnt[classNr]++; } classNr++; } } } } } }
/** * return class, which address belongs to * * @param iface * @param addr * * @return pointer to the class (or 0, if no suitable class found) */ SPtr<TSrvCfgAddrClass> TSrvCfgMgr::getClassByAddr(int iface, SPtr<TIPv6Addr> addr) { this->firstIface(); SPtr<TSrvCfgIface> ptrIface; ptrIface = this->getIfaceByID(iface); if (!ptrIface) { Log(Error) << "Trying to find class on unknown (" << iface <<") interface." << LogEnd; return 0; // NULL } SPtr<TSrvCfgAddrClass> ptrClass; ptrIface->firstAddrClass(); while (ptrClass = ptrIface->getAddrClass()) { if (ptrClass->addrInPool(addr)) return ptrClass; } return 0; // NULL }