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

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

  1. NS2相关学习——完成一个新协议(2)

    在上节中,我们把教程要求的3.1-3.3过了一遍,这一次回到正途上来.看看到底是怎么完成一个新的协议的. 本节中的代码实现了一些简单的"ping"协议(灵感来自"ns注释 ...

  2. NS2相关学习——完成一个新的协议(1)

    接下来要进入对我来说老大难的环节了,从表面的TCL慢慢进入到后端的C++,一起加油学习吧~ 在本节学习中,将给出一个在ns中实现新的协议的例子.但是可以想见的是,如果由我们自己来完成这个工作,势必要对 ...

  3. NS2相关学习——可靠的MANET应用程序的Gossip协议分析

    好久不写,应该努力啦!老师把这篇论文给了我,现在还不知道它在讲什么,来边翻译边学习吧! 文章链接:https://www.researchgate.net/publication/316844643_ ...

  4. NS2相关学习——在ns中模拟无线场景

    之前学习的都是有线场景下的NS2相关应用,现在开始,终于要学习无线啦!无线是我研究的重点,要好好学习呀! 在本节中,我们将学习使用ns中提供的移动无线仿真模型. 该部分由两部分组成. 在第一小节中,我 ...

  5. 语义表征的无监督对比学习:一个新理论框架

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」7折优惠最后3天,请扫码咨询 ↑↑↑ 译者 | Linstancy 责编 | 琥珀 出品 | AI科技大本营(ID:rgznai100) ...

  6. NS2相关学习——创建Xgraph的输出文件

    经过前面学习代码的编写,这一部分,我们要学会如何进行分析,一个很直观的方式就是将结果图形化表示出来. ns-allinone包的一部分是"xgraph",一个绘图程序,可用于创建模 ...

  7. ns2相关学习——TCL脚本编写(3)

    在这里我们将学习动态网络的建立 1.建立拓扑 当节点很多的时候,我们可以使用循环的方式来建立拓扑. for {set i 0} {$i < 7} {incr i} {set n($i) [$ns ...

  8. ns2相关学习——TCL脚本编写(2)

    下面来学习更加复杂一点的TCL脚本的编写 简述:建立有4个节点的拓扑,其中一个节点作为路由器,用来将两个节点发出的数据包转发到第四个节点上面. 在这里将解释将两个节点的数据流区分开来的方法,展示如何去 ...

  9. 蓝牙相关学习:3.BLE协议物理层

    物理层 频段 调制 信道 跳频 参考地址 Physical Layer 简称 PHY(物理层) 由于BLE属于无线通信,则其通信介质是一定频率范围下的频带资源(Frequency Band) 频段 B ...

最新文章

  1. MemCached缓存知识知多少?
  2. 胡珀:从危到机,AI 时代下的安全挑战
  3. git 合并冲突_GIT提交记录和Revert commit过程分析
  4. 彻底搞懂Cookie、Session、JWT和Token
  5. A damn at han’s Windows phone book 笔记(3:ICE——In Case of Emergency)
  6. tidb 企业_TiDB,日均千万级数据存储方案选型
  7. [JUC-1]并发包实现及线程状态
  8. 家庭洗车APP --- Androidclient开展 之 网络框架包介绍(一)
  9. hibernate还有人用吗
  10. 如何绕过校园网认证,不付费就可以使用自己的网络。
  11. Geodatabase
  12. SQL Server中默认的数据库及作用
  13. 手机浏览器 打开 APP,APP 嵌套在了浏览器里,网页跳转app问题
  14. sql怎样与python联系_【Python】SQLAlchemy的数据对象实例能否转为一个简单的对象(切断与数据库会话的联系)...
  15. 适合老爸用的在线的LaTeX数学公式编辑器
  16. EmguCV方形答题卡识别
  17. 美食杰(个人主页) 上
  18. 合并pd.merge()含有相同的某一列两个不同的dataframe表格
  19. WPF ContextMenu的使用
  20. vivado基本开发流程

热门文章

  1. AES算法重点详解和实现
  2. 怪哉翻译软件测试,[东方朔传翻译]东方朔传·怪哉原文与翻译
  3. 伦巴时间步的动作要领_军训动作要领已到,请签收
  4. Android插u盘自动执行,android tv box ---- 插入u盘直接播放指定文件夹中的视频
  5. 图解Java常用数据结构
  6. css 查看更多_在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)...
  7. 【LeetCode笔记】121. 买卖股票的最佳时机 / 剑指 Offer 63. 股票的最大利润(Java、动态规划)
  8. 手机上python编程工具3和3h有区别吗_Python 高级 3
  9. 利用计算机录音模拟声波,2016年计算机一级考试题库及答案
  10. mysql 扩展存储过程_MySQL4:存储过程和函数