Copyright (c) 2007, Sun Microsystems, Inc. All Rights Reserved.
The contents of this file are subject to the terms of the Common Development and Distribution License (the "License"). You may not use this file except in compliance with the License.
You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing. See the License for the specific language governing permissions and limitations under the License.
When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE. If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
cc [ flag.\|.\|. ] file.\|.\|. -lscf [ library.\|.\|. ] #include <libscf.h> scf_instance_t *scf_instance_create(scf_handle_t *handle);
scf_handle_t *scf_instance_handle(scf_instance_t *inst);
void scf_instance_destroy(scf_instance_t *inst);
int scf_instance_get_parent(const scf_instance_t *inst, scf_service_t *svc);
ssize_t scf_instance_get_name(const scf_instance_t *inst, char *name, size_t size);
int scf_service_get_instance(const scf_service_t *svc, const char *name, scf_instance_t *inst);
int scf_service_add_instance(const scf_service_t *svc, const char *name, scf_instance_t *inst);
int scf_instance_delete(scf_instance_t *inst);
Instances form the bottom layer of the Service Configuration Facility repository tree. An instance is the child of a service and has two sets of children:
Property Groups
These hold configuration information specific to this instance. See scf_pg_create(3SCF), scf_iter_instance_pgs(3SCF), and scf_iter_instance_pgs_typed(3SCF).
Snapshots
These are complete configuration snapshots that hold unchanging copies of all of the property groups necessary to run the instance. See scf_snapshot_create(3SCF) and scf_iter_instance_snapshots(3SCF).
See smf(5) for information about instances.
An scf_instance_t is an opaque handle that can be set to a single instance at any given time. The scf_instance_create() function allocates and initializes a new scf_instance_t bound to handle. The scf_instance_destroy() function destroys and frees inst.
The scf_instance_handle() function retrieves the handle to which inst is bound.
The scf_inst_get_parent() function sets svc to the service that is the parent of inst.
The scf_instance_get_name() function retrieves the name of the instance to which inst is set.
The scf_service_get_instance() function sets inst to the child instance of the service svc specified by name.
The scf_service_add_instance() function sets inst to a new child instance of the service svc specified by name.
The scf_instance_delete() function deletes the instance to which inst is set, as well all of the children of the instance.
Upon successful completion, scf_instance_create() returns a new scf_instance_t. Otherwise it returns NULL.
Upon successful completion, scf_instance_handle() returns the handle to which inst is bound. Otherwise, it returns NULL.
Upon successful completion, scf_instance_get_name() returns the length of the string written, not including the terminating null character. Otherwise it returns -1.
Upon successful completion, scf_instance_get_parent(), scf_service_get_instance(), scf_service_add_instance(), and scf_instance_delete() functions return 0. Otherwise, they return -1.
The scf_instance_create() function will fail if:
SCF_ERROR_HANDLE_DESTROYED
An object was bound to a destroyed handle.
SCF_ERROR_INTERNAL
An internal error occurred.
SCF_ERROR_INVALID_ARGUMENT
The handle argument is NULL.
SCF_ERROR_NO_MEMORY
There is not enough memory to allocate an scf_instance_t.
SCF_ERROR_NO_RESOURCES
The server does not have adequate resources for a new instance handle.
The scf_instance_handle() function will fail if:
SCF_ERROR_HANDLE_DESTROYED
The handle associated with inst has been destroyed.
The scf_instance_get_name(), scf_instance_get_parent(), and scf_instance_delete() functions will fail if:
SCF_ERROR_DELETED
The instance has been deleted.
SCF_ERROR_NOT_SET
The instance is not set.
SCF_ERROR_NOT_BOUND
The repository handle is not bound.
SCF_ERROR_CONNECTION_BROKEN
The connection to the repository was lost.
The scf_service_add_instance() function will fail if:
SCF_ERROR_EXISTS
An instance named name already exists.
SCF_ERROR_INTERNAL
An internal error occurred.
SCF_ERROR_NO_RESOURCES
The server does not have the resources to complete the request.
SCF_ERROR_NOT_BOUND
The handle is not bound.
The scf_service_get_instance() function will fail if:
SCF_ERROR_BACKEND_ACCESS
The storage mechanism that the repository server (svc.configd(1M)) chose for the operation denied access.
SCF_ERROR_INTERNAL
An internal error occurred.
SCF_ERROR_NOT_BOUND
The handle is not bound.
SCF_ERROR_NOT_FOUND
No instance specified by name was found.
SCF_ERROR_NO_RESOURCES
The repository server is out of resources.
The scf_service_add_instance() and scf_service_get_instance() functions will fail if:
SCF_ERROR_NOT_SET
The service is not set.
SCF_ERROR_DELETED
The service has been deleted.
SCF_ERROR_INVALID_ARGUMENT
The name argument is not a valid instance name.
SCF_ERROR_HANDLE_MISMATCH
The service and instance are not derived from the same handle.
SCF_ERROR_CONNECTION_BROKEN
The connection to the repository was lost.
The scf_instance_get_parent() function will fail if:
SCF_ERROR_HANDLE_MISMATCH
The service and instance arguments are not derived from the same handle.
The scf_service_add_instance() and scf_instance_delete() functions will fail if:
SCF_ERROR_PERMISSION_DENIED
The user does not have sufficient privileges to create or delete an instance.
SCF_ERROR_BACKEND_READONLY
The repository backend is read-only.
SCF_ERROR_BACKEND_ACCESS
The repository backend refused the modification.
The scf_instance_delete() function will fail if:
SCF_ERROR_NO_RESOURCES
The server does not have adequate resources for a new instance handle.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
Interface Stability | Committed |
MT-Level | Safe |
libscf(3LIB), scf_error(3SCF), scf_iter_instance_pgs(3SCF), scf_iter_instance_pgs_typed(3SCF), scf_iter_instance_snapshots(3SCF), scf_pg_create(3SCF), scf_snapshot_create(3SCF), attributes(5), smf(5)
Instance names are of the form:
[domain,]identifier
where domain is either a stock ticker symbol such as SUNW or a Java-style reversed domain name such as com.sun. Identifiers begin with a letter or underscore and contain only letters, digits, underscores, and dashes.