0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek/*
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * CDDL HEADER START
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek *
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * The contents of this file are subject to the terms of the
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * Common Development and Distribution License (the "License").
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * You may not use this file except in compliance with the License.
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek *
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * or http://www.opensolaris.org/os/licensing.
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * See the License for the specific language governing permissions
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * and limitations under the License.
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek *
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * When distributing Covered Code, include this CDDL HEADER in each
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * If applicable, add the following below this CDDL HEADER, with the
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * fields enclosed by brackets "[]" replaced with your own identifying
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * information: Portions Copyright [yyyy] [name of copyright owner]
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek *
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * CDDL HEADER END
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek */
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek/*
c75cc341903ca38e644edfae5357a4020418f9be * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * Use is subject to license terms.
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin * Copyright 2014 Nexenta Systems, Inc. All rights reserved.
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek */
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#ifndef _ZONEADM_H
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define _ZONEADM_H
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0094b373ead542a342e4250eaf37854ccd3e50c0jv#include <sys/types.h>
0094b373ead542a342e4250eaf37854ccd3e50c0jv
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define CMD_HELP 0
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define CMD_BOOT 1
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define CMD_HALT 2
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define CMD_READY 3
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_SHUTDOWN 4
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_REBOOT 5
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_LIST 6
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_VERIFY 7
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_INSTALL 8
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_UNINSTALL 9
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_MOUNT 10
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_UNMOUNT 11
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_CLONE 12
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_MOVE 13
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_DETACH 14
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_ATTACH 15
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_MARK 16
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_APPLY 17
3c7284bd3243d42a710edac3a15f6019b4c849beAlexander Eremin#define CMD_SYSBOOT 18
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define CMD_MIN CMD_HELP
fbbfbc6ee66f60ad88ebd18c6c030797335354f4jv#define CMD_MAX CMD_SYSBOOT
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#if !defined(TEXT_DOMAIN) /* should be defined by cc -D */
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define TEXT_DOMAIN "SYS_TEST" /* Use this only if it wasn't */
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#endif
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define Z_ERR 1
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define Z_USAGE 2
6cfd72c6361fc164bc537fc17e829cccc62b0b1fgjelinek#define Z_FATAL 3
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define SW_CMP_NONE 0x0
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define SW_CMP_SRC 0x01
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#define SW_CMP_SILENT 0x02
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0094b373ead542a342e4250eaf37854ccd3e50c0jv/*
0094b373ead542a342e4250eaf37854ccd3e50c0jv * This structure stores information about mounts of interest within an
0094b373ead542a342e4250eaf37854ccd3e50c0jv * installed zone.
0094b373ead542a342e4250eaf37854ccd3e50c0jv */
0094b373ead542a342e4250eaf37854ccd3e50c0jvtypedef struct zone_mounts {
0094b373ead542a342e4250eaf37854ccd3e50c0jv /* The zone's zonepath */
0094b373ead542a342e4250eaf37854ccd3e50c0jv char *zonepath;
0094b373ead542a342e4250eaf37854ccd3e50c0jv
0094b373ead542a342e4250eaf37854ccd3e50c0jv /* The length of zonepath */
0094b373ead542a342e4250eaf37854ccd3e50c0jv int zonepath_len;
0094b373ead542a342e4250eaf37854ccd3e50c0jv
0094b373ead542a342e4250eaf37854ccd3e50c0jv /*
0094b373ead542a342e4250eaf37854ccd3e50c0jv * This indicates the number of unexpected mounts that were encountered
0094b373ead542a342e4250eaf37854ccd3e50c0jv * in the zone.
0094b373ead542a342e4250eaf37854ccd3e50c0jv */
0094b373ead542a342e4250eaf37854ccd3e50c0jv int num_unexpected_mounts;
0094b373ead542a342e4250eaf37854ccd3e50c0jv
0094b373ead542a342e4250eaf37854ccd3e50c0jv /*
0094b373ead542a342e4250eaf37854ccd3e50c0jv * This is the number of overlay mounts detected on the zone's root
0094b373ead542a342e4250eaf37854ccd3e50c0jv * directory.
0094b373ead542a342e4250eaf37854ccd3e50c0jv */
0094b373ead542a342e4250eaf37854ccd3e50c0jv int num_root_overlay_mounts;
0094b373ead542a342e4250eaf37854ccd3e50c0jv
0094b373ead542a342e4250eaf37854ccd3e50c0jv /*
0094b373ead542a342e4250eaf37854ccd3e50c0jv * This is used to track important zone root mount information. The
0094b373ead542a342e4250eaf37854ccd3e50c0jv * mnt_time field isn't used. If root_mnttab is NULL, then the
0094b373ead542a342e4250eaf37854ccd3e50c0jv * associated zone doesn't have a mounted root filesystem.
0094b373ead542a342e4250eaf37854ccd3e50c0jv *
0094b373ead542a342e4250eaf37854ccd3e50c0jv * NOTE: mnt_mountp is non-NULL iff the zone's root filesystem is a
0094b373ead542a342e4250eaf37854ccd3e50c0jv * ZFS filesystem with a non-legacy mountpoint. In this case, it
0094b373ead542a342e4250eaf37854ccd3e50c0jv * refers to a string containing the dataset's mountpoint.
0094b373ead542a342e4250eaf37854ccd3e50c0jv */
0094b373ead542a342e4250eaf37854ccd3e50c0jv struct mnttab *root_mnttab;
0094b373ead542a342e4250eaf37854ccd3e50c0jv} zone_mounts_t;
0094b373ead542a342e4250eaf37854ccd3e50c0jv
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek/*
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * zoneadm.c
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek */
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern char *target_zone;
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0094b373ead542a342e4250eaf37854ccd3e50c0jvextern int zfm_print(const struct mnttab *mntp, void *unused);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern int clone_copy(char *source_zonepath, char *zonepath);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern char *cmd_to_str(int cmd_num);
c75cc341903ca38e644edfae5357a4020418f9beextern int do_subproc(char *cmdbuf);
ff17c8bf86c3e567734be83f90267edee20f580fgjelinekextern int subproc_status(const char *cmd, int status,
ff17c8bf86c3e567734be83f90267edee20f580fgjelinek boolean_t verbose_failure);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern void zerror(const char *fmt, ...);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern void zperror(const char *str, boolean_t zonecfg_error);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern void zperror2(const char *zone, const char *str);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek/*
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek * zfs.c
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek */
ff17c8bf86c3e567734be83f90267edee20f580fgjelinekextern int clone_snapshot_zfs(char *snap_name, char *zonepath,
ff17c8bf86c3e567734be83f90267edee20f580fgjelinek char *validatesnap);
ff17c8bf86c3e567734be83f90267edee20f580fgjelinekextern int clone_zfs(char *source_zonepath, char *zonepath, char *presnapbuf,
ff17c8bf86c3e567734be83f90267edee20f580fgjelinek char *postsnapbuf);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern void create_zfs_zonepath(char *zonepath);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern int destroy_zfs(char *zonepath);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern boolean_t is_zonepath_zfs(char *zonepath);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern int move_zfs(char *zonepath, char *new_zonepath);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern int verify_datasets(zone_dochandle_t handle);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinekextern int verify_fs_zfs(struct zone_fstab *fstab);
0094b373ead542a342e4250eaf37854ccd3e50c0jvextern int zone_mounts_init(zone_mounts_t *mounts, const char *zonepath);
0094b373ead542a342e4250eaf37854ccd3e50c0jvextern void zone_mounts_destroy(zone_mounts_t *mounts);
0094b373ead542a342e4250eaf37854ccd3e50c0jvextern int zone_mount_rootfs(zone_mounts_t *mounts, const char *zonepath);
0094b373ead542a342e4250eaf37854ccd3e50c0jvextern int zone_unmount_rootfs(zone_mounts_t *mounts, const char *zonepath,
0094b373ead542a342e4250eaf37854ccd3e50c0jv boolean_t force);
99653d4ee642c6528e88224f12409a5f23060994eschrockextern int init_zfs(void);
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek
0b5de56d26c0148ad33bb3a9201091502f24d910gjelinek#endif /* _ZONEADM_H */