Ключевые слова:tty, socket, freebsd, netgraph, (найти похожие документы)
From: Eugene Mychlo <http://forum.bestcom.ru/index.php?showuser=8>
Newsgroups: http://forum.bestcom.ru
Date: Mon, 29 Jan 2006 18:21:07 +0000 (UTC)
Subject: [FreeBSD] Использование netgraph для трансляции tty в socket
Оригинал: http://forum.bestcom.ru/index.php?showtopic=36
Схема простая:
Есть 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
Итоговый скрипт будет выглядеть следующим образом:
#!/bin/sh
kldload netgraph
kldload ng_tty
kldload ng_ksocket
/path-to-addtty/addtty &
ngctl mkpeer tty1: ksocket hook inet/dgram/udp
ngctl msg tty1:hook bind inet/10.0.0.1:2004
ngctl msg tty1:hook connect inet/10.19.1.1:2004
Коллектор этих данных должен представлять dgram/udp-сокет из которого
в цикле считываются блоки удобного размера.