NS2相关学习——完成一个新协议(3)

在前面已经基本学习了怎么完成一个新协议(一个神奇的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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值