UMTS (Eplus) mit Option Qualcomm GT 3G Quad PCMCIA-Card

Wir schreiben heute das Jahr 2008 und wenige Jahre nach der populären Versteigerung der UMTS-Netze an die großen Mobilfunkanbieter profitieren nun auch die Privatanwender von der schnellen UMTS-Verbindung. Download-Raten von ca. 40 KB\s sind für mobile Verbindungen mehr als ausreichend und auch preislich gesehen sind die UMTS-Datentarife kein Luxus mehr. E-Plus bietet für 10 Euro im Monat einen Volumentarif mit 250 MB an. Derselbe Datentarif als Flatrate kostet gerade einmal 25 Euro im Monat.

Option Qualcomm GT 3G Quad mit PCMCIA-Card
Option Qualcomm GT 3G Quad mit PCMCIA-Card

In diesem Artikel wird beschrieben, wie man die E-Plus UMTS-Karte "Option Qualcomm GT 3G Quad UMTS-Card" unter Linux installiert und wie man eine Verbindung mit pppd zum E-Plus-UMTS herstellt. Voraussetzung, um die Anleitung in diesem Artikel nachzubauen, sind ein 2.6er Kernel und die Programme pppd und pppconfig. Natürlich ist dieses How-To auch nützlich für Verbindungen zu anderen Netzen (Vodafone, T-Mobile, 02, etc), da sich hier nur die Rufnummer und einige wenige Verbindungseinstellungen unterscheiden.

Vorbereitung: PCMCIA muss funktionieren

Da es sich um eine PCMCIA-Steckkarte handelt, müssen natürlich die Grundlagen funktionieren, sprich der PCMCIA-Support muss vorhanden sein. Dazu sollte man im Kernel die passenden Treiber einbinden. Das könnte folgendermaßen aussehen (Beispiel: Kernel 2.6.22):

-> Bus options (PCI, PCMCIA, EISA, MCA, ISA)
-> PCCARD (PCMCIA/CardBus) support
-> PCCard (PCMCIA/CardBus) support
<*> PCCard (PCMCIA/CardBus) support
<*> 16-bit PCMCIA support
[*] PCMCIA control ioctl (obsolete)
--- 32-bit CardBus support
--- PC-card bridges
<m> CardBus yenta-compatible bridge support</m>

Nachdem die Option Qualcomm GT 3G Quad UMTS-Karte eingesteckt wurde, sollte das Tool cardctl die reibungslose Funktion der PCMCIA-Karte bestätigen.

# cardctl status
Socket 0:
no card
Socket 1:
3.3V CardBus card
function 0: [ready]
function 1: [ready]

Auch der Kernel erzählt uns, dass er ein neues, noch unbekanntes Device (USB-HUB) gefunden hat:

# dmesg
pccard: CardBus card inserted into slot 1
PCI: Enabling device 0000:07:00.0 (0000 -> 0002)
ACPI: PCI Interrupt 0000:07:00.0[A] -> Link [LNKB] -> GSI 10 (level, low) -> IRQ 10
PCI: Setting latency timer of device 0000:07:00.0 to 64
ohci_hcd 0000:07:00.0: OHCI Host Controller
ohci_hcd 0000:07:00.0: new USB bus registered, assigned bus number 5
ohci_hcd 0000:07:00.0: irq 10, io mem 0x50000000
usb usb5: configuration #1 chosen from 1 choice
hub 5-0:1.0: USB hub found
hub 5-0:1.0: 1 port detected
PCI: Enabling device 0000:07:00.1 (0000 -> 0002)
ACPI: PCI Interrupt 0000:07:00.1[B] -> Link [LNKB] -> GSI 10 (level, low) -> IRQ 10
PCI: Setting latency timer of device 0000:07:00.1 to 64
ohci_hcd 0000:07:00.1: OHCI Host Controller
ohci_hcd 0000:07:00.1: new USB bus registered, assigned bus number 6
ohci_hcd 0000:07:00.1: irq 10, io mem 0x50001000
usb usb6: configuration #1 chosen from 1 choice
hub 6-0:1.0: USB hub found
hub 6-0:1.0: 1 port detected
usb 6-1: new full speed USB device using ohci_hcd and address 2
usb 6-1: configuration #1 chosen from 1 choice

An dieser Stelle haben wir die Grundlagen geschaffen, so dass das System PCMCIA-Karten unterstützt. Im nächsten Schritt muss der Treiber für Option Qualcomm GT 3G Quad UMTS-Karte geladen und konfiguriert werden.

Treiber für die GT 3G Quad UMTS-Karte laden

Das passende Kernelmodul für Option Qualcomm GT 3G Quad UMTS-Karte lautet CONFIG_USB_SERIAL und sollte als Modul in den Kernel eingebunden werden:

-> Device Drivers
-> USB support
-> USB Serial Converter support
<m> USB Serial Converter support
[*] USB Generic Serial Driver</m>

Ein einfaches Laden des Modules funktioniert leider nicht, da das Modul usbserial sich ohne explizite Anweisung nicht für die Option Qualcomm GT 3G Quad UMTS-Karte zuständig fühlt. Ein einfaches modprobe usbserial aktiviert die benötigten Schnittstellen nicht. Um das Modul usbserial mit der Option Qualcomm GT 3G Quad UMTS-Karte zu verknüpfen, muss das Modul mit Parametern für Vendor- und Produkt-ID gestartet werden.

Option Qualcomm GT 3G Quad mit PCMCIA-Card

Die Vendor- und Produkt-ID herauszufinden, nutzen wir das Programm lsusb:

# lsusb
Bus 006 Device 002: ID 0af0:6300 Option

Nun können wir beim Laden von usbserial die Vendor- und Produkt-ID angeben:

# modprobe usbserial vendor=0x0af0 product=0x6300

Der Kernel zeigt uns erfreulicherweise nun auch die benötigten Schnittstellen /dev/ttyUSB0-3 an, wobei wir die Option Qualcomm GT 3G Quad UMTS-Karte über das Device /dev/ttyUSB0 ansprechen können.

# dmesg
usbserial_generic 6-1:1.0: generic converter detected
usb 6-1: generic converter now attached to ttyUSB0
usbserial_generic 6-1:1.1: generic converter detected
usb 6-1: generic converter now attached to ttyUSB1
usbserial_generic 6-1:1.2: generic converter detected
usb 6-1: generic converter now attached to ttyUSB2
usbserial_generic 6-1:1.3: generic converter detected
usb 6-1: generic converter now attached to ttyUSB3
usbcore: registered new interface driver usbserial_generic
drivers/usb/serial/usb-serial.c: USB Serial Driver core

An dieser Stelle haben wir den PCMCIA-Support eingerichtet, die Treiber für Option Qualcomm GT 3G Quad UMTS-Karte erfolgreich geladen und die Schnittstellen /dev/ttyUSB0-3 erstellt. Die Option Qualcomm GT 3G Quad UMTS-Karte sollte nun in regelmäßigen Abständen rot und blau leuchten. Ein rotes Leuchten bedeutet, dass die Karte zwar aktiv ist, wir uns aber noch nicht in das Netz eingewählt haben. Die Einwahl in das Netz des Netzbetreibers wird im nächsten Schritt erklärt.

Mithilfe der PIN für das UMTS-Netz authentifizieren

Wie man auf dem Bild der Option Qualcomm GT 3G Quad UMTS-Karte gesehen hat, handelt es sich um eine PCMCIA-Steckkarte, welche eine herkömmliche SIM-Karte aufnehmen kann, wie man sie vom Handy gewohnt ist. Daher muss man sich wie beim Handy mit der persönlichen vierstelligen PIN beim Netzbetreiber authentifizieren. Wird die PIN drei Mal falsch eingegeben, so muss man die SIM-Karte mit der PUK wieder freischalten. Dazu steckt man die SIM-Karte in eine herkömmliches Handy und schaltet dort die SIM-Karte wieder frei.

Bevor die UMTS-Verbindung aufgebaut werden kann, muss sich die Option Qualcomm GT 3G Quad UMTS-Karte über die PIN beim Netzbetreiber authentifizieren. Dazu nutzen wir folgendes Perl-Skript:

#!/usr/bin/perl -T

use strict;
use warnings;

my $modem = "/dev/ttyUSB0";
my $pin = "1234";

$SIG{ALRM} = sub {
die("timeout no response from modem $modem\n");
};

open(MODEM, "+<", $modem) or die("can't open modem $modem");
alarm(10);
print(MODEM "AT+CPIN=\"$pin\"\n\r");
while (<modem>) {
if (m/OK/) {
close(MODEM);
print("PIN accepted\n");
exit(0);
}
if (m/ERROR/) {
close(MODEM);
print("PIN rejected\n");
exit(1);
}
}

Dieses Skript einfach in einer Textdatei speichern und die Variablen $pin (hier die persönliche PIN für die SIM-Karte eintragen) und $modem (hier das Device angeben) anpassen. Die Datei sollte nun ausführbar gemacht werden, damit das Skript ausgeführt gemacht werden kann.

# chmod +x bin/pin
# bin/pin
PIN accepted

Das Skript sollte die erfolgreiche Authentifizierung mit der Meldung "PIN accepted" bestätigen und das rote Blinken der Option Qualcomm GT 3G Quad UMTS-Karte aufhören. An dieser Stelle haben wir die Option Qualcomm GT 3G Quad UMTS-Karte erfolgreich installiert und uns mit der PIN am Netz angemeldet. Als nächstes muss die Verbindung zum UMTS-Netz hergestellt werden.

Point-To-Point-Verbindung vorbereiten

Die Verbindung zum UMTS-Netz wird über eine Point-To-Point-Verbindung (PPPoE) hergestellt. Dazu benötigen wir den pppd-Dämon und zur einfachen Konfiguration das Programm pppconfig. Um die Programm zu installieren, reicht unter der Distribution Gentoo ein einfaches "emerge pppd pppconfig". Anwender einer anderen Distribution müssen die entsprechende Softwareverwaltung nutzen, um die Pakete pppd und pppconfig zu installieren.

pppconfig

Die Konfiguration für pppd legen wir nun mit dem Programm pppconfig an:

# pppconfig

Jetzt folgen wir den Anweisungen des Wizards:

=> Create a connection
=> Als Provider-Name geben wir ein individuellen Namen an, bsp. e-plus
=> Als Nameserver geben wir Dynamic DNS an
=> Als Authentication Method wählen wir CHAP
=> Username kann beliebig gewählt (wir sind schon mit PIN authentifiziert), bsp. EPLUS
=> Auch das Passwort kann beliebig gewählt werden, bsp. EPLUS
=> Speed sollte auf 115200 eingestellt werden
=> Dialing Method auf Tune einstellen
=> Phone Number lautet *9***1#
=> Choose Modem Config Mode = No
=> Select Modem Port = /dev/ttyUSB0
===> Finished, Write files and return to menu

Das Programm hat nun die Konfigurationsdateien /etc/chatscripts/e-plus und /etc/ppp/peers/e-plus angelegt. Diese Dateien enthalten die notwendigen Einstellungen und Befehle zur Einwahl in das GSM/GPRS/UMTS-Netz:

######### cat /etc/ppp/peers/e-plus 
hide-password
noauth
connect "/usr/sbin/chat -v -f /etc/chatscripts/test"
debug
/dev/ttyUSB0
115200
defaultroute
noipdefault
user "EPLUS"
ipparam test
usepeerdns

####### cat /etc/chatscripts/test
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED
# modeminit
'' ATZ
# ispnumber
OK-AT-OK "ATDT*99***1#"
# ispconnect
CONNECT \d\c
# prelogin

# ispname
# isppassword
# postlogin

# end of pppconfig stuff

Achtung Stolperstein: alle aktiven Netzwerkverbindung müssen geschlossen werden!

Wichtig: Bevor man nun voreilig versucht, eine Verbindung herzustellen, muss man sämtliche Routen und aktiven LAN-Verbindungen löschen. Dies ist ein kleiner Stolperstein, der nicht ganz nachvollziehbar ist und ein "Bug" von pppd zu sein scheint. Aus diesem Grund lässt man sich mit ifconfig die aktiven Netzwerkdevices anzeigen, um diese dann mit "ifconfig DEVICE down" zu beenden. Auch die aktiven Routen müssen gelöscht werden. Das ganze sollte dann folgendermaßen aussehen:

# ifconfig 
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:100 (100.0 b) TX bytes:100 (100.0 b)

# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
loopback * 255.0.0.0 U 0 0 0 lo

Der Weg zum mobilen Internet ist lang, aber wir haben an dieser Stelle alle Vorbereitungen getroffen. Im nächsten Schritt wird dann endlich die Verbindung aufgebaut.

UMTS-Verbindung mit pppd herstellen

Mit dem Programm pppconfig haben wir in diesem Artikel die Konfigdateien unter dem Namen "e-plus" angelegt. Um die Verbindung mit dem UMTS-Netz herzustellen, starten wir pppd folgendermaßen: pppd call e-plus nodetach

# pppd call eplus nodetach
Serial connection established.
using channel 2
Using interface ppp0
Connect: ppp0 <--> /dev/ttyUSB0
sent [LCP ConfReq id=0x1 <asyncmap> <magic> <pcomp> <accomp>]
rcvd [LCP ConfReq id=0x0 <asyncmap> <auth> <magic> <pcomp> <accomp>]
sent [LCP ConfAck id=0x0 <asyncmap> <auth> <magic> <pcomp> <accomp>]
rcvd [LCP ConfAck id=0x1 <asyncmap> <magic> <pcomp> <accomp>]
rcvd [LCP DiscReq id=0x1 magic=0x8393cfb]
rcvd [CHAP Challenge id=0x1 <20d71896dcc2d338a8169ed6acdde124>, name = "UMTS_CHA P_SRVR"]
sent [CHAP Response id=0x1 <28a3fd50f6572989f7fffe360e956667>, name = "EPLUS"]
rcvd [CHAP Success id=0x1 ""]
CHAP authentication succeeded
CHAP authentication succeeded
sent [CCP ConfReq id=0x1 <deflate> <deflate(old#)> <bsd>]
sent [IPCP ConfReq id=0x1 <compress> <addr> <ms-dns1> < ms-dns3 0.0.0.0>]
rcvd [LCP ProtRej id=0x2 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f]
Protocol-Reject for 'Compression Control Protocol' (0x80fd) received
rcvd [IPCP ConfNak id=0x1 <ms-dns1> <ms-dns3>]
sent [IPCP ConfReq id=0x2 <compress> <addr> <ms-dns1> <ms-dns3>]
rcvd [IPCP ConfNak id=0x2 <ms-dns1> <ms-dns3>]
sent [IPCP ConfReq id=0x3 <compress> <addr> <ms-dns1> <ms-dns3>]
rcvd [IPCP ConfNak id=0x3 <ms-dns1> <ms-dns3>]
sent [IPCP ConfReq id=0x4 <compress> <addr> <ms-dns1> <ms-dns3>]
rcvd [IPCP ConfReq id=0x0]
sent [IPCP ConfNak id=0x0 <addr>]
rcvd [IPCP ConfRej id=0x4 <compress>]
sent [IPCP ConfReq id=0x5 <addr> <ms-dns1> <ms-dns3>]
rcvd [IPCP ConfNak id=0x5 <addr> <ms-dns1> <ms-dns3>]
sent [IPCP ConfReq id=0x6 <addr> <ms-dns1> <ms-dns3>]
rcvd [IPCP ConfAck id=0x6 <addr> <ms-dns1> <ms-dns3>]
rcvd [IPCP ConfReq id=0x1]
sent [IPCP ConfAck id=0x1]
Could not determine remote IP address: defaulting to 10.64.64.64
local IP address 10.161.221.3
remote IP address 10.64.64.64
primary DNS address 212.23.97.2
secondary DNS address 212.23.97.3
Script /etc/ppp/ip-up started (pid 22134)
Script /etc/ppp/ip-up finished (pid 22134), status = 0x0
</ms-dns3></ms-dns1></addr></ms-dns3>
</ms-dns1></addr></ms-dns3></ms-dns1>
</addr></ms-dns3></ms-dns1></addr></compress></addr></ms-dns3>
</ms-dns1></addr></compress></ms-dns3></ms-dns1></ms-dns3>
</ms-dns1></addr></compress></ms-dns3></ms-dns1></ms-dns3>
</ms-dns1></addr></compress></ms-dns3></ms-dns1></ms-dns1>
</addr></compress></bsd></deflate(old#)></deflate></accomp>
</pcomp></magic></asyncmap></accomp></pcomp></magic>
</auth></asyncmap></accomp></pcomp></magic></auth>
</asyncmap></accomp></pcomp></magic></asyncmap>

pppd stellt nun die Verbindung über das Device ttyUSB0 (Using interface ppp0) her und verwendet Netzwerk-Device ppp0 (Connect: ppp0 <--> /dev/ttyUSB0). Auch der Nameserver wird automatisch angelegt: ms-dns1 212.23.97.2. Mit ifconfig zeigen wir uns nun das neue Netzerkdevice an:

ppp0      Link encap:Point-to-Point Protocol  
inet addr:10.129.201.184 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:9 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:110 (110.0 b) TX bytes:185 (185.0 b)

Herzlichen Glückwunsch! Der Weg zum WWW ist nun frei und wir müssen uns um nichts mehr kümmern. Die Option Qualcomm GT 3G Quad UMTS-Karte schaltet automatisch zwischen GSM/GPRS/UMTS um, sofern dies erforderlich ist. Um die Verbindung zu beenden, zieht man entweder die UMTS-Karte heraus oder beendet den pppd-Dämon mit STRG+C:

Terminating on signal 2
Connect time 4.5 minutes.
Sent 0 bytes, received 0 bytes.
Script /etc/ppp/ip-down started (pid 22383)
sent [LCP TermReq id=0x2 "User request"]
Script /etc/ppp/ip-down finished (pid 22383), status = 0x0
rcvd [LCP TermAck id=0x2]
Connection terminated.

Zusammenfassung / Fazit

Diese Anleitung zeigt Schritt für Schritt, wie man eine UMTS-Verbindung unter Linux aufbauen kann. Die einzelnen Schritte kann man natürlich auch mit Skripten automatisieren (Stichwort Hotplug), was aber die Größe dieses Artikels sprengen würde.

Abschließend kann man diesen Artikel folgendermaßen zusammenfassen:

1.) PCMCIA-Support muss vorhanden sein
2.) Treiber für Option Qualcomm GT 3G Quad UMTS-Karte konfigurieren und laden
3.) PPP-Konfigurationsdateien mit pppconfig erstellen
4.) Alle aktiven Netzwerkverbindungen und Routen löschen
5.) Verbindung mit pppd herstellen