SpeedTouch 330 + PPPoE + Linux mini HOW-TO

Цей документ є плід дводенного танку з бубном навколо SpeedTouch 330.

«SpeedTouch 330, безсумнівно, є отвратительнейшим з новомодних винаходів шайтана (після Windows 95 ®), бо підключається до комп’ютера мерзенним і протиприродним шляхом, а саме через USB порт.» «Залізний бестіарій».

Документ розрахований на досвідчених користувачів Linux, автор ледачий і не описував процес складання програм.
Автор не несе відповідальності за можливі наслідки застосування або незастосування порад, почерпнутих з даного how-to. Я не відповідальний за каліцтва, завдані вашій системі в процесі установки. Якщо ви хочете повідомити про помилку або доповнити документ, пишіть на garbagepile [At] narod.ru. Будь ласка, не надсилайте питання типу: «Як ядро зібрати» я дуже зайнятий і не можу відповідати на всі листи. На google.com, www.tldp.org і opennet.ru можна знайти всю необхідну інформацію щодо налаштування ядра. У процесі налаштування я використовував матеріали з сайтів:
linux-atm.sourceforge.net
linux-usb.sourceforge.net
home.sch.bme.hu/~cell/br2684
www.roaringpenguin.com/products/rp-pppoe
google.com 😉

Моя радість з приводу купівлі DSL-лінії була сильно затьмарена відсутністю Linux-драйвери на інсталяційному диску. Інженер служби підтримки сказав, що під Win, все працює без проблем. Запитав у Google. Google відправив мене на сайт speedtouch.sourceforge.net.
* Найкрутіші адміни можуть закінчити читання тут, ледачі можуть читати далі.

Нарив безліч HOWTO, що пояснюють налаштування з’єднання через PPPoATM і ні одного толкового для PPPoE (це, я маю на увазі, зрозумілого навіть такий негідник, як я).
Для початку, непогано б подзвонити в службу підтримки провайдера і випитати параметри з’єднання:
VPI virtual path id,
VCI virtual circuit id,
ENCAPSULATION.

Коли вас пошлють, знайдіть комп’ютер з встановленою на ньому Windows ®, підсадіть драйвер і загляньте в програму діагностики (вона в треї), побачите всі необхідні параметри. З’ясували?

Мій рідний ISP, провайдит за: PPPoE, vpi= 8, vci= 35, encapsulation= LLC.
Моя машина це Mandrake 9.0 з ядром 2.4.25-pre7 (краще, звичайно, використовувати останній стабільний, а не пререлиз).

Переходимо до ядра.
В ядрі необхідно включити підтримку:

+ USB:
Support for USB
[*] Preliminary USB device filesystem

EHCI HCD (USB 2.0) support (EXPERIMENTAL)
UHCI (Intel PIIX4, VIA, ) support
UHCI Alternate Driver (JE) support
OHCI (Compaq, iMacs, OPTi, SiS, ALi, ) support

Alcatel Speedtouch USB support (ця опція з’явиться після того як влкючите
ATM і HDLC line discipline support )

+ PPP:
PPP (point-to-point protocol) support (CONFIG_PPP)
PPP support for sync tty ports (CONFIG_PPP_SYNC_TTY)
Я підключив все що було під PPP та SLIP, на всякий випадок.

+ Character devices
[*] Non-standard serial port support
HDLC line discipline support *
[*]Unix98 PTY support
* HDLC line discipline support, компілюється тільки у вигляді модуля.

+ Networking Options
Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)
Classical IP over ATM
[*] Do NOT send ICMP if no neighbour
LAN Emulation (LANE) support
Multi-Protocol Over ATM (MPOA) support
RFC1483/2684 Bridged protocols
[ ] Per-VC IP filter kludge

+ Network device support
Універсальний TUN/TAP device driver support
TUN device, може знадобитися, якщо ви будете використовувати pppoa3-демон.

Ось це записуємо в modules.conf:

alias char-major-108 ppp_generic
alias /dev/ppp ppp_generic
alias tty-ldisc-3 ppp_async
alias tty-ldisc-13 n_hdlc
alias tty-ldisc-14 ppp_synctty
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate

Збираємо ядро і перезавантажуємося. Подгружаем USB, в моєму випадку це uhci:

# modprobe uhci

Монтуємо usb device file system, якщо вона ще не змонтована:

# mount -t usbdevfs none /proc/bus/usb

Надалі завантаження usbdevfs можна помістити в fstab:

none /proc/bus/usb usbdevfs defaults 0 0

Подгружаем: ppp_generic, ppp_synctty, n_hdlc, speedtch. Робимо lsmod і милуємося видом подгруженных модулів. В девайсах має з’явитися /dev/ppp.

Качаємо firmware з сайту виробника, віндовий файл alcaudsl.sys як фірмваре не рекомендую, у мене не заробив. Завантажте драйвер з утилітами speedtouch.sourceforge.net), підтримку АТМ (linux-atm.sourceforge.net), останній pppd (www.samba.org/ppp) і PPPoE-клієнт (www.roaringpenguin.com), зберіть і встановіть за смаком.

З сайту home.sch.bme.hu/~cell/br2684/ качаємо утиліту-демон br2684ctl, вона
створить нам bridge-інтерфейс nas0. Для складання програми потрібен linux-atm, його ми вже встановили 😉

# gcc -o br2684ctl -latm br2684ctl.c
# cp ./br2684ctl /usr/sbin/br2684ctl

Налаштовуємо rp-pppoe. У файлі /etc/ppp/pppoe.conf міняємо інтерфейс eth0 на nas0:

# Ethernet card connected to ADSL modem
ETH=’nas0′

Готово!
Модем у нас хитрий, прошивку тримає в ОЗП. Відразу ж після включення обидва діода світяться зеленим це означає, що модем пройшов тест, але прошивка не завантажена. Вантажимо:

#/usr/sbin/modem_run -k -f /usr/lib/speedtouch/firmware.bin

Лампочки трохи помигают і позеленіють.

# cat /proc/net/atm/speedtch:0
…..
Line up, firmware loaded

Після цього запускаємо br2684ctl з параметрами vpi & vci:

# br2684ctl -c 0 -e 0 -a 8.35 -b

Повинен з’явиться інтерфейс nas0:

# ifconfig nas0
nas0 Link euroncap:Ethernet HWaddr 00:90:DX:XX:XX:XX
….

Якщо інтерфейс не хоче з’являтися і br2684ctl падає з помилкою, перевірте, чи є у вас в ядрі підтримка «RFC1483/2684 Bridged protocols», спробуйте:

# insmod br2684

Запускаємо adsl-start:

# ifconfig ppp0
ppp0 Link euroncap:Point-to-Point Protocol
inet addr:217.64.24.121 P-t-P:217.64.16.70 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1

«This is the end», як говорив Джим Моррісон.

Цей скрипт викликається у мене з /etc/rc.d/rc.local:

#!/bin/bash

echo running modem_run
/usr/sbin/modem_run -k -f /usr/lib/speedtouch/firmware.bin
sleep 5;

echo starting 2684 bridge
br2684ctl -c 0 -e 0 -a 8.35 -b
sleep 5;

echo starting pppd
adsl-start
sleep 1;

echo starting NAT
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE