Add setters for TCP keepalive values
This patch adds 3 functions to set the 3 keepalive values TCP_KEEPIDLE, TCP_KEEPCNT and TCP_KEEPINTVL. The values have to be set after iscsi context creation and are then configured on the socket on each new connection.
This commit is contained in:
@@ -86,6 +86,9 @@ struct iscsi_context {
|
|||||||
int is_connected;
|
int is_connected;
|
||||||
|
|
||||||
int tcp_user_timeout;
|
int tcp_user_timeout;
|
||||||
|
int tcp_keepcnt;
|
||||||
|
int tcp_keepintvl;
|
||||||
|
int tcp_keepidle;
|
||||||
|
|
||||||
int current_phase;
|
int current_phase;
|
||||||
int next_phase;
|
int next_phase;
|
||||||
|
|||||||
@@ -974,6 +974,28 @@ iscsi_set_debug(struct iscsi_context *iscsi, int level);
|
|||||||
EXTERN void
|
EXTERN void
|
||||||
iscsi_set_tcp_user_timeout(struct iscsi_context *iscsi, int timeout_ms);
|
iscsi_set_tcp_user_timeout(struct iscsi_context *iscsi, int timeout_ms);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function is to set the TCP_KEEPIDLE option. It has to be called after iscsi
|
||||||
|
* context creation.
|
||||||
|
*/
|
||||||
|
EXTERN void
|
||||||
|
iscsi_set_tcp_keepidle(struct iscsi_context *iscsi, int value);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function is to set the TCP_KEEPCNT option. It has to be called after iscsi
|
||||||
|
* context creation.
|
||||||
|
*/
|
||||||
|
EXTERN void
|
||||||
|
iscsi_set_tcp_keepcnt(struct iscsi_context *iscsi, int value);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This function is to set the TCP_KEEPINTVL option. It has to be called after iscsi
|
||||||
|
* context creation.
|
||||||
|
*/
|
||||||
|
EXTERN void
|
||||||
|
iscsi_set_tcp_keepintvl(struct iscsi_context *iscsi, int value);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -234,6 +234,9 @@ try_again:
|
|||||||
iscsi->debug = old_iscsi->debug;
|
iscsi->debug = old_iscsi->debug;
|
||||||
|
|
||||||
iscsi->tcp_user_timeout = old_iscsi->tcp_user_timeout;
|
iscsi->tcp_user_timeout = old_iscsi->tcp_user_timeout;
|
||||||
|
iscsi->tcp_keepidle = old_iscsi->tcp_keepidle;
|
||||||
|
iscsi->tcp_keepcnt = old_iscsi->tcp_keepcnt;
|
||||||
|
iscsi->tcp_keepintvl = old_iscsi->tcp_keepintvl;
|
||||||
|
|
||||||
if (iscsi_full_connect_sync(iscsi, iscsi->portal, iscsi->lun) != 0) {
|
if (iscsi_full_connect_sync(iscsi, iscsi->portal, iscsi->lun) != 0) {
|
||||||
iscsi_destroy_context(iscsi);
|
iscsi_destroy_context(iscsi);
|
||||||
|
|||||||
@@ -71,6 +71,10 @@ iscsi_create_context(const char *initiator_name)
|
|||||||
iscsi->use_immediate_data = ISCSI_IMMEDIATE_DATA_YES;
|
iscsi->use_immediate_data = ISCSI_IMMEDIATE_DATA_YES;
|
||||||
iscsi->want_header_digest = ISCSI_HEADER_DIGEST_NONE_CRC32C;
|
iscsi->want_header_digest = ISCSI_HEADER_DIGEST_NONE_CRC32C;
|
||||||
|
|
||||||
|
iscsi->tcp_keepcnt=3;
|
||||||
|
iscsi->tcp_keepintvl=30;
|
||||||
|
iscsi->tcp_keepidle=30;
|
||||||
|
|
||||||
return iscsi;
|
return iscsi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -73,6 +73,9 @@ iscsi_set_session_type
|
|||||||
iscsi_set_targetname
|
iscsi_set_targetname
|
||||||
iscsi_set_tcp_keepalive
|
iscsi_set_tcp_keepalive
|
||||||
iscsi_set_tcp_user_timeout
|
iscsi_set_tcp_user_timeout
|
||||||
|
iscsi_set_tcp_keepidle
|
||||||
|
iscsi_set_tcp_keepcnt
|
||||||
|
iscsi_set_tcp_keepintvl
|
||||||
iscsi_startstopunit_sync
|
iscsi_startstopunit_sync
|
||||||
iscsi_startstopunit_task
|
iscsi_startstopunit_task
|
||||||
iscsi_synchronizecache10_sync
|
iscsi_synchronizecache10_sync
|
||||||
|
|||||||
@@ -71,6 +71,9 @@ iscsi_set_session_type
|
|||||||
iscsi_set_targetname
|
iscsi_set_targetname
|
||||||
iscsi_set_tcp_keepalive
|
iscsi_set_tcp_keepalive
|
||||||
iscsi_set_tcp_user_timeout
|
iscsi_set_tcp_user_timeout
|
||||||
|
iscsi_set_tcp_keepidle
|
||||||
|
iscsi_set_tcp_keepcnt
|
||||||
|
iscsi_set_tcp_keepintvl
|
||||||
iscsi_startstopunit_sync
|
iscsi_startstopunit_sync
|
||||||
iscsi_startstopunit_task
|
iscsi_startstopunit_task
|
||||||
iscsi_synchronizecache10_sync
|
iscsi_synchronizecache10_sync
|
||||||
|
|||||||
+19
-1
@@ -160,7 +160,7 @@ iscsi_connect_async(struct iscsi_context *iscsi, const char *portal,
|
|||||||
|
|
||||||
set_nonblocking(iscsi->fd);
|
set_nonblocking(iscsi->fd);
|
||||||
|
|
||||||
iscsi_set_tcp_keepalive(iscsi, 30, 3, 30);
|
iscsi_set_tcp_keepalive(iscsi, iscsi->tcp_keepidle, iscsi->tcp_keepcnt, iscsi->tcp_keepintvl);
|
||||||
|
|
||||||
if (iscsi->tcp_user_timeout > 0) {
|
if (iscsi->tcp_user_timeout > 0) {
|
||||||
set_tcp_user_timeout(iscsi);
|
set_tcp_user_timeout(iscsi);
|
||||||
@@ -563,6 +563,24 @@ void iscsi_set_tcp_user_timeout(struct iscsi_context *iscsi, int timeout_ms)
|
|||||||
DPRINTF(iscsi,2,"TCP_USER_TIMEOUT will be set to %dms on next socket creation",timeout_ms);
|
DPRINTF(iscsi,2,"TCP_USER_TIMEOUT will be set to %dms on next socket creation",timeout_ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void iscsi_set_tcp_keepidle(struct iscsi_context *iscsi, int value)
|
||||||
|
{
|
||||||
|
iscsi->tcp_keepidle=value;
|
||||||
|
DPRINTF(iscsi,2,"TCP_KEEPIDLE will be set to %d on next socket creation",value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void iscsi_set_tcp_keepcnt(struct iscsi_context *iscsi, int value)
|
||||||
|
{
|
||||||
|
iscsi->tcp_keepcnt=value;
|
||||||
|
DPRINTF(iscsi,2,"TCP_KEEPCNT will be set to %d on next socket creation",value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void iscsi_set_tcp_keepintvl(struct iscsi_context *iscsi, int value)
|
||||||
|
{
|
||||||
|
iscsi->tcp_keepintvl=value;
|
||||||
|
DPRINTF(iscsi,2,"TCP_KEEPINTVL will be set to %d on next socket creation",value);
|
||||||
|
}
|
||||||
|
|
||||||
int iscsi_set_tcp_keepalive(struct iscsi_context *iscsi, int idle, int count, int interval)
|
int iscsi_set_tcp_keepalive(struct iscsi_context *iscsi, int idle, int count, int interval)
|
||||||
{
|
{
|
||||||
int level, value;
|
int level, value;
|
||||||
|
|||||||
Reference in New Issue
Block a user