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