[ndnSIM] how to trace the self-defined element in ndnsim?

yao hu huyao0107 at gmail.com
Sun Apr 14 23:31:21 PDT 2013


Hi Alex,

Thanks very much for your time. I am afraid currently there is still no way
to get pointer to Fib from fib::Entry (no GetFib() in fib::Entry)..but
Simulator::GetContext
() works..

Yes, for the time being, I will simply use the cout to record my desired
information.
Thanks again~

Regards,
huyao



2013/4/15 Alex Afanasyev <alexander.afanasyev at ucla.edu>

> Huh... Currently, there is no way to get pointer to a Node from a
> fib::Entry.  I will add this soon and you will need to do like:
>  this->GetFib ()->GetObject<Node> ()...
>
> In the meantime, you can use a workaround: Simulator::GetContext ()  will
> return string which is equal to current node ID (you may need to include
> <ns3/simulator.h>)
>
> ---
> Alex
>
> On Apr 14, 2013, at 10:11 PM, yao hu <huyao0107 at gmail.com> wrote:
>
> Hi Alex,
>
> Thanks for reply and advice.
>
> I am calling from ns3::ndn::fib::Entry. It seems there is no GetNode ()
> method in it
>
> error: ‘class ns3::ndn::fib::Entry’ has no member named ‘GetNode’
>
> Regards,
> huyao
>
>
>
> 2013/4/15 Alex Afanasyev <alexander.afanasyev at ucla.edu>
>
>> Hi huyao,
>>
>> I see.  You can just print to std::cout (or some predefined file) for
>> now, but ideally it should be something like TraceSource, which is
>> configured during the runtime (in a specific scenario).
>>
>> To solve your error of obtaining node id, you need to write slightly
>> differently, since "Face" object (I'm assuming you're calling from some
>> method of Face object) is not aggregated to Node and to get node, you just
>> need simply call GetNode () method.  Something like this:
>>
>> std::cout << this->GetNode ()->GetId ();
>>
>> One more note.  If you need this logging just for debug purposes, then
>> you can simply output the desired values with NS_LOG* methods, which will
>> output node ID as part of the output (when enabled with NS_LOG
>> environmental variable).
>>
>> ---
>> Alex
>>
>> On Apr 14, 2013, at 7:52 PM, yao hu <huyao0107 at gmail.com> wrote:
>>
>> Hi Alex,
>>
>> I see. Thanks for your warning. At this stage, I just want to record and
>> print the values to cout or some file whenever some element changes.
>>
>> Besides, I also saw that the output logging information does not include
>> the ID of the related node. I am not sure the output behavior information
>> is from which node.  So is there a way to add such a node id information
>> before each logging information. I used
>> Ptr<ns3::Node> node = this->GetObject<ns3::Node> (); node->GetId(),
>>
>> but it failed..
>>
>> ./ns3/ptr.h:410:7: error: invalid use of incomplete type ‘struct
>> ns3::Node’
>> ./ns3/ndn-face.h:37:7: error: forward declaration of ‘struct ns3::Node’
>>
>> Regards,
>> huyao
>>
>>
>>
>> 2013/4/15 Alex Afanasyev <alexander.afanasyev at ucla.edu>
>>
>>> Hi huyao,
>>>
>>> **Do not** use NS_LOG to obtain metrics, as it is designed and is used
>>> only for debug purposes to output some helpful information.  Most of the
>>> logging statements are disabled (and must be disabled) when you compile in
>>> optimized version (./waf configure -d optimized).
>>>
>>> Btw. Do you want periodically save values from your array to file, or
>>> save all the values whenever some element changes?  The reason I'm asking
>>> is that solution could be completely different.
>>>
>>> ---
>>> Alex
>>>
>>> On Apr 13, 2013, at 8:46 AM, yao hu <huyao0107 at gmail.com> wrote:
>>>
>>> Hi Alex,
>>>
>>> Thanks very much for your guidance.
>>> After I tried following your instruction, however, I still felt a little
>>> confused by the callback to the trace source. Simply speaking, I defined a
>>> uint32_t array in ndn-forwarding-strategy.cc which will continuously store
>>> the incoming faceid information when simulation runs. If I just want to
>>> record the values of each element in this array into a local file using ns3
>>> tracing, how should I select a simple way to do this? Just using NS_LOG or
>>> something is possible?
>>>
>>> Thanks a lot again~
>>>
>>> Regards,
>>> huyao
>>>
>>>
>>>
>>> 2013/4/13 Alex Afanasyev <alexander.afanasyev at ucla.edu>
>>>
>>>> Hi huyao,
>>>>
>>>> Technically, you have many options how to trace self-defined variables.
>>>>  If you really want to, you can just directly dump the values to std::cout
>>>> or to some file.
>>>>
>>>> If you want to go with NS-3-style tracing, you would need to use either
>>>> TraceSource, with which you explicitly notifying (somebody, who is
>>>> configured in the simulation scenario using Connect calls) before or after
>>>> you change the value.
>>>>
>>>> There is also a TraceValue, which can automate some notification tasks,
>>>> if you're tracing just a value.
>>>>
>>>> Both methods require a couple of things.  For TraceSource, you need to
>>>> define a local TracedCallback (like this
>>>> https://github.com/NDN-Routing/ndnSIM/blob/master/model/fw/ndn-forwarding-strategy.h#L482)
>>>> and then define a way to connect to this variable in GetTypeId method (like
>>>> this
>>>> https://github.com/NDN-Routing/ndnSIM/blob/master/model/fw/ndn-forwarding-strategy.cc#L71).
>>>>  Afterwards, you just use the locally defined TracedCallback as if it is a
>>>> function (like this
>>>> https://github.com/NDN-Routing/ndnSIM/blob/master/model/fw/ndn-forwarding-strategy.cc#L586
>>>> ).
>>>>
>>>> For TracedValue, you need to define the variable that you want to trace
>>>> in a slightly different way (it is no longer a simple variable), like this
>>>> https://github.com/NDN-Routing/ndnSIM/blob/master/apps/ndn-consumer-window.h#L98.
>>>>  Then add a line into GetTypeId call, similar to this
>>>> https://github.com/NDN-Routing/ndnSIM/blob/master/apps/ndn-consumer-window.cc#L65
>>>> .
>>>>
>>>> To connect to variables, you need to use either
>>>> Config::Connect/Config::ConnectWithoutContext method, or Object's
>>>> TraceConnect (
>>>> http://www.nsnam.org/doxygen-release/classns3_1_1_object_base.html#ada3a45b34bc23114a25e0ab19188276e
>>>> ).
>>>>
>>>>
>>>> Let us know if you have more questions.  If you can give more specific
>>>> description of what you want to trace, then we may give more concrete
>>>> suggestion of what is the best way to do it.
>>>>
>>>> ---
>>>> Alex
>>>>
>>>> On Apr 12, 2013, at 9:37 AM, yao hu <huyao0107 at gmail.com> wrote:
>>>>
>>>> Hi Alex,
>>>>
>>>> Maybe this is not related to ndnsim, just about ns3. Could you please
>>>> give a hint about how to trace or record the value of some self-defined
>>>> variable like each element in some array somewhere in ndnsim when
>>>> simulation runs?
>>>>
>>>> Thanks a lot!!
>>>>
>>>> Regards,
>>>> huyao
>>>> _______________________________________________
>>>> ndnSIM mailing list
>>>> ndnSIM at lists.cs.ucla.edu
>>>> http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim
>>>>
>>>>
>>>>
>>> _______________________________________________
>>> ndnSIM mailing list
>>> ndnSIM at lists.cs.ucla.edu
>>> http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim
>>>
>>>
>>>
>> _______________________________________________
>> ndnSIM mailing list
>> ndnSIM at lists.cs.ucla.edu
>> http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim
>>
>>
>>
> _______________________________________________
> 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/20130415/45ab22e2/attachment.html>


More information about the ndnSIM mailing list