rxrpc: Add keepalive for a call
We need to transmit a packet every so often to act as a keepalive for the peer (which has a timeout from the last time it received a packet) and also to prevent any intervening firewalls from closing the route. Do this by resetting a timer every time we transmit a packet. If the timer ever expires, we transmit a PING ACK packet and thereby also elicit a PING RESPONSE ACK from the other side - which prevents our last-rx timeout from expiring. The timer is set to 1/6 of the last-rx timeout so that we can detect the other side going away if it misses 6 replies in a row. This is particularly necessary for servers where the processing of the service function may take a significant amount of time. Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
@@ -141,6 +141,7 @@ enum rxrpc_timer_trace {
|
||||
rxrpc_timer_exp_ack,
|
||||
rxrpc_timer_exp_hard,
|
||||
rxrpc_timer_exp_idle,
|
||||
rxrpc_timer_exp_keepalive,
|
||||
rxrpc_timer_exp_lost_ack,
|
||||
rxrpc_timer_exp_normal,
|
||||
rxrpc_timer_exp_ping,
|
||||
@@ -152,6 +153,7 @@ enum rxrpc_timer_trace {
|
||||
rxrpc_timer_set_for_ack,
|
||||
rxrpc_timer_set_for_hard,
|
||||
rxrpc_timer_set_for_idle,
|
||||
rxrpc_timer_set_for_keepalive,
|
||||
rxrpc_timer_set_for_lost_ack,
|
||||
rxrpc_timer_set_for_normal,
|
||||
rxrpc_timer_set_for_ping,
|
||||
@@ -162,6 +164,7 @@ enum rxrpc_timer_trace {
|
||||
enum rxrpc_propose_ack_trace {
|
||||
rxrpc_propose_ack_client_tx_end,
|
||||
rxrpc_propose_ack_input_data,
|
||||
rxrpc_propose_ack_ping_for_keepalive,
|
||||
rxrpc_propose_ack_ping_for_lost_ack,
|
||||
rxrpc_propose_ack_ping_for_lost_reply,
|
||||
rxrpc_propose_ack_ping_for_params,
|
||||
@@ -311,6 +314,7 @@ enum rxrpc_congest_change {
|
||||
EM(rxrpc_timer_exp_ack, "ExpAck") \
|
||||
EM(rxrpc_timer_exp_hard, "ExpHrd") \
|
||||
EM(rxrpc_timer_exp_idle, "ExpIdl") \
|
||||
EM(rxrpc_timer_exp_keepalive, "ExpKA ") \
|
||||
EM(rxrpc_timer_exp_lost_ack, "ExpLoA") \
|
||||
EM(rxrpc_timer_exp_normal, "ExpNml") \
|
||||
EM(rxrpc_timer_exp_ping, "ExpPng") \
|
||||
@@ -321,6 +325,7 @@ enum rxrpc_congest_change {
|
||||
EM(rxrpc_timer_set_for_ack, "SetAck") \
|
||||
EM(rxrpc_timer_set_for_hard, "SetHrd") \
|
||||
EM(rxrpc_timer_set_for_idle, "SetIdl") \
|
||||
EM(rxrpc_timer_set_for_keepalive, "KeepAl") \
|
||||
EM(rxrpc_timer_set_for_lost_ack, "SetLoA") \
|
||||
EM(rxrpc_timer_set_for_normal, "SetNml") \
|
||||
EM(rxrpc_timer_set_for_ping, "SetPng") \
|
||||
@@ -330,6 +335,7 @@ enum rxrpc_congest_change {
|
||||
#define rxrpc_propose_ack_traces \
|
||||
EM(rxrpc_propose_ack_client_tx_end, "ClTxEnd") \
|
||||
EM(rxrpc_propose_ack_input_data, "DataIn ") \
|
||||
EM(rxrpc_propose_ack_ping_for_keepalive, "KeepAlv") \
|
||||
EM(rxrpc_propose_ack_ping_for_lost_ack, "LostAck") \
|
||||
EM(rxrpc_propose_ack_ping_for_lost_reply, "LostRpl") \
|
||||
EM(rxrpc_propose_ack_ping_for_params, "Params ") \
|
||||
|
||||
Reference in New Issue
Block a user