Date: 17 Feb 2001 17:49:10 +0100 From: Cyrille Lefevre <clefevre@poboxes.com> To: "Steve O'Hara-Smith" <steveo@eircom.net> Cc: Robert bobb Crosbie <bobb+freebsd-stable@redbrick.dcu.ie>, freebsd-stable@FreeBSD.ORG Subject: Re: More than 256 pty's Message-ID: <66i9w8zd.fsf@gits.dyndns.org> In-Reply-To: "Steve O'Hara-Smith"'s message of "Fri, 16 Feb 2001 20:27:37 %2B0100" References: <20010216172854.A67979@enigma.redbrick.dcu.ie> <20010216202737.1807da64.steveo@eircom.net>
next in thread | previous in thread | raw e-mail | index | archive | help
"Steve O'Hara-Smith" <steveo@eircom.net> writes: > On Fri, 16 Feb 2001 17:28:54 +0000 > Robert bobb Crosbie <bobb+freebsd-stable@redbrick.dcu.ie> wrote: > RC> <quote> > RC> You can have more than 256 ptys; the problem is what to name them. You > RC> can easily get 384 ptys by extending the current scheme slightly (using > RC> /dev/tty[tuTU]*; /dev/ttyv* is syscons so we hit our limit with this > RC> naming scheme). Edit /dev/MAKEDEV and /usr/src/lib/libutil/pty.c > RC> </quote> > > It looks to me like you also have to hack around in kern/tty_pty.c, > there are hard coded assumptions in there about 256 minor numbers being mapped. > Also comments about doing something about it, the mapping is defined in there. > Making it work above 256 doesn't look hard, agreeing on a naming convention > might be harder :) Index: etc/MAKEDEV =================================================================== RCS file: /home/ncvs/src/etc/MAKEDEV,v retrieving revision 1.243.2.20 diff -u -r1.243.2.20 MAKEDEV --- etc/MAKEDEV 2001/02/03 16:16:40 1.243.2.20 +++ etc/MAKEDEV 2001/02/17 16:45:35 @@ -701,23 +701,13 @@ done ;; pty*) - class=`expr $i : 'pty\(.*\)'` - case $class in - 0) offset=0 name=p;; - 1) offset=32 name=q;; - 2) offset=64 name=r;; - 3) offset=96 name=s;; -# Note that xterm (at least) only look at p-s. - 4) offset=128 name=P;; - 5) offset=160 name=Q;; - 6) offset=192 name=R;; - 7) offset=224 name=S;; - # This still leaves [tuTU]. - *) echo bad unit for pty in: $i;; - esac umask 0 + class=`expr $i : 'pty\(.*\)'` case $class in - 0|1|2|3|4|5|6|7) + [0-9]|1[0-9]|20) + name=$(echo pqrstuwxyzPQRSTUVWXYZ | + dd bs=1 skip=$class count=1 2>/dev/null) + offset=$(($class * 32)) i=0 while [ $i -lt 32 ]; do # This was an awk substr() before. @@ -728,6 +718,7 @@ i=$(($i + 1)) done ;; + *) echo bad unit for pty in: $i;; esac umask 77 ;; Index: lib/libutil/pty.c =================================================================== RCS file: /home/ncvs/src/lib/libutil/pty.c,v retrieving revision 1.10 diff -u -r1.10 pty.c --- lib/libutil/pty.c 1999/08/28 00:05:51 1.10 +++ lib/libutil/pty.c 2001/02/17 16:45:49 @@ -70,7 +70,7 @@ else ttygid = -1; - for (cp1 = "pqrsPQRS"; *cp1; cp1++) { + for (cp1 = "pqrstuwxyzPQRSTUVWXYZ"; *cp1; cp1++) { line[8] = *cp1; for (cp2 = "0123456789abcdefghijklmnopqrstuv"; *cp2; cp2++) { line[5] = 'p'; Index: share/man/man4/pty.4 =================================================================== RCS file: /home/ncvs/src/share/man/man4/pty.4,v retrieving revision 1.8.2.1 diff -u -r1.8.2.1 pty.4 --- share/man/man4/pty.4 2000/12/08 14:59:07 1.8.2.1 +++ share/man/man4/pty.4 2001/02/17 16:46:15 @@ -191,10 +191,10 @@ is required. .El .Sh FILES -.Bl -tag -width /dev/tty[p-sP-S][0-9a-v]x -compact -.It Pa /dev/pty[p-sP-S][0-9a-v] +.Bl -tag -width /dev/tty[p-uw-zP-Z][0-9a-v]x -compact +.It Pa /dev/pty[p-uw-zP-Z][0-9a-v] master pseudo terminals -.It Pa /dev/tty[p-sP-S][0-9a-v] +.It Pa /dev/tty[p-uw-zP-Z][0-9a-v] slave pseudo terminals .El .Sh DIAGNOSTICS Index: sys/kern/tty_pty.c =================================================================== RCS file: /home/ncvs/src/sys/kern/tty_pty.c,v retrieving revision 1.74 diff -u -r1.74 tty_pty.c --- sys/kern/tty_pty.c 2000/02/09 03:32:11 1.74 +++ sys/kern/tty_pty.c 2001/02/17 16:47:08 @@ -130,8 +130,8 @@ /* * This function creates and initializes a pts/ptc pair * - * pts == /dev/tty[pqrsPQRS][0123456789abcdefghijklmnopqrstuv] - * ptc == /dev/pty[pqrsPQRS][0123456789abcdefghijklmnopqrstuv] + * pts == /dev/tty[pqrstuwxyzPQRSTUVWXYZ][0123456789abcdefghijklmnopqrstuv] + * ptc == /dev/pty[pqrstuwxyzPQRSTUVWXYZ][0123456789abcdefghijklmnopqrstuv] * * XXX: define and add mapping of upper minor bits to allow more * than 256 ptys. @@ -141,7 +141,7 @@ int n; { dev_t devs, devc; - char *names = "pqrsPQRS"; + char *names = "pqrstuwxyzPQRSTUVWXYZ"; struct pt_ioctl *pt; /* For now we only map the lower 8 bits of the minor */ also, how about using an OID to dynamicaly configure available ptys ? something like kern.nptys=384 or more w/ a maximum of 704 ptys ((z-p)*2*32). Cyrille. -- home: mailto:clefevre@poboxes.com UNIX is user-friendly; it's just particular work: mailto:Cyrille.Lefevre@edf.fr about who it chooses to be friends with. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?66i9w8zd.fsf>