免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1136 | 回复: 0
打印 上一主题 下一主题

NS编程与调试-1代理的声明与OTCL类的绑定 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-20 16:12 |只看该作者 |倒序浏览

如果在NS中做扩展代理模块。则需要新写这个模块。应用这个模块就要在tcl脚本中加入一段绑定的话:
set val(chan)   Channel/WirelessChannel    ;# channel type
set val(prop)   Propagation/TwoRayGround   ;# radio-propagation model
set val(netif)  Phy/WirelessPhy/OFDM       ;# network interface type
set val(mac)    Mac/802_16/MBS             ;# MAC type
set val(ifq)    Queue/DropTail/PriQueue    ;# interface queue type
set val(ll)     LL                         ;# link layer type
set val(ant)    Antenna/OmniAntenna        ;# antenna model
set val(ifqlen) 50                         ;# max packet in ifq
set val(nn)     3                          ;# number of mobilenodes
set val(rp)     DSDV                       ;# routing protocol
set val(x)      600                        ;# X dimension of topography
set val(y)      600                        ;# Y dimension of topography
set val(stop)   200.0                      ;# time of simulation end
如上,如果我们在mac层应用的协议是802.11,则会写
set val(mac) Mac/802_11
当我们需要自己开发一个mac层协议时,我们首先需要考虑添加的协议名称。协议中的子类型。如协议名为802_16,802.16 mesh模式中有两种形式的节点,mesh base station 和 mesh sub station。于是需要在实现协议时,继承于802.16类,定义两个子类:802_16MBS,802_16MSS。通过一定的绑定机制,在tcl脚本中就可以写
set val(mac) Mac/802_16/MBS
或者 set val(mac) Mac/802_16/MSS
这两句话在tcl脚本中的意思是分别定义两种节点,一种节点是MBS类型。另一种是MSS类型。
具体定义方式:
#============================================
#  Initial variances about C++ class type
#============================================
set val(chan)   Channel/WirelessChannel    ;# channel type
set val(prop)   Propagation/TwoRayGround   ;# radio-propagation model
set val(netif)  Phy/WirelessPhy/OFDM       ;# network interface type
set val(mac)    Mac/802_16/MBS             ;# MAC type
set val(ifq)    Queue/DropTail/PriQueue    ;# interface queue type
set val(ll)     LL                         ;# link layer type
set val(ant)    Antenna/OmniAntenna        ;# antenna model
set val(ifqlen) 50                         ;# max packet in ifq
set val(nn)     3                          ;# number of mobilenodes
set val(rp)     DSDV                       ;# routing protocol
set val(x)      600                        ;# X dimension of topography
set val(y)      600                        ;# Y dimension of topography
set val(stop)   200.0                      ;# time of simulation end
### some variances initial ###
#============================================
#  set Trace and Topo
#============================================
*
* tcl code
*
#============================================
#  Configure for Node   
#============================================
$ns node-config -adhocRouting $val(rp) \
                -llType $val(ll) \
                -macType Mac/802_16/MBS \
                -ifqType $val(ifq) \
                -ifqLen $val(ifqlen) \
                -antType $val(ant) \
                -propType $val(prop) \
                -phyType $val(netif) \
                -channel [new $val(chan)] \
                -topoInstance $topo \
                -agentTrace OFF \
                -routerTrace OFF \
                -macTrace ON \
                -movementTrace OFF
在上面代码下面定义节点:
#============================================
#  Initial node - MBS  
         
#============================================
set node_(0) [$ns node]
$node_(0) set X_ 200
$node_(0) set Y_ 200
$node_(0) set Z_ 0.0
$ns initial_node_pos $node_(0) 30
[$node_(0) set mac_(0)] set-channel 0
若需要定义MSS类型的节点,则接着写
#============================================
#  Initial node - MSS
#============================================
$ns node-config -macType Mac/802_16/MSS \       ;#此处只能写这些,不能把路由,ll层等的绑定再写一遍
               -macTrace ON
set node_(1) [$ns node]
$node_(1) set X_ 300
$node_(1) set Y_ 300
$node_(1) set Z_ 0.0
$ns initial_node_pos $node_(1) 30
[$node_(1) set mac_(0)] set-channel 0
set node_(2) [$ns node]
$node_(2) set X_ 200
$node_(2) set Y_ 300
$node_(2) set Z_ 0.0
$ns initial_node_pos $node_(2) 30
[$node_(2) set mac_(0)] set-channel 4
这样,就声明了MBS和MSS的节点。具体工作过程就要看c++的实现函数了。
那么怎样完成c++与otcl在此处的绑定呢?方法如下:
1,先为父类写绑定函数:
/**
* TCL Hooks for the simulator for wimax mac
*/
static class Mac802_16Class : public TclClass {
public:
  Mac802_16Class() : TclClass("Mac/802_16") {}
  TclObject* create(int, const char*const*) {
    return (new Mac802_16());
   
  }
} class_mac802_16;
2,为子类写绑定函数:
/**
*TCL Hooks for the simulator for wimax mac
*/
static class Mac802_16MBSClass : public TclClass {
public:
Mac802_16MBSClass() : TclClass("Mac/802_16/MBS") {}
TclObject* create(int, const char*const*){
  return(new Mac802_16MBS());
  }
} class_mac802_16MBS;
通过上述步骤,则实现了声明。当在tcl中写 -macType Mac/802_16/MBS \时,ns会自动寻找相应的解析函数,于是调用new Mac802_16MBS();完成对该类的初始化,形成这个类的一个对象。

版权声明
:转载时请以超链接形式标明文章原始出处和作者信息及
本声明
http://citynight.blogbus.com/logs/11389299.html


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/54783/showart_1006184.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP