inetd_impl.h revision 870ad75a2b67a92c3449d93b4fef8a0baa982b4a
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER START
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The contents of this file are subject to the terms of the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Common Development and Distribution License (the "License").
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You may not use this file except in compliance with the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * or http://www.opensolaris.org/os/licensing.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * See the License for the specific language governing permissions
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * and limitations under the License.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * When distributing Covered Code, include this CDDL HEADER in each
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * If applicable, add the following below this CDDL HEADER, with the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * fields enclosed by brackets "[]" replaced with your own identifying
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * information: Portions Copyright [yyyy] [name of copyright owner]
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs *
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * CDDL HEADER END
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
63b1987d5d7387bda49397c0f3f063b49651a5bcQiyan Sun - Sun Microsystems - San Diego United States * Use is subject to license terms.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#ifndef _INETD_IMPL_H
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define _INETD_IMPL_H
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Header file containing inetd's shared types/data structures and
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * function declarations.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#ifdef __cplusplus
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern "C" {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <sys/types.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <sys/socket.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <stdarg.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <rpc/rpc.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <assert.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <libscf.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <libinetutil.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <inetsvc.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <librestart.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <libuutil.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#include <wordexp.h>
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Number of consecutive retries of a repository operation that failed due
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * to a broken connection performed before giving up and failing.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define REP_OP_RETRIES 10
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* retryable SMF method error */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define SMF_EXIT_ERR_OTHER 1
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* inetd's syslog ident string */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define SYSLOG_IDENT "inetd"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Is this instance currently executing a method ? */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define INST_IN_TRANSITION(i) ((i)->next_istate != IIS_NONE)
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Names of properties that inetd uses to store instance state. */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define PR_NAME_NON_START_PID "non_start_pid"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define PR_NAME_START_PIDS "start_pids"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define PR_NAME_CUR_INT_STATE "cur_state"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define PR_NAME_NEXT_INT_STATE "next_state"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Name of the property group that holds debug flag */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define PG_NAME_APPLICATION_CONFIG "config"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Name of the property which holds the debug flag value */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#define PR_NAME_DEBUG_FLAG "debug"
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Instance states used internal to svc.inetd.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * NOTE: The states table in cmd/cmd-inetd/inetd/inetd.c relies on the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * ordering of this enumeration, so take care if modifying it.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_UNINITIALIZED,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_ONLINE,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_IN_ONLINE_METHOD,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_OFFLINE,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_IN_OFFLINE_METHOD,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_DISABLED,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_IN_DISABLE_METHOD,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_IN_REFRESH_METHOD,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_MAINTENANCE,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_OFFLINE_CONRATE,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_OFFLINE_BIND,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_OFFLINE_COPIES,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_DEGRADED,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IIS_NONE
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} internal_inst_state_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * inetd's instance methods.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * NOTE: The methods table in cmd/cmd-inetd/inetd/util.c relies on the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * ordering of this enumeration, so take care if modifying it.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef enum {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IM_START,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IM_ONLINE,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IM_OFFLINE,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IM_DISABLE,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IM_REFRESH,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs NUM_METHODS,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs IM_NONE
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} instance_method_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Collection of information pertaining to a method */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs char *exec_path; /* path passed to exec() */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Structure returned from wordexp(3c) that contains an expansion of the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * exec property into a form suitable for exec(2).
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs wordexp_t exec_args_we;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Copy of the first argument of the above wordexp_t structure in the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * event that an alternate arg0 is provided, and we replace the first
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * argument with the alternate arg0. This is necessary so the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * contents of the wordexp_t structure can be returned to their
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * original form as returned from wordexp(3c), which is a requirement
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * for calling wordfree(3c), wordexp()'s associated cleanup routine.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs const char *wordexp_arg0_backup;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* time a method can run for before being considered broken */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int timeout;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} method_info_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs basic_cfg_t *basic;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs method_info_t *methods[NUM_METHODS];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} instance_cfg_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Structure used to construct a list of int64_t's and their associated
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * scf values. Used to store lists of process ids, internal states, and to
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * store the associated scf value used when writing the values back to the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * repository.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int64_t val;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs scf_value_t *scf_val;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uu_list_node_t link;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} rep_val_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Structure containing the state and configuration of a service instance. */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs char *fmri;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* fd we're going to take a connection on */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int conn_fd;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* number of copies of this instance active */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int64_t copies;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* connection rate counters */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int64_t conn_rate_count;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs time_t conn_rate_start;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* failure rate counters */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int64_t fail_rate_count;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs time_t fail_rate_start;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* bind failure count */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs int64_t bind_fail_count;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* pids of currently running methods */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uu_list_t *non_start_pid;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uu_list_t *start_pids;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* ctids of currently running start methods */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uu_list_t *start_ctids;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* remote address, used for TCP tracing */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs struct sockaddr_storage remote_addr;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs internal_inst_state_t cur_istate;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs internal_inst_state_t next_istate;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* repository compatible versions of the above 2 states */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uu_list_t *cur_istate_rep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uu_list_t *next_istate_rep;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Current instance configuration resulting from its repository
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * configuration.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs instance_cfg_t *config;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Soon to be applied instance configuration. This configuration was
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * read during a refresh when this instance was online, and the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * instance needed taking offline for this configuration to be applied.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * The instance is currently on its way offline, and this configuration
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * will become the current configuration when it arrives there.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs instance_cfg_t *new_config;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* current pending conrate-offline/method timer; -1 if none pending */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs iu_timer_id_t timer_id;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* current pending bind retry timer; -1 if none pending */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs iu_timer_id_t bind_timer_id;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Flags that assist in the fanout of an instance arriving in the
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * offline state on-route to some other state.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs boolean_t disable_req;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs boolean_t maintenance_req;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs boolean_t conn_rate_exceeded;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs boolean_t bind_retries_exceeded;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * Event waiting to be processed. RESTARTER_EVENT_TYPE_INVALID is used
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * to mean no event waiting.
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs restarter_event_type_t pending_rst_event;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs /* link to next instance in list */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs uu_list_node_t link;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} instance_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* Structure used to store information pertaining to instance method types. */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qstypedef struct {
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs instance_method_t method;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs const char *name;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs internal_inst_state_t dst_state;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs} method_type_info_t;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern uu_list_t *instance_list;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern struct pollfd *poll_fds;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern nfds_t num_pollfds;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern method_type_info_t methods[];
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern iu_tq_t *timer_queue;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern uu_list_pool_t *conn_ind_pool;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern boolean_t debug_enabled;
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * util.c
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void msg_init(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void msg_fini(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* PRINTFLIKE1 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void debug_msg(const char *, ...);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* PRINTFLIKE1 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void error_msg(const char *, ...);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/* PRINTFLIKE1 */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void warn_msg(const char *, ...);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void poll_fini(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern boolean_t isset_pollfd(int);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void clear_pollfd(int);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int set_pollfd(int, uint16_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern struct pollfd *find_pollfd(int);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int safe_read(int, void *, size_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern boolean_t copies_limit_exceeded(instance_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void cancel_inst_timer(instance_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void cancel_bind_timer(instance_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void enable_blocking(int);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void disable_blocking(int);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
fe930412c257f961ae67039de3b164b83717976aqs/*
fe930412c257f961ae67039de3b164b83717976aqs * tlx.c
fe930412c257f961ae67039de3b164b83717976aqs */
fe930412c257f961ae67039de3b164b83717976aqsextern rpc_info_t *create_rpc_info(const char *, const char *, const char *,
fe930412c257f961ae67039de3b164b83717976aqs int, int);
fe930412c257f961ae67039de3b164b83717976aqsextern void destroy_rpc_info(rpc_info_t *);
fe930412c257f961ae67039de3b164b83717976aqsextern boolean_t rpc_info_equal(const rpc_info_t *, const rpc_info_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int register_rpc_service(const char *, const rpc_info_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void unregister_rpc_service(const char *, const rpc_info_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int create_bound_endpoint(const instance_t *, tlx_info_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void close_net_fd(instance_t *, int);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int tlx_accept(const char *, tlx_info_t *, struct sockaddr_storage *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern struct t_call *dequeue_conind(uu_list_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int queue_conind(uu_list_t *, struct t_call *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void tlx_fini(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int tlx_init(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern boolean_t tlx_info_equal(const tlx_info_t *, const tlx_info_t *,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs boolean_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void consume_wait_data(instance_t *, int);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * config.c
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
fe930412c257f961ae67039de3b164b83717976aqsextern int config_init(void);
fe930412c257f961ae67039de3b164b83717976aqsextern void config_fini(void);
fe930412c257f961ae67039de3b164b83717976aqsextern boolean_t socket_info_equal(const socket_info_t *, const socket_info_t *,
fe930412c257f961ae67039de3b164b83717976aqs boolean_t);
fe930412c257f961ae67039de3b164b83717976aqsextern boolean_t method_info_equal(const method_info_t *,
fe930412c257f961ae67039de3b164b83717976aqs const method_info_t *);
fe930412c257f961ae67039de3b164b83717976aqsextern struct method_context *read_method_context(const char *, const char *,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs const char *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void destroy_instance_cfg(instance_cfg_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern instance_cfg_t *read_instance_cfg(const char *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern boolean_t bind_config_equal(const basic_cfg_t *, const basic_cfg_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int read_enable_merged(const char *, boolean_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void refresh_debug_flag(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * repval.c
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void repval_fini(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int repval_init(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern uu_list_t *create_rep_val_list(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void destroy_rep_val_list(uu_list_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern scf_error_t store_rep_vals(uu_list_t *, const char *, const char *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern scf_error_t retrieve_rep_vals(uu_list_t *, const char *, const char *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern rep_val_t *find_rep_val(uu_list_t *, int64_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int set_single_rep_val(uu_list_t *, int64_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int64_t get_single_rep_val(uu_list_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int add_rep_val(uu_list_t *, int64_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void remove_rep_val(uu_list_t *, int64_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void empty_rep_val_list(uu_list_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int make_handle_bound(scf_handle_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int add_remove_contract(instance_t *, boolean_t, ctid_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int iterate_repository_contracts(instance_t *, int);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * contracts.c
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int contract_init(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void contract_fini(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsvoid contract_postfork(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsint contract_prefork(const char *, int);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int get_latest_contract(ctid_t *cid);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int adopt_contract(ctid_t, const char *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int abandon_contract(ctid_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * inetd.c
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void process_offline_inst(instance_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void process_non_start_term(instance_t *, int);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void process_start_term(instance_t *, char *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void remove_method_ids(instance_t *, pid_t, ctid_t, instance_method_t);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * env.c
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qschar **set_smf_env(struct method_context *, instance_t *, const char *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs/*
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs * wait.c
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int register_method(instance_t *, pid_t, ctid_t cid, instance_method_t,
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs char *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern int method_init(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void method_fini(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void process_terminated_methods(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void unregister_instance_methods(const instance_t *);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qsextern void method_preexec(void);
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#ifdef __cplusplus
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs}
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs#endif /* _INETD_IMPL_H */
3dec9fcdd56adf1b4a563137b4915c8f2d83b881qs