/** * Moves interface identified by ifindex between SrvCfgIfaceLst and InactiveLst. * * @param ifindex Index of the moving interface * @param inactive true for makeing inactive, false for makeing active */ void TSrvCfgMgr::makeInactiveIface(int ifindex, bool inactive) { SPtr<TSrvCfgIface> x; if (inactive) { SrvCfgIfaceLst.first(); while (x= SrvCfgIfaceLst.get()) { if (x->getID() == ifindex) { Log(Info) << "Switching " << x->getFullName() << " to inactive-mode." << LogEnd; SrvCfgIfaceLst.del(); InactiveLst.append(x); return; } } Log(Error) << "Unable to switch interface ifindex=" << ifindex << " to inactive-mode: interface not found." << LogEnd; // something is wrong, VERY wrong } else { InactiveLst.first(); while (x= InactiveLst.get()) { if (x->getID() == ifindex) { Log(Info) << "Switching " << x->getFullName() << " to normal mode." << LogEnd; InactiveLst.del(); InactiveLst.first(); addIface(x); return; } } Log(Error) << "Unable to switch interface ifindex=" << ifindex << " from inactive-mode to normal operation: interface not found." << LogEnd; } }
ULONG D3DGLSwapChain::AddRef() { ULONG ret = ++mRefCount; TRACE("%p New refcount: %lu\n", this, ret); if(ret == 1) addIface(); return ret; }
/* * Now parsed information should be placed in config manager * in accordance with information provided by interface manager */ bool TSrvCfgMgr::matchParsedSystemInterfaces(SrvParser *parser) { int cfgIfaceCnt; cfgIfaceCnt = parser->SrvCfgIfaceLst.count(); Log(Debug) << cfgIfaceCnt << " interface(s) specified in " << SRVCONF_FILE << LogEnd; SPtr<TSrvCfgIface> cfgIface; SPtr<TIfaceIface> ifaceIface; parser->SrvCfgIfaceLst.first(); while(cfgIface=parser->SrvCfgIfaceLst.get()) { // for each interface from config file // map deny and allow list cfgIface->mapAllowDenyList(parser->SrvCfgClientClassLst); // relay interface if (cfgIface->isRelay()) { cfgIface->setID(this->NextRelayID++); if (!this->setupRelay(cfgIface)) { return false; } this->addIface(cfgIface); continue; // skip physical interface checking part } // physical interface if (cfgIface->getID()==-1) { // ID==-1 means that user referenced to interface by name ifaceIface = SrvIfaceMgr().getIfaceByName(cfgIface->getName()); } else { ifaceIface = SrvIfaceMgr().getIfaceByID(cfgIface->getID()); } if (!ifaceIface) { Log(Crit) << "Interface " << cfgIface->getFullName() << " is not present in the system or does not support IPv6." << LogEnd; return false; } // Complete name and ID (one of them usually misses depending on // identifier used in config file. /// @todo: Client's class uses setIface{Name,ID}(). We should unite the // method names. cfgIface->setName(ifaceIface->getName()); cfgIface->setID(ifaceIface->getID()); // Check for link scope address presence if (!ifaceIface->countLLAddress()) { if (this->inactiveMode()) { Log(Notice) << "Interface " << ifaceIface->getFullName() << " is not operational yet (does not have link scope address), skipping it for now." << LogEnd; this->addIface(cfgIface); this->makeInactiveIface(cfgIface->getID(), true); // move it to InactiveLst continue; } Log(Crit) << "Interface " << ifaceIface->getName() << "/" << ifaceIface->getID() << " is down or doesn't have any link scope address." << LogEnd; return false; } // Check if the interface is during bring-up phase (i.e. DAD procedure for link-local addr is not complete yet) char tmp[64]; ifaceIface->firstLLAddress(); inet_ntop6(ifaceIface->getLLAddress(), tmp); if (is_addr_tentative(ifaceIface->getName(), ifaceIface->getID(), tmp) == LOWLEVEL_TENTATIVE_YES) { Log(Notice) << "Interface " << ifaceIface->getFullName() << " has link-scope address " << tmp << ", but it is currently tentative." << LogEnd; if (this->inactiveMode()) { Log(Notice) << "Interface " << ifaceIface->getFullName() << " is not operational yet (link-scope address is not ready), skipping it for now." << LogEnd; addIface(cfgIface); makeInactiveIface(cfgIface->getID(), true); // move it to InactiveLst continue; } Log(Crit) << "Interface " << ifaceIface->getFullName() << " has tentative link-scope address (and inactive-mode is disabled)." << LogEnd; return false; } this->addIface(cfgIface); Log(Info) << "Interface " << cfgIface->getFullName() << " configuration has been loaded." << LogEnd; } return true; }