mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-31 06:15:24 +00:00
soccr: Handle connection state
For now we only support ESTABLISHED state, so this is mostly a preparation for the future extention. Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
This commit is contained in:
@@ -340,6 +340,7 @@ static int restore_tcp_conn_state(int sk, struct libsoccr_sk *socr, struct inet_
|
|||||||
goto err_c;
|
goto err_c;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data.state = TCP_ESTABLISHED;
|
||||||
data.inq_len = tse->inq_len;
|
data.inq_len = tse->inq_len;
|
||||||
data.inq_seq = tse->inq_seq;
|
data.inq_seq = tse->inq_seq;
|
||||||
data.outq_len = tse->outq_len;
|
data.outq_len = tse->outq_len;
|
||||||
|
@@ -109,6 +109,8 @@ static int refresh_sk(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, str
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
data->state = TCP_ESTABLISHED;
|
||||||
|
|
||||||
if (ioctl(sk->fd, SIOCOUTQ, &size) == -1) {
|
if (ioctl(sk->fd, SIOCOUTQ, &size) == -1) {
|
||||||
loge("Unable to get size of snd queue");
|
loge("Unable to get size of snd queue");
|
||||||
return -1;
|
return -1;
|
||||||
@@ -265,7 +267,7 @@ err_recv:
|
|||||||
/*
|
/*
|
||||||
* This is how much data we've had in the initial libsoccr
|
* This is how much data we've had in the initial libsoccr
|
||||||
*/
|
*/
|
||||||
#define SOCR_DATA_MIN_SIZE (16 * sizeof(__u32))
|
#define SOCR_DATA_MIN_SIZE (17 * sizeof(__u32))
|
||||||
|
|
||||||
int libsoccr_get_sk_data(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size)
|
int libsoccr_get_sk_data(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size)
|
||||||
{
|
{
|
||||||
@@ -339,6 +341,9 @@ int libsoccr_set_sk_data_unbound(struct libsoccr_sk *sk,
|
|||||||
if (!data || data_size < SOCR_DATA_MIN_SIZE)
|
if (!data || data_size < SOCR_DATA_MIN_SIZE)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
if (data->state != TCP_ESTABLISHED)
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (set_queue_seq(sk, TCP_RECV_QUEUE,
|
if (set_queue_seq(sk, TCP_RECV_QUEUE,
|
||||||
data->inq_seq - data->inq_len))
|
data->inq_seq - data->inq_len))
|
||||||
return -2;
|
return -2;
|
||||||
|
@@ -12,6 +12,7 @@ void libsoccr_set_log(unsigned int level, void (*fn)(unsigned int level, const c
|
|||||||
struct libsoccr_sk;
|
struct libsoccr_sk;
|
||||||
|
|
||||||
struct libsoccr_sk_data {
|
struct libsoccr_sk_data {
|
||||||
|
__u32 state;
|
||||||
__u32 inq_len;
|
__u32 inq_len;
|
||||||
__u32 inq_seq;
|
__u32 inq_seq;
|
||||||
__u32 outq_len;
|
__u32 outq_len;
|
||||||
|
Reference in New Issue
Block a user