2

我开发了类似于 UnetStack1.3 /samples/ping(静态路由信息添加到路由表中RouteDiscoveryNtf,因为在上层通知(DatagramNtfDatagramDeliveryNtfDatagramFailureNtf)中没有可用的时序信息。

往返时间的计算是ping 示例中的clousure ( ) 中实现的差异rxtimetxtime可用的。TxFrameNtfRxFrameNtffshrc.groovy

我还尝试分析在 UnetStack3 中实现的 ping 实用程序,但无法确定。请让我知道 RTT 是如何计算的

4

1 回答 1

1

ping下面是UnetStack3 中命令实现的简化版本:

  def ping(int n, int m = 3, long timeout = 30000) {
    println "PING $n"
    AgentID router = agentForService(Services.ROUTING)
    int p = 0
    m.times { count ->
      def t0 = currentTimeMillis()
      router << new DatagramReq(to: n, reliability: true)
      def ntf = receive({
        it instanceof DatagramDeliveryNtf || it instanceof DatagramFailureNtf
      }, timeout)
      def t = currentTimeMillis()-t0
      if (ntf == null || ntf instanceof DatagramFailureNtf) {
        println "Request timeout for seq $count"
      } else {
        p++
        println "Response from $n: seq=$count rthops=2 time=$t ms"
      }
      delay(5000)
    }
    println "$m packets transmitted, $p packets received, ${Math.round(100*(m-p)/m)}% packet loss"
  }
于 2019-10-09T09:36:21.427 回答