1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 #ifndef _LX_THUNK_SERVER_H
28 #define _LX_THUNK_SERVER_H
29
30 #pragma ident "%Z%%M% %I% %E% SMI"
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 #include <netdb.h>
37 #include <procfs.h>
38
39 /*
40 * Binary that should be exec'd to start up the thunking server
41 */
42 #define LXT_SERVER_BINARY "/native/usr/lib/brand/lx/lx_thunk"
43
44 /*
45 * When the thunking server is started it will need to communicate
46 * to the client via two fifos. These fifos will be passed to the
47 * thunking server via the following file descriptors:
48 */
49 #define LXT_SERVER_FIFO_RD_FD 3
50 #define LXT_SERVER_FIFO_WR_FD 4
51
52 /*
53 * Operations supported by the thunking server
54 */
55 #define LXT_SERVER_OP_MIN 0
56 #define LXT_SERVER_OP_PING 0
57 #define LXT_SERVER_OP_NAME2HOST 1
58 #define LXT_SERVER_OP_ADDR2HOST 2
59 #define LXT_SERVER_OP_NAME2SERV 3
60 #define LXT_SERVER_OP_PORT2SERV 4
61 #define LXT_SERVER_OP_OPENLOG 5
62 #define LXT_SERVER_OP_SYSLOG 6
63 #define LXT_SERVER_OP_CLOSELOG 7
64 #define LXT_SERVER_OP_MAX 8
65
66 /*
67 * Macros used to translate pointer into offsets for when they are
68 * being transmitted between the client and server processes.
69 *
70 * NOTE: We're going to add 1 to every offset value. The reason
71 * for this is that some of the pointers we're converting to offsets are
72 * stored in NULL terminated arrays, and if one of the members of
73 * one of these arrays happened to be at the beginning of the storage
74 * buffer it would have an offset of 0 and when the client tries to
75 * translate the offsets back into pointers it wouldn't be able
76 * to differentiate between the 0 offset from the end of the array.
77 */
78 #define LXT_PTR_TO_OFFSET(ptr, base) \
79 ((void *)((uintptr_t)(ptr) - (uintptr_t)(base) + 1))
80 #define LXT_OFFSET_TO_PTR(offset, base) \
81 ((void *)((uintptr_t)(offset) + (uintptr_t)(base) - 1))
82
83 /*
84 * Structures passed to the thunking server via door calls
85 */
86 typedef struct lxt_server_arg {
87 int lxt_sa_op;
88 int lxt_sa_success;
89 int lxt_sa_errno;
90 char lxt_sa_data[1];
91 } lxt_server_arg_t;
92
93 typedef struct lxt_gethost_arg {
94 struct hostent lxt_gh_result;
95
96 int lxt_gh_h_errno;
97
98 int lxt_gh_type;
99 int lxt_gh_token_len;
100 int lxt_gh_buf_len;
101
102 int lxt_gh_storage_len;
103 char lxt_gh_storage[1];
104 } lxt_gethost_arg_t;
105
106 typedef struct lxt_getserv_arg {
107 struct servent lxt_gs_result;
108
109 int lxt_gs_token_len;
110 int lxt_gs_buf_len;
111 char lxt_gs_proto[5];
112
113 int lxt_gs_storage_len;
114 char lxt_gs_storage[1];
115 } lxt_getserv_arg_t;
116
117 typedef struct lxt_openlog_arg {
118 int lxt_ol_logopt;
119 int lxt_ol_facility;
120 char lxt_ol_ident[128];
121 } lxt_openlog_arg_t;
122
123 typedef struct lxt_syslog_arg {
124 int lxt_sl_priority;
125 pid_t lxt_sl_pid;
126 char lxt_sl_progname[PRFNSZ];
127 char lxt_sl_message[1024];
128 } lxt_syslog_arg_t;
129
130
131 /*
132 * Functions called by the brand library to manage startup of the
133 * thunk server process.
134 */
135 void lxt_server_init(int, char *[]);
136 int lxt_server_pid(int *pid);
137 void lxt_server_exec_check(void);
138
139 #ifdef __cplusplus
140 }
141 #endif
142
143 #endif /* _LX_THUNK_SERVER_H */