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

Re: question about agent type



Why, you could just do [$agent info class "Agent/NBD"] which will
return 1 if $agent derives from Agent/NBD and 0 otherwise.

But the whole idea of tailoring ns-node.tcl (add-target-New) to suit
this particular nbd agent is a hack.  Maybe a better solution would be
having a special target function for your object. Something like this
may work:
Agent/NBD instproc target {{t ""}} {
        if { $t == "" } {
                $self cmd target
        } else {      
                $self instvar node_
                $self cmd target [$node_ set ll_(0)]
        }
}

It's a hack too, but at least it doesn't pollute ns-node.tcl with classnames.

  -Yuri

Lloyd Wood <[email protected]> writes:

> On 19 Feb 2000, Yuri Pryadkin wrote:
> 
> > Or use the info command:
> >   if {[$agent info class] == "Agent/NBD"} {...}
> 
> Surely that's not very class-friendly, because it promptly breaks
> for any subsequent classes derived from NBD?
> 
> Something like:
> 
> if {[string first "Agent/NBD" [$agent info class]] == 0} { }
> 
> strikes me as slightly better, but even that could fall over if you
> say derive an entirely separate class from Agent called NBDother,
> requiring extra tests to separate the two out.
> 
> This is just one good reason why all classes should have / tagged on
> the end as default; then testing for Agent/NBD/ would catch
> _everything_ safely. Oh, and tagging / on the start would mean that
> substring matches can't confuse /Agent/NBD/ with an entirely separate
> /Agent/TapAgent/NBD/.
> 
> Less messy in the long run.
> 
> L.
> 
> Apache redirects teach you a lot about the ns class hierarchy.
> 
> <[email protected]>PGP<http://www.ee.surrey.ac.uk/Personal/L.Wood/>
> 
> 
> > Tarik Alj <[email protected]> writes:
> > 
> > > >From the base class agent write an instproc is-nbd? that always return 0; from 
> > > your nbd agent class write an intsproc is-nbd? that always return 1. It should 
> > > do the trick...
> > > 
> > > > 
> > > > Hello,
> > > > 
> > > > I would like to develop an agent for ad-hoc network which runs a 
> > > > neighbor discovery protocol, and just that.
> > > > As the aodv routing protocol does neighbor discovery, my code-writing 
> > > > strategy has been to steal as much as I could into the aodv code.
> > > > But, I want my new agent, call it nbd, to be a normal agent, not a 
> > > > routing one like aodv. However, I would like nbd to send its packets  
> > > > (hello messages in fact) direclty to the ll layer.
> > > > To do so, I think I should add to the add-target-New procedure in ns/tcl
> > > > /lib/ns-node.tcl the following:
> > > > 
> > > > 	#
> > > > 	# Send Target
> > > > 	#
> > > > 
> > > > If the agent is a nbd
> > > > 	$agent target [$self set ll_(0)]
> > > > else
> > > > 	$agent target [$self entry]
> > > > 	
> > > > 	#
> > > > 	# Recv Target
> > > > 	#
> > > > 	...
> > > > 
> > > > How could I code the "agent is a nbd" part?
> > > > How could I get the type of an agent when the only thing I know about it
> > > >  is "$agent"?
> > > > 
> > > > any suggestions about how I could do what I want to do?
> > > > 
> > > > Cheers,
> > > > --
> > > > Robin POSS
> > > 
> > > Tarik