[CRIU] [PATCH 10/22] files: Move packet sock into files image

Pavel Emelyanov xemul at virtuozzo.com
Fri Jun 30 13:59:37 MSK 2017


Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
---
 criu/cr-restore.c         | 2 +-
 criu/files.c              | 4 ++++
 criu/include/image-desc.h | 2 +-
 criu/sk-packet.c          | 7 ++++++-
 images/fdinfo.proto       | 2 ++
 5 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/criu/cr-restore.c b/criu/cr-restore.c
index 9e450e0..dce34ab 100644
--- a/criu/cr-restore.c
+++ b/criu/cr-restore.c
@@ -264,7 +264,6 @@ static struct collect_image_info *cinfos[] = {
 	&pipe_cinfo,
 	&fifo_cinfo,
 	&unix_sk_cinfo,
-	&packet_sk_cinfo,
 	&netlink_sk_cinfo,
 	&eventfd_cinfo,
 	&epoll_cinfo,
@@ -285,6 +284,7 @@ static struct collect_image_info *cinfos[] = {
 
 static struct collect_image_info *cinfos_files[] = {
 	&nsfile_cinfo,
+	&packet_sk_cinfo,
 };
 
 /* These images are requered to restore namespaces */
diff --git a/criu/files.c b/criu/files.c
index 77af986..fa05448 100644
--- a/criu/files.c
+++ b/criu/files.c
@@ -31,6 +31,7 @@
 #include "eventfd.h"
 #include "eventpoll.h"
 #include "fsnotify.h"
+#include "sk-packet.h"
 #include "mount.h"
 #include "signalfd.h"
 #include "namespaces.h"
@@ -1810,6 +1811,9 @@ static int collect_one_file(void *o, ProtobufCMessage *base, struct cr_img *i)
 	case FD_TYPES__NS:
 		ret = collect_one_file_entry(fe, fe->nsf->id, &fe->nsf->base, &nsfile_cinfo);
 		break;
+	case FD_TYPES__PACKETSK:
+		ret = collect_one_file_entry(fe, fe->psk->id, &fe->psk->base, &packet_sk_cinfo);
+		break;
 	}
 
 	return ret;
diff --git a/criu/include/image-desc.h b/criu/include/image-desc.h
index ed70adb..1a1edff 100644
--- a/criu/include/image-desc.h
+++ b/criu/include/image-desc.h
@@ -58,7 +58,6 @@ enum {
 	CR_FD_SK_QUEUES,
 	CR_FD_EXT_FILES,
 	CR_FD_UNIXSK,
-	CR_FD_PACKETSK,
 	CR_FD_NETLINK_SK,
 	CR_FD_PIPES,
 	CR_FD_PIPES_DATA,
@@ -106,6 +105,7 @@ enum {
 	CR_FD_REG_FILES,
 	CR_FD_INETSK,
 	CR_FD_NS_FILES,
+	CR_FD_PACKETSK,
 
 	CR_FD_AUTOFS,
 	CR_FD_NS,
diff --git a/criu/sk-packet.c b/criu/sk-packet.c
index 372e9be..bb1bd88 100644
--- a/criu/sk-packet.c
+++ b/criu/sk-packet.c
@@ -147,6 +147,7 @@ static int dump_rings(PacketSockEntry *psk, struct packet_sock_desc *sd)
 
 static int dump_one_packet_fd(int lfd, u32 id, const struct fd_parms *p)
 {
+	FileEntry fe = FILE_ENTRY__INIT;
 	PacketSockEntry psk = PACKET_SOCK_ENTRY__INIT;
 	SkOptsEntry skopts = SK_OPTS_ENTRY__INIT;
 	struct packet_sock_desc *sd;
@@ -197,7 +198,11 @@ static int dump_one_packet_fd(int lfd, u32 id, const struct fd_parms *p)
 	if (ret)
 		goto out;
 
-	ret = pb_write_one(img_from_set(glob_imgset, CR_FD_PACKETSK), &psk, PB_PACKET_SOCK);
+	fe.type = FD_TYPES__PACKETSK;
+	fe.id = psk.id;
+	fe.psk = &psk;
+
+	ret = pb_write_one(img_from_set(glob_imgset, CR_FD_FILES), &fe, PB_FILE);
 out:
 	release_skopts(&skopts);
 	xfree(psk.rx_ring);
diff --git a/images/fdinfo.proto b/images/fdinfo.proto
index 8560cc4..9ebd3ba 100644
--- a/images/fdinfo.proto
+++ b/images/fdinfo.proto
@@ -3,6 +3,7 @@ syntax = "proto2";
 import "regfile.proto";
 import "sk-inet.proto";
 import "ns.proto";
+import "packet-sock.proto";
 
 enum fd_types {
 	UND		= 0;
@@ -41,4 +42,5 @@ message file_entry {
 	optional reg_file_entry		reg	= 3;
 	optional inet_sk_entry		isk	= 4;
 	optional ns_file_entry		nsf	= 5;
+	optional packet_sock_entry	psk	= 6;
 }
-- 
2.1.4



More information about the CRIU mailing list