URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 67498
[ Назад ]

Исходное сообщение
"Подключение к удаленному COM порту"

Отправлено exp131 , 11-Июл-06 16:39 
Добрый день!

Имеется следующая ситуация: нужно заставить работать два Winмодема под FreeBSD, дравйверов естественно нет и врядли когда-нибудь появятся. Поэтому реализовано следющим образом в сети есть сервер (FreeBSD 5.4) и комп с WinXP. К виновому компу подключены эти модемы, все установлено нормально - модемы работают. Там же установлен IPCOMServer перенаправляющий потоки с COM портов модемов на TCP порты и обратно.

Из под FreeBSD через telnet соединяемся с этими портами, и отправляем команды - все проходит нормально, модемы на команды отвечают.

Задача в следующем: нужно из под FreeBSD связать telnet сессию с виртуальным устройством, чтобы можно было работать с модемами через это устройство.


Содержание

Сообщения в этом обсуждении
"Подключение к удаленному COM порту"
Отправлено Z0termaNN , 11-Июл-06 18:48 
>Добрый день!
>
>Имеется следующая ситуация: нужно заставить работать два Winмодема под FreeBSD, дравйверов естественно
>нет и врядли когда-нибудь появятся. Поэтому реализовано следющим образом в сети
>есть сервер (FreeBSD 5.4) и комп с WinXP. К виновому компу
>подключены эти модемы, все установлено нормально - модемы работают. Там же
>установлен IPCOMServer перенаправляющий потоки с COM портов модемов на TCP порты
>и обратно.
>
>Из под FreeBSD через telnet соединяемся с этими портами, и отправляем команды
>- все проходит нормально, модемы на команды отвечают.
>
>Задача в следующем: нужно из под FreeBSD связать telnet сессию с виртуальным
>устройством, чтобы можно было работать с модемами через это устройство.


пишешь небольщой userspace daemon, который
1. создает pty
2. соединяется с tcp портом yf windows

из fbsd обращаешься к pty


"Подключение к удаленному COM порту"
Отправлено exp131 , 12-Июл-06 16:41 
>>Добрый день!
>>
>>Имеется следующая ситуация: нужно заставить работать два Winмодема под FreeBSD, дравйверов естественно
>>нет и врядли когда-нибудь появятся. Поэтому реализовано следющим образом в сети
>>есть сервер (FreeBSD 5.4) и комп с WinXP. К виновому компу
>>подключены эти модемы, все установлено нормально - модемы работают. Там же
>>установлен IPCOMServer перенаправляющий потоки с COM портов модемов на TCP порты
>>и обратно.
>>
>>Из под FreeBSD через telnet соединяемся с этими портами, и отправляем команды
>>- все проходит нормально, модемы на команды отвечают.
>>
>>Задача в следующем: нужно из под FreeBSD связать telnet сессию с виртуальным
>>устройством, чтобы можно было работать с модемами через это устройство.
>
>
>пишешь небольщой userspace daemon, который
>1. создает pty
>2. соединяется с tcp портом yf windows
>
>из fbsd обращаешься к pty
Спасибо, сам пришел к аналогичному выводу.
Подскажите где копать документацию, как это написать.
Особенно интересует:
создание pty (чтение и запись)


"Подключение к удаленному COM порту"
Отправлено Z0termaNN , 24-Июл-06 10:17 
>>>Добрый день!
>>>
>>>Имеется следующая ситуация: нужно заставить работать два Winмодема под FreeBSD, дравйверов естественно
>>>нет и врядли когда-нибудь появятся. Поэтому реализовано следющим образом в сети
>>>есть сервер (FreeBSD 5.4) и комп с WinXP. К виновому компу
>>>подключены эти модемы, все установлено нормально - модемы работают. Там же
>>>установлен IPCOMServer перенаправляющий потоки с COM портов модемов на TCP порты
>>>и обратно.
>>>
>>>Из под FreeBSD через telnet соединяемся с этими портами, и отправляем команды
>>>- все проходит нормально, модемы на команды отвечают.
>>>
>>>Задача в следующем: нужно из под FreeBSD связать telnet сессию с виртуальным
>>>устройством, чтобы можно было работать с модемами через это устройство.
>>
>>
>>пишешь небольщой userspace daemon, который
>>1. создает pty
>>2. соединяется с tcp портом yf windows
>>
>>из fbsd обращаешься к pty
>Спасибо, сам пришел к аналогичному выводу.
>Подскажите где копать документацию, как это написать.
>Особенно интересует:
>создание pty (чтение и запись)

вот тебе кусок кода, где 2 пути создания pty

#if defined(I_WILL_USE_XOPEN_PTMX)

    auto char *sl;

    if ( ( fd=open("/dev/ptmx",O_RDWR) ) < 0 )
    {
        warn("open(/dev/ptmx) failed: %s near %s:%d",strerror(errno),__FILE__,__LINE__);
        return -1;
    }
    if ( (sl=ptsname(fd)) == NULL )
    {
        warn("ptsname failed: %s near %s:%d",strerror(errno),__FILE__,__LINE__);
        return -1;
    }
    strncpy(slave,sl,PATH_MAX-1);
    if ( grantpt(fd) < 0 )
    {
        warn("grantpt failed: %s near %s:%d",strerror(errno),__FILE__,__LINE__);
        return -1;
    }
    if ( unlockpt(fd) < 0 )
    {
        warn("unlockpt failed: %s near %s:%d",strerror(errno),__FILE__,__LINE__);
        return -1;
    }

    return fd;
#else

    /* use bsd style pty
       /dev/pty[p-z][0-9a-f] - master devices
       /dev/tty[p-z][0-9a-f] - slave  devices
    */

#define PTY01  "0123456789abcdef"
#define PTY10   "pqrs"
    char *p01,*p10;
    char dev[] = "/dev/ptyXX";
    for ( p10=PTY10; *p10 != '\0'; p10++ )
    {
        dev[8] = *p10;
        for ( p01=PTY01; *p01 != '\0'; p01++ )
        {
            dev[9] = *p01;
            if ( (fd=open(dev,O_RDWR) ) >= 0 )
            {
                snprintf(slave,PATH_MAX-1,"/dev/tty%c%c",*p10,*p01);
                return fd;
            }
        }
    }
    warn("Ran out of pty.");
    return -1;
#undef PTY01
#undef PTY10
#endif /* SYSV || __USE_XOPEN */