void OneInterestRequester::SendInterest() { if (!m_isRunning) return; ///////////////////////////////////// // Sending one Interest packet out // ///////////////////////////////////// // Create and configure ndn::Interest auto interest = std::make_shared<ndn::Interest>(m_name); UniformVariable rand(0, std::numeric_limits<uint32_t>::max()); interest->setNonce(rand.GetValue()); interest->setInterestLifetime(ndn::time::seconds(1)); NS_LOG_DEBUG("Sending Interest packet for " << m_name); // Call trace (for logging purposes) m_transmittedInterests(interest, this, m_face); NS_LOG_DEBUG(">> I: " << m_name); // Forward packet to lower (network) layer m_face->onReceiveInterest(*interest); }
void Consumer::SendPacket() { if (!m_active) return; NS_LOG_FUNCTION_NOARGS(); uint32_t seq = std::numeric_limits<uint32_t>::max(); // invalid while (m_retxSeqs.size()) { seq = *m_retxSeqs.begin(); m_retxSeqs.erase(m_retxSeqs.begin()); break; } if (seq == std::numeric_limits<uint32_t>::max()) { if (m_seqMax != std::numeric_limits<uint32_t>::max()) { if (m_seq >= m_seqMax) { return; // we are totally done } } seq = m_seq++; } // shared_ptr<Name> nameWithSequence = make_shared<Name>(m_interestName); nameWithSequence->appendSequenceNumber(seq); // // shared_ptr<Interest> interest = make_shared<Interest> (); shared_ptr<Interest> interest = make_shared<Interest>(); interest->setNonce(m_rand->GetValue(0, std::numeric_limits<uint32_t>::max())); interest->setName(*nameWithSequence); time::milliseconds interestLifeTime(m_interestLifeTime.GetMilliSeconds()); interest->setInterestLifetime(interestLifeTime); // NS_LOG_INFO ("Requesting Interest: \n" << *interest); NS_LOG_INFO("> Interest for " << seq); WillSendOutInterest(seq); m_transmittedInterests(interest, this, m_face); m_face->onReceiveInterest(*interest); ScheduleNextPacket(); }
void CustomApp1::SendInterest() { ///////////////////////////////////// // Sending one Interest packet out // ///////////////////////////////////// // Create and configure ndn::Interest auto interest = std::make_shared<ndn::Interest>("/prefix"); NS_LOG_DEBUG("Sending Interest packet for " << *interest); // Call trace (for logging purposes) m_transmittedInterests(interest, this, m_face); m_face->onReceiveInterest(*interest); Simulator::Schedule(Seconds(1.0), &CustomApp1::SendInterest, this); }
void AccountingConsumer::SendPacket() { if (!m_active) return; NS_LOG_FUNCTION_NOARGS(); uint32_t seq = std::numeric_limits<uint32_t>::max(); // invalid while (m_retxSeqs.size()) { seq = *m_retxSeqs.begin(); m_retxSeqs.erase(m_retxSeqs.begin()); NS_LOG_DEBUG("=interest seq " << seq << " from m_retxSeqs"); break; } seq = 0; shared_ptr<Name> nameWithSequence = make_shared<Name>(m_interestName); nameWithSequence->appendSequenceNumber(seq); shared_ptr<Interest> interest = make_shared<Interest>(); interest->setNonce(m_rand.GetValue()); interest->setName(*nameWithSequence); // Note: we're setting this randomly, just to test the encoding/decoding std::vector<uint64_t> payload; payload.push_back(seq); payload.push_back(seq); payload.push_back(seq); payload.push_back(seq); interest->setPayload(payload); // NS_LOG_INFO ("Requesting Interest: \n" << *interest); // std::cout << "> " << m_id << ": Interest for " << seq << ", Total: " << m_seq << ", face: " << m_face->getId() << std::endl; NS_LOG_INFO("> Interest for " << seq << ", Total: " << m_seq << ", face: " << m_face->getId()); NS_LOG_DEBUG("Trying to add " << seq << " with " << Simulator::Now() << ". already " << m_seqTimeouts.size() << " items"); m_seqTimeouts.insert(SeqTimeout(seq, Simulator::Now())); m_seqFullDelay.insert(SeqTimeout(seq, Simulator::Now())); m_seqLastDelay.erase(seq); m_seqLastDelay.insert(SeqTimeout(seq, Simulator::Now())); m_seqRetxCounts[seq]++; m_rtt->SentSeq(SequenceNumber32(seq), 1); m_transmittedInterests(interest, this, m_face); m_face->onReceiveInterest(*interest); NameTime *nt = new NameTime(interest->getName(), Simulator::Now(), Simulator::Now()); startTimes.push_back(nt); AccountingConsumer::ScheduleNextPacket(); sentCount++; //std::cout << "> Consumer(" << GetNode()->GetId() << ") is sending interest, " // << nameWithSequence->toUri() << " and nonce " << interest->getNonce() << std::endl; }
void ConsumerZipfMandelbrot::SendPacket() { if (!m_active) return; NS_LOG_FUNCTION_NOARGS(); uint32_t seq = std::numeric_limits<uint32_t>::max(); // invalid // std::cout << Simulator::Now ().ToDouble (Time::S) << "s max -> " << m_seqMax << "\n"; while (m_retxSeqs.size()) { seq = *m_retxSeqs.begin(); m_retxSeqs.erase(m_retxSeqs.begin()); // NS_ASSERT (m_seqLifetimes.find (seq) != m_seqLifetimes.end ()); // if (m_seqLifetimes.find (seq)->time <= Simulator::Now ()) // { // NS_LOG_DEBUG ("Expire " << seq); // m_seqLifetimes.erase (seq); // lifetime expired. Trying to find another unexpired // sequence number // continue; // } NS_LOG_DEBUG("=interest seq " << seq << " from m_retxSeqs"); break; } if (seq == std::numeric_limits<uint32_t>::max()) // no retransmission { if (m_seqMax != std::numeric_limits<uint32_t>::max()) { if (m_seq >= m_seqMax) { return; // we are totally done } } seq = ConsumerZipfMandelbrot::GetNextSeq(); m_seq++; } // std::cout << Simulator::Now ().ToDouble (Time::S) << "s -> " << seq << "\n"; // shared_ptr<Name> nameWithSequence = make_shared<Name>(m_interestName); nameWithSequence->appendSequenceNumber(seq); // shared_ptr<Interest> interest = make_shared<Interest>(); interest->setNonce(m_rand->GetValue(0, std::numeric_limits<uint32_t>::max())); interest->setName(*nameWithSequence); // NS_LOG_INFO ("Requesting Interest: \n" << *interest); NS_LOG_INFO("> Interest for " << seq << ", Total: " << m_seq << ", face: " << m_face->getId()); NS_LOG_DEBUG("Trying to add " << seq << " with " << Simulator::Now() << ". already " << m_seqTimeouts.size() << " items"); m_seqTimeouts.insert(SeqTimeout(seq, Simulator::Now())); m_seqFullDelay.insert(SeqTimeout(seq, Simulator::Now())); m_seqLastDelay.erase(seq); m_seqLastDelay.insert(SeqTimeout(seq, Simulator::Now())); m_seqRetxCounts[seq]++; m_rtt->SentSeq(SequenceNumber32(seq), 1); m_transmittedInterests(interest, this, m_face); m_face->onReceiveInterest(*interest); ConsumerZipfMandelbrot::ScheduleNextPacket(); }