在前面已经基本学习了怎么完成一个新协议(一个神奇的ping协议,然鹅还是有点懵。。。)
接下来继续学习相关知识
接着上一部分从1开始
1、必要的修改
如果想要添加添加新的代理程序,就需要修改NS源文件中的内容,特别是在需要使用新的数据包的格式的时候。
① 我们需要一个新的包的类型的ping代理,首先我们需要修改“packet.h”文件,“packet.h”文件中,我们可以找到分组协议ID(如即PT_TCP,PT_TELNET等)的定义。我们在里面做得修改如下代码表示:
enum packet_t {PT_TCP,PT_UDP,......// insert new packet types herePT_TFRC,PT_TFRC_ACK,PT_PING, // packet protocol ID for our ping-agentPT_NTYPE // This MUST be the LAST one
};
同样地,我们需要对p_info做出修改,修改形式如下代码表示
class p_info {
public:p_info() {name_[PT_TCP]= "tcp";name_[PT_UDP]= "udp";...........name_[PT_TFRC]= "tcpFriend";name_[PT_TFRC_ACK]= "tcpFriendCtl";name_[PT_PING]="Ping";name_[PT_NTYPE]= "undefined";}.....}
在进行'make'之前,你必须做一个'make depend',否则这两个文件可能不会被重新编译。
文件'tcl / lib / ns-default.tcl'也必须编辑。 这是定义Tcl对象的所有默认值的文件。 插入以下行以设置Agent / Ping的默认数据包大小。
Agent/Ping set packetSize_ 64
还必须在文件开头的列表中的文件“tcl / lib / ns-packet.tcl”中添加新的ping数据包的条目。 它看起来像下面的代码片段。
{ SRMEXT off_srm_ext_}{ Ping off_ping_ }} {
set cl PacketHeader/[lindex $pair 0]
最后一个更改是必须应用到“Makefile”的更改。 必须将文件“ping.o”添加到ns的目标文件列表中。
sessionhelper.o delaymodel.o srm-ssm.o \ srm-topo.o \ ping.o \ $(LIB_DIR)int.Vec.o $(LIB_DIR)int.RVec.o \ $(LIB_DIR)dmalloc_support.o \ |
您现在只需在ns目录中键入'make'就可以重新编译ns。
2、TCL代码
现在我们需要对TCL代码做一些必要的修改。下面举recv()为例子,代码如下:
Agent/Ping instproc recv {from rtt} {$self instvar node_puts "node [$node_ id] received ping answer from \$from with round-trip-time $rtt ms."
}
以上这段代码访问基类“Agent”的成员变量“node_”,以获取Agent附加的节点的节点ID。
我们可以在上面这些基础上做一些修改,学会创建自己的Agent。