[CRIU] [PATCH 13/14] soccr: Handle connection state
Pavel Emelyanov
xemul at virtuozzo.com
Mon Apr 18 06:06:58 PDT 2016
For now we only support ESTABLISHED state, so this is mostly
a preparation for the future extention.
Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
---
criu/sk-tcp.c | 1 +
soccr/soccr.c | 7 ++++++-
soccr/soccr.h | 1 +
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/criu/sk-tcp.c b/criu/sk-tcp.c
index 0f0788c..6d2a026 100644
--- a/criu/sk-tcp.c
+++ b/criu/sk-tcp.c
@@ -312,6 +312,7 @@ static int restore_tcp_conn_state(int sk, struct libsoccr_sk *socr, struct inet_
goto err_c;
}
+ data.state = TCP_ESTABLISHED;
data.inq_len = tse->inq_len;
data.inq_seq = tse->inq_seq;
data.outq_len = tse->outq_len;
diff --git a/soccr/soccr.c b/soccr/soccr.c
index eb7aace..6adaa4e 100644
--- a/soccr/soccr.c
+++ b/soccr/soccr.c
@@ -95,6 +95,8 @@ static int refresh_sk(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, str
return -1;
}
+ data->state = TCP_ESTABLISHED;
+
if (ioctl(sk->fd, SIOCOUTQ, &size) == -1) {
loge("Unable to get size of snd queue");
return -1;
@@ -226,7 +228,7 @@ err_recv:
/*
* This is how much data we've had in the initial libsoccr
*/
-#define SOCR_DATA_MIN_SIZE (10 * sizeof(__u32))
+#define SOCR_DATA_MIN_SIZE (11 * sizeof(__u32))
int libsoccr_get_sk_data(struct libsoccr_sk *sk, struct libsoccr_sk_data *data, unsigned data_size)
{
@@ -297,6 +299,9 @@ int libsoccr_set_sk_data_unbound(struct libsoccr_sk *sk,
if (!data || data_size < SOCR_DATA_MIN_SIZE)
return -1;
+ if (data->state != TCP_ESTABLISHED)
+ return -1;
+
if (set_queue_seq(sk, TCP_RECV_QUEUE,
data->inq_seq - data->inq_len))
return -2;
diff --git a/soccr/soccr.h b/soccr/soccr.h
index 1d555e0..ba73cb9 100644
--- a/soccr/soccr.h
+++ b/soccr/soccr.h
@@ -12,6 +12,7 @@ void libsoccr_set_log(unsigned int level, void (*fn)(unsigned int level, const c
struct libsoccr_sk;
struct libsoccr_sk_data {
+ __u32 state;
__u32 inq_len;
__u32 inq_seq;
__u32 outq_len;
--
2.5.0
More information about the CRIU
mailing list