LCOV - code coverage report
Current view: top level - crtools/include - crtools.h (source / functions) Hit Total Coverage
Test: crtools.info Lines: 6 6 100.0 %
Date: 2012-12-28 Functions: 1 1 100.0 %
Branches: 4 6 66.7 %

           Branch data     Line data    Source code
       1                 :            : #ifndef __CR_CRTOOLS_H__
       2                 :            : #define __CR_CRTOOLS_H__
       3                 :            : 
       4                 :            : #include <sys/types.h>
       5                 :            : 
       6                 :            : #include "list.h"
       7                 :            : #include "types.h"
       8                 :            : #include "list.h"
       9                 :            : #include "util.h"
      10                 :            : #include "image.h"
      11                 :            : 
      12                 :            : #include "../protobuf/vma.pb-c.h"
      13                 :            : 
      14                 :            : #define CR_FD_PERM              (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH)
      15                 :            : 
      16                 :            : #define CRIU_VERSION_MAJOR      0
      17                 :            : #define CRIU_VERSION_MINOR      3
      18                 :            : 
      19                 :            : enum {
      20                 :            :         CR_FD_INVENTORY,
      21                 :            :         /*
      22                 :            :          * Task entries
      23                 :            :          */
      24                 :            : 
      25                 :            :         _CR_FD_TASK_FROM,
      26                 :            :         CR_FD_FDINFO,
      27                 :            :         CR_FD_PAGES,
      28                 :            :         CR_FD_CORE,
      29                 :            :         CR_FD_MM,
      30                 :            :         CR_FD_VMAS,
      31                 :            :         CR_FD_SIGACT,
      32                 :            :         CR_FD_ITIMERS,
      33                 :            :         CR_FD_CREDS,
      34                 :            :         CR_FD_FS,
      35                 :            :         _CR_FD_TASK_TO,
      36                 :            : 
      37                 :            :         /*
      38                 :            :          * NS entries
      39                 :            :          */
      40                 :            : 
      41                 :            :         _CR_FD_NS_FROM,
      42                 :            :         CR_FD_UTSNS,
      43                 :            :         CR_FD_IPCNS_VAR,
      44                 :            :         CR_FD_IPCNS_SHM,
      45                 :            :         CR_FD_IPCNS_MSG,
      46                 :            :         CR_FD_IPCNS_SEM,
      47                 :            :         CR_FD_MOUNTPOINTS,
      48                 :            :         CR_FD_NETDEV,
      49                 :            :         CR_FD_IFADDR,
      50                 :            :         CR_FD_ROUTE,
      51                 :            :         _CR_FD_NS_TO,
      52                 :            : 
      53                 :            :         CR_FD_PSTREE,
      54                 :            :         CR_FD_SHMEM_PAGES,
      55                 :            :         CR_FD_GHOST_FILE,
      56                 :            :         CR_FD_TCP_STREAM,
      57                 :            : 
      58                 :            :         _CR_FD_GLOB_FROM,
      59                 :            :         CR_FD_SK_QUEUES,
      60                 :            :         CR_FD_REG_FILES,
      61                 :            :         CR_FD_INETSK,
      62                 :            :         CR_FD_UNIXSK,
      63                 :            :         CR_FD_PACKETSK,
      64                 :            :         CR_FD_PIPES,
      65                 :            :         CR_FD_PIPES_DATA,
      66                 :            :         CR_FD_FIFO,
      67                 :            :         CR_FD_FIFO_DATA,
      68                 :            :         CR_FD_TTY,
      69                 :            :         CR_FD_TTY_INFO,
      70                 :            :         CR_FD_REMAP_FPATH,
      71                 :            :         CR_FD_EVENTFD,
      72                 :            :         CR_FD_EVENTPOLL,
      73                 :            :         CR_FD_EVENTPOLL_TFD,
      74                 :            :         CR_FD_SIGNALFD,
      75                 :            :         CR_FD_INOTIFY,
      76                 :            :         CR_FD_INOTIFY_WD,
      77                 :            :         _CR_FD_GLOB_TO,
      78                 :            : 
      79                 :            :         CR_FD_TMPFS,
      80                 :            : 
      81                 :            :         CR_FD_MAX
      82                 :            : };
      83                 :            : 
      84                 :            : struct script {
      85                 :            :         struct list_head node;
      86                 :            :         char *path;
      87                 :            : };
      88                 :            : 
      89                 :            : struct cr_options {
      90                 :            :         int                     final_state;
      91                 :            :         char                    *show_dump_file;
      92                 :            :         bool                    show_pages_content;
      93                 :            :         bool                    restore_detach;
      94                 :            :         bool                    ext_unix_sk;
      95                 :            :         bool                    shell_job;
      96                 :            :         bool                    tcp_established_ok;
      97                 :            :         bool                    evasive_devices;
      98                 :            :         bool                    link_remap_ok;
      99                 :            :         unsigned int            namespaces_flags;
     100                 :            :         bool                    log_file_per_pid;
     101                 :            :         char                    *output;
     102                 :            :         char                    *root;
     103                 :            :         char                    *pidfile;
     104                 :            :         struct list_head        veth_pairs;
     105                 :            :         struct list_head        scripts;
     106                 :            : };
     107                 :            : 
     108                 :            : extern struct cr_options opts;
     109                 :            : 
     110                 :            : enum sfd_type {
     111                 :            :         SERVICE_FD_MIN,
     112                 :            : 
     113                 :            :         LOG_FD_OFF,
     114                 :            :         LOG_DIR_FD_OFF,
     115                 :            :         IMG_FD_OFF,
     116                 :            :         SELF_EXE_FD_OFF,
     117                 :            :         PROC_FD_OFF,
     118                 :            :         CTL_TTY_OFF,
     119                 :            :         SELF_STDIN_OFF,
     120                 :            : 
     121                 :            :         SERVICE_FD_MAX
     122                 :            : };
     123                 :            : 
     124                 :            : extern int init_service_fd(void);
     125                 :            : extern int get_service_fd(enum sfd_type type);
     126                 :            : extern bool is_service_fd(int fd, enum sfd_type type);
     127                 :            : extern bool is_any_service_fd(int fd);
     128                 :            : 
     129                 :            : /* file descriptors template */
     130                 :            : struct cr_fd_desc_tmpl {
     131                 :            :         const char      *fmt;                   /* format for the name */
     132                 :            :         u32             magic;                  /* magic in the header */
     133                 :            :         void            (*show)(int fd, struct cr_options *o);
     134                 :            : };
     135                 :            : 
     136                 :            : void show_files(int fd_files, struct cr_options *o);
     137                 :            : void show_pages(int fd_pages, struct cr_options *o);
     138                 :            : void show_reg_files(int fd_reg_files, struct cr_options *o);
     139                 :            : void show_core(int fd_core, struct cr_options *o);
     140                 :            : void show_mm(int fd_mm, struct cr_options *o);
     141                 :            : void show_vmas(int fd_vma, struct cr_options *o);
     142                 :            : void show_pipes(int fd_pipes, struct cr_options *o);
     143                 :            : void show_pipes_data(int fd_pipes, struct cr_options *o);
     144                 :            : void show_fifo(int fd, struct cr_options *o);
     145                 :            : void show_fifo_data(int fd_pipes, struct cr_options *o);
     146                 :            : void show_pstree(int fd_pstree, struct cr_options *o);
     147                 :            : void show_sigacts(int fd_sigacts, struct cr_options *o);
     148                 :            : void show_itimers(int fd, struct cr_options *o);
     149                 :            : void show_creds(int fd, struct cr_options *o);
     150                 :            : void show_fs(int fd, struct cr_options *o);
     151                 :            : void show_remap_files(int fd, struct cr_options *o);
     152                 :            : void show_ghost_file(int fd, struct cr_options *o);
     153                 :            : void show_fown_cont(void *p);
     154                 :            : void show_eventfds(int fd, struct cr_options *o);
     155                 :            : void show_tty(int fd, struct cr_options *o);
     156                 :            : void show_tty_info(int fd, struct cr_options *o);
     157                 :            : 
     158                 :            : int check_img_inventory(void);
     159                 :            : int write_img_inventory(void);
     160                 :            : 
     161                 :            : extern void print_data(unsigned long addr, unsigned char *data, size_t size);
     162                 :            : extern void print_image_data(int fd, unsigned int length, int show);
     163                 :            : extern struct cr_fd_desc_tmpl fdset_template[CR_FD_MAX];
     164                 :            : 
     165                 :            : extern int open_image_dir(void);
     166                 :            : extern void close_image_dir(void);
     167                 :            : 
     168                 :            : int open_image(int type, unsigned long flags, ...);
     169                 :            : #define open_image_ro(type, ...) open_image(type, O_RDONLY, ##__VA_ARGS__)
     170                 :            : 
     171                 :            : #define LAST_PID_PATH           "/proc/sys/kernel/ns_last_pid"
     172                 :            : #define LAST_PID_PERM           0666
     173                 :            : 
     174                 :            : struct cr_fdset {
     175                 :            :         int fd_off;
     176                 :            :         int fd_nr;
     177                 :            :         int *_fds;
     178                 :            : };
     179                 :            : 
     180                 :      10312 : static inline int fdset_fd(const struct cr_fdset *fdset, int type)
     181                 :            : {
     182                 :            :         int idx;
     183                 :            : 
     184                 :      10312 :         idx = type - fdset->fd_off;
     185         [ -  + ]:      10312 :         BUG_ON(idx > fdset->fd_nr);
     186                 :            : 
     187                 :      10312 :         return fdset->_fds[idx];
     188                 :            : }
     189                 :            : 
     190                 :            : extern struct cr_fdset *glob_fdset;
     191                 :            : extern struct cr_options opts;
     192                 :            : 
     193                 :            : int cr_dump_tasks(pid_t pid, const struct cr_options *opts);
     194                 :            : int cr_restore_tasks(pid_t pid, struct cr_options *opts);
     195                 :            : int cr_show(struct cr_options *opts);
     196                 :            : int convert_to_elf(char *elf_path, int fd_core);
     197                 :            : int cr_check(void);
     198                 :            : int cr_exec(int pid, char **opts);
     199                 :            : 
     200                 :            : #define O_DUMP  (O_RDWR | O_CREAT | O_EXCL)
     201                 :            : #define O_SHOW  (O_RDONLY)
     202                 :            : 
     203                 :            : struct cr_fdset *cr_task_fdset_open(int pid, int mode);
     204                 :            : struct cr_fdset *cr_ns_fdset_open(int pid, int mode);
     205                 :            : struct cr_fdset *cr_glob_fdset_open(int mode);
     206                 :            : 
     207                 :            : void close_cr_fdset(struct cr_fdset **cr_fdset);
     208                 :            : 
     209                 :            : int collect_mappings(pid_t pid, struct list_head *vma_area_list);
     210                 :            : void free_mappings(struct list_head *vma_area_list);
     211                 :            : 
     212                 :            : struct vma_area {
     213                 :            :         struct list_head        list;
     214                 :            :         VmaEntry                vma;
     215                 :            : 
     216                 :            :         union {
     217                 :            :                 int             vm_file_fd;
     218                 :            :                 int             vm_socket_id;
     219                 :            :         };
     220                 :            :         unsigned long           *page_bitmap;  /* existent pages */
     221                 :            :         unsigned long           *ppage_bitmap; /* parent's existent pages */
     222                 :            : };
     223                 :            : 
     224                 :            : #define vma_area_is(vma_area, s)        vma_entry_is(&((vma_area)->vma), s)
     225                 :            : #define vma_area_len(vma_area)          vma_entry_len(&((vma_area)->vma))
     226                 :            : 
     227                 :            : struct rst_info {
     228                 :            :         struct list_head        fds;
     229                 :            :         struct list_head        eventpoll;
     230                 :            :         struct list_head        tty_slaves;
     231                 :            : 
     232                 :            :         void                    *premmapped_addr;
     233                 :            :         unsigned long           premmapped_len;
     234                 :            : };
     235                 :            : 
     236                 :            : static inline int in_vma_area(struct vma_area *vma, unsigned long addr)
     237                 :            : {
     238 [ +  - ][ +  + ]:      25978 :         return addr >= (unsigned long)vma->vma.start &&
     239                 :      25978 :                 addr < (unsigned long)vma->vma.end;
     240                 :            : }
     241                 :            : 
     242                 :            : #endif /* __CR_CRTOOLS_H__ */

Generated by: LCOV version 1.9