HBTimerExpires.seq - RTO is updated correctly if HEARTBEAT timer expires for a HEARTBEAT message
To check that if HEARTBEAT expires on a destination address then
value of RTO is updated correctly for that address.
./HBTimerExpires.seq [-tooloption ...] -pkt ./HBTimerExpires.def
-tooloption : v6eval tool option
See Also: ../common/STD_PKT_COMMON.def
../common/SCTP_COMMON.def
Association is established between endpoint A and B. Arrange the data
in endpoint A and B such that no DATA or control chunk is exchanged
between them.
Endpoint A Endpoint B ULP
(ESTABLISHED) (ESTABLISHED)
No message is exchanged within current
Heartbeat period
<----------------- HEARTBEAT
|
| T1-Cookie timer expires
|
<----------------- HEARTBEAT
.
. Retransmit x
. times
TEST DESCRIPTION:
1. From an endpoint in established state, do not send any message to
another endpoint within the current Heartbeat period. HEARTBEAT
message is sent to its peer. Record the message sequence using
a signal emulator.
2. HEARTBEAT message is sent again after expiry of
HEARTBEAT timer.
3. Check A: Value of the T3-rxt is updated correctly.
None
RFC 4960
8.3. Path Heartbeat
By default, an SCTP endpoint SHOULD monitor the reachability of the
idle destination transport address(es) of its peer by sending a
HEARTBEAT chunk periodically to the destination transport
address(es). HEARTBEAT sending MAY begin upon reaching the
ESTABLISHED state and is discontinued after sending either SHUTDOWN
or SHUTDOWN-ACK. A receiver of a HEARTBEAT MUST respond to a
HEARTBEAT with a HEARTBEAT-ACK after entering the COOKIE-ECHOED state
(INIT sender) or the ESTABLISHED state (INIT receiver), up until
reaching the SHUTDOWN-SENT state (SHUTDOWN sender) or the SHUTDOWN-
ACK-SENT state (SHUTDOWN receiver).
A destination transport address is considered "idle" if no new chunk
that can be used for updating path RTT (usually including first
transmission DATA, INIT, COOKIE ECHO, HEARTBEAT, etc.) and no
HEARTBEAT has been sent to it within the current heartbeat period of
that address. This applies to both active and inactive destination
addresses.
The upper layer can optionally initiate the following functions:
A) Disable heartbeat on a specific destination transport address of a
given association,
B) Change the HB.interval,
C) Re-enable heartbeat on a specific destination transport address of
a given association, and
D) Request an on-demand HEARTBEAT on a specific destination transport
address of a given association.
The endpoint should increment the respective error counter of the
destination transport address each time a HEARTBEAT is sent to that
address and not acknowledged within one RTO.
When the value of this counter reaches the protocol parameter
'Path.Max.Retrans', the endpoint should mark the corresponding
destination address as inactive if it is not so marked, and may also
optionally report to the upper layer the change of reachability of
this destination address. After this, the endpoint should continue
HEARTBEAT on this destination address but should stop increasing the
counter.
The sender of the HEARTBEAT chunk should include in the Heartbeat
Information field of the chunk the current time when the packet is
sent out and the destination address to which the packet is sent.
IMPLEMENTATION NOTE: An alternative implementation of the heartbeat
mechanism that can be used is to increment the error counter variable
every time a HEARTBEAT is sent to a destination. Whenever a
HEARTBEAT ACK arrives, the sender SHOULD clear the error counter of
the destination that the HEARTBEAT was sent to. This in effect would
clear the previously stroked error (and any other error counts as
well).
The receiver of the HEARTBEAT should immediately respond with a
HEARTBEAT ACK that contains the Heartbeat Information TLV, together
with any other received TLVs, copied unchanged from the received
HEARTBEAT chunk.
Upon the receipt of the HEARTBEAT ACK, the sender of the HEARTBEAT
should clear the error counter of the destination transport address
to which the HEARTBEAT was sent, and mark the destination transport
address as active if it is not so marked. The endpoint may
optionally report to the upper layer when an inactive destination
address is marked as active due to the reception of the latest
HEARTBEAT ACK. The receiver of the HEARTBEAT ACK must also clear the
association overall error count as well (as defined in Section 8.1).
The receiver of the HEARTBEAT ACK should also perform an RTT
measurement for that destination transport address using the time
value carried in the HEARTBEAT ACK chunk.
On an idle destination address that is allowed to heartbeat, it is
recommended that a HEARTBEAT chunk is sent once per RTO of that
destination address plus the protocol parameter 'HB.interval', with
jittering of +/- 50% of the RTO value, and exponential backoff of the
RTO if the previous HEARTBEAT is unanswered.
A primitive is provided for the SCTP user to change the HB.interval
and turn on or off the heartbeat on a given destination address. The
heartbeat interval set by the SCTP user is added to the RTO of that
destination (including any exponential backoff). Only one heartbeat
should be sent each time the heartbeat timer expires (if multiple
destinations are idle). It is an implementation decision on how to
choose which of the candidate idle destinations to heartbeat to (if
more than one destination is idle).
Note: When tuning the heartbeat interval, there is a side effect that
SHOULD be taken into account. When this value is increased, i.e.,
the HEARTBEAT takes longer, the detection of lost ABORT messages
takes longer as well. If a peer endpoint ABORTs the association for
any reason and the ABORT chunk is lost, the local endpoint will only
discover the lost ABORT by sending a DATA chunk or HEARTBEAT chunk
(thus causing the peer to send another ABORT). This must be
considered when tuning the HEARTBEAT timer. If the HEARTBEAT is
disabled, only sending DATA to the association will discover a lost
ABORT from the peer.