[ndnSIM] N consumers M distinct producers

Josh J joshjdevl at gmail.com
Mon May 26 08:18:53 PDT 2014


Is there a way to have M distinct producers in ndnsim? I wonder about the
forwarding strategies used. I set up 4 consumers, 1 router, and 9
producers. Each producer should only respond to a single prefix

int producernodeIndex = 1;
std::string producernodeNamePrefix("producer");
std::string producerNodeName = producernodeNamePrefix +
 boost::lexical_cast<std::string>(producernodeIndex);
Ptr<Node> producerNode = Names::Find<Node>(producerNodeName);
while(producerNode != NULL)
{
  NodeContainer producerNodes;
  producerNodes.Add (producerNode);

  // Producer
  ndn::AppHelper producerHelper ("ns3::ndn::Producer");
  // Producer will reply to all requests starting with /prefix
  std::string pprefix = "/producer"+
 boost::lexical_cast<std::string>(producernodeIndex);
  std::cout<<"producernodeName="<<producerNodeName<<"
pprefix="<<pprefix<<std::endl;
  producerHelper.SetPrefix (pprefix);
  producerHelper.SetAttribute ("PayloadSize", StringValue("1024"));
  producerHelper.Install(producerNodes);
  producerNodeName = producernodeNamePrefix +
 boost::lexical_cast<std::string>(++producernodeIndex);
  producerNode = Names::Find<Node>(producerNodeName);
}


producernodeName=producer1 pprefix=/producer1
producernodeName=producer2 pprefix=/producer2
producernodeName=producer3 pprefix=/producer3
producernodeName=producer4 pprefix=/producer4
producernodeName=producer5 pprefix=/producer5
producernodeName=producer6 pprefix=/producer6
producernodeName=producer7 pprefix=/producer7
producernodeName=producer8 pprefix=/producer8
producernodeName=producer9 pprefix=/producer9


Though I can observe in the logs, that interests for '/producer9' are being
routed and received by producer node 3 (which should only respond to
/producer3). Why would the routing forward to a producer which *shouldn't*
be responding to these interests?

https://github.com/joshjdevl/icn-cache-privacy/blob/master/ndn-topology.cc

Thanks,
Josh



On Wed, May 21, 2014 at 9:16 PM, Josh J <joshjdevl at gmail.com> wrote:

> I also tried with the unmodified ns3::ndn::ConsumerZipfMandelbrot where
> each producer is responsible for a particular segment. Though none of the
> interests are satisfied (there are no data responses).
>
> https://gist.github.com/joshjdevl/9d303d8996ad8ad02098
>
> Thanks,
> Josh
>
>
> On Wed, May 21, 2014 at 8:05 PM, Josh J <joshjdevl at gmail.com> wrote:
>
>> > Why did you comment appendSeqNum() ? It seems to be correct way of
>> doing it.
>>
>> Is there a way for a single consumer to generate requests in a zipf
>> distribution for multiple M producers, where each producer is responsible
>> for a particular prefix? I would like to have M producer nodes (1...M),
>> where (except for intermediate caches) producer1 is the only producer which
>> can satisfy a particular interest /producer1 or /producer/1, producer2
>> satisfies /producer2 or producer/2, etc.
>>
>>
>>
>> On Wed, May 21, 2014 at 1:35 PM, Ilya Moiseenko <iliamo at ucla.edu> wrote:
>>
>>> I believe that sequence numbers are marked with reserved symbols.
>>> Why did you comment appendSeqNum() ? It seems to be correct way of doing
>>> it.
>>>
>>> Ilya
>>>
>>> On May 21, 2014, at 4:27 PM, Josh J <joshjdevl at gmail.com> wrote:
>>>
>>> Tracing thru gdb I find the following error being throw. Though no idea
>>> what it means? What required marker is necessary?
>>>
>>>     {
>>>       BOOST_THROW_EXCEPTION (error::name::Component ()
>>>                              << error::msg ("Name component does not
>>> have required marker [" + toUri () + "]"));
>>>     }
>>>
>>>
>>>
>>> On Wed, May 21, 2014 at 6:38 AM, Josh J <joshjdevl at gmail.com> wrote:
>>>
>>>> Hi,
>>>>
>>>> I'm trying to setup a scenario where there are M distinct producers
>>>> 1...M. Each producer is responsible for a certain prefix /producer1 ...
>>>> /producerM.
>>>>
>>>> There are also N consumers which generate requests for interests
>>>> ranging from /producer1 to /producerM followiing a zipf distribution.
>>>>
>>>> I modified the zipfmandelbrotconsumer by changing the following line
>>>>
>>>>   Ptr<Name> nameWithSequence = Create<Name> (m_producerPrefix+boost::lexical_cast<std::string>(seq));
>>>>
>>>>
>>>>
>>>>   //nameWithSequence->appendSeqNum (seq);
>>>>
>>>> https://github.com/joshjdevl/icn-cache-privacy/blob/master/extensions/ndn-consumer-zipf-prefix-mandelbrot.cc
>>>>
>>>>
>>>>
>>>>
>>>> I then installed a consumerapp and producerapp on each node accordingly.
>>>>
>>>> https://github.com/joshjdevl/icn-cache-privacy/blob/master/ndn-topology.cc
>>>>
>>>>
>>>>
>>>>
>>>> The simulation runs for a very brief amount of time before receiving an error.
>>>> 0.573765s 1 ndn.ConsumerZipfPrefixMandelbrot:GetNextSeq(): [LOGIC] p_random=0.142848
>>>> 0.573765s 1 ndn.ConsumerZipfPrefixMandelbrot:GetNextSeq(): [DEBUG] RandomNumber=1
>>>> 0.573765s 1 ndn.ConsumerZipfPrefixMandelbrot:SendPacket(): [INFO ] seq=1
>>>> 0.573765s 1 ndn.ConsumerZipfPrefixMandelbrot:SendPacket(): [INFO ] > Interest for 1, Total: 6, face: 1
>>>> 0.573765s 1 ndn.ConsumerZipfPrefixMandelbrot:SendPacket(): [DEBUG] Trying to add 1 with +573764778.0ns. already 4 items
>>>> 0.573765s 1 ndn.fw:OnInterest(0x1740d10, /producer1)
>>>> 0.576379s 3 ndn.ConsumerZipfPrefixMandelbrot:SendPacket()
>>>> 0.576379s 3 ndn.ConsumerZipfPrefixMandelbrot:GetNextSeq(): [LOGIC] p_random=0.926702
>>>> 0.576379s 3 ndn.ConsumerZipfPrefixMandelbrot:GetNextSeq(): [DEBUG] RandomNumber=8
>>>> 0.576379s 3 ndn.ConsumerZipfPrefixMandelbrot:SendPacket(): [INFO ] seq=8
>>>> 0.576379s 3 ndn.ConsumerZipfPrefixMandelbrot:SendPacket(): [INFO ] > Interest for 8, Total: 7, face: 1
>>>> 0.576379s 3 ndn.ConsumerZipfPrefixMandelbrot:SendPacket(): [DEBUG] Trying to add 8 with +576379247.0ns. already 5 items
>>>> 0.576379s 3 ndn.fw:OnInterest(0x1740dd0, /producer8)
>>>> 0.576426s 0 ndn.fw:OnData(0x1722870, /producer2)
>>>> 0.576426s 0 ndn.Consumer:OnData(0x173c580, 0x174bb40)
>>>> terminate called after throwing an instance of 'boost::exception_detail::clone_impl<ns3::ndn::error::name::Component>'
>>>>   what():  std::exception
>>>>
>>>>
>>>> Is there any naming convention assumed in the routing such as /producer/1 /producer/2 instead of being able to route to /producer1 /producer2 ?
>>>>
>>>> The gdb backtrace is posted here
>>>>
>>>>
>>>>
>>>> https://gist.github.com/joshjdevl/80bcc0af2fab262120d0
>>>>
>>>> Thanks,
>>>> Josh
>>>>
>>>>
>>> _______________________________________________
>>> ndnSIM mailing list
>>> ndnSIM at lists.cs.ucla.edu
>>> http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim
>>>
>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/ndnsim/attachments/20140526/11ac583f/attachment.html>


More information about the ndnSIM mailing list