NLSR - (Hello Protocol + FIB Update)
diff --git a/src/communication/nlsr_im.cpp b/src/communication/nlsr_im.cpp
index de551bb..b22b445 100644
--- a/src/communication/nlsr_im.cpp
+++ b/src/communication/nlsr_im.cpp
@@ -14,306 +14,307 @@
namespace nlsr
{
- using namespace std;
- using namespace ndn;
+ using namespace std;
+ using namespace ndn;
- void
- interestManager::processInterest( Nlsr& pnlsr,
- const ndn::Name &name,
- const ndn::Interest &interest)
+ void
+ interestManager::processInterest( Nlsr& pnlsr,
+ const ndn::Name &name,
+ const ndn::Interest &interest)
+ {
+ cout << "<< I: " << interest << endl;
+ string intName=interest.getName().toUri();
+ cout << "Interest Received for Name: "<< intName <<endl;
+ nlsrTokenizer nt(intName,"/");
+ string chkString("info");
+ if( nt.doesTokenExist(chkString) )
{
- cout << "<< I: " << interest << endl;
- string intName=interest.getName().toUri();
- cout << "Interest Received for Name: "<< intName <<endl;
- nlsrTokenizer nt(intName,"/");
- string chkString("info");
- if( nt.doesTokenExist(chkString) )
- {
- string nbr=nt.getTokenString(nt.getTokenPosition(chkString)+1);
- cout <<"Neighbor: " << nbr <<endl;
- processInterestInfo(pnlsr,nbr,interest);
- }
- chkString="LSA";
- if( nt.doesTokenExist(chkString) )
- {
- processInterestLsa(pnlsr,interest);
- }
- chkString="keys";
- if( nt.doesTokenExist(chkString) )
- {
- processInterestKeys(pnlsr,interest);
- }
- //Data data(ndn::Name(interest->getName()).append("testApp").appendVersion());
- //data.setFreshnessPeriod(1000); // 10 sec
- //data.setContent((const uint8_t*)"HELLO KITTY", sizeof("HELLO KITTY"));
- //pnlsr.getKeyChain().sign(data);
- //cout << ">> D: " << data << endl;
- //pnlsr.getNlsrFace().put(data);
+ string nbr=nt.getTokenString(nt.getTokenPosition(chkString)+1);
+ cout <<"Neighbor: " << nbr <<endl;
+ processInterestInfo(pnlsr,nbr,interest);
}
-
- void
- interestManager::processInterestInfo(Nlsr& pnlsr, string& neighbor,
- const ndn::Interest &interest)
+ chkString="LSA";
+ if( nt.doesTokenExist(chkString) )
{
- if ( pnlsr.getAdl().isNeighbor(neighbor) )
- {
- Data data(ndn::Name(interest.getName()).appendVersion());
- data.setFreshnessPeriod(1000); // 10 sec
- data.setContent((const uint8_t*)"info", sizeof("info"));
- pnlsr.getKeyManager().signData(data);
- cout << ">> D: " << data << endl;
- pnlsr.getNlsrFace()->put(data);
- int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
- if ( status == 0 )
- {
- string intName=neighbor +"/"+"info"+
- pnlsr.getConfParameter().getRouterPrefix();
- expressInterest( pnlsr,intName,2,
- pnlsr.getConfParameter().getInterestResendTime());
- }
- }
+ processInterestLsa(pnlsr,interest);
}
-
- void
- interestManager::processInterestLsa(Nlsr& pnlsr,const ndn::Interest &interest)
+ chkString="keys";
+ if( nt.doesTokenExist(chkString) )
{
- string intName=interest.getName().toUri();
- nlsrTokenizer nt(intName,"/");
- string chkString("LSA");
- string origRouter=nt.getTokenString(nt.getTokenPosition(chkString)+1,
- nt.getTokenNumber()-3);
- string lsTypeString=nt.getToken(nt.getTokenNumber()-2);
- string lsSeqString=nt.getToken(nt.getTokenNumber()-1);
- cout<<"Router Name: "<<origRouter<<endl;
- cout<<"Ls Type : "<<lsTypeString<<endl;
- cout<<"Ls Seq : "<<lsSeqString<<endl;
- uint8_t interestedLsType;
- uint32_t interestedLsSeqNo;
- try
- {
- interestedLsType=boost::lexical_cast<uint8_t>(lsTypeString);
- interestedLsSeqNo=boost::lexical_cast<uint32_t>(lsSeqString);
- }
- catch(std::exception &e)
- {
- return;
- }
- cout <<"Ls Type: "<<interestedLsType<<endl;
- if( lsTypeString == "1" ) //Name Lsa
- {
- processInterestForNameLsa(pnlsr, interest,
- origRouter+"/"+lsTypeString, interestedLsSeqNo);
- }
- else if( lsTypeString == "2" ) //Adj Lsa
- {
- processInterestForAdjLsa(pnlsr, interest,
- origRouter+"/"+lsTypeString, interestedLsSeqNo);
- }
- else if( lsTypeString == "3" ) //Cor Lsa
- {
- processInterestForCorLsa(pnlsr, interest,
- origRouter+"/"+lsTypeString, interestedLsSeqNo);
- }
- else
- {
- cout<<"Unrecognized LSA Type :("<<endl;
- }
+ processInterestKeys(pnlsr,interest);
}
+ //Data data(ndn::Name(interest->getName()).append("testApp").appendVersion());
+ //data.setFreshnessPeriod(1000); // 10 sec
+ //data.setContent((const uint8_t*)"HELLO KITTY", sizeof("HELLO KITTY"));
+ //pnlsr.getKeyChain().sign(data);
+ //cout << ">> D: " << data << endl;
+ //pnlsr.getNlsrFace().put(data);
+ }
- void
- interestManager::processInterestForNameLsa(Nlsr& pnlsr,
- const ndn::Interest &interest,
- string lsaKey, uint32_t interestedlsSeqNo)
+ void
+ interestManager::processInterestInfo(Nlsr& pnlsr, string& neighbor,
+ const ndn::Interest &interest)
+ {
+ if ( pnlsr.getAdl().isNeighbor(neighbor) )
{
- std::pair<NameLsa&, bool> nameLsa=pnlsr.getLsdb().getNameLsa(lsaKey);
- if( nameLsa.second )
- {
- if ( nameLsa.first.getLsSeqNo() >= interestedlsSeqNo )
- {
- Data data(ndn::Name(interest.getName()).appendVersion());
- data.setFreshnessPeriod(1000); // 10 sec
- string content=nameLsa.first.getNameLsaData();
- data.setContent((const uint8_t*)content.c_str(),content.size());
- pnlsr.getKeyManager().signData(data);
- cout << ">> D: " << data << endl;
- pnlsr.getNlsrFace()->put(data);
- }
- }
+ Data data(ndn::Name(interest.getName()).appendVersion());
+ data.setFreshnessPeriod(1000); // 10 sec
+ data.setContent((const uint8_t*)"info", sizeof("info"));
+ pnlsr.getKeyManager().signData(data);
+ cout << ">> D: " << data << endl;
+ pnlsr.getNlsrFace()->put(data);
+ int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
+ if ( status == 0 )
+ {
+ string intName=neighbor +"/"+"info"+
+ pnlsr.getConfParameter().getRouterPrefix();
+ expressInterest( pnlsr,intName,2,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
}
+ }
- void
- interestManager::processInterestForAdjLsa(Nlsr& pnlsr,
- const ndn::Interest &interest,
- string lsaKey, uint32_t interestedlsSeqNo)
+ void
+ interestManager::processInterestLsa(Nlsr& pnlsr,const ndn::Interest &interest)
+ {
+ string intName=interest.getName().toUri();
+ nlsrTokenizer nt(intName,"/");
+ string chkString("LSA");
+ string origRouter=nt.getTokenString(nt.getTokenPosition(chkString)+1,
+ nt.getTokenNumber()-3);
+ string lsTypeString=nt.getToken(nt.getTokenNumber()-2);
+ string lsSeqString=nt.getToken(nt.getTokenNumber()-1);
+ cout<<"Router Name: "<<origRouter<<endl;
+ cout<<"Ls Type : "<<lsTypeString<<endl;
+ cout<<"Ls Seq : "<<lsSeqString<<endl;
+ uint8_t interestedLsType;
+ uint32_t interestedLsSeqNo;
+ try
{
- std::pair<AdjLsa&, bool> adjLsa=pnlsr.getLsdb().getAdjLsa(lsaKey);
- if( adjLsa.second )
- {
- if ( adjLsa.first.getLsSeqNo() >= interestedlsSeqNo )
- {
- Data data(ndn::Name(interest.getName()).appendVersion());
- data.setFreshnessPeriod(1000); // 10 sec
- string content=adjLsa.first.getAdjLsaData();
- data.setContent((const uint8_t*)content.c_str(),content.size());
- pnlsr.getKeyManager().signData(data);
- cout << ">> D: " << data << endl;
- pnlsr.getNlsrFace()->put(data);
- }
- }
+ interestedLsType=boost::lexical_cast<uint8_t>(lsTypeString);
+ interestedLsSeqNo=boost::lexical_cast<uint32_t>(lsSeqString);
}
-
- void
- interestManager::processInterestForCorLsa(Nlsr& pnlsr,
- const ndn::Interest &interest,
- string lsaKey, uint32_t interestedlsSeqNo)
+ catch(std::exception &e)
{
- std::pair<CorLsa&, bool> corLsa=pnlsr.getLsdb().getCorLsa(lsaKey);
- if( corLsa.second )
- {
- if ( corLsa.first.getLsSeqNo() >= interestedlsSeqNo )
- {
- Data data(ndn::Name(interest.getName()).appendVersion());
- data.setFreshnessPeriod(1000); // 10 sec
- string content=corLsa.first.getCorLsaData();
- data.setContent((const uint8_t*)content.c_str(),content.size());
- pnlsr.getKeyManager().signData(data);
- cout << ">> D: " << data << endl;
- pnlsr.getNlsrFace()->put(data);
- }
- }
+ return;
}
-
- void
- interestManager::processInterestKeys(Nlsr& pnlsr,const ndn::Interest &interest)
+ cout <<"Ls Type: "<<interestedLsType<<endl;
+ if( lsTypeString == "1" ) //Name Lsa
{
- cout<<"processInterestKeys called "<<endl;
- string intName=interest.getName().toUri();
- cout<<"Interest Name for Key: "<<intName<<std::endl;
- nlsrTokenizer nt(intName,"/");
- std::string certName=nt.getTokenString(0,nt.getTokenNumber()-2);
- uint32_t seqNum=boost::lexical_cast<uint32_t>(nt.getToken(nt.getTokenNumber()-1));
- cout<<"Cert Name: "<<certName<<" Seq Num: "<<seqNum<<std::endl;
- std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> chkCert=
- pnlsr.getKeyManager().getCertificateFromStore(certName,seqNum);
- if( chkCert.second )
- {
- Data data(ndn::Name(interest.getName()).appendVersion());
- data.setFreshnessPeriod(1000); //10 sec
- data.setContent(chkCert.first->wireEncode());
- pnlsr.getKeyManager().signData(data);
- pnlsr.getNlsrFace()->put(data);
- }
- //std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> chkCert=
- /*
- ndn::shared_ptr<ndn::IdentityCertificate> cert=pnlsr.getKeyManager().getCertificate();
+ processInterestForNameLsa(pnlsr, interest,
+ origRouter+"/"+lsTypeString, interestedLsSeqNo);
+ }
+ else if( lsTypeString == "2" ) //Adj Lsa
+ {
+ processInterestForAdjLsa(pnlsr, interest,
+ origRouter+"/"+lsTypeString, interestedLsSeqNo);
+ }
+ else if( lsTypeString == "3" ) //Cor Lsa
+ {
+ processInterestForCorLsa(pnlsr, interest,
+ origRouter+"/"+lsTypeString, interestedLsSeqNo);
+ }
+ else
+ {
+ cout<<"Unrecognized LSA Type :("<<endl;
+ }
+ }
+
+ void
+ interestManager::processInterestForNameLsa(Nlsr& pnlsr,
+ const ndn::Interest &interest,
+ string lsaKey, uint32_t interestedlsSeqNo)
+ {
+ std::pair<NameLsa&, bool> nameLsa=pnlsr.getLsdb().getNameLsa(lsaKey);
+ if( nameLsa.second )
+ {
+ if ( nameLsa.first.getLsSeqNo() >= interestedlsSeqNo )
+ {
Data data(ndn::Name(interest.getName()).appendVersion());
data.setFreshnessPeriod(1000); // 10 sec
- data.setContent(cert->wireEncode());
+ string content=nameLsa.first.getNameLsaData();
+ data.setContent((const uint8_t*)content.c_str(),content.size());
pnlsr.getKeyManager().signData(data);
- //std::ofstream outFile("data_sent");
- //ndn::io::save(data,outFile,ndn::io::NO_ENCODING);
+ cout << ">> D: " << data << endl;
pnlsr.getNlsrFace()->put(data);
- */
+ }
}
+ }
-
- void
- interestManager::processInterestTimedOut(Nlsr& pnlsr,
- const ndn::Interest &interest)
+ void
+ interestManager::processInterestForAdjLsa(Nlsr& pnlsr,
+ const ndn::Interest &interest,
+ string lsaKey, uint32_t interestedlsSeqNo)
+ {
+ std::pair<AdjLsa&, bool> adjLsa=pnlsr.getLsdb().getAdjLsa(lsaKey);
+ if( adjLsa.second )
{
- cout << "Timed out interest : " << interest.getName().toUri() << endl;
- string intName= interest.getName().toUri();
- nlsrTokenizer nt(intName,"/");
- string chkString("info");
- if( nt.doesTokenExist(chkString) )
- {
- string nbr=nt.getTokenString(0,nt.getTokenPosition(chkString)-1);
- processInterestTimedOutInfo( pnlsr , nbr , interest);
- }
- chkString="LSA";
- if( nt.doesTokenExist(chkString) )
- {
- processInterestTimedOutLsa(pnlsr, interest);
- }
+ if ( adjLsa.first.getLsSeqNo() >= interestedlsSeqNo )
+ {
+ Data data(ndn::Name(interest.getName()).appendVersion());
+ data.setFreshnessPeriod(1000); // 10 sec
+ string content=adjLsa.first.getAdjLsaData();
+ data.setContent((const uint8_t*)content.c_str(),content.size());
+ pnlsr.getKeyManager().signData(data);
+ cout << ">> D: " << data << endl;
+ pnlsr.getNlsrFace()->put(data);
+ }
}
+ }
- void
- interestManager::processInterestTimedOutInfo(Nlsr& pnlsr, string& neighbor,
- const ndn::Interest &interest)
+ void
+ interestManager::processInterestForCorLsa(Nlsr& pnlsr,
+ const ndn::Interest &interest,
+ string lsaKey, uint32_t interestedlsSeqNo)
+ {
+ std::pair<CorLsa&, bool> corLsa=pnlsr.getLsdb().getCorLsa(lsaKey);
+ if( corLsa.second )
{
- pnlsr.getAdl().incrementTimedOutInterestCount(neighbor);
- int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
- int infoIntTimedOutCount=pnlsr.getAdl().getTimedOutInterestCount(neighbor);
- cout<<"Neighbor: "<< neighbor << endl;
- cout<<"Status: "<< status << endl;
- cout<<"Info Interest Timed out: "<< infoIntTimedOutCount <<endl;
- if((infoIntTimedOutCount < pnlsr.getConfParameter().getInterestRetryNumber()))
- {
- string intName=neighbor +"/"+"info"+
- pnlsr.getConfParameter().getRouterPrefix();
- expressInterest( pnlsr,intName,2,
- pnlsr.getConfParameter().getInterestResendTime());
- }
- else if ( (status == 1) &&
- (infoIntTimedOutCount == pnlsr.getConfParameter().getInterestRetryNumber()))
- {
- pnlsr.getAdl().setStatusOfNeighbor(neighbor,0);
- pnlsr.incrementAdjBuildCount();
- if ( pnlsr.getIsBuildAdjLsaSheduled() == 0 )
- {
- pnlsr.setIsBuildAdjLsaSheduled(1);
- // event here
- pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
- ndn::bind(&Lsdb::scheduledAdjLsaBuild,&pnlsr.getLsdb(),
- boost::ref(pnlsr)));
- }
- }
+ if ( corLsa.first.getLsSeqNo() >= interestedlsSeqNo )
+ {
+ Data data(ndn::Name(interest.getName()).appendVersion());
+ data.setFreshnessPeriod(1000); // 10 sec
+ string content=corLsa.first.getCorLsaData();
+ data.setContent((const uint8_t*)content.c_str(),content.size());
+ pnlsr.getKeyManager().signData(data);
+ cout << ">> D: " << data << endl;
+ pnlsr.getNlsrFace()->put(data);
+ }
}
+ }
- void
- interestManager::processInterestTimedOutLsa(Nlsr& pnlsr,
- const ndn::Interest &interest)
+ void
+ interestManager::processInterestKeys(Nlsr& pnlsr,const ndn::Interest &interest)
+ {
+ cout<<"processInterestKeys called "<<endl;
+ string intName=interest.getName().toUri();
+ cout<<"Interest Name for Key: "<<intName<<std::endl;
+ nlsrTokenizer nt(intName,"/");
+ std::string certName=nt.getTokenString(0,nt.getTokenNumber()-2);
+ uint32_t seqNum=boost::lexical_cast<uint32_t>(nt.getToken(
+ nt.getTokenNumber()-1));
+ cout<<"Cert Name: "<<certName<<" Seq Num: "<<seqNum<<std::endl;
+ std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> chkCert=
+ pnlsr.getKeyManager().getCertificateFromStore(certName,seqNum);
+ if( chkCert.second )
{
+ Data data(ndn::Name(interest.getName()).appendVersion());
+ data.setFreshnessPeriod(1000); //10 sec
+ data.setContent(chkCert.first->wireEncode());
+ pnlsr.getKeyManager().signData(data);
+ pnlsr.getNlsrFace()->put(data);
}
+ //std::pair<ndn::shared_ptr<ndn::IdentityCertificate>, bool> chkCert=
+ /*
+ ndn::shared_ptr<ndn::IdentityCertificate> cert=pnlsr.getKeyManager().getCertificate();
+ Data data(ndn::Name(interest.getName()).appendVersion());
+ data.setFreshnessPeriod(1000); // 10 sec
+ data.setContent(cert->wireEncode());
+ pnlsr.getKeyManager().signData(data);
+ //std::ofstream outFile("data_sent");
+ //ndn::io::save(data,outFile,ndn::io::NO_ENCODING);
+ pnlsr.getNlsrFace()->put(data);
+ */
+ }
- void
- interestManager::expressInterest(Nlsr& pnlsr,const string& interestNamePrefix,
- int scope, int seconds)
+
+ void
+ interestManager::processInterestTimedOut(Nlsr& pnlsr,
+ const ndn::Interest &interest)
+ {
+ cout << "Timed out interest : " << interest.getName().toUri() << endl;
+ string intName= interest.getName().toUri();
+ nlsrTokenizer nt(intName,"/");
+ string chkString("info");
+ if( nt.doesTokenExist(chkString) )
{
- cout<<"Expressing Interest :"<<interestNamePrefix<<endl;
- ndn::Interest i((ndn::Name(interestNamePrefix)));
- //i.setScope(scope);
- i.setInterestLifetime(seconds*1000);
- i.setMustBeFresh(true);
- pnlsr.getNlsrFace()->expressInterest(i,
- ndn::func_lib::bind(&DataManager::processContent,
- &pnlsr.getDm(), boost::ref(pnlsr),_1, _2,boost::ref(*this)),
- ndn::func_lib::bind(&interestManager::processInterestTimedOut,
- this,boost::ref(pnlsr),_1));
+ string nbr=nt.getTokenString(0,nt.getTokenPosition(chkString)-1);
+ processInterestTimedOutInfo( pnlsr , nbr , interest);
}
-
-
- void
- interestManager::sendScheduledInfoInterest(Nlsr& pnlsr, int seconds)
+ chkString="LSA";
+ if( nt.doesTokenExist(chkString) )
{
- std::list<Adjacent> adjList=pnlsr.getAdl().getAdjList();
- for(std::list<Adjacent>::iterator it=adjList.begin(); it!=adjList.end(); ++it)
- {
- string adjName=(*it).getAdjacentName()+"/"+"info"+
- pnlsr.getConfParameter().getRouterPrefix();
- expressInterest( pnlsr,adjName,2,
- pnlsr.getConfParameter().getInterestResendTime());
- }
- scheduleInfoInterest(pnlsr, pnlsr.getConfParameter().getInfoInterestInterval());
+ processInterestTimedOutLsa(pnlsr, interest);
}
+ }
- void
- interestManager::scheduleInfoInterest(Nlsr& pnlsr, int seconds)
+ void
+ interestManager::processInterestTimedOutInfo(Nlsr& pnlsr, string& neighbor,
+ const ndn::Interest &interest)
+ {
+ pnlsr.getAdl().incrementTimedOutInterestCount(neighbor);
+ int status=pnlsr.getAdl().getStatusOfNeighbor(neighbor);
+ int infoIntTimedOutCount=pnlsr.getAdl().getTimedOutInterestCount(neighbor);
+ cout<<"Neighbor: "<< neighbor << endl;
+ cout<<"Status: "<< status << endl;
+ cout<<"Info Interest Timed out: "<< infoIntTimedOutCount <<endl;
+ if((infoIntTimedOutCount < pnlsr.getConfParameter().getInterestRetryNumber()))
{
- EventId eid=pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(seconds),
- ndn::bind(&interestManager::sendScheduledInfoInterest, this,
- boost::ref(pnlsr),seconds));
+ string intName=neighbor +"/"+"info"+
+ pnlsr.getConfParameter().getRouterPrefix();
+ expressInterest( pnlsr,intName,2,
+ pnlsr.getConfParameter().getInterestResendTime());
}
+ else if ( (status == 1) &&
+ (infoIntTimedOutCount == pnlsr.getConfParameter().getInterestRetryNumber()))
+ {
+ pnlsr.getAdl().setStatusOfNeighbor(neighbor,0);
+ pnlsr.incrementAdjBuildCount();
+ if ( pnlsr.getIsBuildAdjLsaSheduled() == 0 )
+ {
+ pnlsr.setIsBuildAdjLsaSheduled(1);
+ // event here
+ pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(5),
+ ndn::bind(&Lsdb::scheduledAdjLsaBuild,&pnlsr.getLsdb(),
+ boost::ref(pnlsr)));
+ }
+ }
+ }
+
+ void
+ interestManager::processInterestTimedOutLsa(Nlsr& pnlsr,
+ const ndn::Interest &interest)
+ {
+ }
+
+ void
+ interestManager::expressInterest(Nlsr& pnlsr,const string& interestNamePrefix,
+ int scope, int seconds)
+ {
+ cout<<"Expressing Interest :"<<interestNamePrefix<<endl;
+ ndn::Interest i((ndn::Name(interestNamePrefix)));
+ //i.setScope(scope);
+ i.setInterestLifetime(seconds*1000);
+ i.setMustBeFresh(true);
+ pnlsr.getNlsrFace()->expressInterest(i,
+ ndn::func_lib::bind(&DataManager::processContent,
+ &pnlsr.getDm(), boost::ref(pnlsr),_1, _2,boost::ref(*this)),
+ ndn::func_lib::bind(&interestManager::processInterestTimedOut,
+ this,boost::ref(pnlsr),_1));
+ }
+
+
+ void
+ interestManager::sendScheduledInfoInterest(Nlsr& pnlsr, int seconds)
+ {
+ std::list<Adjacent> adjList=pnlsr.getAdl().getAdjList();
+ for(std::list<Adjacent>::iterator it=adjList.begin(); it!=adjList.end(); ++it)
+ {
+ string adjName=(*it).getAdjacentName()+"/"+"info"+
+ pnlsr.getConfParameter().getRouterPrefix();
+ expressInterest( pnlsr,adjName,2,
+ pnlsr.getConfParameter().getInterestResendTime());
+ }
+ scheduleInfoInterest(pnlsr, pnlsr.getConfParameter().getInfoInterestInterval());
+ }
+
+ void
+ interestManager::scheduleInfoInterest(Nlsr& pnlsr, int seconds)
+ {
+ EventId eid=pnlsr.getScheduler().scheduleEvent(ndn::time::seconds(seconds),
+ ndn::bind(&interestManager::sendScheduledInfoInterest, this,
+ boost::ref(pnlsr),seconds));
+ }
} //namespace nlsr