xref: /onnv-gate/usr/src/cmd/cmd-inet/usr.lib/dsvclockd/dsvclockd.h (revision 0:68f95e015346)
1*0Sstevel@tonic-gate /*
2*0Sstevel@tonic-gate  * CDDL HEADER START
3*0Sstevel@tonic-gate  *
4*0Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5*0Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
6*0Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
7*0Sstevel@tonic-gate  * with the License.
8*0Sstevel@tonic-gate  *
9*0Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*0Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
11*0Sstevel@tonic-gate  * See the License for the specific language governing permissions
12*0Sstevel@tonic-gate  * and limitations under the License.
13*0Sstevel@tonic-gate  *
14*0Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
15*0Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*0Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
17*0Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
18*0Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
19*0Sstevel@tonic-gate  *
20*0Sstevel@tonic-gate  * CDDL HEADER END
21*0Sstevel@tonic-gate  */
22*0Sstevel@tonic-gate /*
23*0Sstevel@tonic-gate  * Copyright (c) 2000 by Sun Microsystems, Inc.
24*0Sstevel@tonic-gate  * All rights reserved.
25*0Sstevel@tonic-gate  */
26*0Sstevel@tonic-gate 
27*0Sstevel@tonic-gate #ifndef	DSVCD_DSVCLOCKD_H
28*0Sstevel@tonic-gate #define	DSVCD_DSVCLOCKD_H
29*0Sstevel@tonic-gate 
30*0Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
31*0Sstevel@tonic-gate 
32*0Sstevel@tonic-gate #include <sys/param.h>
33*0Sstevel@tonic-gate #include <sys/types.h>
34*0Sstevel@tonic-gate 
35*0Sstevel@tonic-gate /*
36*0Sstevel@tonic-gate  * Data structures and constants that are shared between dsvclockd and
37*0Sstevel@tonic-gate  * libdhcpsvc.  This protocol is project-private and is thus subject to
38*0Sstevel@tonic-gate  * change at any time.
39*0Sstevel@tonic-gate  */
40*0Sstevel@tonic-gate 
41*0Sstevel@tonic-gate #ifdef	__cplusplus
42*0Sstevel@tonic-gate extern "C" {
43*0Sstevel@tonic-gate #endif
44*0Sstevel@tonic-gate 
45*0Sstevel@tonic-gate #define	DSVCD_DOOR_VERSION	1		/* current protocol version */
46*0Sstevel@tonic-gate #define	DSVCD_PATH		"/usr/lib/inet/dsvclockd"
47*0Sstevel@tonic-gate #define	DSVCD_DOOR_FMT		"/var/run/dsvclockd_%s_door"
48*0Sstevel@tonic-gate 
49*0Sstevel@tonic-gate typedef enum { DSVCD_LOCK, DSVCD_UNLOCK } dsvcd_reqtype_t;
50*0Sstevel@tonic-gate typedef enum { DSVCD_NOLOCK, DSVCD_RDLOCK, DSVCD_WRLOCK } dsvcd_locktype_t;
51*0Sstevel@tonic-gate 
52*0Sstevel@tonic-gate typedef struct {
53*0Sstevel@tonic-gate 	uint8_t			rq_version;	/* version of the API */
54*0Sstevel@tonic-gate 	dsvcd_reqtype_t		rq_reqtype;	/* request type */
55*0Sstevel@tonic-gate } dsvcd_request_t;
56*0Sstevel@tonic-gate 
57*0Sstevel@tonic-gate typedef struct {
58*0Sstevel@tonic-gate 	uint8_t			rp_version;	/* version of the API */
59*0Sstevel@tonic-gate 	int32_t			rp_retval;	/* DSVC_* return value */
60*0Sstevel@tonic-gate } dsvcd_reply_t;
61*0Sstevel@tonic-gate 
62*0Sstevel@tonic-gate typedef struct {
63*0Sstevel@tonic-gate 	dsvcd_request_t		lrq_request;	/* generic request header */
64*0Sstevel@tonic-gate 	dsvcd_locktype_t	lrq_locktype;	/* reader or writer */
65*0Sstevel@tonic-gate 	uint8_t			lrq_nonblock;	/* cannot block if true */
66*0Sstevel@tonic-gate 	uint8_t			lrq_crosshost;	/* do cross-host synch */
67*0Sstevel@tonic-gate 
68*0Sstevel@tonic-gate 	/*
69*0Sstevel@tonic-gate 	 * The caller filling in this request must provide their current
70*0Sstevel@tonic-gate 	 * container version and a name for their container which is
71*0Sstevel@tonic-gate 	 * per-datastore unique (but need not be unique across datastores
72*0Sstevel@tonic-gate 	 * or different versions of the same container.)
73*0Sstevel@tonic-gate 	 *
74*0Sstevel@tonic-gate 	 * The `lrq_loctoken' field must contain a token which "names" a
75*0Sstevel@tonic-gate 	 * given location where the container exists -- note that a given
76*0Sstevel@tonic-gate 	 * location must have exactly one name, though it's permissible for
77*0Sstevel@tonic-gate 	 * more than one location to have the same name (in this case,
78*0Sstevel@tonic-gate 	 * containers from these locations will be synchronized with one
79*0Sstevel@tonic-gate 	 * another, which will hamper performance).  Note that standard
80*0Sstevel@tonic-gate 	 * pathnames do not meet the first constraint (e.g., /var/dhcp and
81*0Sstevel@tonic-gate 	 * /var/../var/dhcp are two different names for the same location),
82*0Sstevel@tonic-gate 	 * but pathnames processed by realpath(3C) do.
83*0Sstevel@tonic-gate 	 *
84*0Sstevel@tonic-gate 	 * If the caller wants cross-host synchronization, then
85*0Sstevel@tonic-gate 	 * `lrq_crosshost' must be set and `lrq_loctoken' must be a
86*0Sstevel@tonic-gate 	 * realpath(3C)'d directory that all hosts can access.
87*0Sstevel@tonic-gate 	 */
88*0Sstevel@tonic-gate 	int			lrq_conver;
89*0Sstevel@tonic-gate 	char			lrq_conname[64];
90*0Sstevel@tonic-gate 	char			lrq_loctoken[MAXPATHLEN];
91*0Sstevel@tonic-gate } dsvcd_lock_request_t;
92*0Sstevel@tonic-gate 
93*0Sstevel@tonic-gate typedef struct {
94*0Sstevel@tonic-gate 	dsvcd_request_t		urq_request;	/* generic request header */
95*0Sstevel@tonic-gate } dsvcd_unlock_request_t;
96*0Sstevel@tonic-gate 
97*0Sstevel@tonic-gate #ifdef	__cplusplus
98*0Sstevel@tonic-gate }
99*0Sstevel@tonic-gate #endif
100*0Sstevel@tonic-gate 
101*0Sstevel@tonic-gate #endif	/* DSVCD_DSVCLOCKD_H */
102