usr/src/lib/librestart/common/librestart.h
author Sean Wilcox <Sean.Wilcox@Sun.COM>
Wed, 13 Jan 2010 09:08:53 -0800
changeset 11482 7315713fb22c
parent 9765 2522fef20c5f
child 12979 ab9ae749152f
permissions -rw-r--r--
6311392 The Quick and the Dead: rapid-fire svcadm restart leads to maintenance 6219078 svc.startd's algorithm for detecting restart loops should be sensible
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
6045
7a731d54b2bc 6594125 svc.startd refuses to run if inetd dies frequently (during liverpool high stress testrun)
rm88369
parents: 759
diff changeset
     5
 * Common Development and Distribution License (the "License").
7a731d54b2bc 6594125 svc.startd refuses to run if inetd dies frequently (during liverpool high stress testrun)
rm88369
parents: 759
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
11482
7315713fb22c 6311392 The Quick and the Dead: rapid-fire svcadm restart leads to maintenance
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9765
diff changeset
    22
 * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
#ifndef	_LIBRESTART_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#define	_LIBRESTART_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
6045
7a731d54b2bc 6594125 svc.startd refuses to run if inetd dies frequently (during liverpool high stress testrun)
rm88369
parents: 759
diff changeset
    29
#include <libsysevent.h>
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
#include <libcontract.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
#include <libscf.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
#include <limits.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
#include <priv.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
#include <pwd.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
 * There are 3 parts to librestart.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
 *	1) The event protocol from the master restarter to its delegates.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
 *	2) A functional interface for updating the repository.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
 *	3) Convenience functions for common restarter tasks.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
 * Event protocol
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 *	We need a reliable event protocol, as there's no way to define
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 *	restarter events as idempotent.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
 *	Currently using sysevent channels as the reliable event implementation.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
 *	This could change if the implementation proves unsuitable, but
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
 *	the API defined here should abstract anything but a change in
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
 *	the fundamental event model.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
 *	We offer functions to tease apart the event rather than generic
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
 *	nvpair interfaces. This is because each event type has a well-
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
 *	defined set of fields.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
8823
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
    61
/*
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
    62
 * Some of the functions have external contracted consumers, review contracts
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
    63
 * when making incompatible changes.
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
    64
 */
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
    65
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    66
typedef struct restarter_event_handle restarter_event_handle_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    67
typedef struct restarter_event restarter_event_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
typedef uint32_t restarter_event_type_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
 * Define an event protocol version. In theory, we could use this in
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
 * the future to support delegated restarters which use an older
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
 * protocol. In practice, increment RESTARTER_EVENT_VERSION whenever the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
 * protocol might have changed.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
#define	RESTARTER_EVENT_VERSION		4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
#define	RESTARTER_FLAG_DEBUG		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
9765
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
    81
#define	RESTARTER_ERRMSGSZ		1024
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
    82
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
 * Event types
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
 *	RESTARTER_EVENT_TYPE_ADD_INSTANCE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
 *		responsible for a new (stopped) instance
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
 *	RESTARTER_EVENT_TYPE_REMOVE_INSTANCE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
 *		no longer responsible for this instance; stop it and return
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
 *	RESTARTER_EVENT_TYPE_ENABLE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
 *		no guarantee that dependencies are met; see
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
 *		RESTARTER_EVENT_TYPE_START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
 *	RESTARTER_EVENT_TYPE_DISABLE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
 *		no guarantee that instance was running
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
 *	RESTARTER_EVENT_TYPE_ADMIN_DEGRADED
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
 *	RESTARTER_EVENT_TYPE_ADMIN_REFRESH
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
 *	RESTARTER_EVENT_TYPE_ADMIN_RESTART
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
 *	RESTARTER_EVENT_TYPE_ADMIN_MAINT_OFF
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
 *	RESTARTER_EVENT_TYPE_ADMIN_MAINT_ON
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
 *	RESTARTER_EVENT_TYPE_ADMIN_MAINT_ON_IMMEDIATE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
 *	RESTARTER_EVENT_TYPE_ADMIN_MAINT_OFF
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
 *	RESTARTER_EVENT_TYPE_STOP
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
 *		dependencies are, or are becoming, unsatisfied
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
 *	RESTARTER_EVENT_TYPE_START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
 *		dependencies have become satisfied
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
 *	RESTARTER_EVENT_TYPE_DEPENDENCY_CYCLE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
 *		instance caused a dependency cycle
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
 *	RESTARTER_EVENT_TYPE_INVALID_DEPENDENCY
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
 *		instance has an invalid dependency
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
#define	RESTARTER_EVENT_TYPE_INVALID			0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
#define	RESTARTER_EVENT_TYPE_ADD_INSTANCE		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
#define	RESTARTER_EVENT_TYPE_REMOVE_INSTANCE		2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   114
#define	RESTARTER_EVENT_TYPE_ENABLE			3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   115
#define	RESTARTER_EVENT_TYPE_DISABLE			4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   116
#define	RESTARTER_EVENT_TYPE_ADMIN_DEGRADED		5
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   117
#define	RESTARTER_EVENT_TYPE_ADMIN_REFRESH		6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   118
#define	RESTARTER_EVENT_TYPE_ADMIN_RESTART		7
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   119
#define	RESTARTER_EVENT_TYPE_ADMIN_MAINT_OFF		8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   120
#define	RESTARTER_EVENT_TYPE_ADMIN_MAINT_ON		9
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   121
#define	RESTARTER_EVENT_TYPE_ADMIN_MAINT_ON_IMMEDIATE	10
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   122
#define	RESTARTER_EVENT_TYPE_STOP			11
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   123
#define	RESTARTER_EVENT_TYPE_START			12
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   124
#define	RESTARTER_EVENT_TYPE_DEPENDENCY_CYCLE		13
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
#define	RESTARTER_EVENT_TYPE_INVALID_DEPENDENCY		14
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
#define	RESTARTER_EVENT_TYPE_ADMIN_DISABLE		15
11482
7315713fb22c 6311392 The Quick and the Dead: rapid-fire svcadm restart leads to maintenance
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9765
diff changeset
   127
#define	RESTARTER_EVENT_TYPE_STOP_RESET			16
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
#define	RESTARTER_EVENT_ERROR			-1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
#define	RESTARTER_EVENT_INSTANCE_DISABLED	0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
#define	RESTARTER_EVENT_INSTANCE_ENABLED	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
typedef enum {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
	RESTARTER_STATE_NONE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
	RESTARTER_STATE_UNINIT,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
	RESTARTER_STATE_MAINT,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
	RESTARTER_STATE_OFFLINE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
	RESTARTER_STATE_DISABLED,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
	RESTARTER_STATE_ONLINE,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
	RESTARTER_STATE_DEGRADED
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
} restarter_instance_state_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
 * These values are ordered by severity of required restart, as we use
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
 * integer comparisons to determine error flow.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
typedef enum {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
	RERR_UNSUPPORTED = -1,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
	RERR_NONE = 0,			/* no error, restart, refresh */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
	RERR_FAULT,			/* fault occurred */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
	RERR_RESTART,			/* transition due to restart */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
	RERR_REFRESH			/* transition due to refresh */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
} restarter_error_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
 * restarter_store_contract() and restarter_remove_contract() types
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
typedef enum {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
	RESTARTER_CONTRACT_PRIMARY,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
	RESTARTER_CONTRACT_TRANSIENT
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
} restarter_contract_type_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
 * restarter_bind_handle() registers a delegate with svc.startd to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
 * begin consuming events.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
 * On initial bind, the delgated restarter receives an event for each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
 * instance it is responsible for, as if that instance was new.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
 * callers must have superuser privileges
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
 * The event handler can return 0 for success, or EAGAIN to request
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
 * retry of event delivery. EAGAIN may be returned 3 times before the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
 * event is discarded.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
int restarter_bind_handle(uint32_t, const char *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
    int (*event_handler)(restarter_event_t *), int,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
    restarter_event_handle_t **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   179
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   180
restarter_event_type_t restarter_event_get_type(restarter_event_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   181
uint64_t restarter_event_get_seq(restarter_event_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   182
void restarter_event_get_time(restarter_event_t *, hrtime_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   183
ssize_t restarter_event_get_instance(restarter_event_t *, char *, size_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   184
restarter_event_handle_t *restarter_event_get_handle(restarter_event_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   185
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   186
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   187
 * The following functions work only on certain types of events.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   188
 * They fail with a return of -1 if they're called on an inappropriate event.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   189
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   190
int restarter_event_get_enabled(restarter_event_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   191
int restarter_event_get_current_states(restarter_event_t *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   192
    restarter_instance_state_t *, restarter_instance_state_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
 * Functions for updating the repository.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
 */
8823
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   197
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   198
/*
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   199
 * When setting state to "maintenance", callers of restarter_set_states() can
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   200
 * set aux_state to "service_request" to communicate that another service has
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   201
 * requested maintenance state for the target service.
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   202
 *
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   203
 * Callers should use restarter_inst_validate_aux_fmri() to validate the fmri
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   204
 * of the requested service and pass "service_request" for aux_state when
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   205
 * calling restarter_set_states(). See inetd and startd for examples.
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   206
 */
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
int restarter_set_states(restarter_event_handle_t *, const char *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
    restarter_instance_state_t, restarter_instance_state_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
    restarter_instance_state_t, restarter_instance_state_t, restarter_error_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
    const char *);
6045
7a731d54b2bc 6594125 svc.startd refuses to run if inetd dies frequently (during liverpool high stress testrun)
rm88369
parents: 759
diff changeset
   211
int restarter_event_publish_retry(evchan_t *, const char *, const char *,
7a731d54b2bc 6594125 svc.startd refuses to run if inetd dies frequently (during liverpool high stress testrun)
rm88369
parents: 759
diff changeset
   212
    const char *, const char *, nvlist_t *, uint32_t);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
int restarter_store_contract(scf_instance_t *, ctid_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
    restarter_contract_type_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
int restarter_remove_contract(scf_instance_t *, ctid_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
    restarter_contract_type_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
ssize_t restarter_state_to_string(restarter_instance_state_t, char *, size_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
restarter_instance_state_t restarter_string_to_state(char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
9765
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   222
#define	RESTARTER_METHOD_CONTEXT_VERSION	7
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
struct method_context {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
	/* Stable */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
	uid_t		uid, euid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
	gid_t		gid, egid;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
	int		ngroups;		/* -1 means use initgroups(). */
9263
48d14e1f550f 6411391 Empty method_contexts don't work
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 8823
diff changeset
   229
	gid_t		groups[NGROUPS_MAX];
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
	priv_set_t	*lpriv_set, *priv_set;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
	char		*corefile_pattern;	/* Optional. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
	char		*project;		/* NULL for no change */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
	char		*resource_pool;		/* NULL for project default */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
	char		*working_dir;		/* NULL for :default */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
	char		**env;			/* NULL for no env */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
	size_t		env_sz;			/* size of env array */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
	/* Private */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
	char		*vbuf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
	ssize_t		vbuf_sz;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
	struct passwd	pwd;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
	char		*pwbuf;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
	ssize_t		pwbufsz;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
9765
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   246
/*
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   247
 * An error structure that contains a message string, and a type
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   248
 * that can be used to determine course of action by the reciever
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   249
 * of the error structure.
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   250
 *
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   251
 * type - usually will be an errno equivalent but could contain
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   252
 * 	defined error types for exampe SCF_ERROR_XXX
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   253
 * msg - must be at the end of the structure as if the message is
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   254
 * 	longer than EMSGSIZE we will reallocate the structure to
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   255
 * 	handle the overflow
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   256
 */
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   257
typedef struct mc_error {
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   258
	int	destroy;	/* Flag to indicate destruction steps */
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   259
	int	type;		/* Type of error for decision making */
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   260
	int	size;		/* The size of the error message string */
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   261
	char 	msg[RESTARTER_ERRMSGSZ];
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   262
} mc_error_t;
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   263
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
int restarter_rm_libs_loadable(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
/* instance, restarter name, method name, command line, structure pointer */
9765
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   266
mc_error_t *restarter_get_method_context(uint_t, scf_instance_t *,
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
    scf_snapshot_t *, const char *, const char *, struct method_context **);
9765
2522fef20c5f 6215238 svc.startd could provide better log messages for faulty method_context contents
Sean Wilcox <Sean.Wilcox@Sun.COM>
parents: 9263
diff changeset
   268
void restarter_mc_error_destroy(mc_error_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
int restarter_set_method_context(struct method_context *, const char **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
void restarter_free_method_context(struct method_context *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
int restarter_is_null_method(const char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   274
int restarter_is_kill_method(const char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   275
int restarter_is_kill_proc_method(const char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   276
8823
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   277
/* Validate the inst fmri specified in  restarter_actions/auxiliary_fmri */
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   278
int restarter_inst_validate_ractions_aux_fmri(scf_instance_t *);
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   279
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   280
/* Delete instance's restarter_actions/auxiliary_fmri property */
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   281
int restarter_inst_reset_ractions_aux_fmri(scf_instance_t *);
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   282
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   283
/* Get boolean value from instance's restarter_actions/auxiliary_tty */
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   284
int restarter_inst_ractions_from_tty(scf_instance_t *);
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   285
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   286
/* Delete instance's restarter/auxiliary_fmri property */
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   287
int restarter_inst_reset_aux_fmri(scf_instance_t *);
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   288
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   289
/*
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   290
 * Set instance's restarter/auxiliary_fmri, value come from
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   291
 * restarter_actions/auxliary_fmri
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   292
 */
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   293
int restarter_inst_set_aux_fmri(scf_instance_t *);
000507e9108d 6761070 PSARC 2008/580 Solaris host-based firewall
Truong Nguyen <Truong.Q.Nguyen@Sun.COM>
parents: 6045
diff changeset
   294
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
#endif	/* _LIBRESTART_H */