diff options
author | hyc@symas.com <hyc@symas.com> | 2010-06-22 13:14:49 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-08-10 16:47:39 -0400 |
commit | 26df6d13406d1a53b0bda08bd712f1924affd7cd (patch) | |
tree | db17328acbd7cac9dc20bc854509527c1c89ca01 /arch/mips | |
parent | a3c8ed693da9782f924223f65da9261da796e49b (diff) |
tty: Add EXTPROC support for LINEMODE
This patch is against the 2.6.34 source.
Paraphrased from the 1989 BSD patch by David Borman @ cray.com:
These are the changes needed for the kernel to support
LINEMODE in the server.
There is a new bit in the termios local flag word, EXTPROC.
When this bit is set, several aspects of the terminal driver
are disabled. Input line editing, character echo, and mapping
of signals are all disabled. This allows the telnetd to turn
off these functions when in linemode, but still keep track of
what state the user wants the terminal to be in.
New ioctl:
TIOCSIG Generate a signal to processes in the
current process group of the pty.
There is a new mode for packet driver, the TIOCPKT_IOCTL bit.
When packet mode is turned on in the pty, and the EXTPROC bit
is set, then whenever the state of the pty is changed, the
next read on the master side of the pty will have the TIOCPKT_IOCTL
bit set. This allows the process on the server side of the pty
to know when the state of the terminal has changed; it can then
issue the appropriate ioctl to retrieve the new state.
Since the original BSD patches accompanied the source code for telnet
I've left that reference here, but obviously the feature is useful for
any remote terminal protocol, including ssh.
The corresponding feature has existed in the BSD tty driver since 1989.
For historical reference, a good copy of the relevant files can be found
here:
http://anonsvn.mit.edu/viewvc/krb5/trunk/src/appl/telnet/?pathrev=17741
Signed-off-by: Howard Chu <hyc@symas.com>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'arch/mips')
-rw-r--r-- | arch/mips/include/asm/ioctls.h | 3 | ||||
-rw-r--r-- | arch/mips/include/asm/termbits.h | 1 |
2 files changed, 3 insertions, 1 deletions
diff --git a/arch/mips/include/asm/ioctls.h b/arch/mips/include/asm/ioctls.h index 2fb9e1693bf7..d87cb0465693 100644 --- a/arch/mips/include/asm/ioctls.h +++ b/arch/mips/include/asm/ioctls.h | |||
@@ -41,7 +41,7 @@ | |||
41 | #define TIOCPKT_START 0x08 /* start output */ | 41 | #define TIOCPKT_START 0x08 /* start output */ |
42 | #define TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */ | 42 | #define TIOCPKT_NOSTOP 0x10 /* no more ^S, ^Q */ |
43 | #define TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */ | 43 | #define TIOCPKT_DOSTOP 0x20 /* now do ^S ^Q */ |
44 | /* #define TIOCPKT_IOCTL 0x40 state change of pty driver */ | 44 | #define TIOCPKT_IOCTL 0x40 /* state change of pty driver */ |
45 | #define TIOCSWINSZ _IOW('t', 103, struct winsize) /* set window size */ | 45 | #define TIOCSWINSZ _IOW('t', 103, struct winsize) /* set window size */ |
46 | #define TIOCGWINSZ _IOR('t', 104, struct winsize) /* get window size */ | 46 | #define TIOCGWINSZ _IOR('t', 104, struct winsize) /* get window size */ |
47 | #define TIOCNOTTY 0x5471 /* void tty association */ | 47 | #define TIOCNOTTY 0x5471 /* void tty association */ |
@@ -83,6 +83,7 @@ | |||
83 | #define TCSETSF2 _IOW('T', 0x2D, struct termios2) | 83 | #define TCSETSF2 _IOW('T', 0x2D, struct termios2) |
84 | #define TIOCGPTN _IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ | 84 | #define TIOCGPTN _IOR('T', 0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ |
85 | #define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ | 85 | #define TIOCSPTLCK _IOW('T', 0x31, int) /* Lock/unlock Pty */ |
86 | #define TIOCSIG _IOW('T', 0x36, int) /* Generate signal on Pty slave */ | ||
86 | 87 | ||
87 | /* I hope the range from 0x5480 on is free ... */ | 88 | /* I hope the range from 0x5480 on is free ... */ |
88 | #define TIOCSCTTY 0x5480 /* become controlling tty */ | 89 | #define TIOCSCTTY 0x5480 /* become controlling tty */ |
diff --git a/arch/mips/include/asm/termbits.h b/arch/mips/include/asm/termbits.h index c83c68444e86..76630b396fac 100644 --- a/arch/mips/include/asm/termbits.h +++ b/arch/mips/include/asm/termbits.h | |||
@@ -203,6 +203,7 @@ struct ktermios { | |||
203 | #define PENDIN 0040000 /* Retype pending input (state). */ | 203 | #define PENDIN 0040000 /* Retype pending input (state). */ |
204 | #define TOSTOP 0100000 /* Send SIGTTOU for background output. */ | 204 | #define TOSTOP 0100000 /* Send SIGTTOU for background output. */ |
205 | #define ITOSTOP TOSTOP | 205 | #define ITOSTOP TOSTOP |
206 | #define EXTPROC 0200000 /* External processing on pty */ | ||
206 | 207 | ||
207 | /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ | 208 | /* ioctl (fd, TIOCSERGETLSR, &result) where result may be as below */ |
208 | #define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ | 209 | #define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ |