c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * CDDL HEADER START
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * The contents of this file are subject to the terms of the
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Common Development and Distribution License (the "License").
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * You may not use this file except in compliance with the License.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * See the License for the specific language governing permissions
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * and limitations under the License.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * When distributing Covered Code, include this CDDL HEADER in each
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * If applicable, add the following below this CDDL HEADER, with the
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * fields enclosed by brackets "[]" replaced with your own identifying
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * information: Portions Copyright [yyyy] [name of copyright owner]
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * CDDL HEADER END
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Function: srpt_GetConfig()
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Parameters:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * cfg Current SRPT configuration in nvlist form
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * token Configuration generation number. Use this token
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * if updating the configuration with srpt_SetConfig.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Return Values:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * ENOMEM Could not allocate resources
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * EINVAL Invalid parameter
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = stmfGetProviderDataProt(SRPT_PROV_NAME, &cfg_nv,
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson /* Not initialized yet */
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson /* create the HCA list */
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = nvlist_add_nvlist(cfg_nv, SRPT_PROP_HCALIST,
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Function: srpt_SetConfig()
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Parameters:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * cfg SRPT configuration in nvlist form
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * token Configuration generation number from srpt_GetConfig.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Use this token to ensure the configuration hasn't been
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * updated by another user since the time it was fetched.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Return Values:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * ENOMEM Could not allocate resources
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * EINVAL Invalid parameter
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * ECANCELED Configuration updated by another user
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = stmfSetProviderDataProt(SRPT_PROV_NAME, cfg,
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Function: srpt_GetDefaultState()
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Parameters:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * enabled If B_TRUE, indicates that targets will be created for all
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * discovered HCAs that have not been specifically disabled.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * If B_FALSE, targets will not be created unless the HCA has
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * been specifically enabled. See also srpt_SetDefaultState().
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Return Values:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * ENOMEM Could not allocate resources
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * EINVAL Invalid parameter
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Function: srpt_SetDefaultState()
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Parameters:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * enabled If B_TRUE, indicates that targets will be created for all
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * discovered HCAs that have not been specifically disabled.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * If B_FALSE, targets will not be created unless the HCA has
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * been specifically enabled. See also srpt_SetDefaultState().
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Return Values:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * ENOMEM Could not allocate resources
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * EINVAL Invalid parameter
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = nvlist_add_boolean_value(cfgnv, SRPT_PROP_DEFAULT_ENABLED,
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Function: srpt_SetTargetState()
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Parameters:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * hca_guid HCA GUID. See description of srpt_NormalizeGuid
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * enabled If B_TRUE, indicates that a target will be created for
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * this HCA when the SRPT SMF service is enabled. If B_FALSE,
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * a target will not be created
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Return Values:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * ENOMEM Could not allocate resources
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * EINVAL Invalid parameter
c3a558e7c77127215b010652905be7916ec5a080Sue Gleesonsrpt_SetTargetState(char *hca_guid, boolean_t enabled)
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = srpt_NormalizeGuid(hca_guid, guid, sizeof (guid), &hcaguid);
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson /* get the list of HCAs */
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = nvlist_lookup_nvlist(cfgnv, SRPT_PROP_HCALIST, &hcalist);
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = nvlist_lookup_nvlist(hcalist, guid, &hcanv);
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson /* no entry yet */
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = nvlist_add_uint64(hcanv, SRPT_PROP_GUID, hcaguid);
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = nvlist_add_boolean_value(hcanv, SRPT_PROP_ENABLED,
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Function: srpt_GetTargetState()
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Parameters:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * hca_guid HCA GUID. See description of srpt_NormalizeGuid
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * enabled If B_TRUE, indicates that a target will be created for
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * this HCA when the SRPT SMF service is enabled. If B_FALSE,
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * a target will not be created
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Return Values:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * ENOMEM Could not allocate resources
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * EINVAL Invalid parameter
c3a558e7c77127215b010652905be7916ec5a080Sue Gleesonsrpt_GetTargetState(char *hca_guid, boolean_t *enabled)
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = srpt_NormalizeGuid(hca_guid, guid, sizeof (guid), NULL);
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson /* get the list of HCAs */
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = nvlist_lookup_nvlist(cfgnv, SRPT_PROP_HCALIST, &hcalist);
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Find the default, for the likely case that this HCA isn't
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * explicitly set.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson (void) nvlist_lookup_boolean_value(cfgnv, SRPT_PROP_DEFAULT_ENABLED,
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = nvlist_lookup_nvlist(hcalist, guid, &hcanv);
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = nvlist_lookup_boolean_value(hcanv, SRPT_PROP_ENABLED,
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson /* not explicitly set, use the default */
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Function: srpt_ResetTarget()
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Clears the HCA-specific configuration. Target creation will revert to
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * the default.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Parameters:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * hca_guid HCA GUID. See description of srpt_NormalizeGuid
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Return Values:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * ENOMEM Could not allocate resources
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * EINVAL Invalid parameter
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = srpt_NormalizeGuid(hca_guid, guid, sizeof (guid), NULL);
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson /* get the list of HCAs */
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson ret = nvlist_lookup_nvlist(cfgnv, SRPT_PROP_HCALIST, &hcalist);
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson /* don't set config if we don't actually change anything */
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * srpt_NormalizeGuid()
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Parameters:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * in HCA GUID. Must be in one of the following forms:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * 3BA000100CD18 - base hex form
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * 0003BA000100CD18 - base hex form with leading zeroes
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * hca:3BA000100CD18 - form from cfgadm and/or /dev/cfg
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * eui.0003BA000100CD18 - EUI form
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * buf Buffer to hold normalized guid string. Must be at least
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * 17 chars long.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * buflen Length of provided buffer
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * int_guid Optional. If not NULL, the integer form of the GUID will also
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * be returned.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * Return Values:
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * EINVAL Invalid HCA GUID or invalid parameter.
c3a558e7c77127215b010652905be7916ec5a080Sue Gleesonsrpt_NormalizeGuid(char *in, char *buf, size_t buflen, uint64_t *int_guid)
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson /* EUI form */
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson /* cfgadm and /dev/hca form */
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * strtoull() does not return EINVAL as documented. Lucky
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * for us, neither 0 nor ULLONG_MAX will be valid. Trap on
c3a558e7c77127215b010652905be7916ec5a080Sue Gleeson * those and fail.