| Current File : //usr/include/libzonecfg.h |
/*
* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
*/
#ifndef _LIBZONECFG_H
#define _LIBZONECFG_H
/*
* INTERFACES DEFINED IN THIS FILE DO NOT CONSTITUTE A PUBLIC INTERFACE.
*
* Do not consume these interfaces; your program will break in the future
* (even in a patch) if you do.
*/
/*
* Zone configuration header file.
*/
#ifdef __cplusplus
extern "C" {
#endif
/* sys/socket.h is required by net/if.h, which has a constant needed here */
#include <sys/param.h>
#include <sys/fstyp.h>
#include <sys/mount.h>
#include <priv.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <net/if.h>
#include <stdio.h>
#include <rctl.h>
#include <zone.h>
#include <sys/uuid.h>
#include <sys/mnttab.h>
#include <limits.h>
#include <utmpx.h>
#include <sys/mac.h>
#include <sys/mac_flow.h>
#include <suri.h>
#include <sys/list.h>
#include <libibadm.h>
#include <openssl/x509.h>
#define MAX_NESTED_RESOURCES 4
#define ZONE_ID_UNDEFINED -1
/*
* WARNING: do not renumber or remove these: they form part of the stable API
* that RAD uses.
*/
#define Z_OK 0
#define Z_EMPTY_DOCUMENT 1 /* XML doc root element is null */
#define Z_WRONG_DOC_TYPE 2 /* top-level XML doc element != zone */
#define Z_BAD_PROPERTY 3 /* libxml-level property problem */
#define Z_TEMP_FILE 4 /* problem creating temporary file */
#define Z_SAVING_FILE 5 /* libxml error saving or validating */
#define Z_NO_ENTRY 6 /* no such entry */
#define Z_BOGUS_ZONE_NAME 7 /* illegal zone name */
#define Z_REQD_RESOURCE_MISSING 8 /* required resource missing */
#define Z_REQD_PROPERTY_MISSING 9 /* required property missing */
#define Z_BAD_HANDLE 10 /* bad document handle */
#define Z_NOMEM 11 /* out of memory (like ENOMEM) */
#define Z_INVAL 12 /* invalid argument (like EINVAL) */
#define Z_ACCES 13 /* permission denied (like EACCES) */
#define Z_TOO_BIG 14 /* string won't fit in char array */
#define Z_MISC_FS 15 /* miscellaneous file-system error */
#define Z_NO_ZONE 16 /* no such zone */
#define Z_NO_RESOURCE_TYPE 17 /* no/wrong resource type */
#define Z_NO_RESOURCE_ID 18 /* no/wrong resource id */
#define Z_NO_PROPERTY_TYPE 19 /* no/wrong property type */
#define Z_NO_PROPERTY_ID 20 /* no/wrong property id */
#define Z_BAD_ZONE_STATE 21 /* zone state invalid for given task */
#define Z_INVALID_DOCUMENT 22 /* libxml can't validate against DTD */
#define Z_NAME_IN_USE 23 /* zone name already in use (rename) */
#define Z_NO_SUCH_ID 24 /* delete_index: no old ID */
#define Z_UPDATING_INDEX 25 /* add/modify/delete_index problem */
#define Z_LOCKING_FILE 26 /* problem locking index file */
#define Z_UNLOCKING_FILE 27 /* problem unlocking index file */
#define Z_SYSTEM 28 /* consult errno instead */
#define Z_INSUFFICIENT_SPEC 29 /* resource insufficiently specified */
#define Z_RESOLVED_PATH 34 /* resolved path mismatch */
#define Z_IPV6_ADDR_PREFIX_LEN 35 /* IPv6 address prefix length needed */
#define Z_BOGUS_ADDRESS 36 /* not IPv[4|6] address or host name */
#define Z_PRIV_PROHIBITED 37 /* specified privilege is prohibited */
#define Z_PRIV_REQUIRED 38 /* required privilege is missing */
#define Z_PRIV_UNKNOWN 39 /* specified privilege is unknown */
#define Z_BRAND_ERROR 40 /* brand-specific error */
#define Z_INCOMPATIBLE 41 /* incompatible settings */
#define Z_ALIAS_DISALLOW 42 /* rctl alias disallowed */
#define Z_CLEAR_DISALLOW 43 /* clear property disallowed */
#define Z_POOL 44 /* generic libpool error */
#define Z_POOLS_NOT_ACTIVE 45 /* pool service not enabled */
#define Z_POOL_ENABLE 46 /* pools enable failed */
#define Z_NO_POOL 47 /* no such pool configured */
#define Z_POOL_CREATE 48 /* pool create failed */
#define Z_POOL_BIND 49 /* pool bind failed */
#define Z_INVALID_PROPERTY 50 /* invalid property value */
#define Z_POSSIBLE_CONFLICT 51 /* possible conflicts in /dev/zvol */
#define Z_STORAGE_MISC 52 /* misc. storage resource error */
#define Z_STORAGE_INUSE 53 /* storage resource in use */
#define Z_STORAGE_AGAIN 54 /* like EAGAIN */
#define Z_DUP_PROPERTY 55 /* duplicate property value */
#define Z_BRAND_FIXED_CFG 56 /* the property has been fixed */
#define Z_BRAND_DISABLED_CFG 57 /* the res/prop has been disabled */
#define Z_BRAND_DISABLED_VAL 58 /* the prop val has been disabled */
#define Z_STALE_CFG 59 /* zone cfg externally modified */
#define Z_UNIFIED_ARCHIVE 60 /* ua_log() has already handled error */
#define Z_LIVE_DISABLED_CFG 61 /* live mode does not support res */
#define Z_LIVE_DISABLED_VAL 62 /* live mode does not support value */
#define Z_DUP_RESOURCE 63 /* resource already exists */
#define Z_GPT_PARTITION 64 /* unable to find gpt partition */
#define Z_NO_ENTROPY 65 /* /dev/random is empty */
/*
* Zone states, as seen from user space
*
* When adding, removing, or changing state definitions, consider the following:
*
* 1. Contracts exist on zone_get_state() which returns these state numbers.
* The suggested mechanism for libzonecfg contract consumers to determine
* the state is by using get_zone_state_str(). Alternatively, the value
* returned from zone_get_state() may be treated as an opaque value that is
* passed to zone_state_str(). The values returned by get_zone_state_str()
* and zone_state_str() are the same string as is returned in the state
* field of zoneadm(1M)'s list subcommand's output.
* 2. State numbers are passed to brand scripts. As states are added or
* removed, brand scripts may require updates. Pay particular attention
* to usr/src/lib/brand/<brands>/zone/{pre,post}state.ksh.
* 3. When adding states, update zone_states array in libzonecfg.c.
*/
typedef enum {
ZONE_STATE_CONFIGURED = 0,
ZONE_STATE_INCOMPLETE,
ZONE_STATE_UNAVAILABLE,
ZONE_STATE_INSTALLED,
ZONE_STATE_READY,
ZONE_STATE_RUNNING,
ZONE_STATE_SHUTTING_DOWN,
ZONE_STATE_DOWN,
ZONE_STATE_MOUNTED,
/* Not actually a state, used as a flag. Must be last. */
ZONE_STATE_INVALID
} zone_state_t;
#define ZONE_STATE_MAXSTRLEN 14
#define ZONE_KEY_BITS 128
/* Key is base64 encoded and starts with "{base64}". See sasl_encode64(). */
#define ZONE_KEY_MAXSTRLEN (9 + ((ZONE_KEY_BITS / 8 + 2) / 3 * 4))
#define ZONE_CRYPT_MAC_SIZE 16
#define LIBZONECFG_PATH "libzonecfg.so.1"
#define ZONE_CONFIG_ROOT "/etc/zones"
#define ZONE_INDEX_FILE ZONE_CONFIG_ROOT "/index"
#define ZONE_KEY_DIR ZONE_CONFIG_ROOT "/keys"
#define MAXUSERNAME MAXNAMELEN
#define MAXAUTHS 4096
/* Owner, group, and mode (defined by packaging) for the config directory */
#define ZONE_CONFIG_UID 0 /* root */
#define ZONE_CONFIG_GID 3 /* sys */
#define ZONE_CONFIG_MODE 0755
/* Owner, group, and mode (defined by packaging) for the index file */
#define ZONE_INDEX_UID 0 /* root */
#define ZONE_INDEX_GID 3 /* sys */
#define ZONE_INDEX_MODE 0644
/*
* Reserved zone root zpool/dataset name, used in zonecfg and zoneadm.
*/
#define ZONE_RZPNAME "rpool"
/*
* Shortened alias names for the zones rctls.
*/
#define ALIAS_MAXLWPS "max-lwps"
#define ALIAS_MAXSHMMEM "max-shm-memory"
#define ALIAS_MAXSHMIDS "max-shm-ids"
#define ALIAS_MAXMSGIDS "max-msg-ids"
#define ALIAS_MAXSEMIDS "max-sem-ids"
#define ALIAS_MAXLOCKEDMEM "locked"
#define ALIAS_MAXSWAP "swap"
#define ALIAS_SHARES "cpu-shares"
#define ALIAS_CPUCAP "cpu-cap"
#define ALIAS_MAXPROCS "max-processes"
/* Default name for zone detached manifest */
#define ZONE_DETACHED_CFG_NAME "SUNWdetached.xml"
/* Default name for suspended boot snapshot */
#define ZONE_SUSPENDED_CFG_NAME "SUNWsuspended.xml"
/*
* Bit flag definitions for passing into libzonecfg functions.
*/
#define ZONE_DRY_RUN 0x01
/* Length of annotations which do not carry path. */
#define DEVANN_LEN 128
/* The empty string and "none" are equivalent and indicate a r/w zone. */
#define ZONECFG_READ_WRITE_PROFNAME(prof) \
((prof)[0] == '\0' || strcmp((prof), "none") == 0)
/*
* Macros representing max. sizes for net and anet resource properties
*/
/*
* Our limit of 50 allowed-addresses should be more than enough. Generally,
* users may need at most two allowed-addresses. Same for default routers.
*/
#define ALLOWED_ADDRS_BUFSZ (50 * INET6_ADDRSTRLEN)
#define DEFROUTERS_BUFSZ ALLOWED_ADDRS_BUFSZ
/* Allow at the most 20 allowed-dhcp-cids. */
#define ALLOWED_DHCP_CIDS_BUFSZ (20 * MPT_MAXCIDLEN)
/*
* Today we have 4 protection. Our limit of 256 is more than
* enough to handle them.
*/
#define MAX_LINK_PROTECTIONS 256
/*
* Properties such priority, vlan-id, mtu, maxbw, rings are eventually
* stored as uint64_t.
*/
#define MAX_NET_UINT64_STR 23
#define ALLOWED_VLANID_ANY_KEY "any"
/* World Wide Name length */
#define VPORT_WWN_LEN 16
#define VPORT_WWN_STR_LEN (VPORT_WWN_LEN + 1)
/* Maximum FC controller name length */
#define VPORT_MAX_CONTROLLER_LEN 8
/* Allow 64 MAC addresses per anet. */
#define MAC_ADDRESSES_PER_ANET 64
/* Size required to store up to 64 MAC addresses or keywords. */
/* +1 for the seperating comma. */
#define MAC_ADDRESSES_BUFSIZ (MAC_ADDRESSES_PER_ANET * (MAXMACADDRLEN + 1))
/* Size required to store up to 64 factory MAC address slots. */
/* +1 for the seperating comma. */
#define MAC_SLOT_BUFSIZ (MAC_ADDRESSES_PER_ANET * (MAX_NET_UINT64_STR + 1))
/* Maximum length of allowed-mac-address */
#define MAX_ALLOWED_MAC_ADDRESS_LEN 5
#define MACADDR_STRSIZE 18
#define ALLOWED_MACADDR_ANY_KEY "any"
#define ALLOWED_MACADDR_ANY_VAL "00:00:00:00:00:00"
/*
* pkey string is made up of "0x", followed by pkey in hex (maximum of 4
* characters), followed by '\0'.
*/
#define MAX_PKEY_STR 7
#define MAX_UINT32_STRLEN 11 /* 10 (MAX_UINT32 = 4294967295) + 1 (\0) */
/* linkmode is set to either "cm" or "ud" */
#define MAX_LINKMODE_STR 3
#define LINKMODE_CM "cm" /* IB connected mode */
#define LINKMODE_UD "ud" /* IB unreliable datagram mode */
/* vboot policy is set to either "none", "warning" or "enforce" */
#define MAXPOLICYLEN 8
/* Nesting Levels with resources */
#define GLOBAL_RESOURCE (-1)
#define NON_NESTED_RESOURCE 0
#define LEVEL1_NESTED_RESOURCE 1
#define ARRAY_SIZE(a) (sizeof (a) / sizeof ((a)[0]))
/* Template tokens and correspoding values */
#define TOK_ZONENAME ("%{zonename}")
#define TOK_RESOURCEID ("%{resource-id}")
#define TOK_NETWORKID ("%{network-id}")
#define TOK_ID ("%{id}")
#define TOK_GLOBAL_ROOTZPOOL ("%{global-rootzpool}")
#define TOK_PWWN ("%{pwwn}")
#define CFGTOK_NONE 0x0
#define CFGTOK_ZONENAME 0x1
#define CFGTOK_RESOURCEID 0x2
#define CFGTOK_NETWORKID 0x4
#define CFGTOK_ID 0x8
#define CFGTOK_GLOBAL_ROOTZPOOL 0x10
#define CFGTOK_PWWN 0x20
#define CFGTOK_MAX CFGTOK_PWWN
#define CFGTOK_ALL (((uint64_t)1 << (CFGTOK_MAX)) - 1)
#define CFGTOK_ALL_BUT_ID ((CFGTOK_ALL) & (~(CFGTOK_ID)))
#define CFGTOK_ALL_BUT(exclude) ((CFGTOK_ALL) & (~(exclude)))
/*
* This structure represents information for a single entry in the
* /etc/zones/index file.
* The integer field expresses the current values on a get.
* On a put, it represents the new values if >= 0 or "don't change" if < 0.
*/
struct zoneent {
char zone_name[ZONENAME_MAX]; /* name of the zone */
int zone_state; /* configured | incomplete | installed */
char zone_path[MAXPATHLEN]; /* path to zone storage */
uuid_t zone_uuid; /* unique ID for zone */
char zone_newname[ZONENAME_MAX]; /* for doing renames */
};
typedef struct zone_dochandle *zone_dochandle_t; /* opaque handle */
typedef struct zone_fsopt {
struct zone_fsopt *zone_fsopt_next;
char zone_fsopt_opt[MAX_MNTOPT_STR];
} zone_fsopt_t;
typedef struct zone_fstab {
char zone_fs_special[MAXPATHLEN]; /* special file */
char zone_fs_dir[MAXPATHLEN]; /* mount point */
char zone_fs_type[FSTYPSZ]; /* e.g. ufs */
zone_fsopt_t *zone_fs_options; /* mount options */
char zone_fs_raw[MAXPATHLEN]; /* device to fsck */
char zone_fs_tmp_id[MAX_UINT32_STRLEN];
} zone_fstab_t;
typedef struct zone_nettab {
char zone_net_address[INET6_ADDRSTRLEN]; /* shared-ip only */
char zone_net_allowed_addr[ALLOWED_ADDRS_BUFSZ]; /* excl-ip only */
char zone_net_physical[LIFNAMSIZ];
char zone_net_defrouter[DEFROUTERS_BUFSZ];
char zone_net_configure_allowed_addr[6]; /* "true" or "false" */
/* used as annotation so sized for convenience */
char zone_net_id[DEVANN_LEN];
char zone_net_tmp_id[MAX_UINT32_STRLEN];
} zone_nettab_t;
typedef struct zone_allowed_macaddr {
char allowed_maddrstr[MACADDR_STRSIZE];
list_node_t list_node;
} zone_allowed_macaddr_t;
typedef struct zone_anetmactab {
char zone_anetmac_auto_mac_addr[MAC_ADDRESSES_BUFSIZ];
char zone_anetmac_mac_addr[MAC_ADDRESSES_BUFSIZ];
char zone_anetmac_mac_prefix[MAC_ADDRESSES_BUFSIZ];
/* used as annotation so sized for convenience */
char zone_anetmac_id[DEVANN_LEN];
char zone_anetmac_tmp_id[MAX_UINT32_STRLEN];
list_t zone_anetmac_allowed_macaddr;
list_node_t list_node;
} zone_anetmactab_t;
typedef struct zone_allowed_vid_range_s {
uint16_t avr_min;
uint16_t avr_max;
} zone_allowed_vid_range_t;
typedef struct zone_allowed_vids {
char allowed_vidstr[MAX_UINT32_STRLEN];
zone_allowed_vid_range_t allowed_vidrange;
list_node_t list_node;
} zone_allowed_vids_t;
typedef struct zone_anetvlantab {
char zone_anetvlan_vlan_id[MAX_NET_UINT64_STR];
char zone_anetvlan_tmp_id[MAX_UINT32_STRLEN];
list_t zone_anetvlan_allowed_vids;
list_node_t list_node;
} zone_anetvlantab_t;
/*
* Since iov is incompatible with most anet properties, whoever adds new
* field(s) to this structure must also update vplat.c:validate_iov_properties()
* if necessary.
* Since evs and vport are incompatible with most anet properties,
* whoever adds new field(s) to this structure must also update
* zonecfg_manip.c:validate_evs_properties() if necessary.
*/
typedef struct zone_anettab {
char zone_anet_linkname[MAXLINKNAMELEN];
char zone_anet_lower_link[MAXLINKNAMELEN];
char zone_anet_allowed_addr[ALLOWED_ADDRS_BUFSZ];
char zone_anet_defrouter[DEFROUTERS_BUFSZ];
char zone_anet_configure_allowed_addr[6]; /* "true" or "false" */
char zone_anet_allowed_dhcp_cids[ALLOWED_DHCP_CIDS_BUFSZ];
char zone_anet_link_protection[MAX_LINK_PROTECTIONS];
char zone_anet_auto_mac_addr[MAC_ADDRESSES_BUFSIZ];
char zone_anet_mac_addr[MAC_ADDRESSES_BUFSIZ];
char zone_anet_mac_prefix[MAC_ADDRESSES_BUFSIZ];
char zone_anet_mac_slot[MAC_SLOT_BUFSIZ];
char zone_anet_vlan_id[MAX_NET_UINT64_STR];
char zone_anet_priority[MAX_NET_UINT64_STR];
char zone_anet_rxrings[MAX_NET_UINT64_STR];
char zone_anet_txrings[MAX_NET_UINT64_STR];
char zone_anet_maxbw[MAX_NET_UINT64_STR];
char zone_anet_mtu[MAX_NET_UINT64_STR];
char zone_anet_rxfanout[MAX_NET_UINT64_STR];
char zone_anet_vsitypeid[MAX_NET_UINT64_STR];
char zone_anet_vsivers[MAX_NET_UINT64_STR];
char zone_anet_vsimgrid[MAX_NET_UINT64_STR];
char zone_anet_etsbwlcl[MAX_NET_UINT64_STR];
char zone_anet_cos[MAX_NET_UINT64_STR];
char zone_anet_pkey[MAX_PKEY_STR];
char zone_anet_linkmode[MAX_LINKMODE_STR];
char zone_anet_evs[MAXNAMELEN];
char zone_anet_vport[MAXNAMELEN];
char zone_anet_iov[MAXNAMELEN];
char zone_anet_lro[8]; /* "on", "off" or "auto" */
/* used as annotation so sized for convenience */
char zone_anet_id[DEVANN_LEN];
char zone_anet_tmp_id[MAX_UINT32_STRLEN];
list_t zone_anet_macs;
char zone_anet_bwshare[MAX_NET_UINT64_STR];
list_t zone_anet_vlans;
} zone_anettab_t;
#define MAX_PORT_PER_IB 2
#define MAXOVERHCALEN 150
#define MAX_PROPS_PER_PORT 64
#define MAXSMIENABLEDLEN 9
struct zone_ibporttab {
char zone_ibport_pkey[MAX_PROPS_PER_PORT * MAX_PKEY_STR];
char zone_ibport_id[DEVANN_LEN];
char zone_ibport_tmp_id[MAX_UINT32_STRLEN];
list_node_t list_node;
};
struct zone_ibtab {
char zone_ib_overhca[MAXOVERHCALEN];
char zone_ib_smi_enabled[MAXSMIENABLEDLEN];
char zone_ib_vhca[MAXOVERHCALEN];
char zone_ib_id[DEVANN_LEN];
char zone_ib_tmp_id[MAX_UINT32_STRLEN];
list_t zone_ib_port;
};
typedef struct zone_devtab {
char zone_dev_match[MAXPATHLEN];
char zone_dev_storage[SURI_MAX_URI_LEN];
char zone_dev_create_size[SURI_MAX_UINT64_LEN];
int zone_dev_flags;
/* these four used as annotation so sized for convenience */
char zone_dev_direct_io[SURI_MAX_URI_LEN];
char zone_dev_partition[DEVANN_LEN];
char zone_dev_raw_io[DEVANN_LEN];
char zone_dev_id[DEVANN_LEN];
char zone_dev_bootpri[DEVANN_LEN];
char zone_dev_tmp_id[MAX_UINT32_STRLEN];
} zone_devtab_t;
typedef struct zone_rctlvaltab {
char zone_rctlval_priv[MAXNAMELEN];
char zone_rctlval_limit[MAXNAMELEN];
char zone_rctlval_action[MAXNAMELEN];
struct zone_rctlvaltab *zone_rctlval_next;
} zone_rctlvaltab_t;
typedef struct zone_rctltab {
char zone_rctl_name[MAXNAMELEN];
char zone_rctl_tmp_id[MAX_UINT32_STRLEN];
struct zone_rctlvaltab *zone_rctl_valptr;
} zone_rctltab_t;
typedef struct zone_attrtab {
char zone_attr_name[MAXNAMELEN];
char zone_attr_type[MAXNAMELEN];
char zone_attr_value[2 * BUFSIZ];
char zone_attr_tmp_id[MAX_UINT32_STRLEN];
} zone_attrtab_t;
typedef struct zone_dstab {
char zone_dataset_name[MAXNAMELEN];
char zone_dataset_alias[MAXNAMELEN];
char zone_dataset_tmp_id[MAX_UINT32_STRLEN];
} zone_dstab_t;
typedef struct zone_psettab {
char zone_ncpu_min[MAXNAMELEN];
char zone_ncpu_max[MAXNAMELEN];
char zone_cpus[MAXNAMELEN];
char zone_cores[MAXNAMELEN];
char zone_sockets[MAXNAMELEN];
char zone_importance[MAXNAMELEN];
} zone_psettab_t;
typedef struct zone_mcaptab {
char zone_physmem_cap[MAXNAMELEN];
char zone_physmem_pgsz_policy[MAXNAMELEN]; /* kernel zones only */
} zone_mcaptab_t;
typedef struct zone_devpermtab {
char zone_devperm_name[MAXPATHLEN];
uid_t zone_devperm_uid;
gid_t zone_devperm_gid;
mode_t zone_devperm_mode;
char *zone_devperm_acl;
} zone_devpermtab_t;
typedef struct zone_admintab {
char zone_admin_user[MAXUSERNAME];
char zone_admin_auths[MAXAUTHS];
char zone_admin_tmp_id[MAX_UINT32_STRLEN];
} zone_admintab_t;
typedef struct zone_vcputab {
char zone_ncpu_min[MAXNAMELEN];
char zone_ncpu_max[MAXNAMELEN];
} zone_vcputab_t;
typedef struct zone_userauths {
char user[MAXUSERNAME];
char zonename[ZONENAME_MAX];
struct zone_userauths *next;
} zone_userauths_t;
typedef struct zone_storage {
char zone_storage_uri[SURI_MAX_URI_LEN]; /* URI string */
struct zone_storage *zone_storage_next;
} zone_storage_t;
typedef struct zone_rzptab {
char zone_rzp_create_size[SURI_MAX_UINT64_LEN];
zone_storage_t *zone_storage_list;
} zone_rzptab_t;
typedef struct zone_zptab {
char zone_zp_create_size[SURI_MAX_UINT64_LEN];
char zone_zp_name[MAXNAMELEN]; /* ZPOOL_MAXNAMELEN */
zone_storage_t *zone_storage_list;
char zone_zp_tmp_id[MAX_UINT32_STRLEN];
} zone_zptab_t;
typedef struct zone_susptab {
char zone_susp_path[MAXPATHLEN];
char zone_susp_suri[SURI_MAX_URI_LEN];
} zone_susptab_t;
typedef struct zone_keytab {
char zone_key_raw[ZONE_KEY_MAXSTRLEN];
} zone_keytab_t;
typedef struct zone_cert {
char zone_cert_uri[MAXPATHLEN]; /* URI string */
struct zone_cert *zone_cert_next;
} zone_cert_t;
typedef struct zone_vboottab {
char zone_vboot_policy[MAXPOLICYLEN];
zone_cert_t *zone_cert_list;
} zone_vboottab_t;
typedef enum zone_gttype {
ZS_FALSE,
ZS_TRUE,
ZS_NOTSPECIFIED
} zone_gttype_t;
typedef enum zone_iptype {
ZS_SHARED,
ZS_EXCLUSIVE
} zone_iptype_t;
typedef struct {
char *zmac_list[2];
size_t zmac_size[2];
} zone_maclist_t;
typedef enum zone_mactype {
ZS_BLACK,
ZS_WHITE
} zone_mactype_t;
typedef struct zone_npivtab {
char zone_npiv_pwwn[VPORT_WWN_STR_LEN];
char zone_npiv_overhba[VPORT_MAX_CONTROLLER_LEN];
char zone_npiv_tmp_id[MAX_UINT32_STRLEN];
} zone_npivtab_t;
/*
* Basic configuration management routines.
*/
extern zone_dochandle_t zonecfg_init_handle(void);
extern int zonecfg_get_handle(const char *, zone_dochandle_t);
extern int zonecfg_get_handle_buf(const char *, const char *,
size_t, zone_dochandle_t);
extern int zonecfg_get_snapshot_handle(const char *, zone_dochandle_t);
extern int zonecfg_get_snapshot_xml_file(const char *, char **, size_t *);
extern int zonecfg_snapshot_save(const char *, zone_dochandle_t);
extern int zonecfg_get_suspend_handle(const char *, zone_dochandle_t);
extern int zonecfg_get_template_handle(const char *, const char *,
zone_dochandle_t);
extern int zonecfg_get_xml_handle(const char *, zone_dochandle_t);
extern int zonecfg_get_xml(zone_dochandle_t, char **);
extern int zonecfg_handle_load_fd(int, const char *, zone_dochandle_t);
extern int zonecfg_handle_save_fd(zone_dochandle_t, int);
extern int zonecfg_check_handle(zone_dochandle_t);
extern void zonecfg_fini_handle(zone_dochandle_t);
extern int zonecfg_destroy(const char *, boolean_t);
extern int zonecfg_destroy_snapshot(const char *);
extern int zonecfg_save(zone_dochandle_t, boolean_t);
extern int zonecfg_create_snapshot(const char *);
extern char *zonecfg_strerror(int);
extern int zonecfg_access(const char *, int);
extern void zonecfg_set_root(const char *);
extern const char *zonecfg_get_root(void);
extern int zonecfg_simplify_path(const char *, char *, size_t);
extern boolean_t zonecfg_in_alt_root(void);
extern int zonecfg_num_resources(zone_dochandle_t, const char *);
extern int zonecfg_del_all_resources(zone_dochandle_t, const char *);
extern boolean_t zonecfg_valid_importance(char *);
extern int zonecfg_str_to_bytes(char *, uint64_t *);
extern boolean_t zonecfg_valid_memlimit(char *, uint64_t *);
extern boolean_t zonecfg_valid_alias_limit(char *, char *, uint64_t *);
extern void zonecfg_set_md5(zone_dochandle_t, const unsigned char *);
extern const unsigned char *zonecfg_get_md5(zone_dochandle_t);
extern int zonecfg_is_stale(zone_dochandle_t, const char *);
extern int zonecfg_set_live_baseline(zone_dochandle_t);
extern const unsigned char *zonecfg_get_live_baseline(zone_dochandle_t);
extern int zonecfg_get_current_md5(zone_dochandle_t, unsigned char *);
extern int zonecfg_create_tmpfile(const char *);
extern int zonecfg_handle_set_live(zone_dochandle_t);
extern boolean_t zonecfg_handle_is_live(zone_dochandle_t);
/*
* Zone name, path to zone directory, autoboot setting, pool, boot
* arguments, and scheduling-class.
*/
extern int zonecfg_validate_zonename(const char *);
extern int zonecfg_get_name(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_name(zone_dochandle_t, char *);
extern int zonecfg_get_zonepath_impl(zone_dochandle_t, char *, size_t,
boolean_t);
extern int zonecfg_get_zonepath(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_zonepath(zone_dochandle_t, char *);
extern int zonecfg_get_globaltime(zone_dochandle_t, char **,
zone_gttype_t *);
extern int zonecfg_unset_globaltime(zone_dochandle_t);
extern int zonecfg_set_globaltime(zone_dochandle_t, boolean_t);
extern int zonecfg_get_hostcompatible(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_hostcompatible(zone_dochandle_t, char *);
extern int zonecfg_is_adi(zone_dochandle_t, char *, size_t, char *,
size_t, boolean_t *, boolean_t);
extern int zonecfg_get_autoboot(zone_dochandle_t, boolean_t *);
extern int zonecfg_set_autoboot(zone_dochandle_t, boolean_t);
extern int zonecfg_get_autoshutdown(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_autoshutdown(zone_dochandle_t, const char *);
extern boolean_t zonecfg_is_readonly(zone_dochandle_t);
extern int zonecfg_get_mac_profile(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_mac_profile(zone_dochandle_t, char *);
extern int zonecfg_get_iptype(zone_dochandle_t, zone_iptype_t *);
extern int zonecfg_set_iptype(zone_dochandle_t, zone_iptype_t);
extern int zonecfg_get_pool(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_pool(zone_dochandle_t, char *);
extern int zonecfg_get_bootargs(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_bootargs(zone_dochandle_t, char *);
extern int zonecfg_get_sched_class(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_sched(zone_dochandle_t, char *);
extern int zonecfg_get_dflt_sched_class(zone_dochandle_t, char *, int);
extern int zonecfg_get_mig_class(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_mig_class(zone_dochandle_t, char *);
/*
* Set/retrieve the brand for the zone
*/
extern int zonecfg_get_brand(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_brand(zone_dochandle_t, char *);
/*
* Filesystem configuration.
*/
extern int zonecfg_add_filesystem(zone_dochandle_t, struct zone_fstab *);
extern int zonecfg_delete_filesystem(zone_dochandle_t,
struct zone_fstab *);
extern int zonecfg_modify_filesystem(zone_dochandle_t,
struct zone_fstab *, struct zone_fstab *);
extern int zonecfg_lookup_filesystem(zone_dochandle_t,
struct zone_fstab *);
extern int zonecfg_add_fs_option(struct zone_fstab *, char *);
extern int zonecfg_remove_fs_option(struct zone_fstab *, char *);
extern void zonecfg_free_fs_option_list(zone_fsopt_t *);
extern int zonecfg_find_mounts(char *, int(*)(const struct mnttab *,
void *), void *);
/*
* Network interface configuration.
*/
extern int zonecfg_add_anetmac(struct zone_anetmactab *, struct zone_anettab *);
extern int zonecfg_modify_anetmac(zone_dochandle_t, struct zone_anetmactab *,
struct zone_anetmactab *, struct zone_anettab *);
extern int zonecfg_add_anetvlan(struct zone_anetvlantab *,
struct zone_anettab *);
extern int zonecfg_modify_anetvlan(zone_dochandle_t, struct zone_anetvlantab *,
struct zone_anetvlantab *, struct zone_anettab *);
extern int zonecfg_add_net(zone_dochandle_t, struct zone_nettab *);
extern int zonecfg_delete_net(zone_dochandle_t, struct zone_nettab *);
extern int zonecfg_modify_net(zone_dochandle_t, struct zone_nettab *,
struct zone_nettab *);
extern int zonecfg_lookup_net(zone_dochandle_t, struct zone_nettab *);
/*
* Automatic network interface configuration.
*/
extern int zonecfg_add_anet(zone_dochandle_t, struct zone_anettab *);
extern int zonecfg_delete_anet(zone_dochandle_t, struct zone_anettab *);
extern int zonecfg_modify_anet(zone_dochandle_t, struct zone_anettab *,
struct zone_anettab *);
extern int zonecfg_lookup_anet(zone_dochandle_t, struct zone_anettab *);
extern boolean_t zonecfg_lookup_linkname(zone_dochandle_t, const char *);
extern int zonecfg_csscmp(const char *, const char *);
/*
* Hostid emulation configuration.
*/
extern int zonecfg_get_hostid(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_hostid(zone_dochandle_t, const char *);
/*
* Allowed FS mounts configuration.
*/
extern int zonecfg_get_fs_allowed(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_fs_allowed(zone_dochandle_t, const char *);
/*
* EVS tenant configuration.
*/
extern int zonecfg_get_tenant(zone_dochandle_t, char *, size_t);
extern int zonecfg_set_tenant(zone_dochandle_t, const char *);
/*
* Device configuration and rule matching.
*/
extern int zonecfg_add_dev(zone_dochandle_t, struct zone_devtab *);
extern int zonecfg_delete_dev(zone_dochandle_t, struct zone_devtab *);
extern int zonecfg_modify_dev(zone_dochandle_t, struct zone_devtab *,
struct zone_devtab *);
extern int zonecfg_lookup_dev(zone_dochandle_t, struct zone_devtab *);
/*
* Resource control configuration.
*/
extern int zonecfg_add_rctl(zone_dochandle_t, struct zone_rctltab *);
extern int zonecfg_delete_rctl(zone_dochandle_t, struct zone_rctltab *);
extern int zonecfg_modify_rctl(zone_dochandle_t, struct zone_rctltab *,
struct zone_rctltab *);
extern int zonecfg_lookup_rctl(zone_dochandle_t, struct zone_rctltab *);
extern struct zone_rctlvaltab *
zonecfg_create_rctl_value(rctl_priv_t, uint_t, uint64_t);
extern int zonecfg_add_rctl_value(struct zone_rctltab *,
struct zone_rctlvaltab *);
extern int zonecfg_remove_rctl_value(struct zone_rctltab *,
struct zone_rctlvaltab *);
extern void zonecfg_free_rctl_value_list(struct zone_rctlvaltab *);
extern boolean_t zonecfg_aliased_rctl_ok(zone_dochandle_t, char *);
extern int zonecfg_set_aliased_rctl(zone_dochandle_t, char *, uint64_t);
extern int zonecfg_get_aliased_rctl(zone_dochandle_t, const char *,
uint64_t *);
extern int zonecfg_rm_aliased_rctl(zone_dochandle_t, char *);
extern int zonecfg_apply_rctls(char *, zone_dochandle_t);
/*
* Generic attribute configuration and type/value extraction.
*/
extern int zonecfg_add_attr(zone_dochandle_t, struct zone_attrtab *);
extern int zonecfg_delete_attr(zone_dochandle_t, struct zone_attrtab *);
extern int zonecfg_modify_attr(zone_dochandle_t, struct zone_attrtab *,
struct zone_attrtab *);
extern int zonecfg_lookup_attr(zone_dochandle_t, struct zone_attrtab *);
extern int zonecfg_get_attr_boolean(const struct zone_attrtab *,
boolean_t *);
extern int zonecfg_get_attr_int(const struct zone_attrtab *, int64_t *);
extern int zonecfg_get_attr_string(const struct zone_attrtab *, char *,
size_t);
extern int zonecfg_get_attr_uint(const struct zone_attrtab *, uint64_t *);
extern int zonecfg_operation_prep(zone_dochandle_t);
/*
* ZFS configuration.
*/
extern int zonecfg_add_ds(zone_dochandle_t, struct zone_dstab *);
extern int zonecfg_delete_ds(zone_dochandle_t, struct zone_dstab *);
extern int zonecfg_modify_ds(zone_dochandle_t, struct zone_dstab *,
struct zone_dstab *);
extern int zonecfg_lookup_ds(zone_dochandle_t, struct zone_dstab *);
/*
* cpu-set configuration.
*/
extern int zonecfg_add_pset(zone_dochandle_t, struct zone_psettab *);
extern int zonecfg_delete_pset(zone_dochandle_t);
extern int zonecfg_modify_pset(zone_dochandle_t, struct zone_psettab *);
extern int zonecfg_lookup_pset(zone_dochandle_t, struct zone_psettab *);
/*
* mem-cap configuration.
*/
extern int zonecfg_delete_mcap(zone_dochandle_t);
extern int zonecfg_modify_mcap(zone_dochandle_t, struct zone_mcaptab *);
extern int zonecfg_lookup_mcap(zone_dochandle_t, struct zone_mcaptab *);
/*
* virtual-cpu configuration.
*/
extern int zonecfg_delete_virtual_cpu(zone_dochandle_t);
extern int zonecfg_modify_virtual_cpu(zone_dochandle_t,
struct zone_vcputab *);
extern int zonecfg_lookup_virtual_cpu(zone_dochandle_t,
struct zone_vcputab *);
/*
* Temporary pool support functions.
*/
extern int zonecfg_destroy_tmp_pool(char *, char *, int);
extern int zonecfg_bind_tmp_pool(zone_dochandle_t, zoneid_t, char *, int);
extern int zonecfg_bind_pool(zone_dochandle_t, zoneid_t, char *, int);
extern boolean_t zonecfg_warn_poold(zone_dochandle_t);
extern int zonecfg_get_poolname(zone_dochandle_t, char *, char *, size_t);
/*
* Zpool configuration
*/
extern int zonecfg_lookup_rootzpool(zone_dochandle_t, zone_rzptab_t *);
extern int zonecfg_delete_rootzpool(zone_dochandle_t, zone_rzptab_t *);
extern int zonecfg_add_rootzpool(zone_dochandle_t, zone_rzptab_t *);
extern int zonecfg_modify_rootzpool(zone_dochandle_t, zone_rzptab_t *,
zone_rzptab_t *);
extern int zonecfg_add_rootzpool_uri(zone_rzptab_t *, const char *);
extern int zonecfg_remove_rootzpool_uri(zone_dochandle_t, zone_rzptab_t *,
const char *);
extern void zonecfg_free_rootzpool_storage_list(zone_rzptab_t *);
extern int zonecfg_lookup_zpool(zone_dochandle_t, zone_zptab_t *);
extern int zonecfg_delete_zpool(zone_dochandle_t, zone_zptab_t *);
extern int zonecfg_add_zpool(zone_dochandle_t, zone_zptab_t *);
extern int zonecfg_modify_zpool(zone_dochandle_t, zone_zptab_t *,
zone_zptab_t *);
extern int zonecfg_add_zpool_uri(zone_zptab_t *, const char *);
extern int zonecfg_remove_zpool_uri(zone_dochandle_t, zone_zptab_t *,
const char *);
extern void zonecfg_free_zpool_storage_list(zone_zptab_t *);
extern int zonecfg_match_storage_uri(zone_dochandle_t,
zone_storage_t *, const char *uri);
extern int zonecfg_match_storage_list(zone_dochandle_t,
zone_storage_t *, zone_storage_t *);
extern int zonecfg_is_zoss(const char *, boolean_t *, boolean_t *);
extern boolean_t zonecfg_valid_zpoolname(const char *);
extern int zonecfg_get_zpoolname(const char *, const char *, char *,
size_t);
/*
* Suspend configuraton
*/
extern int zonecfg_lookup_suspend(zone_dochandle_t, zone_susptab_t *);
extern int zonecfg_add_suspend(zone_dochandle_t, zone_susptab_t *);
extern int zonecfg_delete_suspend(zone_dochandle_t, zone_susptab_t *);
extern int zonecfg_modify_suspend(zone_dochandle_t, zone_susptab_t *,
zone_susptab_t *);
/*
* NPIV configuration.
*/
extern int zonecfg_add_npiv(zone_dochandle_t, zone_npivtab_t *);
extern int zonecfg_delete_npiv(zone_dochandle_t, zone_npivtab_t *);
extern int zonecfg_modify_npiv(zone_dochandle_t, zone_npivtab_t *,
zone_npivtab_t *);
extern int zonecfg_lookup_npiv(zone_dochandle_t, zone_npivtab_t *);
extern boolean_t zonecfg_is_wwn(const char *);
extern boolean_t zonecfg_is_overhba(const char *);
/*
* Verified-boot configuration
*/
extern int zonecfg_add_vboot(zone_dochandle_t, zone_vboottab_t *);
extern int zonecfg_delete_vboot(zone_dochandle_t);
extern int zonecfg_modify_vboot(zone_dochandle_t, zone_vboottab_t *);
extern int zonecfg_lookup_vboot(zone_dochandle_t, zone_vboottab_t *);
extern int zonecfg_initialize_vboot(zone_vboottab_t *);
extern int zonecfg_add_vboot_cert(zone_vboottab_t *, const char *);
extern int zonecfg_remove_vboot_cert(zone_vboottab_t *, const char *);
extern void zonecfg_free_vboot_cert_list(zone_vboottab_t *);
extern int zonecfg_getvbootent(zone_dochandle_t, zone_vboottab_t *,
boolean_t);
extern int zonecfg_endvbootent(zone_dochandle_t);
extern int zonecfg_setvbootent(zone_dochandle_t);
/*
* Miscellaneous utility functions.
*/
extern int zonecfg_cleanup_config(zone_dochandle_t);
/*
* attach/detach support.
*/
extern int zonecfg_get_ua_handle(const char *, const char *, const char *,
const char *, char *, size_t, const char *, zone_dochandle_t, boolean_t *,
char *, size_t);
extern int zonecfg_get_attach_handle(const char *, const char *,
const char *, zone_dochandle_t);
extern int zonecfg_detach_save(zone_dochandle_t, uint_t);
extern void zonecfg_rm_detached(zone_dochandle_t, boolean_t forced);
/*
* suspend support.
*/
extern int zonecfg_suspend_save(const char *, zone_dochandle_t);
/*
* External zone verification support.
*/
extern int zonecfg_verify_save(zone_dochandle_t, char *);
/*
* '*ent' iterator routines.
*/
extern int zonecfg_setfsent(zone_dochandle_t);
extern int zonecfg_getfsent(zone_dochandle_t, struct zone_fstab *,
boolean_t);
extern int zonecfg_endfsent(zone_dochandle_t);
extern int zonecfg_setnetent(zone_dochandle_t);
extern int zonecfg_getnetent(zone_dochandle_t, struct zone_nettab *,
boolean_t);
extern int zonecfg_endnetent(zone_dochandle_t);
extern int zonecfg_setanetent(zone_dochandle_t);
extern int zonecfg_getanetent(zone_dochandle_t, struct zone_anettab *,
boolean_t);
extern int zonecfg_endanetent(zone_dochandle_t);
extern int zonecfg_setdevent(zone_dochandle_t);
extern int zonecfg_getdevent(zone_dochandle_t, struct zone_devtab *,
boolean_t);
extern int zonecfg_enddevent(zone_dochandle_t);
extern int zonecfg_setattrent(zone_dochandle_t);
extern int zonecfg_getattrent(zone_dochandle_t, struct zone_attrtab *,
boolean_t);
extern int zonecfg_endattrent(zone_dochandle_t);
extern int zonecfg_setrctlent(zone_dochandle_t);
extern int zonecfg_getrctlent(zone_dochandle_t, struct zone_rctltab *);
extern int zonecfg_endrctlent(zone_dochandle_t);
extern int zonecfg_setdsent(zone_dochandle_t);
extern int zonecfg_getdsent(zone_dochandle_t, struct zone_dstab *,
boolean_t);
extern int zonecfg_enddsent(zone_dochandle_t);
extern int zonecfg_getpsetent(zone_dochandle_t, struct zone_psettab *,
boolean_t);
extern int zonecfg_getmcapent(zone_dochandle_t, struct zone_mcaptab *,
boolean_t);
extern int zonecfg_setadminent(zone_dochandle_t);
extern int zonecfg_getadminent(zone_dochandle_t, struct zone_admintab *,
boolean_t);
extern int zonecfg_endadminent(zone_dochandle_t);
extern int zonecfg_setrzpent(zone_dochandle_t);
extern int zonecfg_getrzpent(zone_dochandle_t, zone_rzptab_t *,
boolean_t);
extern int zonecfg_endrzpent(zone_dochandle_t);
extern int zonecfg_setzpent(zone_dochandle_t);
extern int zonecfg_getzpent(zone_dochandle_t, zone_zptab_t *,
boolean_t);
extern int zonecfg_endzpent(zone_dochandle_t);
extern int zonecfg_getvcpuent(zone_dochandle_t, struct zone_vcputab *,
boolean_t);
extern int zonecfg_setsuspent(zone_dochandle_t);
extern int zonecfg_getsuspent(zone_dochandle_t, zone_susptab_t *);
extern int zonecfg_endsuspent(zone_dochandle_t);
extern int zonecfg_setnpivent(zone_dochandle_t);
extern int zonecfg_getnpivent(zone_dochandle_t, zone_npivtab_t *,
boolean_t);
extern int zonecfg_endnpivent(zone_dochandle_t);
extern const char *zonecfg_devent_src(zone_devtab_t *);
extern const char *zonecfg_anetent_id(zone_anettab_t *);
/*
* Configuration iterator functions
*/
typedef int (*iter_resource_cb_t)(void *, void *, void *, const char *);
extern int zonecfg_iter_resource(zone_dochandle_t, iter_resource_cb_t,
void *, void *, void *);
typedef int (*iter_property_cb_t)(void *, void *, void *, const char *,
const char *, const char *);
extern int zonecfg_iter_property(zone_dochandle_t,
iter_property_cb_t, void *, void *, void *);
/*
* Privilege-related functions.
*/
extern int zonecfg_default_privset(priv_set_t *, const char *);
extern int zonecfg_get_privset(zone_dochandle_t, priv_set_t *,
char **);
extern int zonecfg_get_limitpriv(zone_dochandle_t, char **);
extern int zonecfg_set_limitpriv(zone_dochandle_t, char *);
/*
* Higher-level routines.
*/
extern int zone_get_brand(char *, char *, size_t);
extern int zone_get_rootpath(char *, char *, size_t);
extern int zone_get_devroot(char *, char *, size_t);
extern int zone_get_zonepath(char *, char *, size_t);
extern int zone_get_state(const char *, zone_state_t *);
extern int zone_get_zonepath_uuid(const char *, char *, size_t, uuid_t);
extern int zone_set_state(const char *, zone_state_t);
extern char *zone_state_str(zone_state_t);
extern zone_state_t zone_state_num(const char *);
extern int zonecfg_get_name_by_uuid(const uuid_t, char *, size_t);
extern int zonecfg_get_uuid(const char *, uuid_t);
extern int zonecfg_default_brand(char *, size_t);
extern int zonecfg_default_template(char *, size_t);
/*
* Iterator for configured zones.
*/
extern FILE *setzoneent(void);
extern char *getzoneent(FILE *);
extern struct zoneent *getzoneent_private(FILE *);
extern void endzoneent(FILE *);
/*
* File-system-related convenience functions.
*/
extern boolean_t zonecfg_valid_fs_type(const char *);
/*
* Network-related convenience functions.
*/
extern boolean_t zonecfg_same_net_address(char *, char *);
extern int zonecfg_valid_net_address(char *, struct sockaddr_storage *);
/*
* Rctl-related common functions.
*/
extern boolean_t zonecfg_is_rctl(const char *);
extern boolean_t zonecfg_valid_rctlname(const char *);
extern boolean_t zonecfg_valid_rctlblk(const rctlblk_t *);
extern boolean_t zonecfg_valid_rctl(const char *, const rctlblk_t *);
extern int zonecfg_construct_rctlblk(const struct zone_rctlvaltab *,
rctlblk_t *);
/*
* Live Upgrade support functions. Shared between ON and install gate.
*/
extern FILE *zonecfg_open_scratch(const char *, boolean_t);
extern int zonecfg_lock_scratch(FILE *);
extern void zonecfg_close_scratch(FILE *);
extern int zonecfg_get_scratch(FILE *, char *, size_t, char *, size_t, char *,
size_t);
extern int zonecfg_find_scratch(FILE *, const char *, const char *, char *,
size_t);
extern int zonecfg_reverse_scratch(FILE *, const char *, char *, size_t,
char *, size_t);
extern int zonecfg_add_scratch(FILE *, const char *, const char *,
const char *);
extern int zonecfg_delete_scratch(FILE *, const char *);
extern boolean_t zonecfg_is_scratch(const char *);
extern int zonecfg_insert_userauths(zone_dochandle_t, char *, char *);
extern int zonecfg_remove_userauths(zone_dochandle_t, char *, char *,
boolean_t);
extern int zonecfg_add_admin(zone_dochandle_t, struct zone_admintab *,
char *);
extern int zonecfg_delete_admin(zone_dochandle_t,
struct zone_admintab *, char *);
extern int zonecfg_modify_admin(zone_dochandle_t, struct zone_admintab *,
struct zone_admintab *);
extern int zonecfg_delete_admins(zone_dochandle_t, char *);
extern int zonecfg_lookup_admin(zone_dochandle_t, struct zone_admintab *);
extern int zonecfg_authorize_users(zone_dochandle_t, char *);
extern int zonecfg_update_userauths(zone_dochandle_t, char *);
extern int zonecfg_deauthorize_user(zone_dochandle_t, char *, char *);
extern int zonecfg_deauthorize_users(zone_dochandle_t, char *);
extern boolean_t zonecfg_valid_auths(const char *, const char *);
extern int zonecfg_get_mac_lists(zone_dochandle_t, zone_maclist_t *);
extern boolean_t zonecfg_trusted_path_safe(zone_dochandle_t, const char *);
extern int zonecfg_conform_brand(zone_dochandle_t);
extern int zonecfg_get_keysource(zone_dochandle_t, zone_keytab_t *);
extern int zonecfg_set_keysource(zone_dochandle_t, zone_keytab_t *);
extern int zonecfg_load_hostkey(zone_dochandle_t, const char *);
extern int zonecfg_save_keysource(zone_dochandle_t, const char *);
extern int zonecfg_del_keysource_file(const char *);
extern int zonecfg_get_hostkey(const char *, unsigned char **);
extern int zonecfg_init_hostkey(const char *, unsigned char **);
extern int zonecfg_expand_alltok(zone_dochandle_t, char *, char *, char **);
extern int zonecfg_lookup_anetvlan(zone_dochandle_t, list_t *,
struct zone_anetvlantab *);
extern int zonecfg_lookup_anetmac(zone_dochandle_t, list_t *,
struct zone_anetmactab *);
extern void zonecfg_empty_reslist(list_t *);
extern void zonecfg_empty_vlanlist(list_t *);
extern void zonecfg_destroy_anet_vlanlist(struct zone_anettab *);
extern void zonecfg_initialize_anetvlan(list_t *);
extern int zonecfg_copy_vlanlist(list_t *, list_t *);
extern void zonecfg_empty_maclist(list_t *);
extern void zonecfg_destroy_anet_maclist(struct zone_anettab *);
extern void zonecfg_initialize_anetmac(list_t *);
extern int zonecfg_copy_maclist(list_t *, list_t *);
extern int zonecfg_copy_ib_portlist(list_t *, list_t *);
extern int zonecfg_delete_anetvlan(zone_dochandle_t,
struct zone_anetvlantab *, struct zone_anettab *);
extern int zonecfg_delete_anetmac(zone_dochandle_t, struct zone_anetmactab *,
struct zone_anettab *);
extern int zonecfg_rebuild_mac_ids(list_t *, int *, long **);
extern int zonecfg_rebuild_dev_ids(zone_dochandle_t, int *, long **);
extern int zonecfg_rebuild_net_ids(zone_dochandle_t, int *, long **);
extern void zonecfg_assign_dev_id(long *, size_t, int, char *, size_t);
extern int zonecfg_get_default(zone_dochandle_t, const char *,
const char *, int, char *, size_t);
extern int zonecfg_check_tokens(const char *, uint64_t, int *);
extern boolean_t zonecfg_matchprop(zone_dochandle_t, char *, char *, char *);
extern boolean_t zonecfg_matchprop_casecmp(zone_dochandle_t, char *, char *,
char *);
extern boolean_t zonecfg_matchprop_csscmp(zone_dochandle_t, char *, char *,
char *);
extern boolean_t zonecfg_str_to_uint64(const char *, uint64_t *);
extern void zonecfg_initialize_ibport(list_t *);
extern void zonecfg_destroy_ib_portlist(struct zone_ibtab *);
extern int zonecfg_setibent(zone_dochandle_t);
extern int zonecfg_getibent(zone_dochandle_t, struct zone_ibtab *, boolean_t);
extern int zonecfg_endibent(zone_dochandle_t);
extern int zonecfg_lookup_ibport(zone_dochandle_t, list_t *,
struct zone_ibporttab *);
extern int zonecfg_lookup_ib(zone_dochandle_t, struct zone_ibtab *);
extern int zonecfg_rebuild_ib_port_ids(list_t *, int *, long **);
extern int zonecfg_rebuild_ib_ids(zone_dochandle_t, int *, long **);
extern int zonecfg_add_ib(zone_dochandle_t, struct zone_ibtab *);
extern int zonecfg_modify_ib(zone_dochandle_t, struct zone_ibtab *,
struct zone_ibtab *);
extern int zonecfg_delete_ib(zone_dochandle_t, struct zone_ibtab *);
extern int zonecfg_add_ibport(struct zone_ibporttab *, struct zone_ibtab *);
extern int zonecfg_delete_ibport(zone_dochandle_t, struct zone_ibporttab *,
struct zone_ibtab *);
extern int zonecfg_modify_ibport(zone_dochandle_t, struct zone_ibporttab *,
struct zone_ibporttab *, struct zone_ibtab *);
extern int zonecfg_verify_ib(struct zone_ibtab *, ibadm_handle_t *,
ibadm_conf_t *, char *, char *, int);
extern int zonecfg_setup_vhca(ibadm_handle_t *, ibadm_conf_t *, char *, char *,
int);
extern int zonecfg_verify_ibpkey(ibadm_handle_t *, ibadm_conf_t *, char *,
char *, uint_t, char *, int);
extern zone_mig_class_t zonecfg_mig_class_fromname(const char *);
extern const char *zonecfg_mig_class_toname(zone_mig_class_t);
extern int zonecfg_dup_priv_check(zone_dochandle_t, const char *,
char **, boolean_t *, boolean_t *);
extern zone_pgsz_policy_t zonecfg_pgsz_policy_fromname(const char *);
extern const char *zonecfg_pgsz_policy_toname(zone_pgsz_policy_t);
extern int zonecfg_match_allowed_vids(list_t *, const char *);
extern int zonecfg_add_allowed_vids(list_t *, const char *);
extern int zonecfg_remove_allowed_vids(list_t *, const char *);
extern void zonecfg_destroy_allowed_vids(list_t *);
extern int zonecfg_match_allowed_macaddr_and_get_cnt(list_t *,
const char *, int *);
extern int zonecfg_match_allowed_macaddr(list_t *, const char *);
extern int zonecfg_add_allowed_macaddr(list_t *, const char *);
extern int zonecfg_remove_allowed_macaddr(list_t *, const char *);
extern void zonecfg_destroy_allowed_macaddr(list_t *);
extern void zonecfg_initialize_allowed_macaddr(list_t *);
extern void zonecfg_initialize_allowed_vids(list_t *);
extern int zonecfg_copy_allowed_macaddrlist(list_t *, list_t *);
extern int zonecfg_copy_allowed_vidslist(list_t *, list_t *);
#ifdef __cplusplus
}
#endif
#endif /* _LIBZONECFG_H */