在之前对first.cc例子更改学习trace的时候,用到的回调就是下面的回调,回调trace包含在元信息中。如果想在脚本中用回调的话,就需要在回调所在类GetTypeId()方法中添加回调的信息,如下所示:

NS3中根据回调函数签名格式的不同将回调分成两类

1、TracedCallback签名类型

主要用于与分组相关行为事件(分组收发、丢失等)
这种签名格式的返回值是void,形参最多8个。这些trace只是用来读取传入的参数的,所以返回值设置成void。比如上面的例子用到的就是这类回调。
签名格式的命名通常是"ns3::<类名称或命名空间>::<typedef 名>"
比如"ns3::Packet::TracedCallback",“ns3::Ipv4L3Protocol::TxRxTracedCallback”

2、TracedValue签名类型

主要用于一个数值变量的大小变化的事件(拥塞窗口改变、队列中分组数目改变)
是TracedCallback类型的一个子集,因为跟踪一个变量的变化只需要新旧数值两个参数,用不到8个参数,所以才衍生出TracedValue这个类型。TracedValue类在src/core/model/traced-value.h中定义,内部就是只有两个参数的TracedCallback对象。
例子:
1)、TCP接收窗口的回调:
tcp-socket-base.h文件下的类TcpSocketBase中的trace变量:

  TracedValue<uint32_t> m_rWnd;        //!< Receiver window (RCV.WND in RFC793)

对应的trace信息:

TypeId
TcpSocketBase::GetTypeId (void)
{static TypeId tid = TypeId ("ns3::TcpSocketBase").AddTraceSource ("RWND","Remote side's flow control window",MakeTraceSourceAccessor (&TcpSocketBase::m_rWnd),"ns3::TracedValueCallback::Uint32")
}

这里的Uint32是src/core/model/traced-value.h中TracedCallback名字空间中定义的函数指针,指向的函数类型返回值void,接收两个32位的参数。

除了这个函数指针之外TracedCallback名字空间下还定义了其他的一些常用函数指针,用途就是接收不同类型的新旧数值。

2)、检测节点位置信息改变:
mobility-model.h文件下的MobilityModel移动模型相关类中有如下回调(为什么这里要用ns3命名空间为前缀呢?)

ns3::TracedCallback<Ptr<const MobilityModel> > m_courseChangeTrace;
TypeId
MobilityModel::GetTypeId (void)
{static TypeId tid = TypeId ("ns3::MobilityModel").SetParent<Object> ().SetGroupName ("Mobility").AddTraceSource ("CourseChange", "The value of the position and/or velocity vector changed",MakeTraceSourceAccessor (&MobilityModel::m_courseChangeTrace),"ns3::MobilityModel::TracedCallback");return tid;
}

具体的移动模型,都是MobilityModel的子类,在位置改变的时候子类会调用父类的这个函数,因此回调绑定的函数被调用

void
MobilityModel::NotifyCourseChange (void) const
{m_courseChangeTrace (this);
}

在third.cc脚本中,创建一个函数,并设置把这个函数与位置改变回调联系起来

  voidCourseChange (std::string context, Ptr<const MobilityModel> model){Vector position = model->GetPosition ();NS_LOG_UNCOND (context << " x = " << position.x << ", y = " << position.y<<" time:"<<Simulator::Now().GetSeconds());}

在main函数最后Run之前插入下面一段话,这是为最后一个wifi节点绑定回调函数。这里也展示了C++字符串拼接的方法,也可应用于int转string。

 std::ostringstream oss;oss << "/NodeList/"<< wifiStaNodes.Get (nWifi - 1)->GetId ()<< "/$ns3::MobilityModel/CourseChange";Config::Connect (oss.str (), MakeCallback (&CourseChange));

运行结果:

the node size:3
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10, y = 0 time:0
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.3841, y = 0.923277 time:0.264586
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.2049, y = 1.90708 time:0.726624
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.8136, y = 1.11368 time:1.21727
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.8452, y = 2.11318 time:1.55391
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.9797, y = 3.10409 time:1.90586
At time 2s client sent 1024 bytes to 10.1.2.4 port 9
For P10 , At +2017955049.0ns, node 10.1.2.4 receive a packet from 10.1.3.3
At time 2.01796s server received 1024 bytes from 10.1.3.3 port 49153
/NodeList/7/$ns3::MobilityModel/CourseChange x = 11.3273, y = 4.04175 time:2.2186
/NodeList/7/$ns3::MobilityModel/CourseChange x = 12.013, y = 4.76955 time:2.63984
/NodeList/7/$ns3::MobilityModel/CourseChange x = 12.4317, y = 5.67771 time:2.95688
At time 3s client sent 1024 bytes to 10.1.2.4 port 9
For P10 , At +3005254603.0ns, node 10.1.2.4 receive a packet from 10.1.3.3
At time 3.00525s server received 1024 bytes from 10.1.3.3 port 49153
/NodeList/7/$ns3::MobilityModel/CourseChange x = 11.4607, y = 5.91681 time:3.22047
/NodeList/7/$ns3::MobilityModel/CourseChange x = 12.0155, y = 6.74878 time:3.54923
/NodeList/7/$ns3::MobilityModel/CourseChange x = 13.0076, y = 6.62336 time:3.87834
At time 4s client sent 1024 bytes to 10.1.2.4 port 9
For P10 , At +4005254604.0ns, node 10.1.2.4 receive a packet from 10.1.3.3
At time 4.00525s server received 1024 bytes from 10.1.3.3 port 49153
/NodeList/7/$ns3::MobilityModel/CourseChange x = 12.6285, y = 5.698 time:4.14201
/NodeList/7/$ns3::MobilityModel/CourseChange x = 13.32, y = 4.97559 time:4.50591
/NodeList/7/$ns3::MobilityModel/CourseChange x = 13.1134, y = 3.99715 time:4.79762
/NodeList/7/$ns3::MobilityModel/CourseChange x = 13.8359, y = 4.68851 time:5.26802
/NodeList/7/$ns3::MobilityModel/CourseChange x = 13.5953, y = 3.71789 time:5.55539
/NodeList/7/$ns3::MobilityModel/CourseChange x = 12.7595, y = 4.26688 time:5.8998
/NodeList/7/$ns3::MobilityModel/CourseChange x = 11.7629, y = 4.34913 time:6.33086
/NodeList/7/$ns3::MobilityModel/CourseChange x = 11.2292, y = 5.19485 time:6.65619
/NodeList/7/$ns3::MobilityModel/CourseChange x = 10.2344, y = 5.09394 time:6.91098
/NodeList/7/$ns3::MobilityModel/CourseChange x = 9.3601, y = 4.60846 time:7.26228
/NodeList/7/$ns3::MobilityModel/CourseChange x = 8.40025, y = 4.32795 time:7.61601
/NodeList/7/$ns3::MobilityModel/CourseChange x = 9.14292, y = 4.99761 time:7.89798
/NodeList/7/$ns3::MobilityModel/CourseChange x = 9.08299, y = 5.99581 time:8.33373
/NodeList/7/$ns3::MobilityModel/CourseChange x = 8.26068, y = 5.42677 time:8.58405
/NodeList/7/$ns3::MobilityModel/CourseChange x = 8.35917, y = 6.42191 time:9.03936
/NodeList/7/$ns3::MobilityModel/CourseChange x = 7.66805, y = 7.14466 time:9.30208
/NodeList/7/$ns3::MobilityModel/CourseChange x = 6.71414, y = 6.84456 time:9.61913
/NodeList/7/$ns3::MobilityModel/CourseChange x = 6.42489, y = 7.80181 time:9.89537

NS3——trace分类及trace记录移动位置信息相关推荐

  1. php trace 函数,PHP Trace 实现原理

    phptrace 实现原理 总体介绍 PHPTrace致力于打造一款实时跟踪PHP函数调用,获取PHP函数调用栈信息以及PHP解释器状态的工具,这个PHP工具应该像系统工具strace/pstack一 ...

  2. jnitrace、frida-trace、Stalker、sktrace、Frida Native Trace、r0tracer、strace、IDA trace、Unidbg Trace

    JNI 提示:https://developer.android.google.cn/training/articles/perf-jni?hl=zh-cn JNI 文档:https://docs.o ...

  3. 3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息

    跟踪标记:1204/1222 功能及用途: 捕获SQL Server死锁信息,并自动存放到错误日志(ERRORLOG)中. 举例: USE tempdb GO CREATE TABLE t1(id i ...

  4. linux trace学习(二)——trace使用

    linux trace学习(二)--trace使用 备注:   1. Kernel版本:4.19.123   2. 使用工具:Source Insight 4.0   3. 参考博客: Linux f ...

  5. log4j:踩坑记录:log4j2异步日志无法打印%L %M等位置信息

    问题描述: 最近项目想打印更详细的日志信息,包括打印日志的位置和方法.在log4j2的配置文件中为格式添加%L和%M后,发现并不能打印出行号和方法名. 不了解log4j2配置文件请参考log4j2配置 ...

  6. E/Trace: error opening trace file: No such file or directory

    E/Trace: error opening trace file: No such file or directory (2) 有这一个错误,想了一下,然后发现是 AdroidManifest.xm ...

  7. scrollTop记录滚动位置

    前文提到,需要记录滚动位置, vue-router提供了一个方法 scrollBehavior,但是这个方法必须要在history模式下才能使用,具体参考文档 使用的方式如下 const scroll ...

  8. 微软Bing泄露多达6.5TB用户数据:包含搜索记录和位置

    配置不当的服务器记录了来自Bing移动应用程序的数据. WizCase安全团队发现记录Bing移动应用程序数据的微软拥有的一台服务器泄露了大量数据.安全团队发现,数据是通过一台未做好安全工作的Elas ...

  9. 定位服务器已关闭里面显示的时间,测试显示iPhone关闭定位服务仍记录用户位置...

    北京时间4月25日上午消息,国外媒体进行的一项测试显示,即使在定位服务被关闭的情况下,iPhone仍会收集并储存用户的位置信息.此时位置数据来自手机基站和WiFi接入点,同时并被发送给苹果. 苹果尚未 ...

最新文章

  1. 数据分析与挖掘实战-家用电器用户行为分析与事件识别
  2. 随手看的一本书《java微服务》,测试成功了其中的第一个样例
  3. .net core ——微服务内通信Thrift和Http客户端响应比较
  4. javascript-网页换肤案例
  5. 【Linux】Linux查看机器负载-IO负载
  6. JavaScript——Prototype详探
  7. MVC进阶学习--个性化目录结构(三)
  8. xshell xftp 工具免费版本免费下载
  9. matlab对多项式求导的命令,matlab多项式求导
  10. 简单嵌入式系统软件架构
  11. 无线网络安全——1、WiFi安全基础知识
  12. 观察者模式实际应用场景「扩展点实战系列」- 第439篇
  13. 路飞学城python全栈开发_[Python] 老男孩路飞学城Python全栈开发重点班 骑士计划最新100G...
  14. 最便捷的港股/A股/美股实时行情API【免费-免费-免费滴,已应用到策略中】
  15. 一个优秀的平面设计作品需要满足那些特点
  16. rgb转hsl,红绿蓝转色调饱和度亮度(颜色转换,c#)
  17. win10点击任务栏图标无法最小化应用
  18. 怎么扫描同网段mac地址linux,如何快速收集局域网内的IP+MAC信息?用这个扫描器分分钟搞定!!!...
  19. HTML+CSS+js搭建简易网页(1)构建网页的骨架
  20. 二次封装a-upload组件,自定义上传预览

热门文章

  1. python 二维两点距离_python 各类距离公式实现
  2. Linux用户管理之sudo权限(visudo)
  3. 软著之 如何整理程序代码至word文档
  4. 那根胡萝卜---走出软件作坊:三五个人十来条枪 如何成为开发正规军(十五)
  5. Tbox 相关名词总结
  6. 囧科技:用Office的老铁,扎心了
  7. Windows环境下时间服务器(NTP)的创建与应用
  8. 均匀直线阵的常规波束形成matlab
  9. 手机浏览器无法触屏滚动
  10. 【NLP系列1】基于Doc2Vec的文本分类