개발자 이야기/Network
ns2 - How to get routing agent (AODV agent)
sonumb
2010. 3. 31. 23:55
3가지 방법이 있다.
1. agent 간에 패킷에 해당 객체의 주소를 넣어 주고 받는다.
(high complexity)
2. cc 코드 상에서 실행.
MyAgent.cc
class MyAgent: public Agent{..void get_aodv( void );};
void MyAgent::get_aodv( void ){Tcl& tcl=Tcl::instance();sprintf( tcl.buffer(),"$node_(%d) set ragent_",addr() );// TCL 코드상에서 $node_(번호)라는 변수가 선언이 되어야 한다.tcl.eval();AODV* agent = (AODV*)TclObject::lookup(tcl.result());agent->hello();}
Tcl 스크립트상에서 $node_(번호)라는 변수와 위의 함수내에 굵게 처리한 부분과 일치해야하며,
변수의 %d 부분과 자신의 주소(addr())이 동일해야 동작한다.
(한마디로 low scalability이다. -_-;)
3. Tcl 스크립트와 연동하여 사용. (Recommendable)
Myagent.cc
class MyAgent: public Agent{..AODV* agent_;};
void MyAgent::command(int argc, ...... ){Tcl& tcl=Tcl::instance();...if( argc == 2 ) {if( strcasecmp(argv[1], "start" ) == 0) {....}}else if( argc == 3) {if( strcasecmp(argv[1], "get-aodv" ) == 0){agent = (AODV*)TclObject::lookup(argv[2]);return TCL_OK;}else if (.........}...}
...set var(rp) AODV...$ns_ node-config -adhocRouting $val(rp) \...for {set i 0} {$i < 5 } {incr i} {set node_($i) [$ns node_]set p_($i) [new Agent/Protoname]$ns_ attach-agent $node_($i) $p_($i)}
for {set i 0} {$i < 5 } {incr i} {set ra [$node_($i) set ragent_] ;#1$ns_ at 4.5 "$p_($i) get-aodv $ra" ;#2
$ns_ at 5.0 "$p_($i) start";}....
#1.
Tcl 문법에서 클래스의 멤버변수에 값을 할당하기 위해 <인스턴스 set 변수 세팅할_값> 순서로 스크립팅한다. 세팅할_값 을 생략하면 그 변수가 가지고 있는 값을 리턴하는 것이 Tcl 문법인것 같다.(추측 ;)
#2
<#1>실행으로 획득한 Tcl 변수 ra의 값은 특정 TclObject를 간접적으로 가리키는 유일한 스트링 값이다. (포인터 처럼 직접적으로 가리키진 않음)
언더바+문자+숫자, 예를 들어 _o17 이런식으로 이루어져있다.
반응형