Страниц: [1]
  Печать  
Автор Тема: 2 pppd и 2 gprs-модема  (Прочитано 4888 раз)
FiliNN
Участник
*
Offline Offline

Сообщений: 25


Просмотр профиля
« : Августа 19, 2010, 10:57:16 am »

Имеется компьютер с QNX 6.3.0 к нему через COM-порт прицеплен gprs-модем.  При запуске компьютера запускается pppd и происходит дозвон модема. Остальная сеть убивается. Далее по получившемуся соединеию работает программа-сервер, принимающая запросы от клиентов. Клиент - контроллер с QNX 6.3.0 и таким же модемом. Так как клиентов много возникло подозрение что скорости 115200 (скорость работы модема через COM-порт)  не хватит. Что бы избежать этого, предложили запустить одновременно 2 сервера с разными портами. Для этого надо подключить ещё один модем, поднять через него pppd и, самое главное, каким-то образом заставить работать один сервер через один ppp-демон, а другой через другой.
Если поднять второй pppd не проблема, то как заставить работать сервер через другой канал - ума не приложу. Подскажите, где и как это можно сделать или в каком направлении копать. Заранее всем спасибо!

P.S. Сервер написан мной, клиент написан коллегой. Сервер использует пул потоков. Сначала инициализируется сокет, а потом через него в потоках идёт параллельная обработка запросов от клиентов. При подключении ещё одного ppp-демона необходимо будет ли изменять код сервера? Если да, то как программно указать через какой канал работать.
« Последнее редактирование: Августа 19, 2010, 11:08:50 am от FiliNN » Записан
FiliNN
Участник
*
Offline Offline

Сообщений: 25


Просмотр профиля
« Ответ #1 : Августа 20, 2010, 09:44:35 am »

Запусить 2 pppd-демона получилось, правда с некоторыми танцами с бубном. В документации написано что для pppd конфигурационные файлы могут быть 3-х видов. Меня интересуют 2: /etc/ppp/options и /etc/ppp/options.device, где device - имя порта, через который работает pppd. Почитав доки и обмозговав понял, что если сделать файл /etc/ppp/options.ser2 и запустить демона так: pppd /dev/ser2, то вроде как pppd должен считать настройки именно из этого конфигурационного файла. Если при этом не удалять /etc/ppp/options, то pppd  упорно ломится к нему. Если же удалить его, то pppd просто запустится и всё, и никакие сценарии описанные в options.ser2 выполняться не будут. До chat даже не доходит. Люди добрые, оно так и должно? Или я просто что-то не так делаю?

Обошёл это следующим способом: взял opions и все параметры запуска записал в одну строку, впереди добавил pppd, а строкой выше #!/bin/ksh. После чего переименовал в gprs_ser1 и и задал атрибуты на исполнение. Аналогично для второго модема. Ну и запустил из командной строки. Правда перед этим сделал
slay -Qf io-net
io-net -ptcpip -ppppmgr
Было видно как оба модема вышли на связь и получили ip-адреса. Сделал netstat -i  и увидел ppp0 и ppp1. НО в /dev/io-net ip-ppp только один!!! И вся работа в системе ведётся только через ppp0. Запустили два сервера с разными портами. Двум клиентам прописали разные адреса серверов. Один должен был приконектится на один модем, второй на другой! По ppp0 клиент  успешно приконектился, а по ppp1 ничего подобного, хотя клиент пинговался. Как заставить работать и второй ppp??? Подскажите в какую сторону хоть копать!!!
« Последнее редактирование: Августа 20, 2010, 10:44:58 am от FiliNN » Записан
dip
Участник
*
Offline Offline

Сообщений: 49


eh?


Просмотр профиля
« Ответ #2 : Августа 20, 2010, 08:54:15 pm »

Esli mne pamyat' ne izmenyaet s dvumya interfeisami rabotat' ne mozhet -- tak kod napisan.  No mozhno (i nuzhno) poprobyvat' dva steka to est' dva io-net i kazhdyi server rabotaet cherez svoi io-net and ppp sootvetsvenno.

1) pervyi io-net zapuskaete kak obychno
2) vtoroi dobaviv -i and prefix: io-net -i1 -tcpip XXX, prefix=/alt XXX
Posle etogo dolzhno byt' dva io-net v /dev. V /alt/ budet ./dev/socket i ./dev/pppmgr (pishu po pamyati i mogu oshibat'sya)
3) pppd i server dlya pervogo steka zapuskaete kak obychno
4) dlya vtorogo pppd i servera delayete snachala "#export SOCK=/alt" i zapuskaete. Oba poidut ko vtoromu steku. Dolzhny.

Po povodu opcii: pppd imeet mnogo nedokumentorovannyh QNX-om opcii. Ne sekret chto vse utility portirovany iz NetBSD tak chto cmotrite http://miroirs.cesars.org/man/pages/NetBSD-1.6/man8/pppd.8.txt Naprimer opcii 'call' i 'file'

Udachi (i derzhite forum v kurse dela -- mozhet komu polezny budut vashi nahodki).  

 
« Последнее редактирование: Августа 20, 2010, 08:58:26 pm от dip » Записан
FiliNN
Участник
*
Offline Offline

Сообщений: 25


Просмотр профиля
« Ответ #3 : Августа 23, 2010, 04:57:37 pm »

Огромное СПАСИБО! Благодаря этим сведениям удалось продвинуться довольно далеко.

Во-первых, действительно у pppd есть недокументированная опция file. Я создал в /etc/ppp два файла различающиеся только именем устройства. Что бы запустить ppp-демон с нужным файлом необходимо выполнить:
      pppd file /etc/ppp/options.ser1
После чего ppp-демон благополучно запускается, инициализируется модем и появляется выход в Интернет.

Во-вторых, два io-net и два pppd удалось запустить, но при этом часть сетевых утилит и функций qnx взвисла. Sad Но обо всём по порядку.
Если сделать как предложено:
- запустить штатно первый io-net
      slay -Qf io-net
      io-net -ptcpip -ppppmgr

- запустить дополнительный io-net. Я запускал так:
      io-net -i1 -ptcpip prefix=/altsock -ppppmgr
-запустить первый pppd:
      pppd file /etc/ppp/options.ser1,
то pppd запуститься с ошибками, модем не получит выход  в инет. В принципе, до определённого момента инициализация идёт так же как и при обычном запуске, различия вот в чём:
Цитировать
ifconfig(ppp0, 94.240.112.209, SIOCSIFADDR): No such device or address
ifconfig(ppp0, 255.0.0.0, SIOCSIFNETMASK): No such device or address
ifconfig(SIOCSIFDSTADDR): No such device or address
ioctl (SIOCGIFFLAGS): No such device or address
Interface failed to come up
ioctl (SIOCGIFFLAGS): No such device or address
Couldn't delete interface address: No such device or address
Clean CS_RESOLVE confstr.
New _CS_RESOLVE confstr:
sent [IPCP TermReq id=0x3 "Interface configuration failed"]
rcvd [IPCP TermAck id=0x3]
sent [LCP TermReq id=0x2 "No network protocols running"]
rcvd [LCP TermAck id=0x2]
Connection terminated.

На этом месте при удачном запуске демона и инциализаци модема стоит вот что:
Цитировать
local  IP address 94.240.112.209
remote IP address 10.0.0.1
primary   DNS address 10.0.3.2
secondary DNS address 10.0.3.5
sent [LCP EchoReq id=0x1 magic=0x1abbde09]
rcvd [LCP EchoRep id=0x1 magic=0xfb4a0c2c]
sent [LCP EchoReq id=0x2 magic=0x1abbde09]
rcvd [LCP EchoRep id=0x2 magic=0xfb4a0c2c]
Hangup (SIGHUP)
Clean CS_RESOLVE confstr.
New _CS_RESOLVE confstr:
sent [LCP TermReq id=0x2 "User request"]
rcvd [LCP TermAck id=0x2]
Connection terminated.
Я зашёл с другой стороны и сделал вот как:
      slay -Qf io-net
      io-net -ptcpip -ppppmgr
      pppd file /etc/ppp/options.ser1
      start_my_tcp_server

после чего по netstat -i видно ppp0, а по netstat -a видно присоединивегося клиента и ещё один поток на ожидание. После чего выполнил:
      io-net -i1 -ptcpip prefix=/altsock -ppppmgr
      SOCK=/altsock
      pppd file /etc/ppp/options.ser2

Как только модем успешно проинициализируется и ppp-демон запустится прощай ping, netstat и первый сервер. При попытке выполнить ping - он взвисает, просто не выполянется. Тоже самое с netstat-ом с любыми опциями. Висит гад! Это ещё не всё! На первый сервер перестают доходить сообщения от клиента. По логу клиента видно как были отправлены байты, а на сервер они не пришли.  В результате чего после выжидания тайм-аута он закрывает соединение и переходит в режим ожидания. И это не глюк связи или клиента. По отладочной печати чётко видно - шёл обмен, появился второй ppp-демон - конец работе!

В связи с этим два вопроса: почему взвисают системные утилиты, и почему при запуске первого io-net, а за ним сразу второго, то pppd будет выдавать ошибки?

Ну или куда хоть копать то, товарищи?
Записан
dip
Участник
*
Offline Offline

Сообщений: 49


eh?


Просмотр профиля
« Ответ #4 : Августа 23, 2010, 08:19:00 pm »

Nado protestirovat' vtoroi variant bez pervogo. Esli on ne rabotaet sam posebe to "priehali". (Ne hochu vas razocherovyvat' no mne pripominaetsya teper' chto pppd kogda soedinyaetsya s pppmgr ukazyvaet emu na "/dev/io-net" -- no ya v etom ne na 100% uveren i proverit' ne mogu tak chto ne obessud'te ... i proveryaite sami.)
Записан
FiliNN
Участник
*
Offline Offline

Сообщений: 25


Просмотр профиля
« Ответ #5 : Августа 24, 2010, 11:00:42 am »

Вопрос закрыт!

Звонил в техподдержку SWD, они сказали, что у них ни разу не получилось сделать это под QNX 6.3! Функционал там портированный и что хуже портированный частично... Так что повторяйте мои ошибки, закладывайте в поставку QNX версией повыше. Техподдержка мне сказала, что в данном случае лучшим вариантом будет обновиться до QNX 6.5.

Огромное человеческое спасибо всем кто принимал участие, особенно товарищу dip-у!
Записан
dip
Участник
*
Offline Offline

Сообщений: 49


eh?


Просмотр профиля
« Ответ #6 : Августа 24, 2010, 05:57:05 pm »

Вопрос закрыт!

Звонил в техподдержку SWD, они сказали, что у них ни разу не получилось сделать это под QNX 6.3! Функционал там портированный и что хуже портированный частично... Так что повторяйте мои ошибки, закладывайте в поставку QNX версией повыше. Техподдержка мне сказала, что в данном случае лучшим вариантом будет обновиться до QNX 6.5.

SWD namekayet na io-pkt no vopros interesnyi: a tam to eto rabotaet ili prosto poprobyvat' predlagayut? Kogda poprobuete to napishite ob uspehah, bud'te dobry. 

Огромное человеческое спасибо всем кто принимал участие, особенно товарищу dip-у!

Da ne za chto. Chem mozhem.
Записан
FiliNN
Участник
*
Offline Offline

Сообщений: 25


Просмотр профиля
« Ответ #7 : Августа 24, 2010, 10:39:49 pm »

Техподдержка сказала так: в 6.4 попробуйте, а в 6.5 100% работать будет. Вот только у нас организация государственная и денег на обновление нет. Так что пробовать не на чем. Сейчас ищем другие варианты выхода из сложившийся ситуации. Если что-то накопаю, то обязательно сообщу!
Записан
Страниц: [1]
  Печать  
 
Перейти в: