在前面已经基本学习了怎么完成一个新协议(一个神奇的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 here
PT_TFRC,
PT_TFRC_ACK,
PT_PING, // packet protocol ID for our ping-agent
PT_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。