[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ns] Questions about classifier



recv() is a VIRTUAL method of NsObject. So it's handled by the appropriate
derived classes. To understand how packet flows, the best way is to look
at the node/link internal structures, available from either the ns manual,
or, better yet, the later ns workshop slides which have powerpoint
animations showing packet flows.

On Tue, 20 Feb 2001, Chien-Lung Wu wrote:

> 
> Hi, ns-experts:
> 
> I got following questions about classifier class.
> 
> Q.1 In the classifier class there is recv function as following
> 
> /*
>  * objects only ever see "packet" events, which come either
>  * from an incoming link or a local agent (i.e., packet source).
>  */ void Classifier::recv(Packet* p, Handler*h) {
>     NsObject* node = find(p);
>     if (node == NULL) {
>         /*
>          * XXX this should be "dropped" somehow.  Right now,
>          * these events aren't traced.
>          */
>         Packet::free(p);
>         return;
>     }
>     node->recv(p,h);
> }                                           
> 
>  It is understandable in processing a received packet and then calling
>   node->recv(p,h).
> 
>  However, I check the NsObject::recv (node is an object of
> NsObject) fuction as following:
> 
> /*
>  * Packets may be handed to NsObjects at sheduled points
>  * in time since a node is an event handler and a packet
>  * is an event.  Packets should be the only type of event
>  * scheduled on a node so we can carry out the cast below.
>  */
>  void NsObject::handle(Event* e) {
>     recv((Packet*)e); }
>  
> void NsObject::recv(Packet *p, const char*) {
>     Packet::free(p); 
> }
>                                           
>  Why does it free this packet in the recv fuction? Am I correct?
> 
> 
> 
> Q2. If a node received a packet, it will go througt the classifier::recv.
> 
>     After the classifier::recv(pkt, h), what is the next process to deal
>     with this packets? Does it send the incoming packet to "agent"
>     or any other process missed? Are the processes like:
>     
>     classifier::recv()--> agent:recv-->routing process
> 
>    or
>    classifier:recv(pkt, h)--(need forward)--> routing--->forwarding--->out
>                           |
> 			  |
> 			  +--for this node--> agent::recv
> 
> 
> Q3. If I want to see all of pkt-types traffic, where can I insert the
>     fuction? in the agent::recv or in the classfier::recv() or
>     somewhereelse?
> 
> Any help will be appreciated. Thanks.
> 
> 
> Regards,
> 
> 
> Chien-Lung Wu
> 
>