mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-29 05:18:00 +00:00
It will be used for restoring inet sockets. An inet socket is created with the option REUSEADDR, because the restore logic requires this. The origin value can be restored only when all sockets were restored. Signed-off-by: Andrey Vagin <avagin@openvz.org> Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
98 lines
2.2 KiB
C
98 lines
2.2 KiB
C
#ifndef FILES_H_
|
|
#define FILES_H_
|
|
|
|
#include "compiler.h"
|
|
#include "types.h"
|
|
#include "lock.h"
|
|
#include "list.h"
|
|
#include "image.h"
|
|
|
|
#include "../protobuf/fdinfo.pb-c.h"
|
|
#include "../protobuf/fown.pb-c.h"
|
|
#include "../protobuf/vma.pb-c.h"
|
|
|
|
struct pstree_item;
|
|
struct file_desc;
|
|
struct cr_fdset;
|
|
struct rst_info;
|
|
|
|
struct fd_parms {
|
|
int fd;
|
|
unsigned long pos;
|
|
unsigned int flags;
|
|
char fd_flags;
|
|
struct stat stat;
|
|
pid_t pid;
|
|
FownEntry fown;
|
|
};
|
|
|
|
#define FD_PARMS_INIT \
|
|
{ \
|
|
.fd = FD_DESC_INVALID, \
|
|
.fown = FOWN_ENTRY__INIT, \
|
|
}
|
|
|
|
enum fdinfo_states {
|
|
FD_STATE_PREP, /* Create unix sockets */
|
|
FD_STATE_CREATE, /* Create and send fd */
|
|
FD_STATE_POST_CREATE, /* Execute actions, when everyone was created */
|
|
FD_STATE_RECV, /* Receive fd */
|
|
|
|
FD_STATE_MAX
|
|
};
|
|
|
|
struct file_desc;
|
|
|
|
struct fdinfo_list_entry {
|
|
struct list_head desc_list;
|
|
struct file_desc *desc;
|
|
struct list_head ps_list;
|
|
int pid;
|
|
futex_t real_pid;
|
|
FdinfoEntry *fe;
|
|
};
|
|
|
|
struct file_desc_ops {
|
|
unsigned int type;
|
|
int (*open)(struct file_desc *d);
|
|
int (*post_open)(struct file_desc *d, int fd);
|
|
int (*want_transport)(FdinfoEntry *fe, struct file_desc *d);
|
|
};
|
|
|
|
struct file_desc {
|
|
u32 id;
|
|
struct list_head hash;
|
|
struct list_head fd_info_head;
|
|
struct file_desc_ops *ops;
|
|
};
|
|
|
|
struct fdtype_ops {
|
|
unsigned int type;
|
|
int (*dump)(int lfd, u32 id, const struct fd_parms *p);
|
|
};
|
|
|
|
extern int do_dump_gen_file(struct fd_parms *p, int lfd,
|
|
const struct fdtype_ops *ops,
|
|
const struct cr_fdset *cr_fdset);
|
|
|
|
extern void file_desc_add(struct file_desc *d, u32 id, struct file_desc_ops *ops);
|
|
extern struct fdinfo_list_entry *file_master(struct file_desc *d);
|
|
extern struct file_desc *find_file_desc_raw(int type, u32 id);
|
|
|
|
extern int send_fd_to_peer(int fd, struct fdinfo_list_entry *fle, int sock);
|
|
extern int restore_fown(int fd, FownEntry *fown);
|
|
extern int rst_file_params(int fd, FownEntry *fown, int flags);
|
|
|
|
extern void show_saved_files(void);
|
|
|
|
extern int prepare_fds(struct pstree_item *me);
|
|
extern int prepare_fd_pid(int pid, struct rst_info *rst_info);
|
|
extern int prepare_shared_fdinfo(void);
|
|
extern int get_filemap_fd(int pid, VmaEntry *vma_entry);
|
|
extern int prepare_fs(int pid);
|
|
extern int set_fd_flags(int fd, int flags);
|
|
|
|
extern int self_exe_fd;
|
|
|
|
#endif /* FILES_H_ */
|