Home | History | Annotate | Download | only in mpathadm
      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  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     23  * Use is subject to license terms.
     24  */
     25 
     26 /*
     27  * mpathadm_text.c : MP API CLI program
     28  *
     29  */
     30 
     31 #include <libintl.h>
     32 
     33 #include <mpapi.h>
     34 #include "mpathadm_text.h"
     35 
     36 
     37 MP_CHAR * getTextString(int stringVal) {
     38 	switch (stringVal) {
     39 		case TEXT_UNKNOWN:
     40 			return (gettext("unknown"));
     41 
     42 		/* load balance types for display and input to cli */
     43 		case TEXT_LBTYPE_FAILOVER_ONLY:
     44 			return ("failover-only");
     45 		case TEXT_LBTYPE_LBAREGION:
     46 			return ("logical-block");
     47 		case TEXT_LBTYPE_DEVICEPROD:
     48 			return ("device-product-specific");
     49 		case TEXT_LBTYPE_LEASTIO:
     50 			return ("least-used");
     51 		case TEXT_LBTYPE_LEASTBLOCKS:
     52 			return ("least-blocks");
     53 		case TEXT_LBTYPE_ROUNDROBIN:
     54 			return ("round-robin");
     55 		case TEXT_LBTYPE_UNKNOWN:
     56 			return ("unknown");
     57 		case TEXT_LBTYPE_NONE:
     58 			return ("none");
     59 		case TEXT_LBTYPE_PROPRIETARY1:
     60 			return ("proprietary1");
     61 		case TEXT_LBTYPE_PROPRIETARY2:
     62 			return ("proprietary2");
     63 		case TEXT_LBTYPE_PROPRIETARY3:
     64 			return ("proprietary3");
     65 		case TEXT_LBTYPE_PROPRIETARY4:
     66 			return ("proprietary4");
     67 		case TEXT_LBTYPE_PROPRIETARY5:
     68 			return ("proprietary5");
     69 		case TEXT_LBTYPE_PROPRIETARY6:
     70 			return ("proprietary6");
     71 		case TEXT_LBTYPE_PROPRIETARY7:
     72 			return ("proprietary7");
     73 		case TEXT_LBTYPE_PROPRIETARY8:
     74 			return ("proprietary8");
     75 		case TEXT_LBTYPE_PROPRIETARY9:
     76 			return ("proprietary9");
     77 		case TEXT_LBTYPE_PROPRIETARY10:
     78 			return ("proprietary10");
     79 		case TEXT_LBTYPE_PROPRIETARY11:
     80 			return ("proprietary11");
     81 		case TEXT_LBTYPE_PROPRIETARY12:
     82 			return ("proprietary12");
     83 		case TEXT_LBTYPE_PROPRIETARY13:
     84 			return ("proprietary13");
     85 		case TEXT_LBTYPE_PROPRIETARY14:
     86 			return ("proprietary14");
     87 		case TEXT_LBTYPE_PROPRIETARY15:
     88 			return ("proprietary15");
     89 		case TEXT_LBTYPE_PROPRIETARY16:
     90 			return ("proprietary16");
     91 
     92 		/* used for display */
     93 		case TEXT_NA:
     94 			return (gettext("NA"));
     95 
     96 		/* used for displaying of state and comparing input into cli */
     97 		case TEXT_YES:
     98 			return (gettext("yes"));
     99 		case TEXT_NO:
    100 			return (gettext("no"));
    101 		case TEXT_ON:
    102 			return ("on");
    103 		case TEXT_OFF:
    104 			return ("off");
    105 
    106 		/* labels for display */
    107 		case TEXT_LB_VENDOR:
    108 			return ("Vendor:");
    109 		case TEXT_LB_DRIVER_NAME:
    110 			return ("Driver Name:");
    111 		case TEXT_LB_DEFAULT_LB:
    112 			return ("Default Load Balance:");
    113 		case TEXT_LB_SUPPORTED_LB:
    114 			return ("Supported Load Balance Types:");
    115 		case TEXT_LB_ALLOWS_ACT_TPG:
    116 			return ("Allows To Activate Target Port Group Access:");
    117 		case TEXT_LB_ALLOWS_PATH_OV:
    118 			return ("Allows Path Override:");
    119 		case TEXT_LB_SUPP_AUTO_FB:
    120 			return ("Supported Auto Failback Config:");
    121 		case TEXT_LB_AUTO_FB:
    122 			return ("Auto Failback:");
    123 		case TEXT_LB_FB_POLLING_RATE:
    124 			return ("Failback Polling Rate (current/max):");
    125 		case TEXT_LB_SUPP_AUTO_P:
    126 			return ("Supported Auto Probing Config:");
    127 		case TEXT_LB_AUTO_PROB:
    128 			return ("Auto Probing:");
    129 		case TEXT_LB_PR_POLLING_RATE:
    130 			return ("Probing Polling Rate (current/max):");
    131 		case TEXT_LB_SUPP_DEVICES:
    132 			return ("Supported Devices:");
    133 		case TEXT_LB_PRODUCT:
    134 			return ("Product:");
    135 		case TEXT_LB_REVISION:
    136 			return ("Revision:");
    137 		case TEXT_LB_LOGICAL_UNIT:
    138 			return ("Logical Unit:");
    139 		case TEXT_LB_INQUIRY_NAME_TYPE:
    140 			return ("Name Type:");
    141 		case TEXT_NAME_TYPE_UNKNOWN:
    142 			return ("unknown type");
    143 		case TEXT_NAME_TYPE_VPD83_TYPE1:
    144 			return ("SCSI Inquiry VPD Page83 Type1");
    145 		case TEXT_NAME_TYPE_VPD83_TYPE2:
    146 			return ("SCSI Inquiry VPD Page83 Type2");
    147 		case TEXT_NAME_TYPE_VPD83_TYPE3:
    148 			return ("SCSI Inquiry VPD Page83 Type3");
    149 		case TEXT_NAME_TYPE_DEVICE_SPECIFIC:
    150 			return ("device specific type");
    151 		case TEXT_LB_INQUIRY_NAME:
    152 			return ("Name:");
    153 		case TEXT_LB_ASYMMETRIC:
    154 			return ("Asymmetric:");
    155 		case TEXT_LB_EXPLICIT_FAILOVER:
    156 			return ("Explicit Failover:");
    157 		case TEXT_LB_CURR_LOAD_BALANCE:
    158 			return ("Current Load Balance:");
    159 		case TEXT_LB_LU_GROUP_ID:
    160 			return ("Logical Unit Group ID:");
    161 		case TEXT_LB_PATH_INFO:
    162 			return ("Paths:");
    163 		case TEXT_LB_INIT_PORT_NAME:
    164 			return ("Initiator Port Name:");
    165 		case TEXT_LB_TARGET_PORT_NAME:
    166 			return ("Target Port Name:");
    167 		case TEXT_LB_OVERRIDE_PATH:
    168 			return ("Override Path:");
    169 		case TEXT_LB_PATH_STATE:
    170 			return ("Path State:");
    171 		case TEXT_LB_TPG_INFO:
    172 			return ("Target Port Groups:");
    173 		case TEXT_LB_ACCESS_STATE:
    174 			return ("Access State:");
    175 		case TEXT_LB_ID:
    176 			return ("ID:");
    177 		case TEXT_TPORT_LIST:
    178 			return ("Target Ports:");
    179 		case TEXT_LB_NAME:
    180 			return ("Name:");
    181 		case TEXT_LB_RELATIVE_ID:
    182 			return ("Relative ID:");
    183 		case TEXT_LB_INITATOR_PORT:
    184 			return ("Initiator Port:");
    185 		case TEXT_LB_TRANSPORT_TYPE:
    186 			return ("Transport Type:");
    187 		case TEXT_LB_OS_DEVICE_FILE:
    188 			return ("OS Device File:");
    189 		case TEXT_LB_MPATH_SUPPORT:
    190 			return ("mpath-support:");
    191 		case TEXT_LB_PATH_COUNT:
    192 			return ("Total Path Count:");
    193 		case TEXT_LB_OP_PATH_COUNT:
    194 			return ("Operational Path Count:");
    195 
    196 		case TEXT_LB_ENABLED:
    197 			return ("Enabled:");
    198 		case TEXT_LB_DISABLED:
    199 			return ("Disabled:");
    200 
    201 		case TEXT_UNKNOWN_OBJECT:
    202 			return (gettext("unknown object"));
    203 
    204 		/* status strings used in error messages */
    205 		case TEXT_MPSTATUS_SUCCESS:
    206 			return (gettext("success"));
    207 		case TEXT_MPSTATUS_INV_PARAMETER:
    208 			return (gettext("invalid parameter"));
    209 		case TEXT_MPSTATUS_UNKNOWN_FN:
    210 			return (gettext("unknown client function"));
    211 		case TEXT_MPSTATUS_FAILED:
    212 			return (gettext("failed"));
    213 		case TEXT_MPSTATUS_INSUFF_MEMORY:
    214 			return (gettext("insufficient memory"));
    215 		case TEXT_MPSTATUS_INV_OBJ_TYPE:
    216 			return (gettext("invalid object type"));
    217 		case TEXT_MPSTATUS_OBJ_NOT_FOUND:
    218 			return (gettext("object not found"));
    219 		case TEXT_MPSTATUS_UNSUPPORTED:
    220 			return (gettext("unsupported"));
    221 		case TEXT_MPSTATUS_FN_REPLACED:
    222 			return (gettext("function replaced"));
    223 		case TEXT_MPSTATUS_ACC_STATE_INVAL:
    224 			return (gettext("invalid access state"));
    225 		case TEXT_MPSTATUS_PATH_NONOP:
    226 			return (gettext("path not operational"));
    227 		case TEXT_MPSTATUS_TRY_AGAIN:
    228 			return (gettext("try again"));
    229 		case TEXT_MPSTATUS_NOT_PERMITTED:
    230 			return (gettext("not permitted"));
    231 
    232 		/* error messages */
    233 		case ERR_NO_MPATH_SUPPORT_LIST:
    234 			return (gettext("Error: Unable to get mpath-support "
    235 			    "list."));
    236 		case ERR_CANT_FIND_MPATH_SUPPORT_WITH_NAME:
    237 			return (gettext("Error: Unable to find mpath-support "
    238 			    "%s."));
    239 		case ERR_NO_PROPERTIES:
    240 			return (gettext("Error: Unable to get configuration "
    241 			    "information."));
    242 		case ERR_NO_SUPP_DEVICE_INFO:
    243 			return (gettext("Error: Unable to get supported "
    244 			    "device product information."));
    245 		case ERR_NO_LU_LIST:
    246 			return (gettext("Error: Unable to get the logical "
    247 			    "unit list."));
    248 		case ERR_NO_ASSOCIATED_LU:
    249 			return (gettext("Error: Unable to find an "
    250 			    "associated logical-unit."));
    251 		case ERR_LU_NOT_FOUND_WITH_MISSING_LU_STR:
    252 			return (gettext("Error: Logical-unit %s is not "
    253 			    "found."));
    254 		case ERR_NO_LU_PATH_INFO_WITH_MISSING_LU_STR:
    255 			return (gettext("Error: Failed to get path info for "
    256 			    "logical-unit %s."));
    257 		case ERR_NO_ASSOC_TPGS:
    258 			return (gettext("Error: Unable to get associated "
    259 			    "target port groups ."));
    260 		case ERR_NO_ASSOC_TPORTS:
    261 			return (gettext("Error: Unable to get associated "
    262 			    "target ports."));
    263 		case ERR_NO_INIT_PORTS:
    264 			return (gettext("Error: Unable to get the "
    265 			    "initiator-port list."));
    266 		case ERR_NO_INIT_PORT_LIST_WITH_REASON:
    267 			return (gettext("Error: Unable to get the "
    268 			    "initiator-port list: %s."));
    269 		case ERR_INIT_PORT_NOT_FOUND_WITH_MISSING_LU_STR:
    270 			return (gettext("Error: Initiator port %s is not "
    271 			    "found."));
    272 		case ERR_FAILED_TO_REGISTER_PLUGIN_NAME_WITH_REASON:
    273 			return (gettext("Error: Failed to register %s: %s."));
    274 		case ERR_FAILED_TO_DEREGISTER_PLUGIN_NAME_WITH_REASON:
    275 			return (gettext("Error: Failed to deregister "
    276 			    "%ls: %s."));
    277 		case ERR_FAILED_TO_CHANGE_OPTION_WITH_REASON:
    278 			return (gettext("Error: Failed to change %s: %s."));
    279 		case ERR_FAILED_TO_ENABLE_PATH_WITH_REASON:
    280 			return (gettext("Error: Failed to enable path: %s."));
    281 		case ERR_FAILED_TO_DISABLE_PATH_WITH_REASON:
    282 			return (gettext("Error: Failed to disable path: %s."));
    283 		case ERR_FAILED_TO_OVERRIDE_PATH_WITH_REASON:
    284 			return (gettext("Error: Failed to override path: "
    285 			    "%s."));
    286 		case ERR_LU_NOT_ASYMMETRIC:
    287 			return (gettext("Error: The logical unit is not "
    288 			    "asymmetric."));
    289 		case ERR_NO_FAILOVER_ALLOWED:
    290 			return (gettext("Error: The logical unit doesn't "
    291 			    "support explicit state change."));
    292 		case ERR_FAILED_TO_FAILOVER_WITH_LU_AND_REASON:
    293 			return (gettext("Error: Failover failed %s: %s."));
    294 		case ERR_FAILED_TO_FAILOVER_WITH_REASON:
    295 			return (gettext("Error: Failover failed: %s."));
    296 		case ERR_FAILED_TO_CANCEL_OVERRIDE_PATH_WITH_REASON:
    297 			return (gettext("Error: Failed to cancel the "
    298 			    "overriding setting:  %s."));
    299 		case ERR_FAILED_TO_FIND_PATH:
    300 			return (gettext("Error: Unable to find path."));
    301 		case LU_NOT_FOUND:
    302 			return (gettext("logical-unit not found"));
    303 		case FAILED_TO_FIND_PATH:
    304 			return (gettext("Unable to find path"));
    305 		case MISSING_LU_NAME:
    306 			return (gettext("Missing logical-unit name"));
    307 		case MISSING_INIT_PORT_NAME:
    308 			return (gettext("Missing initiator-port name"));
    309 		case MISSING_TARGET_PORT_NAME:
    310 			return (gettext("Missing target-port name"));
    311 		case TEXT_AUTO_FAILBACK:
    312 			return (gettext("auto failback"));
    313 		case TEXT_AUTO_PROBING:
    314 			return (gettext("auto probing"));
    315 		case TEXT_LOAD_BALANCE:
    316 			return (gettext("load balance"));
    317 		case TEXT_ILLEGAL_ARGUMENT:
    318 			return (gettext("illegal argument"));
    319 		case TEXT_MPATH_SUPPORT_NOT_FOUND:
    320 			return (gettext("unable to find specified "
    321 			    "mpath-support"));
    322 		case ERR_MEMORY_ALLOCATION:
    323 			return (gettext("Error: Memory allocation failure"));
    324 		case TEXT_MORE_INFO:
    325 			return (gettext("For more information, please see"));
    326 		case TEXT_UNABLE_TO_COMPLETE:
    327 			return (gettext("Unable to complete operation"));
    328 		case ERR_FILE_DESCRIPTOR:
    329 			return (gettext("ERROR: Failed getting file "
    330 			    "descriptor"));
    331 		case ERR_DEVID:
    332 			return (gettext("ERROR: Failed attempt to get devid "
    333 			    "information"));
    334 		case ERR_LU_ACCESS_STATE_UNCHANGED:
    335 			return (gettext("ERROR: LU access state unchanged.  "
    336 			    "No standby TPG found."));
    337 
    338 		/* strings to display info */
    339 		case TEXT_PATH_STATE_OKAY:
    340 			return ("OK");
    341 		case TEXT_PATH_STATE_PATH_ERR:
    342 			return ("path error");
    343 		case TEXT_PATH_STATE_LU_ERR:
    344 			return ("LU error");
    345 		case TEXT_PATH_STATE_RESERVED:
    346 			return ("reserved");
    347 		case TEXT_PATH_STATE_REMOVED:
    348 			return ("unavailable");
    349 		case TEXT_PATH_STATE_TRANSITIONING:
    350 			return ("transitioning");
    351 		case TEXT_PATH_STATE_OPERATIONAL_CLOSED:
    352 			return ("operational but closed");
    353 		case TEXT_PATH_STATE_INVALID_CLOSED:
    354 			return ("invalid closed");
    355 		case TEXT_PATH_STATE_OFFLINE_CLOSED:
    356 			return ("operational but closed");
    357 		case TEXT_ACCESS_STATE_ACTIVE_OPTIMIZED:
    358 			return ("active optimized");
    359 		case TEXT_ACCESS_STATE_ACTIVE_NONOPTIMIZED:
    360 			return ("active not optimized");
    361 		case TEXT_ACCESS_STATE_STANDBY:
    362 			return ("standby");
    363 		case TEXT_ACCESS_STATE_UNAVAILABLE:
    364 			return ("unavailable");
    365 		case TEXT_ACCESS_STATE_TRANSITIONING:
    366 			return ("transitioning");
    367 		case TEXT_ACCESS_STATE_ACTIVE:
    368 			return ("active");
    369 		case TEXT_ANY_DEVICE:
    370 			return ("any device");
    371 
    372 		case TEXT_TRANS_PORT_TYPE_MPNODE:
    373 			return ("Logical Multipath Port");
    374 		case TEXT_TRANS_PORT_TYPE_FC:
    375 			return ("Fibre Channel");
    376 		case TEXT_TRANS_PORT_TYPE_SPI:
    377 			return ("parallel SCSI");
    378 		case TEXT_TRANS_PORT_TYPE_ISCSI:
    379 			return ("iSCSI");
    380 		case TEXT_TRANS_PORT_TYPE_IFB:
    381 			return ("InfiniBand-Fibre Channel");
    382 
    383 
    384 		default:
    385 			return ("");
    386 	}
    387 }
    388