To disable send, specify empty destAddr.
Every ping request is sent out with a sequence number, and replies are expected to arrive in the same order. Whenever there's a jump in the in the received ping responses' sequence number (e.g. 1, 2, 3, 5), then the missing pings (number 4 in this example) is counted as lost. Then if it still arrives later (that is, a reply with a sequence number smaller than the largest one received so far) it will be counted as out-of-sequence arrival. So the number of really lost pings will be "lost" minus "out-of-order" (assuming there's no duplicate or bogus reply).
Uses PingPayload as payload for the ICMP(v6) Echo Request/Reply packets.
See also: PingPayload, ICMP, ICMPv6
The following diagram shows usage relationships between types. Unresolved types are missing from the diagram.
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Name | Type | Default value | Description |
---|---|---|---|
destAddr | string | "" |
destination address(es), separated by spaces, "*" means all IPv4/IPv6 interfaces in entire simulation |
srcAddr | string | "" |
source address (useful with multi-homing) |
packetSize | double | 56B |
of ping payload, in bytes |
sendInterval | double | 1s |
time to wait between pings (can be random) |
hopLimit | double | 32 |
TTL or hopLimit for IP packets |
count | double | -1 |
number of pings requests sent to a single destination address, -1 means continuously (only first address will be used from destAddr) |
startTime | double | uniform(0s, this.sleepDuration + this.sendInterval) |
send first ping at startTime |
stopTime | double | -1s |
time to finish sending, negative values mean forever |
sleepDuration | double | 0s |
time spent in sleep between switching destinations |
continuous | bool | false |
whether to continuously ping the destinations in a round-robin fashion |
printPing | bool | false |
log to stdout |
Name | Value | Description |
---|---|---|
display | i=block/app |
Name | Direction | Size | Description |
---|---|---|---|
pingIn | input | ||
pingOut | output |
Name | Type | Unit |
---|---|---|
pingRxSeq | long | |
numLost | long | |
rtt | simtime_t | |
numOutOfOrderArrivals | long | |
pingTxSeq | long |
Name | Title | Source | Record | Unit | Interpolation Mode |
---|---|---|---|---|---|
pingRxSeq | ping rx seq | count, vector | none | ||
numLost | pings lost | last, vector | none | ||
rtt | ping round-trip time | histogram, vector | s | none | |
numOutOfOrderArrivals | ping out-of-order arrivals | last, vector | none | ||
pingTxSeq | ping tx seq | count, vector | none |
// To disable send, specify empty destAddr. // // Every ping request is sent out with a sequence number, and replies are // expected to arrive in the same order. Whenever there's a jump in the // in the received ping responses' sequence number (e.g. 1, 2, 3, 5), then // the missing pings (number 4 in this example) is counted as lost. // Then if it still arrives later (that is, a reply with a sequence number // smaller than the largest one received so far) it will be counted as // out-of-sequence arrival. So the number of really lost pings will be // "lost" minus "out-of-order" (assuming there's no duplicate or bogus reply). // // Uses ~PingPayload as payload for the ICMP(v6) Echo Request/Reply packets. // // @see ~PingPayload, ~ICMP, ~ICMPv6 // simple PingApp like IPingApp { parameters: string destAddr = default(""); // destination address(es), separated by spaces, "*" means all IPv4/IPv6 interfaces in entire simulation string srcAddr = default(""); // source address (useful with multi-homing) double packetSize @unit("B") = default(56B); // of ping payload, in bytes volatile double sendInterval @unit("s") = default(1s); // time to wait between pings (can be random) double hopLimit = default(32); // TTL or hopLimit for IP packets double count = default(-1); // number of pings requests sent to a single destination address, -1 means continuously (only first address will be used from destAddr) double startTime @unit("s") = default(uniform(0s, this.sleepDuration + this.sendInterval)); // send first ping at startTime double stopTime @unit("s") = default(-1s); // time to finish sending, negative values mean forever volatile double sleepDuration @unit(s) = default(0s); // time spent in sleep between switching destinations bool continuous = default(false); // whether to continuously ping the destinations in a round-robin fashion bool printPing = default(false); // log to stdout @display("i=block/app"); @signal[rtt](type=simtime_t); @signal[numLost](type=long); @signal[numOutOfOrderArrivals](type=long); @signal[pingTxSeq](type=long); @signal[pingRxSeq](type=long); @statistic[rtt](title="ping round-trip time"; unit=s; record=histogram,vector; interpolationmode=none); @statistic[numLost](title="pings lost"; record=last,vector; interpolationmode=none); @statistic[numOutOfOrderArrivals](title="ping out-of-order arrivals"; record=last,vector; interpolationmode=none); @statistic[pingTxSeq](title="ping tx seq"; record=count,vector; interpolationmode=none); @statistic[pingRxSeq](title="ping rx seq"; record=count,vector; interpolationmode=none); gates: input pingIn @labels(PingPayload/up); output pingOut @labels(PingPayload/down); }