components/visual-panels/smf/src/cmd/rad/mod/smf/mod_smf.c
author Gary Pennington <gary.pennington@oracle.com>
Sat, 30 Jun 2012 06:30:16 -0700
changeset 901 19b502ccabc8
parent 827 0944d8c0158b
permissions -rw-r--r--
7179786 libadr rename impacts various modules in the userland consolidation
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     1
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     2
 * CDDL HEADER START
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     3
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     7
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    11
 * and limitations under the License.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    12
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    18
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    19
 * CDDL HEADER END
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    20
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    21
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    22
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    23
 * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    24
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    25
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    26
#include <sys/list.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    27
#include <sys/types.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    28
#include <sys/stat.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    29
#include <string.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    30
#include <stdio.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    31
#include <stdlib.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    32
#include <stddef.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    33
#include <unistd.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    34
#include <fcntl.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    35
#include <assert.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    36
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    37
#include <libscf.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    38
#include <libscf_priv.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    39
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    40
#include <rad/adr.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    41
#include <rad/rad_modapi.h>
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    42
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    43
#include "api_smf.h"
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    44
#include "rhandle.h"
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    45
#include "smfutil.h"
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    46
#include "datatype.h"
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    47
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    48
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    49
 * The SMF rad module.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    50
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    51
 * This module is atypically involved due to the sheer size of the
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    52
 * exported API, the complexity of consuming SMF, and the fact
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    53
 * the exported API represents a significant abstraction of the
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    54
 * underlying functionality.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    55
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    56
 * This file (mod_smf.c) contains the rad module linkage, the dynamic
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    57
 * namespace callbacks, and the implementation of the master object.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    58
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    59
 * smfutil.c and rhandle.c contain a variety of routines that factor
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    60
 * common combinations of libscf operations into more manageable
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    61
 * chunks.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    62
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    63
 * datatype.c contains routines that map a libscf type or object into
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    64
 * the appropriate ADR type.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    65
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    66
 * common.c contains the implementation of attributes and methods
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    67
 * common to instances and services.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    68
 *
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    69
 * service.c and instance.c contain the implementation of attributes
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    70
 * and methods specific to services and instances, respectively.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    71
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    72
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    73
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    74
 * "Master" object implementation.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    75
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    76
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    77
struct read_services_data {
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    78
	adr_data_t *rsd_result;
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    79
	adr_data_t *rsd_insts;
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    80
};
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    81
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    82
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    83
 * Master.service instance iteration callback.  Adds the name of the
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    84
 * instance to the current service's instance list.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    85
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    86
/*ARGSUSED*/
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    87
static svcerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    88
read_services_inst_cb(scf_handle_t *scfhandle, scf_instance_t *instance,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    89
    const char *sname, const char *iname, void *arg)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    90
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    91
	struct read_services_data *rsd = arg;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    92
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    93
	assert(rsd->rsd_insts != NULL);
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    94
	(void) adr_array_add(rsd->rsd_insts,
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
    95
	    adr_data_new_string(iname, LT_COPY));
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    96
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    97
	return (SE_OK);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    98
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
    99
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   100
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   101
 * master.service service iteration callback.  Constructs a service and
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   102
 * adds it to the list.  Stores a pointer to the service's instance
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   103
 * list in the iteration data for use by the instance iteration
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   104
 * callback.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   105
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   106
/*ARGSUSED*/
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   107
static svcerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   108
read_services_svc_cb(scf_handle_t *scfhandle, scf_service_t *service,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   109
    const char *sname, void *arg)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   110
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   111
	struct read_services_data *rsd = arg;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   112
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   113
	rsd->rsd_insts = adr_data_new_array(&adr_t_array_string, 5);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   114
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   115
	adr_data_t *sdata = adr_data_new_struct(&t__Service);
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   116
	adr_struct_set(sdata, "fmri",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   117
	    adr_data_new_string(smfu_fmri_alloc(sname, NULL), LT_FREE));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   118
	adr_struct_set(sdata, "objectName",
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   119
	    adr_data_new_name(smfu_name_alloc(sname, NULL)));
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   120
	adr_struct_set(sdata, "instances", rsd->rsd_insts);
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   121
	(void) adr_array_add(rsd->rsd_result, sdata);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   122
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   123
	return (SE_OK);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   124
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   125
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   126
/*ARGSUSED*/
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   127
static svcerr_t
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   128
rt_read_services(scf_handle_t *h, void *arg, adr_data_t **ret,
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   129
    adr_data_t **error)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   130
{
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   131
	adr_data_t *result = adr_data_new_array(&t_array__Service, 200);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   132
	struct read_services_data rsd = { result, NULL };
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   133
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   134
	svcerr_t se = smfu_iter_svcs(h, read_services_svc_cb,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   135
	    read_services_inst_cb, &rsd);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   136
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   137
	*ret = result;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   138
	return (se);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   139
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   140
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   141
/* ARGSUSED */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   142
conerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   143
interface_Master_read_services(rad_instance_t *inst, adr_attribute_t *attr,
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   144
    adr_data_t **data, adr_data_t **error)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   145
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   146
	return (smfu_rtrun(rt_read_services, NULL, data, error));
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   147
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   148
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   149
struct read_instances_data {
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   150
	adr_data_t *rid_result;
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   151
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   152
	/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   153
	 * For efficiency, reuse a single set of objects.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   154
	 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   155
	scf_propertygroup_t *rid_pg;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   156
	scf_property_t *rid_prop;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   157
	scf_value_t *rid_val;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   158
};
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   159
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   160
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   161
 * master.instances instance iteration callback.  Constructs an
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   162
 * Instance and adds it to the list.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   163
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   164
/*ARGSUSED*/
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   165
static svcerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   166
read_instances_cb(scf_handle_t *scfhandle, scf_instance_t *instance,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   167
    const char *sname, const char *iname, void *arg)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   168
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   169
	if (!scf_instance_is_complete(instance))
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   170
		return (SE_OK);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   171
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   172
	struct read_instances_data *rid = arg;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   173
	svcerr_t se;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   174
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   175
	adr_data_t *inst = NULL;
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   176
	if ((se = create_Instance(instance, sname, iname, &inst,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   177
	    rid->rid_pg, rid->rid_prop, rid->rid_val)) == SE_OK)
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   178
		(void) adr_array_add(rid->rid_result, inst);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   179
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   180
	return (se == SE_NOTFOUND ? SE_OK : se);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   181
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   182
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   183
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   184
 * master.instances read callback.  Iterates over all instances,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   185
 * constructing a list of Instance objects that are returned to the
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   186
 * caller.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   187
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   188
/*ARGSUSED*/
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   189
static svcerr_t
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   190
rt_read_instances(scf_handle_t *h, void *arg, adr_data_t **ret,
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   191
    adr_data_t **error)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   192
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   193
	struct read_instances_data rid;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   194
	svcerr_t se;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   195
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   196
	rid.rid_pg = scf_pg_create(h);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   197
	rid.rid_prop = scf_property_create(h);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   198
	rid.rid_val = scf_value_create(h);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   199
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   200
	if (rid.rid_pg == NULL || rid.rid_prop == NULL || rid.rid_val == NULL) {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   201
		se = SE_FATAL;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   202
		goto out;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   203
	}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   204
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   205
	rid.rid_result = adr_data_new_array(&t_array__Instance, 200);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   206
	se = smfu_iter_svcs(h, NULL, read_instances_cb, &rid);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   207
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   208
out:
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   209
	scf_value_destroy(rid.rid_val);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   210
	scf_property_destroy(rid.rid_prop);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   211
	scf_pg_destroy(rid.rid_pg);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   212
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   213
	*ret = rid.rid_result;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   214
	return (se);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   215
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   216
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   217
/* ARGSUSED */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   218
conerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   219
interface_Master_read_instances(rad_instance_t *inst, adr_attribute_t *attr,
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   220
    adr_data_t **data, adr_data_t **error)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   221
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   222
	return (smfu_rtrun(rt_read_instances, NULL, data, error));
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   223
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   224
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   225
struct listdata {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   226
	adr_name_t *ld_pattern;
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   227
	adr_data_t *ld_result;
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   228
};
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   229
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   230
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   231
 * Module linkage & dynamic namespace callbacks.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   232
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   233
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   234
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   235
 * Dynamic list instance iteration callback.  Compares the instance with
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   236
 * the pattern; if it matches adds the instance's name to the list.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   237
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   238
/*ARGSUSED*/
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   239
static svcerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   240
list_insts(scf_handle_t *scfhandle, scf_instance_t *instance, const char *sname,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   241
    const char *iname, void *arg)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   242
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   243
	if (!scf_instance_is_complete(instance))
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   244
		return (SE_OK);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   245
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   246
	struct listdata *ld = arg;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   247
	adr_name_t *name = smfu_name_alloc(sname, iname);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   248
	if (name == NULL)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   249
		return (SE_FATAL);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   250
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   251
	if (adr_name_match(name, ld->ld_pattern))
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   252
		(void) adr_array_add(ld->ld_result,
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   253
		    adr_data_new_string(adr_name_tostr(name), LT_FREE));
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   254
	adr_name_rele(name);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   255
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   256
	return (SE_OK);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   257
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   258
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   259
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   260
 * Dynamic list service iteration callback.  Compares the service with
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   261
 * the pattern; if it matches adds the service's name to the list.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   262
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   263
/*ARGSUSED*/
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   264
static svcerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   265
list_svcs(scf_handle_t *scfhandle, scf_service_t *service, const char *sname,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   266
    void *arg)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   267
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   268
	struct listdata *ld = arg;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   269
	adr_name_t *name = smfu_name_alloc(sname, NULL);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   270
	if (name == NULL)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   271
		return (SE_FATAL);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   272
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   273
	if (adr_name_match(name, ld->ld_pattern))
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   274
		(void) adr_array_add(ld->ld_result,
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   275
		    adr_data_new_string(adr_name_tostr(name), LT_FREE));
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   276
	adr_name_rele(name);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   277
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   278
	return (SE_OK);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   279
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   280
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   281
struct arg_listf {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   282
	adr_name_t *pattern;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   283
	boolean_t instance;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   284
};
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   285
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   286
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   287
 * Dynamic namespace list callback.  Iterates over all services or
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   288
 * instances, accumulating their object names.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   289
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   290
/*ARGSUSED*/
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   291
static svcerr_t
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   292
rt_listf(scf_handle_t *h, void *arg, adr_data_t **ret, adr_data_t **error)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   293
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   294
	struct arg_listf *rtarg = (struct arg_listf *)arg;
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   295
	adr_data_t *result = adr_data_new_array(&adr_t_array_string, 300);
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   296
	struct listdata ld = { rtarg->pattern, result };
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   297
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   298
	svcerr_t se = smfu_iter_svcs(h, rtarg->instance ? NULL : list_svcs,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   299
	    rtarg->instance ? list_insts : NULL, &ld);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   300
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   301
	*ret = result;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   302
	return (se);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   303
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   304
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   305
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   306
 * Dynamic namespace list handler.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   307
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   308
static conerr_t
901
19b502ccabc8 7179786 libadr rename impacts various modules in the userland consolidation
Gary Pennington <gary.pennington@oracle.com>
parents: 827
diff changeset
   309
smf_listf(adr_name_t *pattern, adr_data_t **names, void *arg)
827
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   310
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   311
	struct arg_listf rtarg = { pattern, (boolean_t)arg };
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   312
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   313
	conerr_t ce = smfu_rtrun(rt_listf, &rtarg, names, NULL);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   314
	return (ce == ce_object ? ce_system : ce);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   315
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   316
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   317
/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   318
 * Dynamic namespace lookup handler.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   319
 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   320
static conerr_t
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   321
smf_lookupf(adr_name_t **name, rad_instance_t **inst, void *arg)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   322
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   323
	const char *sname = adr_name_key(*name, SMF_KEY_SERVICE);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   324
	const char *iname = adr_name_key(*name, SMF_KEY_INSTANCE);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   325
	const char *scope = adr_name_key(*name, SMF_KEY_SCOPE);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   326
	boolean_t instance = (boolean_t)arg;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   327
	int kcount = scope != NULL ? 3 : 2;	/* type, service, [scope] */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   328
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   329
	if (instance) {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   330
		/* Instances must specify an instance */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   331
		if (iname == NULL)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   332
			return (ce_notfound);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   333
		kcount += 1;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   334
	} else {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   335
		/* Services may not specify an instance */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   336
		if (iname != NULL)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   337
			return (ce_notfound);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   338
	}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   339
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   340
	/* Reject names with bad keys/values */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   341
	if (sname == NULL || kcount != adr_name_nkeys(*name))
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   342
		return (ce_notfound);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   343
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   344
	/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   345
	 * Reject non-localhost scopes and remap localhost scopes to a
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   346
	 * canonical non-scoped form.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   347
	 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   348
	if (scope != NULL) {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   349
		if (strcmp(scope, SCF_SCOPE_LOCAL) != 0)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   350
			return (ce_notfound);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   351
		adr_name_t *newname = smfu_name_alloc(sname, iname);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   352
		if (newname == NULL)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   353
			return (ce_nomem);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   354
		adr_name_rele(*name);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   355
		*name = newname;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   356
		assert(*inst == NULL);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   357
		return (ce_ok);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   358
	}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   359
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   360
	/* Fail if the service/instance doesn't exist */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   361
	if (smfu_test(sname, iname) != SE_OK)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   362
		return (ce_notfound);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   363
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   364
	/* Create and return new rad instance for the service/instance */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   365
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   366
	smfobj_t *smfo;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   367
	if ((smfo = smfu_obj_alloc(sname, iname)) == NULL)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   368
		return (ce_nomem);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   369
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   370
	*inst = instance_create(adr_name_hold(*name),
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   371
	    instance ? &interface_Instance_svr : &interface_Service_svr,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   372
	    smfo, (void(*)(void *))smfu_obj_free);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   373
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   374
	return (ce_ok);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   375
}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   376
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   377
static rad_modinfo_t modinfo = { "smf", "SMF module" };
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   378
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   379
int
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   380
_rad_init(void *handle)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   381
{
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   382
	adr_name_t *spat, *ipat, *mpat;
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   383
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   384
	if (rad_module_register(handle, RAD_MODVERSION, &modinfo) == -1)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   385
		return (-1);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   386
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   387
	if (rad_isproxy)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   388
		return (0);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   389
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   390
	smfu_init();
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   391
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   392
	/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   393
	 * Create singleton, static master object.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   394
	 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   395
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   396
	mpat = adr_name_vcreate(SMF_DOMAIN, 1, SMF_KEY_TYPE, SMF_TYPE_MASTER);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   397
	rad_instance_t *agg_inst =
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   398
	    instance_create(mpat, &interface_Master_svr, NULL, NULL);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   399
	if (agg_inst != NULL)
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   400
		(void) cont_insert(rad_container, agg_inst, INST_ID_PICK);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   401
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   402
	/*
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   403
	 * Register dynamic namespace handlers for services and instances.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   404
	 * We must register twice: once for type=service and once for
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   405
	 * type=instance.  We use the same callbacks for both.
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   406
	 */
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   407
	spat = adr_name_vcreate(SMF_DOMAIN, 1, SMF_KEY_TYPE, SMF_TYPE_SERVICE);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   408
	if (spat != NULL) {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   409
		(void) cont_register_dynamic(rad_container, spat, smf_listf,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   410
		    smf_lookupf, (void *)B_FALSE);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   411
		adr_name_rele(spat);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   412
	}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   413
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   414
	ipat = adr_name_vcreate(SMF_DOMAIN, 1, SMF_KEY_TYPE, SMF_TYPE_INSTANCE);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   415
	if (ipat != NULL) {
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   416
		(void) cont_register_dynamic(rad_container, ipat, smf_listf,
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   417
		    smf_lookupf, (void *)B_TRUE);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   418
		adr_name_rele(ipat);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   419
	}
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   420
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   421
	return (0);
0944d8c0158b 7169052 Integrate Visual Panels into Userland
Dan Labrecque <dan.labrecque@oracle.com>
parents:
diff changeset
   422
}