快乐虾

http://blog.csdn.net/lights_joy/

欢迎转载,但请保留作者信息

在first.py中创建了一个点到点的信道,且配置了两个属性:

  1. pointToPoint = ns.point_to_point.PointToPointHelper()
  2. pointToPoint.SetDeviceAttribute("DataRate", ns.core.StringValue("2Mbps"))
  3. pointToPoint.SetChannelAttribute("Delay", ns.core.StringValue("100ms"))

在配置DataRate时。first.py传递了一个字符串”2Mbps”。这个字符串最后由以下的C++代码进行解析:

  1. bool
  2. DataRate::DoParse (const std::string s, uint64_t *v)
  3. {
  4. NS_LOG_FUNCTION (s << v);
  5. std::string::size_type n = s.find_first_not_of ("0123456789.");
  6. if (n != std::string::npos)
  7. { // Found non-numeric
  8. std::istringstream iss;
  9. iss.str (s.substr (0, n));
  10. double r;
  11. iss >> r;
  12. std::string trailer = s.substr (n, std::string::npos);
  13. if (trailer == "bps")
  14. {
  15. // bit/s
  16. *v = (uint64_t)r;
  17. }
  18. else if (trailer == "b/s")
  19. {
  20. // bit/s
  21. *v = (uint64_t)r;
  22. }
  23. else if (trailer == "Bps")
  24. {
  25. // byte/s
  26. *v = (uint64_t)(r * 8);
  27. }
  28. else if (trailer == "B/s")
  29. {
  30. // byte/s
  31. *v = (uint64_t)(r * 8);
  32. }
  33. else if (trailer == "kbps")
  34. {
  35. // kilobits/s
  36. *v = (uint64_t)(r * 1000);
  37. }
  38. else if (trailer == "kb/s")
  39. {
  40. // kilobits/s
  41. *v = (uint64_t)(r * 1000);
  42. }
  43. else if (trailer == "Kbps")
  44. {
  45. // kilobits/s
  46. *v = (uint64_t)(r * 1000);
  47. }
  48. else if (trailer == "Kb/s")
  49. {
  50. // kilobits/s
  51. *v = (uint64_t)(r * 1000);
  52. }
  53. else if (trailer == "kBps")
  54. {
  55. // kiloByte/s
  56. *v = (uint64_t)(r * 8000);
  57. }
  58. else if (trailer == "kB/s")
  59. {
  60. // KiloByte/s
  61. *v = (uint64_t)(r * 8000);
  62. }
  63. else if (trailer == "KBps")
  64. {
  65. // kiloByte/s
  66. *v = (uint64_t)(r * 8000);
  67. }
  68. else if (trailer == "KB/s")
  69. {
  70. // KiloByte/s
  71. *v = (uint64_t)(r * 8000);
  72. }
  73. else if (trailer == "Kib/s")
  74. {
  75. // kibibit/s
  76. *v = (uint64_t)(r * 1024);
  77. }
  78. else if (trailer == "KiB/s")
  79. {
  80. // kibibyte/s
  81. *v = (uint64_t)(r * 8192);
  82. }
  83. else if (trailer == "Mbps")
  84. {
  85. // MegaBits/s
  86. *v = (uint64_t)(r * 1000000);
  87. }
  88. else if (trailer == "Mb/s")
  89. {
  90. // MegaBits/s
  91. *v = (uint64_t)(r * 1000000);
  92. }
  93. else if (trailer == "MBps")
  94. {
  95. // MegaBytes/s
  96. *v = (uint64_t)(r * 8000000);
  97. }
  98. else if (trailer == "MB/s")
  99. {
  100. // MegaBytes/s
  101. *v = (uint64_t)(r * 8000000);
  102. }
  103. else if (trailer == "Mib/s")
  104. {
  105. // MebiBits/s
  106. *v = (uint64_t)(r * 1048576);
  107. }
  108. else if (trailer == "MiB/s")
  109. {
  110. // MebiByte/s
  111. *v = (uint64_t)(r * 1048576 * 8);
  112. }
  113. else if (trailer == "Gbps")
  114. {
  115. // GigaBit/s
  116. *v = (uint64_t)(r * 1000000000);
  117. }
  118. else if (trailer == "Gb/s")
  119. {
  120. // GigaBit/s
  121. *v = (uint64_t)(r * 1000000000);
  122. }
  123. else if (trailer == "GBps")
  124. {
  125. // GigaByte/s
  126. *v = (uint64_t)(r * 8*1000000000);
  127. }
  128. else if (trailer == "GB/s")
  129. {
  130. // GigaByte/s
  131. *v = (uint64_t)(r * 8*1000000000);
  132. }
  133. else if (trailer == "Gib/s")
  134. {
  135. // GibiBits/s
  136. *v = (uint64_t)(r * 1048576 * 1024);
  137. }
  138. else if (trailer == "GiB/s")
  139. {
  140. // GibiByte/s
  141. *v = (uint64_t)(r * 1048576 * 1024 * 8);
  142. }
  143. else
  144. {
  145. return false;
  146. }
  147. return true;
  148. }
  149. std::istringstream iss;
  150. iss.str (s);
  151. iss >> *v;
  152. return true;
  153. }

从这一段代码也能够明显看出NS3中速率字符串的表达方式及意义,比文档清晰多了,原来还不知道速率能够有这么多的表达方式,汗一个~~~~

从”DataRate”顺藤摸瓜。能够发现其他几个设备属性:

  1. TypeId
  2. SimpleNetDevice::GetTypeId (void)
  3. {
  4. static TypeId tid = TypeId ("ns3::SimpleNetDevice")
  5. .SetParent<NetDevice> ()
  6. .SetGroupName("Network")
  7. .AddConstructor<SimpleNetDevice> ()
  8. .AddAttribute ("ReceiveErrorModel",
  9. "The receiver error model used to simulate packet loss",
  10. PointerValue (),
  11. MakePointerAccessor (&SimpleNetDevice::m_receiveErrorModel),
  12. MakePointerChecker<ErrorModel> ())
  13. .AddAttribute ("PointToPointMode",
  14. "The device is configured in Point to Point mode",
  15. BooleanValue (false),
  16. MakeBooleanAccessor (&SimpleNetDevice::m_pointToPointMode),
  17. MakeBooleanChecker ())
  18. .AddAttribute ("TxQueue",
  19. "A queue to use as the transmit queue in the device.",
  20. StringValue ("ns3::DropTailQueue"),
  21. MakePointerAccessor (&SimpleNetDevice::m_queue),
  22. MakePointerChecker<Queue> ())
  23. .AddAttribute ("DataRate",
  24. "The default data rate for point to point links. Zero means infinite",
  25. DataRateValue (DataRate ("0b/s")),
  26. MakeDataRateAccessor (&SimpleNetDevice::m_bps),
  27. MakeDataRateChecker ())
  28. .AddTraceSource ("PhyRxDrop",
  29. "Trace source indicating a packet has been dropped "
  30. "by the device during reception",
  31. MakeTraceSourceAccessor (&SimpleNetDevice::m_phyRxDropTrace),
  32. "ns3::Packet::TracedCallback")
  33. ;
  34. return tid;
  35. }

仅仅只是我们眼下暂且无论这些属性。

改动DataRate的值。能够发如今NetAnim中最明显的表现就是用以表示数据包的箭头的长度,当DataRate为2Mbps时:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

当DataRate变为200Kbps时就变成了:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

区别还是非常明显的!



NS3网络仿真(4): DataRate属性的更多相关文章

  1. NS3网络仿真(2):first.py

    1    安装基本模块 11  安装Python 12  安装PTVS 13  加入对python-279的支持 2    在vs2013下编译NS3 3    编译NetAnim 4    在vs2 ...

  2. NS3网络仿真(6): 总线型网络

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载.但请保留作者信息 在NS3提供的第一个演示样例first.py中,模拟了一个点对点的网络,接下来的一个演示样例代码模 ...

  3. NS3网络仿真(7): Wifi节点

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在上一节中.我们仿真了一个总线型网络,这一节尝试将上一节中的n0变成一个无线的AP.再连上几个节点 ...

  4. NS3网络仿真(3): NetAnim

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3提供的演示样例first.py中,并没有生成NetAnim所须要的xml文件,本节我们尝试 ...

  5. NS3网络仿真(12): ICMPv4协议

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 ICMP的全称是 Internet ControlMessage Protocol . 其目的就是 ...

  6. NS3网络仿真(9): 构建以太网帧

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3使用了一个叫Packet的类来表示一个数据帧,本节尝试用它构造一个以太网帧. 以下是一个典 ...

  7. NS3网络仿真(11): ARP

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 ARP(Address ResolutionProtocol,地址解析协议)协议的基本功能就是通过 ...

  8. NS3网络仿真(10): 解析以太网帧

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载.但请保留作者信息 解析以太网帧的过程是构建以太网帧的逆过程,当我们接收到一个以太网帧时,仍然以上一节中的ARP帧为例 ...

  9. NS3网络仿真(5): 数据包分析

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在我们生成的xml文件里.是不包括生成的数据包的数据的,在我们的脚本中加入以下的语句: point ...

随机推荐

  1. CentOS 6.5 x64 安装Tomcat8 并配置两个Tomcat8

    1.首先,安装tomcat的前提是已经配置好jdk环境变量,若没配好可以参考我的上一篇博文:CentOS 6.5 x64安装jdk8,当然也可以通过网络搜索安装步骤~~ 2.下载: 可以通过官网下载: ...

  2. Laya 分帧加载优化

    Laya 分帧加载优化 @author ixenos Flash中的EnterFrame事件在Laya中等同于Laya.timer.frameLoop(1,...) Laya.timer.frameL ...

  3. react.js 给标识ref,获取内容

    import React,{Component} from 'react' import ReactDOM from 'react-dom' class App extends Component{ ...

  4. BOOST asio 例程daytime不使用库编译方法

    在不使用lib库编译daytime client程序时,按照<Boost程序库完全开发指南>添加的定义 #define BOOST_REGEX_NO_LIB#define BOOST_DA ...

  5. msp430项目编程16

    msp430中项目---电子秒表 1.定时器工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习

  6. putty 配置

    http://blog.sanctum.geek.nz/putty-configuration/ PuTTY configuration Posted on December 22, 2012 PuT ...

  7. CPM、CPC、CPA、PFP、CPS、CPL、CPR介绍

    一个网络媒体(网站)会包含有数十个甚至成千上万个页面,网络广告所投放的位置和价格 就牵涉到特定的页面以及浏览人数的多寡.这好比平面媒体(如报纸)的“版位”.“发行 量”,或者电波媒体(如电视)的“时段 ...

  8. BZOJ 2308 莫队入门经典

    题目链接  https://www.lydsy.com/JudgeOnline/problem.php?id=2038 参考博客 https://www.cnblogs.com/Paul-Guderi ...

  9. 标准格式包含: 私有属性 无参构造 有参构造 setter 和getter 需求中的方法 需求一: 员工类Employee 属性:姓名name,工号id,工资salary 行为:显示所有成员信息的方法show() 需求二: 动物类Animal 属性:姓名name,年龄age 行为:吃饭

      // 员工类 public class Employee { private String name; private int id; private double salary; public ...

  10. Spring Boot中使用logback日志框架

    说明:Spring Boot在最新的版本中默认使用了logback框架.一般来说使用时只需在classpath下创建logback.xml即可,而官方推荐使用logback-spring.xml替代, ...