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