Передача данных с COM-порта по ip

Декабрь 15th, 2008 | Tags: ,

Схема простая:
ng_tty-ng_ksocket
Есть ng_tty и ng_socket. У них есть крюки hook и inet/dgram/udp. Соединяем их и радуемся жизни.

В реальности все немного сложнее.
Вначале нужно сделать соответствующее устройство /dev/cuad0 дисциплиной Netgraph ( NETGRAPHDISC ).
К сожалению, из шела этого сделать нельзя.
Для этого придется написать маленькую программку на C.

#include <stdio.h>
#include <fcntl.h>
#include <sys/select.h>
#include <sys/ioctl.h>

int main() {
  int fd;
  int ldisc = NETGRAPHDISC;

  if ((fd = open("/dev/cuad0", O_RDWR)) == -1) {
     perror("open");
     exit(0);
  }

  if ((ioctl(fd, TIOCSETD, &ldisc)) == -1) {
     perror("ioctl");
     exit(0);
  }

  // ждем до бесконечности
  select(0,NULL,NULL,NULL,NULL);

  close(fd);
  exit(0);
}

Компилируем. Запускаем. Получаем новый узел tty1

# kldload ng_tty
# 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-сокет из которого в цикле считываются блоки удобного размера.

No comments yet.
You must be logged in to post a comment.
TOP