Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Алгоритм поднятия GPRS-internet.
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
cpl
Здравствуйте

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

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

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

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

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

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

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

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


Дело в том что данные должны пересылаться по внешнему событию (сроботал внешний датчик)
за этим и следит демон, поэтому и интерисует как вписать выход в интернет в демон.
В ручном режиме все работает.
cpl
Кому интересно, сделал так, пока все устраивает, тестирую:

1. через system запускаем pppd
2. пауза 20 секунд (ждемссс когда войдет или Не войдет rolleyes.gif )
3. через system запускаем ifconfig ppp , если есть значит в интернете, нет значит что-то нетак.
smile3009.gif
dmitry-rf
Ещё можно использовать скрипты ip-up и ip-down.
cpl
Цитата(dmitry-rf @ Jul 27 2009, 18:50) *
Ещё можно использовать скрипты ip-up и ip-down.


если правильно понял, system запускаем скрипт, и затем смотреть на результат выполнения скрипта ?
dmitry-rf
Нет. Эти скрипты запускает сам 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
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.