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 (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
  24  */
  25 
  26 #ifndef _ZONECFG_H
  27 #define _ZONECFG_H
  28 
  29 /*
  30  * header file for zonecfg command
  31  */
  32 
  33 #ifdef __cplusplus
  34 extern "C" {
  35 #endif
  36 
  37 #include <unistd.h>
  38 
  39 #define Z_ERR           1
  40 #define Z_USAGE         2
  41 #define Z_REPEAT        3
  42 
  43 #define CMD_ADD         0
  44 #define CMD_CANCEL      1
  45 #define CMD_CLEAR       2
  46 #define CMD_COMMIT      3
  47 #define CMD_CREATE      4
  48 #define CMD_DELETE      5
  49 #define CMD_END         6
  50 #define CMD_EXIT        7
  51 #define CMD_EXPORT      8
  52 #define CMD_HELP        9
  53 #define CMD_INFO        10
  54 #define CMD_REMOVE      11
  55 #define CMD_REVERT      12
  56 #define CMD_SELECT      13
  57 #define CMD_SET         14
  58 #define CMD_VERIFY      15
  59 
  60 #define CMD_MIN         CMD_ADD
  61 #define CMD_MAX         CMD_VERIFY
  62 
  63 /* resource types: increment RT_MAX when expanding this list */
  64 #define RT_UNKNOWN      0
  65 #define RT_ZONENAME     1       /* really a property, but for info ... */
  66 #define RT_ZONEPATH     2       /* really a property, but for info ... */
  67 #define RT_AUTOBOOT     3       /* really a property, but for info ... */
  68 #define RT_POOL         4       /* really a property, but for info ... */
  69 #define RT_FS           5
  70 #define RT_NET          6
  71 #define RT_DEVICE       7
  72 #define RT_RCTL         8
  73 #define RT_ATTR         9
  74 #define RT_DATASET      10
  75 #define RT_LIMITPRIV    11      /* really a property, but for info ... */
  76 #define RT_BOOTARGS     12      /* really a property, but for info ... */
  77 #define RT_BRAND        13      /* really a property, but for info ... */
  78 #define RT_DCPU         14
  79 #define RT_MCAP         15
  80 #define RT_MAXLWPS      16      /* really a rctl alias property, but for info */
  81 #define RT_MAXSHMMEM    17      /* really a rctl alias property, but for info */
  82 #define RT_MAXSHMIDS    18      /* really a rctl alias property, but for info */
  83 #define RT_MAXMSGIDS    19      /* really a rctl alias property, but for info */
  84 #define RT_MAXSEMIDS    20      /* really a rctl alias property, but for info */
  85 #define RT_SHARES       21      /* really a rctl alias property, but for info */
  86 #define RT_SCHED        22      /* really a property, but for info ... */
  87 #define RT_IPTYPE       23      /* really a property, but for info ... */
  88 #define RT_PCAP         24
  89 #define RT_HOSTID       25      /* really a property, but for info ... */
  90 #define RT_ADMIN        26
  91 #define RT_FS_ALLOWED   27
  92 #define RT_MAXPROCS     28      /* really a rctl alias property, but for info */
  93 #define RT_SECFLAGS     29
  94 
  95 #define RT_MIN          RT_UNKNOWN
  96 #define RT_MAX          RT_SECFLAGS
  97 
  98 /* property types: increment PT_MAX when expanding this list */
  99 #define PT_UNKNOWN      0
 100 #define PT_ZONENAME     1
 101 #define PT_ZONEPATH     2
 102 #define PT_AUTOBOOT     3
 103 #define PT_POOL         4
 104 #define PT_DIR          5
 105 #define PT_SPECIAL      6
 106 #define PT_TYPE         7
 107 #define PT_OPTIONS      8
 108 #define PT_ADDRESS      9
 109 #define PT_PHYSICAL     10
 110 #define PT_NAME         11
 111 #define PT_VALUE        12
 112 #define PT_MATCH        13
 113 #define PT_PRIV         14
 114 #define PT_LIMIT        15
 115 #define PT_ACTION       16
 116 #define PT_RAW          17
 117 #define PT_LIMITPRIV    18
 118 #define PT_BOOTARGS     19
 119 #define PT_BRAND        20
 120 #define PT_NCPUS        21
 121 #define PT_IMPORTANCE   22
 122 #define PT_SWAP         23
 123 #define PT_LOCKED       24
 124 #define PT_SHARES       25
 125 #define PT_MAXLWPS      26
 126 #define PT_MAXSHMMEM    27
 127 #define PT_MAXSHMIDS    28
 128 #define PT_MAXMSGIDS    29
 129 #define PT_MAXSEMIDS    30
 130 #define PT_MAXLOCKEDMEM 31
 131 #define PT_MAXSWAP      32
 132 #define PT_SCHED        33
 133 #define PT_IPTYPE       34
 134 #define PT_DEFROUTER    35
 135 #define PT_HOSTID       36
 136 #define PT_USER         37
 137 #define PT_AUTHS        38
 138 #define PT_FS_ALLOWED   39
 139 #define PT_MAXPROCS     40
 140 #define PT_ALLOWED_ADDRESS      41
 141 #define PT_DEFAULT      42
 142 #define PT_LOWER        43
 143 #define PT_UPPER        44
 144 
 145 #define PT_MIN          PT_UNKNOWN
 146 #define PT_MAX          PT_UPPER
 147 
 148 #define MAX_EQ_PROP_PAIRS       3
 149 
 150 #define PROP_VAL_SIMPLE         0
 151 #define PROP_VAL_COMPLEX        1
 152 #define PROP_VAL_LIST           2
 153 
 154 #define PROP_VAL_MIN            PROP_VAL_SIMPLE
 155 #define PROP_VAL_MAX            PROP_VAL_LIST
 156 
 157 /*
 158  * If any subcommand is ever modified to take more than three arguments,
 159  * this will need to be incremented.
 160  */
 161 #define MAX_SUBCMD_ARGS         3
 162 
 163 typedef struct complex_property {
 164         int     cp_type;        /* from the PT_* list above */
 165         char    *cp_value;
 166         struct complex_property *cp_next;
 167 } complex_property_t, *complex_property_ptr_t;
 168 
 169 typedef struct list_property {
 170         char    *lp_simple;
 171         complex_property_ptr_t  lp_complex;
 172         struct list_property    *lp_next;
 173 } list_property_t, *list_property_ptr_t;
 174 
 175 typedef struct property_value {
 176         int     pv_type;        /* from the PROP_VAL_* list above */
 177         char    *pv_simple;
 178         complex_property_ptr_t  pv_complex;
 179         list_property_ptr_t     pv_list;
 180 } property_value_t, *property_value_ptr_t;
 181 
 182 typedef struct cmd {
 183         char    *cmd_name;
 184         void    (*cmd_handler)(struct cmd *);
 185         int     cmd_res_type;
 186         int     cmd_prop_nv_pairs;
 187         int     cmd_prop_name[MAX_EQ_PROP_PAIRS];
 188         property_value_ptr_t    cmd_property_ptr[MAX_EQ_PROP_PAIRS];
 189         int     cmd_argc;
 190         char    *cmd_argv[MAX_SUBCMD_ARGS + 1];
 191 } cmd_t;
 192 
 193 #define HELP_USAGE      0x01
 194 #define HELP_SUBCMDS    0x02
 195 #define HELP_SYNTAX     0x04
 196 #define HELP_RESOURCES  0x08
 197 #define HELP_PROPS      0x10
 198 #define HELP_META       0x20
 199 #define HELP_NETADDR    0x40
 200 #define HELP_RES_SCOPE  0x80
 201 
 202 #define HELP_RES_PROPS  (HELP_RESOURCES | HELP_PROPS)
 203 
 204 extern void add_func(cmd_t *);
 205 extern void cancel_func(cmd_t *);
 206 extern void commit_func(cmd_t *);
 207 extern void create_func(cmd_t *);
 208 extern void delete_func(cmd_t *);
 209 extern void end_func(cmd_t *);
 210 extern void exit_func(cmd_t *);
 211 extern void export_func(cmd_t *);
 212 extern void help_func(cmd_t *);
 213 extern void info_func(cmd_t *);
 214 extern void remove_func(cmd_t *);
 215 extern void revert_func(cmd_t *);
 216 extern void select_func(cmd_t *);
 217 extern void set_func(cmd_t *);
 218 extern void verify_func(cmd_t *);
 219 extern void clear_func(cmd_t *);
 220 
 221 extern cmd_t *alloc_cmd(void);
 222 extern complex_property_ptr_t alloc_complex(void);
 223 extern list_property_ptr_t alloc_list(void);
 224 extern void free_cmd(cmd_t *cmd);
 225 extern void free_complex(complex_property_ptr_t complex);
 226 extern void free_list(list_property_ptr_t list);
 227 extern void free_outer_list(list_property_ptr_t list);
 228 
 229 extern void usage(boolean_t verbose, uint_t flags);
 230 
 231 extern FILE *yyin;
 232 extern char *res_types[];
 233 extern char *prop_types[];
 234 
 235 /*
 236  * NOTE: Only Lex and YACC should use the following functions.
 237  */
 238 extern void assert_no_unclaimed_tokens(void);
 239 extern char *claim_token(char *);
 240 
 241 #ifdef __cplusplus
 242 }
 243 #endif
 244 
 245 #endif  /* _ZONECFG_H */