1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  24  * Use is subject to license terms.
  25  * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
  26  */
  27 
  28 #ifndef _ZONEADM_H
  29 #define _ZONEADM_H
  30 
  31 #include <sys/types.h>
  32 
  33 #define CMD_HELP        0
  34 #define CMD_BOOT        1
  35 #define CMD_HALT        2
  36 #define CMD_READY       3
  37 #define CMD_SHUTDOWN    4
  38 #define CMD_REBOOT      5
  39 #define CMD_LIST        6
  40 #define CMD_VERIFY      7
  41 #define CMD_INSTALL     8
  42 #define CMD_UNINSTALL   9
  43 #define CMD_MOUNT       10
  44 #define CMD_UNMOUNT     11
  45 #define CMD_CLONE       12
  46 #define CMD_MOVE        13
  47 #define CMD_DETACH      14
  48 #define CMD_ATTACH      15
  49 #define CMD_MARK        16
  50 #define CMD_APPLY       17
  51 #define CMD_SYSBOOT     18
  52 
  53 #define CMD_MIN         CMD_HELP
  54 #define CMD_MAX         CMD_SYSBOOT
  55 
  56 #if !defined(TEXT_DOMAIN)               /* should be defined by cc -D */
  57 #define TEXT_DOMAIN     "SYS_TEST"      /* Use this only if it wasn't */
  58 #endif
  59 
  60 #define Z_ERR           1
  61 #define Z_USAGE         2
  62 #define Z_FATAL         3
  63 
  64 #define SW_CMP_NONE     0x0
  65 #define SW_CMP_SRC      0x01
  66 #define SW_CMP_SILENT   0x02
  67 
  68 /*
  69  * This structure stores information about mounts of interest within an
  70  * installed zone.
  71  */
  72 typedef struct zone_mounts {
  73         /* The zone's zonepath */
  74         char            *zonepath;
  75 
  76         /* The length of zonepath */
  77         int             zonepath_len;
  78 
  79         /*
  80          * This indicates the number of unexpected mounts that were encountered
  81          * in the zone.
  82          */
  83         int             num_unexpected_mounts;
  84 
  85         /*
  86          * This is the number of overlay mounts detected on the zone's root
  87          * directory.
  88          */
  89         int             num_root_overlay_mounts;
  90 
  91         /*
  92          * This is used to track important zone root mount information.  The
  93          * mnt_time field isn't used.  If root_mnttab is NULL, then the
  94          * associated zone doesn't have a mounted root filesystem.
  95          *
  96          * NOTE: mnt_mountp is non-NULL iff the zone's root filesystem is a
  97          * ZFS filesystem with a non-legacy mountpoint.  In this case, it
  98          * refers to a string containing the dataset's mountpoint.
  99          */
 100         struct mnttab   *root_mnttab;
 101 } zone_mounts_t;
 102 
 103 /*
 104  * zoneadm.c
 105  */
 106 extern char *target_zone;
 107 
 108 extern int zfm_print(const struct mnttab *mntp, void *unused);
 109 extern int clone_copy(char *source_zonepath, char *zonepath);
 110 extern char *cmd_to_str(int cmd_num);
 111 extern int do_subproc(char *cmdbuf);
 112 extern int subproc_status(const char *cmd, int status,
 113     boolean_t verbose_failure);
 114 extern void zerror(const char *fmt, ...);
 115 extern void zperror(const char *str, boolean_t zonecfg_error);
 116 extern void zperror2(const char *zone, const char *str);
 117 
 118 /*
 119  * zfs.c
 120  */
 121 extern int clone_snapshot_zfs(char *snap_name, char *zonepath,
 122     char *validatesnap);
 123 extern int clone_zfs(char *source_zonepath, char *zonepath, char *presnapbuf,
 124     char *postsnapbuf);
 125 extern void create_zfs_zonepath(char *zonepath);
 126 extern int destroy_zfs(char *zonepath);
 127 extern boolean_t is_zonepath_zfs(char *zonepath);
 128 extern int move_zfs(char *zonepath, char *new_zonepath);
 129 extern int verify_datasets(zone_dochandle_t handle);
 130 extern int verify_fs_zfs(struct zone_fstab *fstab);
 131 extern int zone_mounts_init(zone_mounts_t *mounts, const char *zonepath);
 132 extern void zone_mounts_destroy(zone_mounts_t *mounts);
 133 extern int zone_mount_rootfs(zone_mounts_t *mounts, const char *zonepath);
 134 extern int zone_unmount_rootfs(zone_mounts_t *mounts, const char *zonepath,
 135     boolean_t force);
 136 extern int init_zfs(void);
 137 
 138 #endif  /* _ZONEADM_H */