本文整理汇总了C++中SPtr::addAddr方法的典型用法代码示例。如果您正苦于以下问题:C++ SPtr::addAddr方法的具体用法?C++ SPtr::addAddr怎么用?C++ SPtr::addAddr使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SPtr
的用法示例。
在下文中一共展示了SPtr::addAddr方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addClntAddr
/**
* @brief adds an address to the client.
*
* Adds a single address to the client. If the client is not present in
* address manager, adds it, too. Also, if client's IA is missing, adds it as well.
*
* @param clntDuid client DUID
* @param clntAddr client's address (link-local, used if unicast is to be used)
* @param iface interface, on which client is reachable
* @param IAID ID of an IA
* @param T1 - T1 timer
* @param T2 - T2 timer
* @param addr - address to be added
* @param pref preferred lifetime
* @param valid valid lifetime
* @param quiet quiet mode (e.g. used during SOLICIT handling, don't print anything about
* adding client/IA/address, as it will be deleted immediately anyway)
*
* @return true, if addition was successful
*/
bool TSrvAddrMgr::addClntAddr(SPtr<TDUID> clntDuid , SPtr<TIPv6Addr> clntAddr,
int iface, unsigned long IAID, unsigned long T1, unsigned long T2,
SPtr<TIPv6Addr> addr, unsigned long pref, unsigned long valid,
bool quiet)
{
// find this client
SPtr <TAddrClient> ptrClient;
this->firstClient();
while ( ptrClient = this->getClient() ) {
if ( (*ptrClient->getDUID()) == (*clntDuid) )
break;
}
// have we found this client?
if (!ptrClient) {
if (!quiet) Log(Debug) << "Adding client (DUID=" << clntDuid->getPlain()
<< ") to addrDB." << LogEnd;
ptrClient = new TAddrClient(clntDuid);
this->addClient(ptrClient);
}
// find this IA
SPtr <TAddrIA> ptrIA;
ptrClient->firstIA();
while ( ptrIA = ptrClient->getIA() ) {
if ( ptrIA->getIAID() == IAID)
break;
}
// have we found this IA?
if (!ptrIA) {
ptrIA = new TAddrIA(iface, TAddrIA::TYPE_IA, clntAddr, clntDuid, T1, T2, IAID);
ptrClient->addIA(ptrIA);
if (!quiet)
Log(Debug) << "Adding IA (IAID=" << IAID << ") to addrDB." << LogEnd;
}
SPtr <TAddrAddr> ptrAddr;
ptrIA->firstAddr();
while ( ptrAddr = ptrIA->getAddr() ) {
if (*ptrAddr->get()==*addr)
break;
}
// address already exists
if (ptrAddr) {
Log(Warning) << "Address " << *ptrAddr
<< " is already assigned to this IA." << LogEnd;
return false;
}
// add address
ptrAddr = new TAddrAddr(addr, pref, valid);
ptrIA->addAddr(ptrAddr);
if (!quiet)
Log(Debug) << "Adding " << ptrAddr->get()->getPlain()
<< " to IA (IAID=" << IAID << ") to addrDB." << LogEnd;
return true;
}
示例2: addTAAddr
/**
* @brief adds TA address to AddrMgr
*
* adds temporary address. Add missing client or TA, if necessary.
*
* @param clntDuid
* @param clntAddr
* @param iface
* @param iaid
* @param addr
* @param pref
* @param valid
*
* @return
*/
bool TSrvAddrMgr::addTAAddr(SPtr<TDUID> clntDuid , SPtr<TIPv6Addr> clntAddr,
int iface, unsigned long iaid, SPtr<TIPv6Addr> addr,
unsigned long pref, unsigned long valid) {
// find this client
SPtr <TAddrClient> ptrClient;
this->firstClient();
while ( ptrClient = this->getClient() ) {
if ( (*ptrClient->getDUID()) == (*clntDuid) )
break;
}
// have we found this client?
if (!ptrClient) {
Log(Debug) << "Adding client (DUID=" << clntDuid->getPlain() << ") to the addrDB." << LogEnd;
ptrClient = new TAddrClient(clntDuid);
this->addClient(ptrClient);
}
// find this TA
SPtr <TAddrIA> ta;
ptrClient->firstTA();
while ( ta = ptrClient->getTA() ) {
if ( ta->getIAID() == iaid)
break;
}
// have we found this TA?
if (!ta) {
ta = new TAddrIA(iface, TAddrIA::TYPE_TA, clntAddr, clntDuid,
DHCPV6_INFINITY, DHCPV6_INFINITY, iaid);
ptrClient->addTA(ta);
Log(Debug) << "Adding TA (IAID=" << iaid << ") to the addrDB." << LogEnd;
}
SPtr <TAddrAddr> ptrAddr;
ta->firstAddr();
while ( ptrAddr = ta->getAddr() ) {
if (*ptrAddr->get()==*addr)
break;
}
// address already exists
if (ptrAddr) {
Log(Warning) << "Address " << *ptrAddr << " is already assigned to TA (iaid="
<< iaid << ")." << LogEnd;
return false;
}
// add address
ptrAddr = new TAddrAddr(addr, pref, valid);
ta->addAddr(ptrAddr);
Log(Debug) << "Adding " << ptrAddr->get()->getPlain() << " to TA (IAID=" << iaid
<< ") to addrDB." << LogEnd;
return true;
}
示例3: matchParsedSystemInterfaces
//.........这里部分代码省略.........
Log(Warning) << "Config file does not contain any interface definitions. Trying to autodetect."
<< LogEnd;
List(TIPv6Addr) dnsList;
dnsList.clear();
parser->ParserOptStack.getLast()->setDNSServerLst(&dnsList);
// Try to add a hostname
char hostname[255];
if (get_hostname(hostname, 255) == LOWLEVEL_NO_ERROR) {
parser->ParserOptStack.getLast()->setFQDN(string(hostname));
} else {
parser->ParserOptStack.getLast()->setFQDN(string(""));
}
int cnt = 0;
ClntIfaceMgr().firstIface();
while ( ifaceIface = ClntIfaceMgr().getIface() ) {
// for each interface present in the system...
if (!inactiveMode()) {
if (!ifaceIface->flagUp()) {
Log(Notice) << "Interface " << ifaceIface->getFullName() << " is down, ignoring." << LogEnd;
continue;
}
if (!ifaceIface->flagRunning()) {
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " has flag RUNNING not set, ignoring." << LogEnd;
continue;
}
if (!ifaceIface->flagMulticast()) {
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " is not multicast capable, ignoring." << LogEnd;
continue;
}
}
if ( !(ifaceIface->getMacLen() > 5) ) {
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " has MAC address length " << ifaceIface->getMacLen()
<< " (6 or more required), ignoring." << LogEnd;
continue;
}
// ignore disabled Teredo pseudo-interface on Win (and other similar useless junk)
const static unsigned char zeros[] = {0,0,0,0,0,0,0,0};
const static unsigned char ones[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
if ( (ifaceIface->getMacLen()<=8) &&
(!memcmp(zeros, ifaceIface->getMac(), min(8,ifaceIface->getMacLen())) ||
!memcmp(ones, ifaceIface->getMac(), min(8,ifaceIface->getMacLen()))) ) {
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " has invalid MAC address "
<< hexToText((uint8_t*)ifaceIface->getMac(), ifaceIface->getMacLen(), true)
<< ", ignoring." << LogEnd;
continue;
}
if (!ifaceIface->countLLAddress()) {
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " has no link-local address, ignoring. "
<< "(Disconnected? Not associated? No-link?)" << LogEnd;
continue;
}
// One address...
SPtr<TClntCfgAddr> addr(new TClntCfgAddr());
addr->setOptions(parser->ParserOptStack.getLast());
// ... is stored in one IA...
SPtr<TClntCfgIA> ia = new TClntCfgIA();
ia->setOptions(parser->ParserOptStack.getLast());
ia->addAddr(addr);
// ... on this newly created interface...
cfgIface = SPtr<TClntCfgIface>(new TClntCfgIface(ifaceIface->getID()));
cfgIface->setIfaceName(ifaceIface->getName());
cfgIface->setIfaceID(ifaceIface->getID());
cfgIface->addIA(ia);
cfgIface->setOptions(parser->ParserOptStack.getLast());
// ... which is added to ClntCfgMgr
addIface(cfgIface);
Log(Info) << "Interface " << cfgIface->getFullName()
<< " has been added." << LogEnd;
if (inactiveMode() && !ifaceIface->flagRunning() ) {
makeInactiveIface(cfgIface->getID(), true, true, true); // move it to InactiveLst
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " is not operational yet"
<< " (not running), made inactive." << LogEnd;
}
cnt ++;
}
if (!cnt) {
Log(Crit) << "Unable to detect any suitable interfaces. If there are any interfaces that you"
<< " want to have configured, please specify them in client.conf file." << LogEnd;
return false;
}
}
return true;
}
示例4: doDuties
bool TClntOptIA_NA::doDuties() {
// find this IA in addrMgr...
SPtr<TAddrIA> ptrIA=ClntAddrMgr().getIA(this->getIAID());
if (!ptrIA) {
// unknown IAID, ignore it
Log(Warning) << "Received message contains unknown IA (IAID="
<< this->getIAID() << "). We didn't order it. Weird... ignoring it." << LogEnd;
return true;
}
// IAID found, set up new received options.
SPtr<TAddrAddr> ptrAddrAddr;
SPtr<TOptIAAddress> ptrOptAddr;
SPtr<TIfaceIface> ptrIface;
ptrIface = ClntIfaceMgr().getIfaceByID(Iface_);
if (!ptrIface)
{
Log(Error) << "Interface with ifindex=" << Iface_ << " not found." << LogEnd;
return true;
}
// for each address in IA option...
this->firstAddr();
while (ptrOptAddr = this->getAddr() ) {
ptrAddrAddr = ptrIA->getAddr( ptrOptAddr->getAddr() );
// no such address in DB ??
if (!ptrAddrAddr) {
if (ptrOptAddr->getValid()) {
int prefixLen = ptrIface->getPrefixLength();
if (ptrOptAddr->getOption(OPTION_ADDRPARAMS)) {
Log(Debug) << "Experimental addr-params found." << LogEnd;
SPtr<TOptAddrParams> optAddrParams =
SPtr_cast<TOptAddrParams>(ptrOptAddr->getOption(OPTION_ADDRPARAMS));
prefixLen = optAddrParams->getPrefix();
}
// add this address in addrDB...
ptrIA->addAddr(ptrOptAddr->getAddr(), ptrOptAddr->getPref(),
ptrOptAddr->getValid(), prefixLen);
ptrIA->setDUID(this->DUID);
// ... and in IfaceMgr -
ptrIface->addAddr(ptrOptAddr->getAddr(), ptrOptAddr->getPref(),
ptrOptAddr->getValid(), prefixLen);
}
else {
Log(Warning) << "Server send new addr with valid lifetime 0." << LogEnd;
}
} else {
// we have this addr in DB
if ( ptrOptAddr->getValid() == 0 ) {
// valid=0, release this address
// delete address from addrDB
ptrIA->delAddr(ptrOptAddr->getAddr());
// delete address from IfaceMgr
ptrIface->delAddr(ptrOptAddr->getAddr(), ptrIface->getPrefixLength());
break; // analyze next option OPTION_IA_NA
}
// set up new options in IfaceMgr
SPtr<TIfaceIface> ptrIface = ClntIfaceMgr().getIfaceByID(Iface_);
if (ptrIface)
ptrIface->updateAddr(ptrOptAddr->getAddr(),
ptrOptAddr->getPref(),
ptrOptAddr->getValid());
// set up new options in addrDB
ptrAddrAddr->setPref(ptrOptAddr->getPref());
ptrAddrAddr->setValid(ptrOptAddr->getValid());
ptrAddrAddr->setTimestamp();
}
}
SPtr<TClntCfgIA> ptrCfgIA;
ptrCfgIA=ClntCfgMgr().getIA(ptrIA->getIAID());
if (getT1() && getT2()) {
ptrIA->setT1( this->getT1() );
ptrIA->setT2( this->getT2() );
Log(Debug) << "RENEW(IA_NA) will be sent (T1) after " << ptrIA->getT1()
<< ", REBIND (T2) after " << ptrIA->getT2() << " seconds." << LogEnd;
} else {
this->firstAddr();
ptrOptAddr = this->getAddr();
if (ptrOptAddr) {
ptrIA->setT1( ptrOptAddr->getPref()/2);
ptrIA->setT2( (int)((ptrOptAddr->getPref())*0.7) );
Log(Notice) << "Server set T1 and T2 to 0. Choosing default (50%, "
<< "70% * prefered-lifetime): T1=" << ptrIA->getT1()
<< ", T2=" << ptrIA->getT2() << LogEnd;
}
}
ptrIA->setTimestamp();
ptrIA->setState(STATE_CONFIGURED);
ptrCfgIA->setState(STATE_CONFIGURED);
return true;
}
示例5: matchParsedSystemInterfaces
//.........这里部分代码省略.........
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-local address " << tmp
<< ", but it is currently tentative." << LogEnd;
if (this->inactiveMode()) {
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " is not operational yet (link-local address "
<< "is not ready), skipping it for now." << LogEnd;
addIface(cfgIface);
makeInactiveIface(cfgIface->getID(), true); // move it to InactiveLst
return true;
}
Log(Crit) << "Interface " << ifaceIface->getFullName()
<< " has tentative link-local address (and inactive-mode is disabled)." << LogEnd;
return false;
}
this->addIface(cfgIface);
Log(Info) << "Interface " << cfgIface->getName() << "/" << cfgIface->getID()
<< " configuation has been loaded." << LogEnd;
}
} else {
// user didn't specified any interfaces in config file, so
// we'll try to configure each interface we could find
Log(Warning) << "Config file does not contain any interface definitions. Trying to autodetect."
<< LogEnd;
List(TIPv6Addr) dnsList;
dnsList.clear();
parser->ParserOptStack.getLast()->setDNSServerLst(&dnsList);
int cnt = 0;
ClntIfaceMgr().firstIface();
while ( ifaceIface = ClntIfaceMgr().getIface() ) {
// for each interface present in the system...
if (!ifaceIface->flagUp()) {
Log(Notice) << "Interface " << ifaceIface->getFullName() << " is down, ignoring." << LogEnd;
continue;
}
if (!ifaceIface->flagRunning()) {
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " has flag RUNNING not set, ignoring." << LogEnd;
continue;
}
if (!ifaceIface->flagMulticast()) {
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " is not multicast capable, ignoring." << LogEnd;
continue;
}
if ( !(ifaceIface->getMacLen() > 5) ) {
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " has MAC address length " << ifaceIface->getMacLen()
<< " (6 or more required), ignoring." << LogEnd;
continue;
}
ifaceIface->firstLLAddress();
if (!ifaceIface->getLLAddress()) {
Log(Notice) << "Interface " << ifaceIface->getFullName()
<< " has no link-local address, ignoring. "
<< "(Disconnected? Not associated? No-link?)" << LogEnd;
continue;
}
// One address...
SPtr<TClntCfgAddr> addr(new TClntCfgAddr());
addr->setOptions(parser->ParserOptStack.getLast());
// ... is stored in one IA...
SPtr<TClntCfgIA> ia = new TClntCfgIA();
ia->setOptions(parser->ParserOptStack.getLast());
ia->addAddr(addr);
// ... on this newly created interface...
cfgIface = SPtr<TClntCfgIface>(new TClntCfgIface(ifaceIface->getID()));
cfgIface->setIfaceName(ifaceIface->getName());
cfgIface->setIfaceID(ifaceIface->getID());
cfgIface->addIA(ia);
cfgIface->setOptions(parser->ParserOptStack.getLast());
// ... which is added to ClntCfgMgr
this->addIface(cfgIface);
Log(Info) << "Interface " << cfgIface->getName() << "/" << cfgIface->getID()
<< " has been added." << LogEnd;
cnt ++;
}
if (!cnt) {
Log(Crit) << "Unable to detect any suitable interfaces. If there are any interfaces that you"
<< " want to have configured, please specify them in client.conf file." << LogEnd;
return false;
}
}
return true;
}
示例6: ClntAddrMgr
*/bool TClntOptTA::doDuties()
{
// find this TA in addrMgr...
SPtr<TAddrIA> ta = ClntAddrMgr().getTA(this->getIAID());
if (!ta) {
Log(Debug) << "Creating TA (iaid=" << this->getIAID() << ") in the addrDB." << LogEnd;
ta = new TAddrIA(this->Iface, TAddrIA::TYPE_TA, 0 /*if unicast, then this->Addr*/,
this->DUID, DHCPV6_INFINITY,
DHCPV6_INFINITY, this->getIAID());
ClntAddrMgr().addTA(ta);
}
// IAID found, set up new received options.
SPtr<TAddrAddr> addr;
SPtr<TClntOptIAAddress> optAddr;
SPtr<TIfaceIface> ptrIface;
ptrIface = ClntIfaceMgr().getIfaceByID(this->Iface);
if (!ptrIface)
{
Log(Error) << "Interface " << this->Iface << " not found." << LogEnd;
return true;
}
// for each address in IA option...
this->firstAddr();
while (optAddr = this->getAddr() ) {
addr = ta->getAddr( optAddr->getAddr() );
if (!addr) { // - no such address in DB -
if (!optAddr->getValid()) {
Log(Warning) << "Server send new addr with valid=0." << LogEnd;
continue;
}
// add this address in addrDB...
ta->addAddr(optAddr->getAddr(), optAddr->getPref(), optAddr->getValid());
ta->setDUID(this->DUID);
// ... and in IfaceMgr -
ptrIface->addAddr(optAddr->getAddr(), optAddr->getPref(), optAddr->getValid(), ptrIface->getPrefixLength());
Log(Notice) << "Temp. address " << *optAddr->getAddr() << " has been added to "
<< ptrIface->getName() << "/" << ptrIface->getID()
<< " interface." << LogEnd;
} else { // - we have this addr in DB -
if ( optAddr->getValid() == 0 ) {
// valid=0, release this address and delete address from addrDB
ta->delAddr(optAddr->getAddr());
// delete address from IfaceMgr
ptrIface->delAddr(optAddr->getAddr(), ptrIface->getPrefixLength());
continue; // analyze next option OPTION_IA
}
// set up new options in IfaceMgr
ptrIface->updateAddr(optAddr->getAddr(), optAddr->getPref(), optAddr->getValid());
// set up new options in addrDB
addr->setPref(optAddr->getPref());
addr->setValid(optAddr->getValid());
addr->setTimestamp();
}
}
// mark this TA as configured
SPtr<TClntCfgTA> cfgTA;
SPtr<TClntCfgIface> cfgIface;
if (! (cfgIface = ClntCfgMgr().getIface(this->Iface)) ) {
Log(Error) << "Unable to find TA class in the CfgMgr, on the " << this->Iface << " interface." << LogEnd;
return true;
}
cfgIface->firstTA();
cfgTA = cfgIface->getTA();
cfgTA->setState(STATE_CONFIGURED);
ta->setState(STATE_CONFIGURED);
return true;
}