Есть ng_tty и ng_socket. У них есть крюки hook и inet/dgram/udp.
Соединяем их и радуемся жизни.
В реальности все немного сложнее.
Вначале нужно сделать соответствующее устройство /dev/cuaa0
дисциплиной Netgraph ( NETGRAPHDISC ).
К сожалению, из шела этого сделать нельзя.
Для этого придется написать маленькую программку на C.
#include <stdio.h>
#include <fcntl.h>
#include <sys/ioctl.h>
int main() {
int fd;
int ldisc;
ldisc = NETGRAPHDISC;
if ((fd = open("/dev/cuaa0", O_RDWR)) == -1) {
perror("open");
exit(0);
}
if ((ioctl(fd, TIOCSETD, &ldisc)) == -1) {
perror("ioctl");
exit(0);
}
while (1) sleep(100);
close(fd);
exit(0);
}
Компилируем. Запускаем. Получаем новый узел tty1
# gcc addtty.c -o addtty
# ./addtty &
# ngctl list
There are 2 total nodes:
Name: ngctl34930 Type: socket ID: 00000074 Num hooks: 0
Name: tty1 Type: tty ID: 00000073 Num
hooks: 0
Итоговый скрипт будет выглядеть следующим образом: