在前面已经基本学习了怎么完成一个新协议(一个神奇的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
};
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";}.....}文件'tcl / lib / ns-default.tcl'也必须编辑。 这是定义Tcl对象的所有默认值的文件。 插入以下行以设置Agent / Ping的默认数据包大小。
Agent/Ping set packetSize_ 64
 	{ SRMEXT off_srm_ext_}{ Ping off_ping_ }} {
set cl PacketHeader/[lindex $pair 0]
| 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。