From 55519df9f17eaa9220104bd296f962669a47bf59 Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Fri, 30 Jun 2017 13:57:56 +0300 Subject: [PATCH] files: Move inet sockets into files image Reviewed-by: Kirill Tkhai Signed-off-by: Pavel Emelyanov Signed-off-by: Andrei Vagin --- criu/cr-restore.c | 2 +- criu/files.c | 3 +++ criu/include/image-desc.h | 2 +- criu/include/sockets.h | 2 +- criu/sk-inet.c | 12 ++++++------ images/fdinfo.proto | 2 ++ 6 files changed, 14 insertions(+), 9 deletions(-) diff --git a/criu/cr-restore.c b/criu/cr-restore.c index e48088be6..77f0609f1 100644 --- a/criu/cr-restore.c +++ b/criu/cr-restore.c @@ -230,7 +230,7 @@ static int crtools_prepare_shared(void) return -1; /* Connections are unlocked from criu */ - if (collect_inet_sockets()) + if (!files_collected() && collect_image(&inet_sk_cinfo)) return -1; if (collect_binfmt_misc()) diff --git a/criu/files.c b/criu/files.c index a3228b6b7..94c6dc4c5 100644 --- a/criu/files.c +++ b/criu/files.c @@ -1688,6 +1688,9 @@ static int collect_one_file(void *o, ProtobufCMessage *base, struct cr_img *i) case FD_TYPES__REG: ret = collect_one_file_entry(fe, fe->reg->id, &fe->reg->base, ®_file_cinfo); break; + case FD_TYPES__INETSK: + ret = collect_one_file_entry(fe, fe->isk->id, &fe->isk->base, &inet_sk_cinfo); + break; } return ret; diff --git a/criu/include/image-desc.h b/criu/include/image-desc.h index 710e3ce7c..7aa43b9af 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_NS_FILES, - CR_FD_INETSK, CR_FD_UNIXSK, CR_FD_PACKETSK, CR_FD_NETLINK_SK, @@ -106,6 +105,7 @@ enum { CR_FD_FANOTIFY_MARK, CR_FD_EVENTPOLL_TFD, CR_FD_REG_FILES, + CR_FD_INETSK, CR_FD_AUTOFS, diff --git a/criu/include/sockets.h b/criu/include/sockets.h index 0de527c63..798c3b890 100644 --- a/criu/include/sockets.h +++ b/criu/include/sockets.h @@ -33,7 +33,7 @@ extern bool socket_test_collect_bit(unsigned int family, unsigned int proto); extern int sk_collect_one(unsigned ino, int family, struct socket_desc *d); struct ns_id; extern int collect_sockets(struct ns_id *); -extern int collect_inet_sockets(void); +extern struct collect_image_info inet_sk_cinfo; extern struct collect_image_info unix_sk_cinfo; extern int fix_external_unix_sockets(void); diff --git a/criu/sk-inet.c b/criu/sk-inet.c index 7ad4cd993..94170cb93 100644 --- a/criu/sk-inet.c +++ b/criu/sk-inet.c @@ -306,6 +306,7 @@ static bool needs_scope_id(uint32_t *src_addr) static int do_dump_one_inet_fd(int lfd, u32 id, const struct fd_parms *p, int family) { struct inet_sk_desc *sk; + FileEntry fe = FILE_ENTRY__INIT; InetSkEntry ie = INET_SK_ENTRY__INIT; IpOptsEntry ipopts = IP_OPTS_ENTRY__INIT; SkOptsEntry skopts = SK_OPTS_ENTRY__INIT; @@ -419,7 +420,11 @@ static int do_dump_one_inet_fd(int lfd, u32 id, const struct fd_parms *p, int fa ie.state = sk->state; - if (pb_write_one(img_from_set(glob_imgset, CR_FD_INETSK), &ie, PB_INET_SK)) + fe.type = FD_TYPES__INETSK; + fe.id = ie.id; + fe.isk = &ie; + + if (pb_write_one(img_from_set(glob_imgset, CR_FD_FILES), &fe, PB_FILE)) goto err; err: release_skopts(&skopts); @@ -522,11 +527,6 @@ struct collect_image_info inet_sk_cinfo = { .collect = collect_one_inetsk, }; -int collect_inet_sockets(void) -{ - return collect_image(&inet_sk_cinfo); -} - static int inet_validate_address(InetSkEntry *ie) { if ((ie->family == AF_INET) && diff --git a/images/fdinfo.proto b/images/fdinfo.proto index 836990e19..ba6be3f6d 100644 --- a/images/fdinfo.proto +++ b/images/fdinfo.proto @@ -1,6 +1,7 @@ syntax = "proto2"; import "regfile.proto"; +import "sk-inet.proto"; enum fd_types { UND = 0; @@ -34,4 +35,5 @@ message file_entry { required fd_types type = 1; required uint32 id = 2; optional reg_file_entry reg = 3; + optional inet_sk_entry isk = 4; }