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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright (c) 1998-1999 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27 #ifndef _CFGADM_H 28 #define _CFGADM_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 /* 37 * Command line options 38 */ 39 #define OPTIONS "ac:fhlno:s:tx:vy" 40 41 /* 42 * Configuration operations 43 */ 44 typedef enum { 45 CFGA_OP_NONE = 0, 46 CFGA_OP_CHANGE_STATE, 47 CFGA_OP_TEST, 48 CFGA_OP_LIST, 49 CFGA_OP_PRIVATE, 50 CFGA_OP_HELP 51 } cfga_op_t; 52 53 /* 54 * Names for -c functions 55 */ 56 static char *state_opts[] = { 57 "", 58 "insert", 59 "remove", 60 "connect", 61 "disconnect", 62 "configure", 63 "unconfigure", 64 NULL 65 }; 66 67 /* 68 * Attachment point specifier types. 69 */ 70 typedef enum { 71 UNKNOWN_AP, 72 LOGICAL_AP_ID, 73 PHYSICAL_AP_ID, 74 AP_TYPE 75 } cfga_ap_types_t; 76 77 /* 78 * Confirm values. 79 */ 80 enum confirm { CONFIRM_DEFAULT, CONFIRM_NO, CONFIRM_YES }; 81 82 /* Limit size of sysinfo return */ 83 #define SYSINFO_LENGTH 256 84 #define YESNO_STR_MAX 127 85 86 /* exit codes */ 87 #define EXIT_OK 0 88 #define EXIT_OPFAILED 1 89 #define EXIT_NOTSUPP 2 90 #define EXIT_ARGERROR 3 91 92 /* Macro to figure size of cfga_list_data items */ 93 #define SZ_EL(EL) (sizeof ((struct cfga_list_data *)NULL)->EL) 94 95 /* Maximum number of fields in cfgadm output */ 96 #define N_FIELDS (sizeof (all_fields)/sizeof (all_fields[0])) 97 98 /* printing format controls */ 99 #define DEF_SORT_FIELDS "ap_id" 100 101 #define DEF_COLS "ap_id:type:r_state:o_state:condition" 102 #define DEF_COLS2 NULL 103 #define DEF_COLS_VERBOSE "ap_id:r_state:o_state:condition:info" 104 #define DEF_COLS2_VERBOSE "status_time:type:busy:physid" 105 #define DEF_DELIM " " 106 107 /* listing field delimiter */ 108 #define FDELIM ':' 109 #define ARG_DELIM ' ' 110 111 /* listing lengths for various fields */ 112 #define STATE_WIDTH 12 /* longest - "disconnected" */ 113 #define COND_WIDTH 10 /* longest is the heading - "condition" */ 114 #define TIME_WIDTH 12 115 #define TIME_P_WIDTH 14 /* YYYYMMDDhhmmss */ 116 /* Date and time formats */ 117 /* 118 * b --- abbreviated month name 119 * e --- day number 120 * Y --- year in the form ccyy 121 * H --- hour(24-hour version) 122 * M --- minute 123 */ 124 #define FORMAT1 "%b %e %Y" 125 #define FORMAT2 "%b %e %H:%M" 126 127 /* listing control data */ 128 struct sort_el { 129 int reverse; 130 struct field_info *fld; 131 }; 132 133 struct print_col { 134 int width; 135 struct field_info *line1; 136 struct field_info *line2; 137 }; 138 139 /* 140 * The first three types are used for filtering and the last for sorting. 141 */ 142 typedef enum { 143 CFGA_MATCH_PARTIAL, /* pass if a partial match */ 144 CFGA_MATCH_EXACT, /* pass only if an exact match */ 145 CFGA_MATCH_NOFILTER, /* pass all. Not valid user input */ 146 CFGA_MATCH_ORDER /* compare and return relative order */ 147 } match_type_t; 148 149 struct field_info { 150 char *name; 151 char *heading; 152 int width; 153 int (*compare)(struct cfga_list_data *, struct cfga_list_data *, 154 match_type_t); 155 void (*printfn)(struct cfga_list_data *, int, char *); 156 cfga_err_t (*set_filter)(struct cfga_list_data *, const char *); 157 }; 158 159 /* list option strings */ 160 static char *list_options[] = { 161 #define LIST_SORT 0 162 "sort", 163 #define LIST_COLS 1 164 "cols", 165 #define LIST_COLS2 2 166 "cols2", 167 #define LIST_DELIM 3 168 "delim", 169 #define LIST_NOHEADINGS 4 170 "noheadings", 171 #define LIST_SELECT 5 172 "select", 173 #define LIST_MATCH 6 174 "match", 175 NULL 176 }; 177 178 /* Selection related */ 179 typedef struct { 180 char *arg; 181 int resp; /* If set, this cmd arg received a response */ 182 } ap_arg_t; 183 184 typedef struct { 185 cfga_list_data_t *ldatap; 186 int req; /* If set, this list_data was requested by user */ 187 } ap_out_t; 188 189 /* Filtering related */ 190 #define CFGA_DEFAULT_MATCH CFGA_MATCH_EXACT 191 #define LEFT_PAREN '(' 192 #define RIGHT_PAREN ')' 193 #define CFGA_DEV_DIR "/dev/cfg" 194 #define SLASH "/" 195 #define EQUALS "=" 196 197 typedef enum { 198 CFGA_PSTATE_INIT, 199 CFGA_PSTATE_ATTR_DONE, 200 CFGA_PSTATE_VAL_DONE, 201 CFGA_PSTATE_ERR 202 } parse_state_t; 203 204 typedef struct match_cvt { 205 char *str; 206 match_type_t type; 207 } match_cvt_t; 208 209 #ifdef __cplusplus 210 } 211 #endif 212 213 #endif /* _CFGADM_H */ 214