[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