bool TSrvIfaceMgr::setupRelay(std::string name, int ifindex, int underIfindex, SPtr<TSrvOptInterfaceID> interfaceID) { SPtr<TSrvIfaceIface> under = (Ptr*)this->getIfaceByID(underIfindex); if (!under) { Log(Crit) << "Unable to setup " << name << "/" << ifindex << " relay: underlaying interface with id=" << underIfindex << " is not present in the system or does not support IPv6." << LogEnd; return false; } if (!under->flagUp()) { Log(Crit) << "Unable to setup " << name << "/" << ifindex << " relay: underlaying interface " << under->getName() << "/" << underIfindex << " is down." << LogEnd; return false; } SPtr<TSrvIfaceIface> relay = new TSrvIfaceIface((const char*)name.c_str(), ifindex, IF_UP | IF_RUNNING | IF_MULTICAST, // flags 0, // MAC 0, // MAC length 0,0, // link address 0,0, // global addresses 0); // hardware type relay->setUnderlaying(under); this->IfaceLst.append((Ptr*)relay); if (!under->appendRelay(relay, interfaceID)) { Log(Crit) << "Unable to setup " << name << "/" << ifindex << " relay: underlaying interface " << under->getName() << "/" << underIfindex << " already has " << HOP_COUNT_LIMIT << " relays defined." << LogEnd; return false; } Log(Notice) << "Relay " << name << "/" << ifindex << " (underlaying " << under->getName() << "/" << under->getID() << ") has been configured." << LogEnd; return true; }