Ключевые слова:gprs, linux, ppp, mobile, usb, traffic, (найти похожие документы)
From: Руслан Попов
Newsgroups: http://ts.kmc.ru/
Date: Mon, 9 Dec 2003 14:31:37 +0000 (UTC)
Subject: ASPLinux 7.3 и GPRS USB + учет трафика
Оригинал: http://ts.kmc.ru/articles.php4?a=71
ASPLinux 7.3 и GPRS USB
Автор: Руслан Попов
Введение
Данный материал создан на основе статьи на LinuxRSP (http://www.linuxrsp.ru/artic/gprs.html)
с небольшими поправками и простой системой учёта трафика.
Настройка USB
При работе с USB устройствами необходимо убедиться, что в BIOS
включена поддержка USB и разрешено выделение IRQ для USB. Это
необходимо для автоматической подгрузки модулей ядра для USB
устройств. Все необходимые модули для работы с USB кабелем Profilic
2303 (как раз для моего Siemens M50 подходит) в ASPLinux 7.3 уже есть.
По каким-то причинам, а может так и должно быть, у меня не появились
устройства для работы с USB кабелем. Пришлось делать всё самому:
cd /dev/usb
mkdir tts
cd tts
mknod 0 c 188 0
mknod 0 c 188 1
chmod 666 *
Настройка PPPD
Переходим в каталог /etc/ppp/peers и создаём там файл с именем gprs со
следующим текстом:
/dev/usb/tts/0 57600 noauth defaultroute usepeerdns updetach persist \
noipdefault lock connect '/usr/sbin/chat -v -f /etc/ppp/chat/gprs' \
novjccomp nopcomp noaccomp noipdefault nodeflate novj nobsdcomp
Теперь перейдём в каталог /etc/ppp/chat и создадим там файл с именем
gprs со следующим текстом:
ABORT "ERROR"
ABORT "NO ANSWER"
"" 'ATE1'
OK AT+CGDCONT=1,"IP","internet.mts.ru"
OK ATDT*99***1#
CONNECT c
Содержимое данного файла я уточню сегодня вечером, в оригинальной
статье были глюки :)
В файл /etc/resolv.conf надо добавить строчки для MTS'овских DNS
серверов:
nameserver 213.87.0.1
nameserver 213.87.1.1
Использование
Для активации соединения по GPRS надо отдать команду:
/usr/sbin/pppd call gprs
Но так как пользоваться данной командой может только администратор
(root), то её выполнение надо разрешить для пользователей.
Для этого надо выполнить несколько действий.
В каталоге /usr/local/bin создадим файл gprs со следующим кодом:
#!/bin/bash
if [ -f /var/run/ppp0.pid ]; then
kill `cat /var/run/ppp0.pid`
else
/usr/sbin/ppp0 call gprs
fi
Данный скрипт, вызываемый через иконку на рабочем столе с командой
sudo /usr/local/bin/gprs и установленной галочкой "Выполнять в
терминале", позволяет пользователю активировать и деактивировать
соединение по GPRS простым нажатием на иконку.
Не забудьте прописать для каждого пользователя следующую строчку в
файле /etc/sudoers:
username ALL=/usr/local/bin/gprs
Учёт трафика
База данных
Статистику по утилизации GPRS проще всего хранить в базе данных. Для
этого заведём новую базу данных:
CREATE DATABASE traffic;
И таблицу для статистики по утилизации:
CREATE TABLE gprs (
id smallint(5) unsigned NOT NULL auto_increment,
user varchar(16) NOT NULL default '',
download int(10) unsigned NOT NULL default '0',
upload int(10) unsigned NOT NULL default '0',
time datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (id)
) TYPE=MyISAM COMMENT='Трафик на GPRS';
Теперь дадим права на выборку и вставку записей:
GRANT insert, select ON traffic.* TO gprs@localhost IDENTIFIED BY "topsecret";
Усовершенствуем скрипт
После внесения изменения скрипт будет выглядеть следующим образом:
#!/bin/bash
# (c) 2003 Ruslan Popov aka RaD
# Скрипт для работы с GPRS
if [ -f /var/run/mysqld/mysqld.pid ]; then
if [ -f /var/run/ppp0.pid ]; then
echo "Kill GPRS connection..."
STR=`/sbin/ifconfig ppp0 | grep "RX bytes"`
DWN=`echo $STR | sed "s/.*RX bytes:\(.*\) (.*) *TX bytes:\(.*\) (.*/\1/"`
UPL=`echo $STR | sed "s/.*RX bytes:\(.*\) (.*) *TX bytes:\(.*\) (.*/\2/"`
echo "INSERT INTO traffic.gprs SET user='$SUDO_USER',download='$DWN',upload='$UPL',time=NOW()" | \
mysql -u gprs -ptopsecret
kill `cat /var/run/ppp0.pid`
else
echo "Open GPRS connection..."
/usr/sbin/pppd call gprs
if [ `/sbin/route|grep "default.*ppp0"` == "" ]; then
echo "Sets the default route..."
/sbin/route add default gw 192.168.254.254
fi
fi
fi
А теперь небольшие пояснения. Первым делом проверяется наличие
работающего демона базы данных, после этого проверяется открыто
соединение по ppp0 или нет. Если открыто, то выполняется фаза
отключения соедининия. При этом снимается статистика по трафику с
интерфейса и помещается в базу данных. Если соединения нет, то оно
создаётся. Дополнительно создаётся маршрут по умолчанию.
Думаю, всё очень просто.
Принимаются предложения по усовершенствованию...
Усовершенствование на базе /usr/sbin/tcpdump -q -p -nn -i eth0 -S -t -e
0:c:6e:41:c7:7f 0:8:2:f9:4b:61 66: 192.168.10.157.50324 >
192.168.10.84.8080: tcp 0 (DF)
0:8:2:f9:4b:61 0:c:6e:41:c7:7f 1514: 192.168.10.84.8080 >
192.168.10.157.50324: tcp 1448 (DF)
0:8:2:f9:4b:61 0:c:6e:41:c7:7f 78: 192.168.10.84.8080 >
192.168.10.157.50324: tcp 12 (DF)
0:c:6e:41:c7:7f 0:8:2:f9:4b:61 66: 192.168.10.157.50324 >
192.168.10.84.8080: tcp 0 (DF)