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  */
  26 
  27 #ifndef _ZONEADM_H
  28 #define _ZONEADM_H
  29 
  30 #include <sys/types.h>
  31 
  32 #define CMD_HELP        0
  33 #define CMD_BOOT        1
  34 #define CMD_HALT        2
  35 #define CMD_READY       3
  36 #define CMD_REBOOT      4
  37 #define CMD_LIST        5
  38 #define CMD_VERIFY      6
  39 #define CMD_INSTALL     7
  40 #define CMD_UNINSTALL   8
  41 #define CMD_MOUNT       9
  42 #define CMD_UNMOUNT     10
  43 #define CMD_CLONE       11
  44 #define CMD_MOVE        12
  45 #define CMD_DETACH      13
  46 #define CMD_ATTACH      14
  47 #define CMD_MARK        15
  48 #define CMD_APPLY       16
  49 #define CMD_SYSBOOT     17
  50 
  51 #define CMD_MIN         CMD_HELP
  52 #define CMD_MAX         CMD_SYSBOOT
  53 
  54 #if !defined(TEXT_DOMAIN)               /* should be defined by cc -D */
  55 #define TEXT_DOMAIN     "SYS_TEST"      /* Use this only if it wasn't */
  56 #endif
  57 
  58 #define Z_ERR           1
  59 #define Z_USAGE         2
  60 #define Z_FATAL         3
  61 
  62 #define SW_CMP_NONE     0x0
  63 #define SW_CMP_SRC      0x01
  64 #define SW_CMP_SILENT   0x02
  65 
  66 /*
  67  * This structure stores information about mounts of interest within an
  68  * installed zone.
  69  */
  70 typedef struct zone_mounts {
  71         /* The zone's zonepath */
  72         char            *zonepath;
  73 
  74         /* The length of zonepath */
  75         int             zonepath_len;
  76 
  77         /*
  78          * This indicates the number of unexpected mounts that were encountered
  79          * in the zone.
  80          */
  81         int             num_unexpected_mounts;
  82 
  83         /*
  84          * This is the number of overlay mounts detected on the zone's root
  85          * directory.
  86          */
  87         int             num_root_overlay_mounts;
  88 
  89         /*
  90          * This is used to track important zone root mount information.  The
  91          * mnt_time field isn't used.  If root_mnttab is NULL, then the
  92          * associated zone doesn't have a mounted root filesystem.
  93          *
  94          * NOTE: mnt_mountp is non-NULL iff the zone's root filesystem is a
  95          * ZFS filesystem with a non-legacy mountpoint.  In this case, it
  96          * refers to a string containing the dataset's mountpoint.
  97          */
  98         struct mnttab   *root_mnttab;
  99 } zone_mounts_t;
 100 
 101 /*
 102  * zoneadm.c
 103  */
 104 extern char *target_zone;
 105 
 106 extern int zfm_print(const struct mnttab *mntp, void *unused);
 107 extern int clone_copy(char *source_zonepath, char *zonepath);
 108 extern char *cmd_to_str(int cmd_num);
 109 extern int do_subproc(char *cmdbuf);
 110 extern int subproc_status(const char *cmd, int status,
 111     boolean_t verbose_failure);
 112 extern void zerror(const char *fmt, ...);
 113 extern void zperror(const char *str, boolean_t zonecfg_error);
 114 extern void zperror2(const char *zone, const char *str);
 115 
 116 /*
 117  * zfs.c
 118  */
 119 extern int clone_snapshot_zfs(char *snap_name, char *zonepath,
 120     char *validatesnap);
 121 extern int clone_zfs(char *source_zonepath, char *zonepath, char *presnapbuf,
 122     char *postsnapbuf);
 123 extern void create_zfs_zonepath(char *zonepath);
 124 extern int destroy_zfs(char *zonepath);
 125 extern boolean_t is_zonepath_zfs(char *zonepath);
 126 extern int move_zfs(char *zonepath, char *new_zonepath);
 127 extern int verify_datasets(zone_dochandle_t handle);
 128 extern int verify_fs_zfs(struct zone_fstab *fstab);
 129 extern int zone_mounts_init(zone_mounts_t *mounts, const char *zonepath);
 130 extern void zone_mounts_destroy(zone_mounts_t *mounts);
 131 extern int zone_mount_rootfs(zone_mounts_t *mounts, const char *zonepath);
 132 extern int zone_unmount_rootfs(zone_mounts_t *mounts, const char *zonepath,
 133     boolean_t force);
 134 extern int init_zfs(void);
 135 
 136 #endif  /* _ZONEADM_H */