реклама на сайте
подробности

 
 
> Алгоритм поднятия GPRS-internet.
cpl
сообщение Mar 25 2009, 11:18
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



Здравствуйте

Пишу задачу демон под ucLinux
необходимо организовать выход в интернет через gprs,
как рационально организовать?

мое видение такое:
запуск потомка fork, в котором exec запускается pppd call gprs,
в родителе производлится подключение к серверу и передача данных на сервер.

возникают вопросы:
как узнать что pppd произвел подключение к провайдеру интернета и теперь можно подключаться к серверу ?
(логин, пароль, APN подошли ошибок нет)
если произошел разрыв во время работы как понять что разрыв произошел по вине gprs а не сервера к которому производиться подключение ?
стоитли использовать неблокированный ввод вывод для передачи данных в сокетах (отношение принято/переданно 1/10-20) ?

smile3046.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 6)
andrew_b
сообщение Mar 25 2009, 14:00
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(cpl @ Mar 25 2009, 14:18) *
мое видение такое:
запуск потомка fork, в котором exec запускается pppd call gprs,
в родителе производлится подключение к серверу и передача данных на сервер.
А зачем, извините, для этого программу писать. Напишите скрипт на шелле. Тем более всё уже написано до вас.

http://linuxmobile.lrn.ru/wiki/index.php?t...%B5%D0%BB%D1%8C

Подточите под ваш модем.
Go to the top of the page
 
+Quote Post
cpl
сообщение Mar 25 2009, 20:11
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



Цитата(andrew_b @ Mar 25 2009, 17:00) *
А зачем, извините, для этого программу писать. Напишите скрипт на шелле. Тем более всё уже написано до вас.

http://linuxmobile.lrn.ru/wiki/index.php?t...%B5%D0%BB%D1%8C

Подточите под ваш модем.


Дело в том что данные должны пересылаться по внешнему событию (сроботал внешний датчик)
за этим и следит демон, поэтому и интерисует как вписать выход в интернет в демон.
В ручном режиме все работает.
Go to the top of the page
 
+Quote Post
cpl
сообщение Jul 14 2009, 21:31
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



Кому интересно, сделал так, пока все устраивает, тестирую:

1. через system запускаем pppd
2. пауза 20 секунд (ждемссс когда войдет или Не войдет rolleyes.gif )
3. через system запускаем ifconfig ppp , если есть значит в интернете, нет значит что-то нетак.
smile3009.gif
Go to the top of the page
 
+Quote Post
dmitry-rf
сообщение Jul 27 2009, 14:50
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 15-01-08
Из: Санкт-Петербург
Пользователь №: 34 101



Ещё можно использовать скрипты ip-up и ip-down.


--------------------
Debian Fan
Go to the top of the page
 
+Quote Post
cpl
сообщение Jul 27 2009, 16:29
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



Цитата(dmitry-rf @ Jul 27 2009, 18:50) *
Ещё можно использовать скрипты ip-up и ip-down.


если правильно понял, system запускаем скрипт, и затем смотреть на результат выполнения скрипта ?
Go to the top of the page
 
+Quote Post
dmitry-rf
сообщение Jul 28 2009, 07:45
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 15-01-08
Из: Санкт-Петербург
Пользователь №: 34 101



Нет. Эти скрипты запускает сам pppd при установке и разрыве соединения соответственно.
У меня из ip-up запускаются сервисы вроде DynDNS и ntp. Через ip-down останавливаются.

Вы наличие интернета проверяете через ifconfig, а я в ip-up создаю файл с текущим ip, в ip-down удаляю его. Соответственно, наличие соединения проверяется по наличию файла.

ip-up:
Код
#!/bin/sh
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd
# Variables:
# DNS1          If the peer supplies DNS server addresses, this variable is set to the first DNS server address supplied.
# DNS2          If the peer supplies DNS server addresses, this variable is set to the second DNS server address supplied.

IFACE=$1
LOCAL_IP=$4
if [ "$IFACE" = "ppp0" ]; then
        echo $LOCAL_IP > /var/ppp/ip
        /etc/init.d/dyndns start
        /etc/init.d/ntp sync
fi


ip-down:
Код
#!/bin/sh
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd
# Variables:
# CONNECT_TIME  The number of seconds from when the PPP negotiation started until the connection was terminated.
# BYTES_SENT    The number of bytes sent (at the level of the serial port) during the connection.
# BYTES_RCVD    The number of bytes received (at the level of the serial port) during the connection.
# LINKNAME      The logical name of the link, set with the linkname option.
# CALL_FILE     The value of the call option.
# DNS1          If the peer supplies DNS server addresses, this variable is set to the first DNS server address supplied.
# DNS2          If the peer supplies DNS server addresses, this variable is set to the second DNS server address supplied.

IFACE=$1

if [ "$IFACE" = "ppp0" ]; then
        rm /var/ppp/ip
        /etc/init.d/dyndns stop
fi


Скрипты описаны в man pppd

Сообщение отредактировал dmitry-rf - Jul 28 2009, 07:47


--------------------
Debian Fan
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 12:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01396 секунд с 7
ELECTRONIX ©2004-2016