Rework the sequence that ptys get allocated so that we don't end up with

gaps in the sequence of minor numbers as we allocate ptys. Having gaps
has 2 bad side effects:
	- ptm does not like it
	- we allocate a lot of storage that we'll never use in the pty array
	  (the current scheme allocated 62 ptys 0-15,256-301, so we needed
	   302 entries to get 64).
Now we allocate ptys in groups of 16 or 14 instead of 64, and we follow
the minor number order.
We default to 64 pty's by building pty0-3, which is all using the old
traditional pty names. Of course to do this, the shell code is a bit
convoluted.
This commit is contained in:
christos 2004-06-19 05:31:50 +00:00
parent 73b59a9484
commit d649be27ff
1 changed files with 39 additions and 20 deletions

View File

@ -1,5 +1,5 @@
#!/bin/sh -
# $NetBSD: MAKEDEV.tmpl,v 1.25 2004/06/08 19:03:14 christos Exp $
# $NetBSD: MAKEDEV.tmpl,v 1.26 2004/06/19 05:31:50 christos Exp $
#
# Copyright (c) 2003 The NetBSD Foundation, Inc.
# All rights reserved.
@ -165,7 +165,7 @@
#
# Pseudo terminals:
# ptm pty multiplexor device.
# pty* set of 62 master and slave pseudo terminals
# pty* set of 16 master and slave pseudo terminals
# opty first 16 ptys, to save inodes on install media
# ipty first 2 ptys, for install media use only
#
@ -420,7 +420,7 @@ case $i in
all)
makedev all_md
makedev std fd ptm pty0
makedev std fd ptm pty0 pty1 pty2 pty3
makedev ccd0 ccd1 ccd2 ccd3
makedev cgd0 cgd1 cgd2 cgd3
makedev fss0 fss1 fss2 fss3
@ -760,30 +760,49 @@ opty)
pty*)
class=${i#pty}
set -- p q r s t u v w x y z P Q R S T
if [ "$class" -ge $# ]; then
warn "$i: pty unit must be between 0 and 15"
d1="p q r s t u v w x y z P Q R S T"
if [ "$class" -ge 64 ]
then
warn "$i: pty unit must be between 0 and 63"
continue
elif [ "$class" -lt 16 ]
then
offset=0
mult=0
d2="0 1 2 3 4 5 6 7 8 9 a b c d e f"
else
class=$(($class - 16))
offset=256
mult=2
d2="g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z"
fi
shift $class
name=$1
if [ "$name" = v ]; then
start=$(($class * 16))
set -- $d2
nt=$#
s1=$(($start / $nt))
set -- $d1
shift $s1
t1=$1
if [ "$t1" = v ]; then
warn "$i: pty unit conflicts with console ttyv0 device"
continue
fi
jn=0
unit=$(($class * 16))
set -- - 0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
while
shift
j=$1
[ -n "$j" ]
s2=$(($start % $nt - $s1 * $mult))
set -- $d2
shift $s2
t2=$1
unit=$(($start + $offset - $s1 * $mult))
end=$(($unit + 16))
while [ "$unit" -lt "$end" ]
do
if [ $j = g ]; then
unit=$(($unit + $class * 30 + 256 - 16))
mkdev tty$t1$t2 c %pts_chr% $unit 666
mkdev pty$t1$t2 c %ptc_chr% $unit 666
shift
t2=$1
if [ -z "$t2" ]
then
break
fi
mkdev tty$name$j c %pts_chr% $unit 666
mkdev pty$name$j c %ptc_chr% $unit 666
unit=$(($unit + 1))
done
;;