在NS2的仿真中,经常需要重复地用到一些TCL命令或者固定的C++用法。现初步汇总如下:
TCL 命令:
$ns at time task
$ns simple-link
$ns duble-link
C++:
获得当前TCL解释器: TCL& tcl=TCL::instance();
在C++中执行指定命令: tcl.EvalC()
获得当前时间: double cur=Simulator:instance().clock();
与节点处理相关的命令: 1. 获得指定包头: 方法1. hdr_*::access(packet); 方法2:宏 HDR_* (packet)
#define HDR_CMN(p) (hdr_cmn::access(p))
#define HDR_ARP(p) (hdr_arp::access(p))
#define HDR_MAC(p) (hdr_mac::access(p))
#define HDR_MAC802_11(p) ((hdr_mac802_11 *)hdr_mac::access(p))
#define HDR_MAC_TDMA(p) ((hdr_mac_tdma *)hdr_mac::access(p))
#define HDR_SMAC(p) ((hdr_smac *)hdr_mac::access(p))
#define HDR_LL(p) (hdr_ll::access(p))
#define HDR_HDLC(p) ((hdr_hdlc *)hdr_ll::access(p))
#define HDR_IP(p) (hdr_ip::access(p))
#define HDR_RTP(p) (hdr_rtp::access(p))
#define HDR_TCP(p) (hdr_tcp::access(p))
#define HDR_SCTP(p) (hdr_sctp::access(p))
#define HDR_SR(p) (hdr_sr::access(p))
#define HDR_TFRC(p) (hdr_tfrc::access(p))
#define HDR_TORA(p) (hdr_tora::access(p))
#define HDR_IMEP(p) (hdr_imep::access(p))
#define HDR_CDIFF(p) (hdr_cdiff::access(p)) /* chalermak's diffusion*/
//#define HDR_DIFF(p) (hdr_diff::access(p)) /* SCADD's diffusion ported into ns */
#define HDR_LMS(p) (hdr_lms::access(p))
2 根据传入的对象全局ID值 获得C++对象的引用。
TclObject::lookup(*)
这里,传入的值 是每个TClObject对应的 全局唯一ID值。一般是以 _o+integer的形式出现,如 _o4
其实,TclObbject的ID值,是在create_shadow函数中,通过o->name(argv[0])传入的;而这个argv[0]的值便是OTCL脚本中,执行new OTCL对象时,由OTCL的 SplitObject 的 getid 方法返回的;
因此,假设我们能够获得TCLObject的具体类型,并且又知道它的这个全局唯一ID值,便可以通过Tcl::lookup(ID)来获得,然后再强制转换成具体类型便可。(其实 lookup是在TCL类中实现的非静态成员函数,TclObject只不过是通过TCL类的静态实例instance来间接调用罢了;而有趣的是,每个TclObject对象在存储时,也是通过TCL类的非静态成员函数 enter 实现的)
节点 有一个 getid ,但它返回的是节点的id 对应着节点的地点(默认情况下) , 与全局的ID 是不同的概念。因此,就算获得了节点的ID值,也不能获得该节点的C++实际影像的引用。
NS2常用C++以及TCL命令(转)
最新推荐文章于 2022-03-09 11:17:16 发布