对于括层设计我整理了一下我的文档,发上来供大家参考一下,希望那个能够有些帮助!
这个文档很久以前写的,如果那里有错误请通知我,我会及时修改,免得误导他人:)
NS2 括层调用问题简析
lzqlgq@gmail.com
NS2 各层对应的都是一些类,只要得到其他层类的入口指针即可,比如说通过TCL解释器可以得到,也可以自己设置新的包头位置,然其他层的函数直接填写,但是注意逻辑的正确性。
通过tcl解释器访问从MAC层访问路由层( 我没有未测试过)
Tcl& tcl=Tcl::instance();
int i=mac->index_;
sprintf(tcl.buffer(),"$node_(%d) set ragent_",i);
tcl.eval();
agent=(AODV*)TclObject::lookup(tcl.result());
agent->hello();
从路由层访问所在节点的MAC/IFQ
最简单的方法是通过tcl解释器
IFQ: int i= index;
Queue *ifq;
Tcl& tcl=Tcl::instance();
int i=index;
sprintf(tcl.buffer(),"$node_(%d) set ifq_(0)",i);
tcl.eval();
ifq=(Queue*)TclObject::lookup(tcl.result());
MAC: int i= index;
MAC * mac;
Tcl& tcl=Tcl::instance();
int i=index;
sprintf(tcl.buffer(),"$node_(%d) set mac_(0)",i);
tcl.eval();
mac=(Queue*)TclObject::lookup(tcl.result());
其他方法
至于通过ns手册上面说明的关系来访问,经常出现问题,很多指针没有初始化,要自己写代码才可以使用
类似:
//LL * ll;
//ll=(LL*)mac->link();
//Queue *ifq;
//ifq=(Queue *)ll->downtarget();