Commit | Line | Data |
---|---|---|
557a5416 C |
1 | /* |
2 | * Sun RPC is a product of Sun Microsystems, Inc. and is provided for | |
3 | * unrestricted use provided that this legend is included on all tape | |
4 | * media and as a part of the software program in whole or part. Users | |
5 | * may copy or modify Sun RPC without charge, but are not authorized | |
6 | * to license or distribute it to anyone else except as part of a product or | |
7 | * program developed by the user. | |
8 | * | |
9 | * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE | |
10 | * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR | |
11 | * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. | |
12 | * | |
13 | * Sun RPC is provided with no support and without any obligation on the | |
14 | * part of Sun Microsystems, Inc. to assist in its use, correction, | |
15 | * modification or enhancement. | |
16 | * | |
17 | * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE | |
18 | * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC | |
19 | * OR ANY PART THEREOF. | |
20 | * | |
21 | * In no event will Sun Microsystems, Inc. be liable for any lost revenue | |
22 | * or profits or other special, indirect and consequential damages, even if | |
23 | * Sun has been advised of the possibility of such damages. | |
24 | * | |
25 | * Sun Microsystems, Inc. | |
26 | * 2550 Garcia Avenue | |
27 | * Mountain View, California 94043 | |
28 | */ | |
29 | ||
30 | /* | |
31 | * Remote execution (rex) protocol specification | |
32 | */ | |
33 | ||
34 | #ifndef RPC_HDR | |
35 | %#ifndef lint | |
36 | %/*static char sccsid[] = "from: @(#)rex.x 1.3 87/09/18 Copyr 1987 Sun Micro";*/ | |
37 | %/*static char sccsid[] = "from: @(#)rex.x 2.1 88/08/01 4.0 RPCSRC";*/ | |
38 | %static char rcsid[] = "$Id: rex.x,v 1.4 1993/08/03 21:53:23 mycroft Exp $"; | |
39 | %#endif /* not lint */ | |
40 | #endif | |
41 | ||
42 | const STRINGSIZE = 1024; | |
43 | typedef string rexstring<1024>; | |
44 | ||
45 | /* | |
46 | * values to pass to REXPROC_SIGNAL | |
47 | */ | |
48 | const SIGINT = 2; /* interrupt */ | |
49 | ||
50 | /* | |
51 | * Values for rst_flags, below | |
52 | */ | |
53 | const REX_INTERACTIVE = 1; /* interactive mode */ | |
54 | ||
55 | struct rex_start { | |
56 | rexstring rst_cmd<>; /* list of command and args */ | |
57 | rexstring rst_host; /* working directory host name */ | |
58 | rexstring rst_fsname; /* working directory file system name */ | |
59 | rexstring rst_dirwithin;/* working directory within file system */ | |
60 | rexstring rst_env<>; /* list of environment */ | |
61 | unsigned int rst_port0; /* port for stdin */ | |
62 | unsigned int rst_port1; /* port for stdout */ | |
63 | unsigned int rst_port2; /* port for stderr */ | |
64 | unsigned int rst_flags; /* options - see const above */ | |
65 | }; | |
66 | ||
67 | struct rex_result { | |
68 | int rlt_stat; /* integer status code */ | |
69 | rexstring rlt_message; /* string message for human consumption */ | |
70 | }; | |
71 | ||
72 | ||
73 | struct sgttyb { | |
74 | unsigned four; /* always equals 4 */ | |
75 | opaque chars[4]; | |
76 | /* chars[0] == input speed */ | |
77 | /* chars[1] == output speed */ | |
78 | /* chars[2] == kill character */ | |
79 | /* chars[3] == erase character */ | |
80 | unsigned flags; | |
81 | }; | |
82 | /* values for speeds above (baud rates) */ | |
83 | const B0 = 0; | |
84 | const B50 = 1; | |
85 | const B75 = 2; | |
86 | const B110 = 3; | |
87 | const B134 = 4; | |
88 | const B150 = 5; | |
89 | const B200 = 6; | |
90 | const B300 = 7; | |
91 | const B600 = 8; | |
92 | const B1200 = 9; | |
93 | const B1800 = 10; | |
94 | const B2400 = 11; | |
95 | const B4800 = 12; | |
96 | const B9600 = 13; | |
97 | const B19200 = 14; | |
98 | const B38400 = 15; | |
99 | ||
100 | /* values for flags above */ | |
101 | const TANDEM = 0x00000001; /* send stopc on out q full */ | |
102 | const CBREAK = 0x00000002; /* half-cooked mode */ | |
103 | const LCASE = 0x00000004; /* simulate lower case */ | |
104 | const ECHO = 0x00000008; /* echo input */ | |
105 | const CRMOD = 0x00000010; /* map \r to \r\n on output */ | |
106 | const RAW = 0x00000020; /* no i/o processing */ | |
107 | const ODDP = 0x00000040; /* get/send odd parity */ | |
108 | const EVENP = 0x00000080; /* get/send even parity */ | |
109 | const ANYP = 0x000000c0; /* get any parity/send none */ | |
110 | const NLDELAY = 0x00000300; /* \n delay */ | |
111 | const NL0 = 0x00000000; | |
112 | const NL1 = 0x00000100; /* tty 37 */ | |
113 | const NL2 = 0x00000200; /* vt05 */ | |
114 | const NL3 = 0x00000300; | |
115 | const TBDELAY = 0x00000c00; /* horizontal tab delay */ | |
116 | const TAB0 = 0x00000000; | |
117 | const TAB1 = 0x00000400; /* tty 37 */ | |
118 | const TAB2 = 0x00000800; | |
119 | const XTABS = 0x00000c00; /* expand tabs on output */ | |
120 | const CRDELAY = 0x00003000; /* \r delay */ | |
121 | const CR0 = 0x00000000; | |
122 | const CR1 = 0x00001000; /* tn 300 */ | |
123 | const CR2 = 0x00002000; /* tty 37 */ | |
124 | const CR3 = 0x00003000; /* concept 100 */ | |
125 | const VTDELAY = 0x00004000; /* vertical tab delay */ | |
126 | const FF0 = 0x00000000; | |
127 | const FF1 = 0x00004000; /* tty 37 */ | |
128 | const BSDELAY = 0x00008000; /* \b delay */ | |
129 | const BS0 = 0x00000000; | |
130 | const BS1 = 0x00008000; | |
131 | const CRTBS = 0x00010000; /* do backspacing for crt */ | |
132 | const PRTERA = 0x00020000; /* \ ... / erase */ | |
133 | const CRTERA = 0x00040000; /* " \b " to wipe out char */ | |
134 | const TILDE = 0x00080000; /* hazeltine tilde kludge */ | |
135 | const MDMBUF = 0x00100000; /* start/stop output on carrier intr */ | |
136 | const LITOUT = 0x00200000; /* literal output */ | |
137 | const TOSTOP = 0x00400000; /* SIGTTOU on background output */ | |
138 | const FLUSHO = 0x00800000; /* flush output to terminal */ | |
139 | const NOHANG = 0x01000000; /* no SIGHUP on carrier drop */ | |
140 | const L001000 = 0x02000000; | |
141 | const CRTKIL = 0x04000000; /* kill line with " \b " */ | |
142 | const PASS8 = 0x08000000; | |
143 | const CTLECH = 0x10000000; /* echo control chars as ^X */ | |
144 | const PENDIN = 0x20000000; /* tp->t_rawq needs reread */ | |
145 | const DECCTQ = 0x40000000; /* only ^Q starts after ^S */ | |
146 | const NOFLSH = 0x80000000; /* no output flush on signal */ | |
147 | ||
148 | struct tchars { | |
149 | unsigned six; /* always equals 6 */ | |
150 | opaque chars[6]; | |
151 | /* chars[0] == interrupt char */ | |
152 | /* chars[1] == quit char */ | |
153 | /* chars[2] == start output char */ | |
154 | /* chars[3] == stop output char */ | |
155 | /* chars[4] == end-of-file char */ | |
156 | /* chars[5] == input delimeter (like nl) */ | |
157 | }; | |
158 | ||
159 | struct ltchars { | |
160 | unsigned six; /* always equals 6 */ | |
161 | opaque chars[6]; | |
162 | /* chars[0] == stop process signal */ | |
163 | /* chars[1] == delayed stop process signal */ | |
164 | /* chars[2] == reprint line */ | |
165 | /* chars[3] == flush output */ | |
166 | /* chars[4] == word erase */ | |
167 | /* chars[5] == literal next character */ | |
168 | unsigned mode; | |
169 | }; | |
170 | ||
171 | struct rex_ttysize { | |
172 | int ts_lines; | |
173 | int ts_cols; | |
174 | }; | |
175 | ||
176 | struct rex_ttymode { | |
177 | sgttyb basic; /* standard unix tty flags */ | |
178 | tchars more; /* interrupt, kill characters, etc. */ | |
179 | ltchars yetmore; /* special Berkeley characters */ | |
180 | unsigned andmore; /* and Berkeley modes */ | |
181 | }; | |
182 | ||
183 | /* values for andmore above */ | |
184 | const LCRTBS = 0x0001; /* do backspacing for crt */ | |
185 | const LPRTERA = 0x0002; /* \ ... / erase */ | |
186 | const LCRTERA = 0x0004; /* " \b " to wipe out char */ | |
187 | const LTILDE = 0x0008; /* hazeltine tilde kludge */ | |
188 | const LMDMBUF = 0x0010; /* start/stop output on carrier intr */ | |
189 | const LLITOUT = 0x0020; /* literal output */ | |
190 | const LTOSTOP = 0x0040; /* SIGTTOU on background output */ | |
191 | const LFLUSHO = 0x0080; /* flush output to terminal */ | |
192 | const LNOHANG = 0x0100; /* no SIGHUP on carrier drop */ | |
193 | const LL001000 = 0x0200; | |
194 | const LCRTKIL = 0x0400; /* kill line with " \b " */ | |
195 | const LPASS8 = 0x0800; | |
196 | const LCTLECH = 0x1000; /* echo control chars as ^X */ | |
197 | const LPENDIN = 0x2000; /* needs reread */ | |
198 | const LDECCTQ = 0x4000; /* only ^Q starts after ^S */ | |
199 | const LNOFLSH = 0x8000; /* no output flush on signal */ | |
200 | ||
201 | program REXPROG { | |
202 | version REXVERS { | |
203 | ||
204 | /* | |
205 | * Start remote execution | |
206 | */ | |
207 | rex_result | |
208 | REXPROC_START(rex_start) = 1; | |
209 | ||
210 | /* | |
211 | * Wait for remote execution to terminate | |
212 | */ | |
213 | rex_result | |
214 | REXPROC_WAIT(void) = 2; | |
215 | ||
216 | /* | |
217 | * Send tty modes | |
218 | */ | |
219 | void | |
220 | REXPROC_MODES(rex_ttymode) = 3; | |
221 | ||
222 | /* | |
223 | * Send window size change | |
224 | */ | |
225 | void | |
226 | REXPROC_WINCH(rex_ttysize) = 4; | |
227 | ||
228 | /* | |
229 | * Send other signal | |
230 | */ | |
231 | void | |
232 | REXPROC_SIGNAL(int) = 5; | |
233 | } = 1; | |
234 | } = 100017; |