Subject: ptyfs fully working now...
To: None <tech-kern@netbsd.org>
From: Christos Zoulas <christos@zoulas.com>
List: tech-kern
Date: 11/08/2004 15:04:52
Hello,
This is work in progress for a ptyfs implementation. To use it, untar the
tar file apply the patch, build a new kernel and reboot. You can build and
modload the ptyfs lkm, and then mkdir /dev/pts, mount_ptyfs ptyfs /dev/pts.
Why I did this:
1. I wanted to get rid of all the tty and pty files in /dev
2. It is needed for compat_linux (new matlab)
3. I wanted to learn more about filesystems
Everything seems to work now, and I am planning to commit this shortly.
Please let me know if you have any problems with this.
The package is on ftp.netbsd.org:~ftp/pub/NetBSD/misc/christos/ptyfs
Implementation notes:
1. I split the code in tty_pty.c into:
tty_pty.c -- basic pty code.
tty_ptm.c -- /dev/ptm /dev/ptmx
tty_bsdpty.c -- /dev/ptyXX /dev/ttyXX pty allocation code for ptmx
sys/pty.h -- variables shared between ptyfs and the rest.
2. There are two functions that describe the interface for ptm to create
ptys (in sys/pty.h). A makename function and an allocvp function. Both
the bsdpty and the ptyfs implementation use them. Once you mount the
ptyfs filesystem, it replaces the bsdpty implementation with the ptyfs
one, and once you unmount it, it puts back the original.
3. I wanted the old bsd ptys to co-exist with /dev/pts. For that when ptyfs
starts up, it will copy the permissions from /dev/ptyXX and /dev/ttyXX
for its nodes.
4. I did not like the way ttyname() worked with looking up the db file,
so I let the ioctl to find the pty name work on the slave too. Now
ttyname() will do the ioctl first to find the ttyname. If that fails,
then it will lookup in the db. This is a lot faster in the regular
case these days which is ptys. It is also silly to have entries for
all the ptys in /etc/ttys. You can now remove them, and the code
will take up the last + 1 slot for each pty (for either the old
or the new ptys).
5. Most 3rd party programs already DTRT with pty names that look like
/dev/pts/n, and they will just work. The order of entries in w(1)
looks mangled because pts/N sorts before ttyXX.
Utility programs such as w(1) print the pty short names as pN where
N is the minor number of the pty.
6. The ioctl to retrieve the pty name and file descriptor returned the
names of the master and slave parts and the fd's associated with them.
Under ptyfs, there is no filesystem node for the master portion, only
the slave one. I don't think that we should create one for the master
side. I populate the structure with /dev/null for now.
7. Kernels need COMPAT_BSDPTY to be able to allocated old style /dev/ttyXX
ptys using /dev/ptm. Regular pty allocation will work.
christos