[ndnSIM] structure of fib in ndnsim

Alex Afanasyev alexander.afanasyev at ucla.edu
Sat Mar 16 19:07:12 PDT 2013


Hi huyao,

I'm assuming you're modifying FIB on the same node

Ptr<Node> node = this->GetObject<Node> ();

or better, you can do the following:

Ptr<Fib> fib = this->GetObject<Fib> ();   and then directly use FIB methods to update FIB without use of StackHelper.

---
Alex

On Mar 16, 2013, at 7:04 PM, yao hu <huyao0107 at gmail.com> wrote:

> Hi Alex,
> 
> I see. Thanks a lot.
> 
> Now I am in the method ForwardingStrategy::DidReceiveSolicitedData(), I want to call the method AddRoute(), but I do not know how to pass the first parameter--Ptr<Node> node. Could you please give an example?
> 
> Regards,
> huyao
>  
> 
> 2013/3/17 Alex Afanasyev <alexander.afanasyev at ucla.edu>
> Hi huyao,
> 
> Sure, go ahead and add the counter.  I will let you know when I generalize forwarding-strategy-specific storage in FIBs.
> 
> To get a unique face ID of the face, you can use GetId () method of Face class (http://ndnsim.net/doxygen/classns3_1_1ndn_1_1_face.html#af65b04aa5f75e24c9e73e0d60bf397a2).  Just in case, this ID is just a unique numerical ID of the face on the specific node and doesn't imply anything else (e.g., face with ID 2 doesn't mean there are 3 faces on the node).
> 
> ---
> Alex
> 
> On Mar 16, 2013, at 4:42 AM, yao hu <huyao0107 at gmail.com> wrote:
> 
>> Hi Alex,
>> 
>> Thanks for your advice. I think I would like to store the counter into fib:Entry, is that ok? Another question is how to get numerical face information (0, 1, 2... which is convenient for storage) from Ptr<Face> type?
>> 
>> Regards,
>> huyao
>> 
>> 
>> 2013/3/16 Alex Afanasyev <alexander.afanasyev at ucla.edu>
>> Hi huyao,
>> 
>> You should not need to have multiple face entries, if you just want to record number of times you want to forward interest on a specific face.  Ideally, this information should be stored somewhere in FaceMetric (model/fib/ndn-fib-entry.h/cc).  Unfortunately, there is no "extensible" way to add new parameter to FaceMetric, but it is on my list of future modifications (the implementation plan is to have some sort of "tags" with any custom info that you can attach to a FIB entry or specific Face in FIB entry).   
>> 
>> For now, you can directly add the counter to FaceMetric class and add appropriate accessor methods.  And then use this methods to track either number of times a face was "added" to FIB.
>> 
>> ---
>> Alex
>> 
>> On Mar 15, 2013, at 12:20 PM, yao hu <huyao0107 at gmail.com> wrote:
>> 
>>> Hi Alex,
>>> 
>>> Yes, that is the usual thing for fib entry. What I think is If I use Add or AddRoute call once to add one ndn route, the face will be recorded once. If I use the same call twice, the face will be recorded twice... Then I would like I could modify or adjust the the current forwarding strategy to forward the related interests from the specific face according to the `times` this face appears in the fib entry. Is there any possibility to do such a thing in the current ndnsim?
>>> 
>>> Thanks very much!
>>> 
>>> Regards,
>>> huyao
>>>    
>>> 
>>> 2013/3/16 Alex Afanasyev <alexander.afanasyev at ucla.edu>
>>> Hi huyao,
>>> 
>>> PIT also has a limited API to lookup (only using Interests and ContentObjects).  So, probably this part is also should be extended, but just pure prefix-based lookup should be used cautiously.
>>> 
>>> For your second question.  What is your intended need for the same face associated with the FIB entry more than once?  Can you give a specific example?  For me it is fundamental that FIB entry has only one reference to a specific face (AddRoute call "adding" the same face will "rerrange" this face based on the specified metric).  The forwarding strategy can "re-use" the same face many times, if it feels that is appropriate. 
>>> 
>>> ---
>>> Alex
>>> 
>>> On Mar 15, 2013, at 10:48 AM, yao hu <huyao0107 at gmail.com> wrote:
>>> 
>>>> Hi Alex,
>>>> 
>>>> Thanks for your clarification. I have understood what you said. It was my misunderstanding.
>>>> 
>>>> Yes. I looked into the ndnsim API and felt a little curious that why FIB does not have a lookup functionality like PIT. I really appreciate if you can provide this functionality. Thanks very much!
>>>> 
>>>> Besides, regarding the fib structure, I have one more question. In the default fib structure, one specific face (like face 1) in one fib entry appears just once. If I use Add() or AddRoute() to add a same ndn route twice or more, face 1 in this fib entry is still only one. My question is, is there a possibility or a way to record the `twice` or more? A very direct thought is could I store one specific face twice or more in one fib entry? Or are there any other ways to do such a behavior?
>>>> 
>>>> Thanks for your answer in advance!
>>>> 
>>>> Regards,
>>>> huyao
>>>>  
>>>> 
>>>> 2013/3/16 Alex Afanasyev <alexander.afanasyev at ucla.edu>
>>>> Hi huyao,
>>>> 
>>>> fib::Entry object associated with exactly one prefix, so RemoveFace method on fib::Entry will not have impact on any other entries.
>>>> 
>>>> Let me show an example:
>>>> 
>>>> # step one: find a FIB entry for the prefix associated with Interest
>>>> Ptr<fib::Entry> entry = fib->LongestPrefixMatch (interest);
>>>> 
>>>> # remove a specific face
>>>> entry->RemoveFace (face_to_remove);
>>>> 
>>>> ---
>>>> 
>>>> This will not impact any other FIB entries.
>>>> 
>>>> I just realized that the current FIB interface doesn't provide direct way to do lookup just using Name (=NameComponents).  But it would be trivial to add this functionality, as underlying data structures fully support that.  Let me know if you need it. (Alternatively, you can also enumerate all FIB entries using Begin/End/Next methods and find the one you need, but it can be too inefficient.)
>>>> 
>>>> ---
>>>> Alex
>>>> 
>>>> On Mar 15, 2013, at 1:33 AM, yao hu <huyao0107 at gmail.com> wrote:
>>>> 
>>>>> Hi Alex,
>>>>> 
>>>>> Thanks for your explanation!
>>>>> 
>>>>> I am sorry I still have the perplexity. I saw that fib::Entry->RemoveFace call just has one parameter (const Ptr< Face > &face) without relation to some specific prefix, so I guess if I want to delete one specific face from one specific prefix, it will have the same impact to other prefixes which also have the face. 
>>>>> 
>>>>> My intention is to delete one specific face from a specific prefix, while any other prefix still retains the face if  it has. Is it feasible in the current ndnsim? If not, how do I do to implement such a functionality? Or my understanding for this issue has some error?
>>>>> 
>>>>> Regards,
>>>>> huyao
>>>>> 
>>>>> 
>>>>> 2013/3/15 Alex Afanasyev <alexander.afanasyev at ucla.edu>
>>>>> My small correction :). I meant that it is forwarding strategy job to pick a particular face from FIB entry.
>>>>> 
>>>>> ---
>>>>> Alex
>>>>> 
>>>>> On Mar 14, 2013, at 7:55 PM, Alex Afanasyev <alexander.afanasyev at ucla.edu> wrote:
>>>>> 
>>>>>> Hi huyao,
>>>>>> 
>>>>>> You are right, for the single prefix there will be only one FIB entry created and it is forwarding strategy job to pick a particular one to forward an Interest in this prefix.
>>>>>> 
>>>>>> There is an interface in fib::Entry to remove a specific face from s specific FIB entry.  You can also check recent conversation http://www.lists.cs.ucla.edu/pipermail/ndnsim/2013-March/000242.html with more details about that.
>>>>>> 
>>>>>> 
>>>>>> ---
>>>>>> Alex
>>>>>> 
>>>>>> On Mar 14, 2013, at 7:28 PM, yao hu <huyao0107 at gmail.com> wrote:
>>>>>> 
>>>>>>> a supplement.. If so, is there a way to delete just some face like face 0 from the fib entry with the prefix /data without deleting face 1?
>>>>>>> 
>>>>>>> Thanks for your reply!
>>>>>>> 
>>>>>>> 
>>>>>>> 2013/3/15 yao hu <huyao0107 at gmail.com>
>>>>>>> Dear ndnsimers,
>>>>>>> 
>>>>>>> Assume that there is an existing fib entry with the prefix /data, face 0 in some specific node. Now by using the function Add() or AddRoute(), a new fib entry will be added with the same prefix /data, but with the different face 1. So I wonder in ndnsim, they are counted as two fib entries in FIB or just seemed as one. For my understanding, the answer is the latter. Here, in Fib class, GetSize () still equals to 1. Am I right? 
>>>>>>> 
>>>>>>> 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
>> 
>> 
>> _______________________________________________
>> 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/20130316/4c0e8086/attachment.html>


More information about the ndnSIM mailing list